拉格朗日插值法
对某个多项式函数,已知有给定的 k+1 个取值点:(x0,y0)…(xk,yk)。
假设任意两个不同的 xj 都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为:
ℓ0(x)=(x0−x1)(x0−x2)⋯(x0−xk)(x−x1)(x−x2)⋯(x−xk)y0
⋯
ℓk(x)=(xk−x0)(xk−x1)⋯(xk−xk−1)(x−x0)(x−x1)⋯(x−xk−1)yk
f(x)=ℓ0(x)+ℓ1(x)+⋯+ℓk(x)
即可求出多项式。
example
已知 3 个点 (4,10)(5,5.25)(6,1)。
ℓ0(x)=(4−5)(4−6)(x−5)(x−6)×10
ℓ1(x)=(5−4)(5−6)(x−4)(x−6)×5.25
ℓ2(x)=(6−4)(6−5)(x−4)(x−5)×1
f(x)=ℓ0+ℓ1+ℓ2=41(x2−28x+136)
Shamir 秘密共享
生成
- 设需要生成 w 个密钥,至少需要 t 个密钥才能算出真实密钥。
- 选择一个数 P,之后所有数都需要进行模运算。
- 设置真实密钥 K。
- 随机选择 t−1 个不大于 P 的数 a0,a1…at−1。
- 得到多项式 f(x)=K+a0x+a1x2…+at−1xt。
- 将 x=1,x=2…x=w 带入多项式即可获得多个密钥 (1,k1)(2,k2)…(w,kw)。
解密
- 利用拉格朗日插值法即可算出多项式。
- 需要带上模计算多项式,如果计算多项式时有除法需要进行计算模乘逆元。
- 因为只需要 K 所以计算的时候可以直接令 x=0。
eg1
w=4,t=3,K=2,p=23,选择随机数 a0=3,a1=2。
加密
f(x)=(2+3x+2x2)mod23
f(1)=2, f(2)=16, f(3)=6, f(4)=0
获得 4 个密钥 (1,2)(2,16)(3,6)(4,0)。
解密
选择其中三个进行解密,(1,7)(3,6)(4,0)。
ℓ0=(1−3)(1−4)(x−3)(x−4)×7
ℓ1=(3−1)(3−4)(x−1)(x−4)×6
ℓ2=(4−1)(4−3)(x−1)(x−3)×0
将 x=0 带入可得
ℓ0=14, ℓ1=−12, ℓ2=0
K=(ℓ0+ℓ1+ℓ2)mod23=2mod23=2
eg2
w=5,t=3,k=13,p=17,选择随机数 a0=10,a1=2。
加密
f(x)=(13+10x+2x2)mod17
f(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)(5,11)。
ℓ0=11×(5−1)(5−2)(x−1)(x−2)
ℓ1=7×(2−1)(2−5)(x−1)(x−5)
ℓ2=8×(1−2)(1−5)(x−2)(x−5)
将 x=0 带入
ℓ0=1222, ℓ1=−12140, ℓ2=12240
K=(ℓ0+ℓ1+ℓ2)mod17
=661mod17
=(61×6−1)mod17
其中 6−1 为 6 关于 17 的模乘逆元,为 3。
=(61×3)mod17=13
中国剩余定理
example
w=5,t=3,K=117。
选择 w 个 d,要求单调递增并两两互素,t 个最小的 d 相乘大于 K,K 大于 t−1 个最大 d 相乘。
d1=4,d2=5,d3=7,d4=9,d5=11
计算
ki=Kmoddi
k1=117mod4=1
k2=117mod5=2
k3=117mod7=5
k4=117mod9=0
k5=117mod11=7
即五个密钥 (1,4),(2,5),(3,7),(0,9),(7,11)。
解密,选其中三个密钥 (1,4)(2,5)(3,7),可得
kmod4=1,kmod5=2,kmod11=7
分解为
k1mod4=1, k1mod5=0, k1mod11=0
5×11×x1mod4=1
x1=3,k1=55×3=165
k2mod4=0, k2mod5=2, k2mod11=0
4×11×x2mod5=2
44×x2×2−1mod5=1
其中 2−1 为 2 关于 5 的模乘逆元。
44×x2×3mod5=1
132×x2mod5=1
相当于算 132 关于 5 的模乘逆元。
x2=3,k2=44×3=132
k3mod4=0, k3mod5=0, k3mod11=7
4×5×x3mod11=7
20×x3×7−1mod11=1
其中 7−1 为 7 关于 11 的模乘逆元。
20×x3×8mod11=1
160×x3mod11=1
相当于算 160 关于 11 的模乘逆元。
x3=2,k3=40
K=(k1+k2+k3)mod(4×5×11)
=(165+132+40)mod220=337mod220=117
另一种:
k1mod4=1, k1mod5=0, k1mod11=0
1×(k1mod4=1, k1mod5=0, k1mod11=0)
5×11×x1mod4=1
x1=3,k1=1×55×3=165
k2mod4=0, k2mod5=2, k2mod11=0
2×(k2mod4=0, k2mod5=1, k2mod11=0)
4×11×x2mod5=1
x2=4,k2=2×44×4=352
k3mod4=0, k3mod5=0, k3mod11=7
7×(k3mod4=0, k3mod5=0, k3mod11=1)
4×5×x3mod11=1
x3=5,k3=7×20×5=700
K=(k1+k2+k3)mod(4×5×11)
=(165+352+700)mod220=1217mod220=117
0 条评论