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)=(xx1)(xx2)(xxk)(x0x1)(x0x2)(x0xk)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)=(xx0)(xx1)(xxk1)(xkx0)(xkx1)(xkxk1)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)=(x5)(x6)(45)(46)×10\ell_0(x)=\frac{(x-5)(x-6)}{(4-5)(4-6)}\times 10

1(x)=(x4)(x6)(54)(56)×5.25\ell_1(x)=\frac{(x-4)(x-6)}{(5-4)(5-6)}\times 5.25

2(x)=(x4)(x5)(64)(65)×1\ell_2(x)=\frac{(x-4)(x-5)}{(6-4)(6-5)}\times 1

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

Shamir 秘密共享

生成

  • 设需要生成 ww 个密钥,至少需要 tt 个密钥才能算出真实密钥。
  • 选择一个数 PP,之后所有数都需要进行模运算。
  • 设置真实密钥 KK
  • 随机选择 t1t-1 个不大于 PP 的数 a0,a1at1a_0,a_1\ldots a_{t-1}
  • 得到多项式 f(x)=K+a0x+a1x2+at1xtf(x)=K+a_0x+a_1x^2\ldots+a_{t-1}x^t
  • x=1,x=2x=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)mod23f(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=(x3)(x4)(13)(14)×7\ell_0=\frac{(x-3)(x-4)}{(1-3)(1-4)}\times 7

1=(x1)(x4)(31)(34)×6\ell_1=\frac{(x-1)(x-4)}{(3-1)(3-4)}\times 6

2=(x1)(x3)(41)(43)×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)mod23=2mod23=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)mod17f(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×(x1)(x2)(51)(52)\ell_0=11\times\frac{(x-1)(x-2)}{(5-1)(5-2)}

1=7×(x1)(x5)(21)(25)\ell_1=7\times\frac{(x-1)(x-5)}{(2-1)(2-5)}

2=8×(x2)(x5)(12)(15)\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)mod17K=(\ell_0+\ell_1+\ell_2)\bmod 17

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

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

其中 616^{-1}66 关于 1717 的模乘逆元,为 33

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

中国剩余定理

example

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

选择 wwdd,要求单调递增并两两互素,tt 个最小的 dd 相乘大于 KKKK 大于 t1t-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=Kmoddik_i=K\bmod d_i

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

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

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

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

k5=117mod11=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),可得

kmod4=1,kmod5=2,kmod11=7k\bmod 4=1,\quad k\bmod 5=2,\quad k\bmod 11=7

分解为

k1mod4=1, k1mod5=0, k1mod11=0k_1\bmod 4=1,\ k_1\bmod 5=0,\ k_1\bmod 11=0

5×11×x1mod4=15\times 11\times x_1\bmod 4=1

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

k2mod4=0, k2mod5=2, k2mod11=0k_2\bmod 4=0,\ k_2\bmod 5=2,\ k_2\bmod 11=0

4×11×x2mod5=24\times 11\times x_2\bmod 5=2

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

其中 212^{-1}22 关于 55 的模乘逆元。

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

132×x2mod5=1132\times x_2\bmod 5=1

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

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

k3mod4=0, k3mod5=0, k3mod11=7k_3\bmod 4=0,\ k_3\bmod 5=0,\ k_3\bmod 11=7

4×5×x3mod11=74\times 5\times x_3\bmod 11=7

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

其中 717^{-1}77 关于 1111 的模乘逆元。

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

160×x3mod11=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)mod220=337mod220=117=(165+132+40)\bmod 220=337\bmod 220=117

另一种:

k1mod4=1, k1mod5=0, k1mod11=0k_1\bmod 4=1,\ k_1\bmod 5=0,\ k_1\bmod 11=0

1×(k1mod4=1, k1mod5=0, k1mod11=0)1\times (k_1\bmod 4=1,\ k_1\bmod 5=0,\ k_1\bmod 11=0)

5×11×x1mod4=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

k2mod4=0, k2mod5=2, k2mod11=0k_2\bmod 4=0,\ k_2\bmod 5=2,\ k_2\bmod 11=0

2×(k2mod4=0, k2mod5=1, k2mod11=0)2\times (k_2\bmod 4=0,\ k_2\bmod 5=1,\ k_2\bmod 11=0)

4×11×x2mod5=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

k3mod4=0, k3mod5=0, k3mod11=7k_3\bmod 4=0,\ k_3\bmod 5=0,\ k_3\bmod 11=7

7×(k3mod4=0, k3mod5=0, k3mod11=1)7\times (k_3\bmod 4=0,\ k_3\bmod 5=0,\ k_3\bmod 11=1)

4×5×x3mod11=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)mod220=1217mod220=117=(165+352+700)\bmod 220=1217\bmod 220=117


0 条评论

©2026Asutorufa