Shamir秘密共享理论基础

Exp1 Theory: Shamir Secret Sharing

在这里插入图片描述

最早在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,...,at1),构造多项式:

    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+a1x+a2x2+...+at1xt1[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+a1x1+...+at1x1t1=y1a0+a1x2+...+at1x2t1=y2...a0+a1xt+...+at1xtt1=yt

  • 解法一:用矩阵乘法表示为:
    在这里插入图片描述
    在求得 a 0 , a 1 , . . . , a t − 1 a_0,a_1,...,a_{t-1} a0,a1,...,at1后便可构造出多项式。

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=1tyij=1,j=itxixjxxj

    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=1tyij=1,j=itxjxixj

    💡 对某个多项式函数,已知有给定的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=0kyjlj(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=jkxjxixxi

    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阶乘法同态性必须满足上述不等式。

在这里插入图片描述

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值