Asutorufaのブログ

こんにちは

秘密共享

发布于 2022-10-10|更新于: 2022-10-10|分类 Crypto

拉格朗日插值法

对某个多项式函数,已知有给定的 k+1k+1 个取值点:(x0,y0)…(xk,yk)(x_0,y_0)\ldots(x_k,y_k)。
假设任意两个不同的 xjx_j 都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为:

ℓ0(x)=(x−x1)(x−x2)⋯(x−xk)(x0−x1)(x0−x2)⋯(x0−xk)y0\ell_0(x)=\frac{(x-x_1)(x-x_2)\cdots(x-x_k)}{(x_0-x_1)(x_0-x_2)\cdots(x_0-x_k)}y_0

⋯\cdots

ℓk(x)=(x−x0)(x−x1)⋯(x−xk−1)(xk−x0)(xk−x1)⋯(xk−xk−1)yk\ell_k(x)=\frac{(x-x_0)(x-x_1)\cdots(x-x_{k-1})}{(x_k-x_0)(x_k-x_1)\cdots(x_k-x_{k-1})}y_k

f(x)=ℓ0(x)+ℓ1(x)+⋯+ℓk(x)f(x)=\ell_0(x)+\ell_1(x)+\cdots+\ell_k(x)

即可求出多项式。

example

已知 3 个点 (4,10)(5,5.25)(6,1)(4,10)(5,5.25)(6,1)。

ℓ0(x)=(x−5)(x−6)(4−5)(4−6)×10\ell_0(x)=\frac{(x-5)(x-6)}{(4-5)(4-6)}\times 10

ℓ1(x)=(x−4)(x−6)(5−4)(5−6)×5.25\ell_1(x)=\frac{(x-4)(x-6)}{(5-4)(5-6)}\times 5.25

ℓ2(x)=(x−4)(x−5)(6−4)(6−5)×1\ell_2(x)=\frac{(x-4)(x-5)}{(6-4)(6-5)}\times 1

f(x)=ℓ0+ℓ1+ℓ2=14(x2−28x+136)f(x)=\ell_0+\ell_1+\ell_2=\frac{1}{4}(x^2-28x+136)

Shamir 秘密共享

生成

  • 设需要生成 ww 个密钥,至少需要 tt 个密钥才能算出真实密钥。
  • 选择一个数 PP,之后所有数都需要进行模运算。
  • 设置真实密钥 KK。
  • 随机选择 t−1t-1 个不大于 PP 的数 a0,a1…at−1a_0,a_1\ldots a_{t-1}。
  • 得到多项式 f(x)=K+a0x+a1x2…+at−1xtf(x)=K+a_0x+a_1x^2\ldots+a_{t-1}x^t。
  • 将 x=1,x=2…x=wx=1,x=2\ldots x=w 带入多项式即可获得多个密钥 (1,k1)(2,k2)…(w,kw)(1,k_1)(2,k_2)\ldots(w,k_w)。

解密

  • 利用拉格朗日插值法即可算出多项式。
  • 需要带上模计算多项式,如果计算多项式时有除法需要进行计算模乘逆元。
  • 因为只需要 KK 所以计算的时候可以直接令 x=0x=0。

eg1

w=4,t=3,K=2,p=23w=4,t=3,K=2,p=23,选择随机数 a0=3,a1=2a_0=3,a_1=2。

加密

f(x)=(2+3x+2x2) mod 23f(x)=(2+3x+2x^2)\bmod 23

f(1)=2, f(2)=16, f(3)=6, f(4)=0f(1)=2,\ f(2)=16,\ f(3)=6,\ f(4)=0

获得 4 个密钥 (1,2)(2,16)(3,6)(4,0)(1,2)(2,16)(3,6)(4,0)。

解密

选择其中三个进行解密,(1,7)(3,6)(4,0)(1,7)(3,6)(4,0)。

ℓ0=(x−3)(x−4)(1−3)(1−4)×7\ell_0=\frac{(x-3)(x-4)}{(1-3)(1-4)}\times 7

ℓ1=(x−1)(x−4)(3−1)(3−4)×6\ell_1=\frac{(x-1)(x-4)}{(3-1)(3-4)}\times 6

ℓ2=(x−1)(x−3)(4−1)(4−3)×0\ell_2=\frac{(x-1)(x-3)}{(4-1)(4-3)}\times 0

将 x=0x=0 带入可得

ℓ0=14, ℓ1=−12, ℓ2=0\ell_0=14,\ \ell_1=-12,\ \ell_2=0

K=(ℓ0+ℓ1+ℓ2) mod 23=2 mod 23=2K=(\ell_0+\ell_1+\ell_2)\bmod 23=2\bmod 23=2

eg2

w=5,t=3,k=13,p=17w=5,t=3,k=13,p=17,选择随机数 a0=10,a1=2a_0=10,a_1=2。

加密

f(x)=(13+10x+2x2) mod 17f(x)=(13+10x+2x^2)\bmod 17

f(1)=8, f(2)=7, f(3)=10, f(4)=0, f(5)=11f(1)=8,\ f(2)=7,\ f(3)=10,\ f(4)=0,\ f(5)=11

获得 5 个密钥 (1,8)(2,7)(3,10)(4,0)(5,11)(1,8)(2,7)(3,10)(4,0)(5,11)。

解密

选择其中三个进行解密,(1,8)(2,7)(5,11)(1,8)(2,7)(5,11)。

ℓ0=11×(x−1)(x−2)(5−1)(5−2)\ell_0=11\times\frac{(x-1)(x-2)}{(5-1)(5-2)}

ℓ1=7×(x−1)(x−5)(2−1)(2−5)\ell_1=7\times\frac{(x-1)(x-5)}{(2-1)(2-5)}

ℓ2=8×(x−2)(x−5)(1−2)(1−5)\ell_2=8\times\frac{(x-2)(x-5)}{(1-2)(1-5)}

将 x=0x=0 带入

ℓ0=2212, ℓ1=−14012, ℓ2=24012\ell_0=\frac{22}{12},\ \ell_1=-\frac{140}{12},\ \ell_2=\frac{240}{12}

K=(ℓ0+ℓ1+ℓ2) mod 17K=(\ell_0+\ell_1+\ell_2)\bmod 17

=616 mod 17=\frac{61}{6}\bmod 17

=(61×6−1) mod 17=(61\times 6^{-1})\bmod 17

其中 6−16^{-1} 为 66 关于 1717 的模乘逆元,为 33。

=(61×3) mod 17=13=(61\times 3)\bmod 17=13

中国剩余定理

example

w=5,t=3,K=117w=5,t=3,K=117。

选择 ww 个 dd,要求单调递增并两两互素,tt 个最小的 dd 相乘大于 KK,KK 大于 t−1t-1 个最大 dd 相乘。

d1=4,d2=5,d3=7,d4=9,d5=11d_1=4,d_2=5,d_3=7,d_4=9,d_5=11

计算

ki=K mod dik_i=K\bmod d_i

k1=117 mod 4=1k_1=117\bmod 4=1

k2=117 mod 5=2k_2=117\bmod 5=2

k3=117 mod 7=5k_3=117\bmod 7=5

k4=117 mod 9=0k_4=117\bmod 9=0

k5=117 mod 11=7k_5=117\bmod 11=7

即五个密钥 (1,4),(2,5),(3,7),(0,9),(7,11)(1,4),(2,5),(3,7),(0,9),(7,11)。

解密,选其中三个密钥 (1,4)(2,5)(3,7)(1,4)(2,5)(3,7),可得

k mod 4=1,k mod 5=2,k mod 11=7k\bmod 4=1,\quad k\bmod 5=2,\quad k\bmod 11=7

分解为

k1 mod 4=1, k1 mod 5=0, k1 mod 11=0k_1\bmod 4=1,\ k_1\bmod 5=0,\ k_1\bmod 11=0

5×11×x1 mod 4=15\times 11\times x_1\bmod 4=1

x1=3,k1=55×3=165x_1=3,\quad k_1=55\times 3=165

k2 mod 4=0, k2 mod 5=2, k2 mod 11=0k_2\bmod 4=0,\ k_2\bmod 5=2,\ k_2\bmod 11=0

4×11×x2 mod 5=24\times 11\times x_2\bmod 5=2

44×x2×2−1 mod 5=144\times x_2\times 2^{-1}\bmod 5=1

其中 2−12^{-1} 为 22 关于 55 的模乘逆元。

44×x2×3 mod 5=144\times x_2\times 3\bmod 5=1

132×x2 mod 5=1132\times x_2\bmod 5=1

相当于算 132132 关于 55 的模乘逆元。

x2=3,k2=44×3=132x_2=3,\quad k_2=44\times 3=132

k3 mod 4=0, k3 mod 5=0, k3 mod 11=7k_3\bmod 4=0,\ k_3\bmod 5=0,\ k_3\bmod 11=7

4×5×x3 mod 11=74\times 5\times x_3\bmod 11=7

20×x3×7−1 mod 11=120\times x_3\times 7^{-1}\bmod 11=1

其中 7−17^{-1} 为 77 关于 1111 的模乘逆元。

20×x3×8 mod 11=120\times x_3\times 8\bmod 11=1

160×x3 mod 11=1160\times x_3\bmod 11=1

相当于算 160160 关于 1111 的模乘逆元。

x3=2,k3=40x_3=2,\quad k_3=40

K=(k1+k2+k3) mod (4×5×11)K=(k_1+k_2+k_3)\bmod(4\times 5\times 11)

=(165+132+40) mod 220=337 mod 220=117=(165+132+40)\bmod 220=337\bmod 220=117

另一种:

k1 mod 4=1, k1 mod 5=0, k1 mod 11=0k_1\bmod 4=1,\ k_1\bmod 5=0,\ k_1\bmod 11=0

1×(k1 mod 4=1, k1 mod 5=0, k1 mod 11=0)1\times (k_1\bmod 4=1,\ k_1\bmod 5=0,\ k_1\bmod 11=0)

5×11×x1 mod 4=15\times 11\times x_1\bmod 4=1

x1=3,k1=1×55×3=165x_1=3,\quad k_1=1\times 55\times 3=165

k2 mod 4=0, k2 mod 5=2, k2 mod 11=0k_2\bmod 4=0,\ k_2\bmod 5=2,\ k_2\bmod 11=0

2×(k2 mod 4=0, k2 mod 5=1, k2 mod 11=0)2\times (k_2\bmod 4=0,\ k_2\bmod 5=1,\ k_2\bmod 11=0)

4×11×x2 mod 5=14\times 11\times x_2\bmod 5=1

x2=4,k2=2×44×4=352x_2=4,\quad k_2=2\times 44\times 4=352

k3 mod 4=0, k3 mod 5=0, k3 mod 11=7k_3\bmod 4=0,\ k_3\bmod 5=0,\ k_3\bmod 11=7

7×(k3 mod 4=0, k3 mod 5=0, k3 mod 11=1)7\times (k_3\bmod 4=0,\ k_3\bmod 5=0,\ k_3\bmod 11=1)

4×5×x3 mod 11=14\times 5\times x_3\bmod 11=1

x3=5,k3=7×20×5=700x_3=5,\quad k_3=7\times 20\times 5=700

K=(k1+k2+k3) mod (4×5×11)K=(k_1+k_2+k_3)\bmod(4\times 5\times 11)

=(165+352+700) mod 220=1217 mod 220=117=(165+352+700)\bmod 220=1217\bmod 220=117


0 条评论

©2026Asutorufa