Shamir秘密共享理论基础

Exp1 Theory: Shamir Secret Sharing

小故事:【shamir 算法】富翁的烦心的那些事……_哔哩哔哩_bilibili

最早在1970年基于Lagrange插值和矢量方法提出。基本思想是分发者通过秘密多项式,将秘密s分解为n份毫无相关的部分信息,每一部分信息称为一个子密钥,由一个参与者持有。只有至少拥有t份子密钥时才能恢复出秘密s,任意少于t个秘密均无法得到密文的任何信息。这种方案称为(t, n)-秘密分割门限方案,t称为方案的门限值。(可以根据已知位于曲线上的 t 或更多点的知识重构 t-1 次多项式)

算法思路

1.加密过程

假设存在秘密S,任取t-1个随机数

(

a

1

,

a

2

,

.

.

.

,

a

t

1

)

(a_1,a_2,...,a_{t-1})

(a1​,a2​,...,at−1​),构造多项式:

f

(

x

)

=

a

0

+

a

1

x

+

a

2

x

2

+

.

.

.

+

a

t

1

x

t

1

[

m

o

d

(

p

)

]

f(x)=a_0+a_1x+a_2x^2+...+a_{t-1}x^{t-1} [mod(p)]

f(x)=a0​+a1​x+a2​x2+...+at−1​xt−1[mod(p)]

其中

a

0

=

S

a_0=S

a0​=S,所有运算均在有有限域(仅含有限个元素的域)中进行。

任取n个数

x

1

,

x

2

,

.

.

.

,

x

n

x_1,x_2,...,x_n

x1​,x2​,...,xn​,分别代入多项式,计算

y

i

=

f

(

x

i

)

y_i=f(x_i)

yi​=f(xi​)。

将n个密钥对

(

x

1

,

f

(

x

1

)

)

,

(

x

2

,

f

(

x

2

)

)

,

.

.

.

,

(

x

n

,

f

(

x

n

)

)

(x_1,f(x_1)),(x_2,f(x_2)),...,(x_n,f(x_n))

(x1​,f(x1​)),(x2​,f(x2​)),...,(xn​,f(xn​))分发给n个持有者。

2.解密过程

任取t个密钥对,代入并求解多项式系数:

a

0

+

a

1

x

1

+

.

.

.

+

a

t

1

x

1

t

1

=

y

1

a

0

+

a

1

x

2

+

.

.

.

+

a

t

1

x

2

t

1

=

y

2

.

.

.

a

0

+

a

1

x

t

+

.

.

.

+

a

t

1

x

t

t

1

=

y

t

a_0+a_1x_1+...+a_{t-1}x_1^{t-1}=y_1 \\ a_0+a_1x_2+...+a_{t-1}x_2^{t-1}=y_2 \\ ... \\ a_0+a_1x_t+...+a_{t-1}x_t^{t-1}=y_t

a0​+a1​x1​+...+at−1​x1t−1​=y1​a0​+a1​x2​+...+at−1​x2t−1​=y2​...a0​+a1​xt​+...+at−1​xtt−1​=yt​

解法一:用矩阵乘法表示为: 在求得

a

0

,

a

1

,

.

.

.

,

a

t

1

a_0,a_1,...,a_{t-1}

a0​,a1​,...,at−1​后便可构造出多项式。

x

=

0

x=0

x=0代入多项式,即可求得原秘密。

解法二:拉格朗日插值法:

解密结果为:

f

(

x

)

=

i

=

1

t

y

i

j

=

1

,

j

i

t

x

x

j

x

i

x

j

f\left( x \right) =\sum_{i=1}^t{y_i\prod_{j=1,j\ne i}^t{\frac{x-x_j}{x_i-x_j}}}

f(x)=i=1∑t​yi​j=1,j=i∏t​xi​−xj​x−xj​​

x

=

0

x=0

x=0,解得秘密S:

s

=

i

=

1

t

y

i

j

=

1

,

j

i

t

x

j

x

j

x

i

s=\sum_{i=1}^t{y_i\prod_{j=1,j\ne i}^t{\frac{x_j}{x_j-x_i}}}

s=i=1∑t​yi​j=1,j=i∏t​xj​−xi​xj​​

💡 对某个多项式函数,已知有给定的k+1个取值点:

(

x

0

,

y

0

)

,

.

.

.

,

(

x

k

,

y

k

)

(x_0,y_0),...,(x_k,y_k)

(x0​,y0​),...,(xk​,yk​),其中对应着自变量的位置,对应函数在这个位置的取值,任意两个都不相同。那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为:

L

(

x

)

=

j

=

0

k

y

j

l

j

(

x

)

L\left( x \right) =\sum_{j=0}^k{y_jl_j\left( x \right)}

L(x)=j=0∑k​yj​lj​(x)

其中每个为拉格朗日基本多项式(或称插值基函数)

l

j

(

x

)

=

i

=

0

,

i

j

k

x

x

i

x

j

x

i

l_j\left( x \right) =\prod_{i=0,i\ne j}^k{\frac{x-x_i}{x_j-x_i}}

lj​(x)=i=0,i=j∏k​xj​−xi​x−xi​​

l

j

(

x

)

=

{

0

,

x

x

j

(

总会有

x

=

x

i

)

1

,

x

=

x

j

l_j\left( x \right) =\left\{ \begin{array}{l} 0,\ x\ne x_j(总会有x=x_i)\\ 1,\ x=x_j\\\end{array} \right.

lj​(x)={0, x=xj​(总会有x=xi​)1, x=xj​​

简化推理:

已知一个三次多项式上的4个点,构造多项式。 👆这是一个三次多项式,几个

δ

(

x

)

\delta(x)

δ(x)相加后得到的

f

(

x

)

f(x)

f(x)仍是三次多项式。

δ

(

x

)

\delta(x)

δ(x)泛化为以下表达式:

f

(

x

)

f(x)

f(x)泛化为以下表达式:

3.拓展:同态性质

(1)加法同态

多个(t, n) Shamir秘密共享生成的秘密份额相加是对应秘密值和的秘密份额,并且此过程中的门限值始终为t。即t个对应秘密值和的秘密份额可以恢复对应秘密值之和。

人话:

使用拉格朗日插值法计算公式与计算单个秘密值的形式相同。

(2)乘法同态

如果d个(t,n)-Shamir分享多个秘密值,那么这若干个f1,f2…fd乘起来最高次就是d(t-1),加上常数项,共有d(t-1) + 1 个未知数。因此如果d(t-1) + 1 > n,显然n个人全部一起来都无法恢复,所以必须要满足d(t-1) + 1 <= n才有可能恢复秘密值的乘积。也就是说Shamir秘密分享有d阶乘法同态性必须满足上述不等式。