多重加密里,用M个秘钥加密的信息只需要N个秘钥就可以解密(M>N),这里面的原理是什么?

 

Threshold ElGamal Cryptosystem 门限EIGamal 加密详解

以下第三部分Shamir's (k,n)-threshold scheme是核心


1.EIGamal 加密
详解ElGamal加密算法 | 夏冰加密软件技术博客
2.拉格朗日插值公式
详细解释和证明链接:

http://www.cnblogs.com/ECJTUACM-873284962/p/6833391.html​www.cnblogs.com图标

对于k+1个点 (x_{0},y_{0})...(x_{k},y_{k}) ,通过所有点的次数不超过k的多项式可表示为:
L(x):=\sum_{j=0}^{k}{y_{j}l_{j}(x)}
其中: l_{j}(x):=\prod_{i=0,i\ne j}^{k}\frac{x-x_{i}}{x_{j}-x_{i}}

3. Shamir's (k,n)-threshold scheme
1)假设s是需要k个节点共同解密的信息, s\in Z_{p} p为素数。
2)随机选择一个多项式 f(x)=f_{0}+f_{1}x+f_{2}x^{2}+...+f_{k-1}x^{k-1}
此多项式满足 f(0)=s
即:

  • 随机选择 f_{1},...,f_{k-1}\in Z_{p}
  • f_{0}\leftarrow s

3)对于 i \in [1,n] , 第i个参与节点的密钥为 s_{i}=(i,f(i))这个密钥相当于拉格朗日差值公式中的取值点 (x_{i},y_{i})
4)消息s可以被任意的k个节点共同解密,解密方法如下:
f(x)=\sum_{i=1}^{k}{f(i)}\prod_{j=1,j\ne i}^{k}\frac{x-j}{i -j}\ (mod \ p)
s=f(0)=\sum_{i=1}^{k}{f(i)}\prod_{j=1,j\ne i}^{k}\frac{j}{j-i}\ (mod \ p)

4.Threshold EIGamal Cryptosystem
1)参数设置:
GZ_{p}^{*} 的循环子群,阶数为 qpq 均为大素数,并且 p=2q+1 , gG 生成元,共有 \omega 个节点 P_{1},P_{2},...,P_{\omega} 来合作管理门限 ELGamal 密文。
2)如通常EIGamal加密一样,每个节点 P_{i} 都有一个私钥 x_{i} \in Z_{q} , 公布 P_{i} 公钥 y_{i}=g^{x_{i}} \ mod \ p , EIGamal门限加密系统的加密公钥为 y=\prod_{i=1}^{\omega}y_{i} \ mod \ p ,私钥 s=x_{1}+x_{2}...+x_\omega
3)使用公钥y加密消息m, 得到的EIGamal 密文对为 (g^r,my^{r}) ,想要解密就需要知道私钥s,也就是需要知道每一个节点的私钥 x_{i} 然后求和,但这就需要所有节点全部参与,为了达到 \omega 个节点中 t 个节点在一起就可以实现解密”,每个节点 P_{i} 都需要通过 Shamir's threshold scheme 向其他向其它节点分享自己的私钥 x_{i} , 当 \omega 个节点中t个节点“凑”在一起时,就能解密得到每一个 x_{i} 的值,从而恢复出私钥 s

  • P_{i} 首先构造一个多项式(步骤如同 Shamir's threshold scheme) F_i(x)=\sum_{k=0}^{t-1}{f_{i,k}x^{k}} \ mod \ q

其中 f_{i,0}=x_{i}

  • 节点P_{i} 向其它节点 j , j=1,2,...,i-1,i+1,i+2,...\omega 发放他们的密钥d_{i,j}=(j,F_{i}(j))此消息使用 P_{j} 的公钥加密。
  • \omega 个节点中t个节点“凑”在一起时,就可以解密 x_{i}

x_{i}=F_{i}(0)=\sum_{j=1}^{t}{F_{i}(j)}\prod_{k=1,k\ne j}^{t}\frac{k}{k-j}\ (mod \ p)
因此
s=\sum_{i=1}^{w}{x_i}=\sum_{i=1}^{w}F_{i}(0)=\sum_{i=1}^{w}\sum_{j=1}^{t}{F_{i}(j)}\prod_{k=1,k\ne i}^{t}\frac{k}{k-j}\ (mod \ p)
把公式稍微变换一下
s=\sum_{i=1}^{w}{x_i}=\sum_{i=1}^{w}F_{i}(0)=\sum_{j=1}^{t}\sum_{i=1}^{w}{F_{i}(j)}\prod_{k=1,j\ne i}^{t}\frac{k}{k-j}\ (mod \ p)

d_{j}=\sum_{i=1}^{w}{F_{i}(j)} \ (mod \ q)u_{j}=\prod_{k=1,j\ne i}^{t}\frac{k}{k-j}
可得 s=\sum_{j=1}^{t}d_{j}\cdot u_{j} \ ( mod \ q)


d_{j} 可理解为节点 P_{j} 收到的“私钥分享总和”, P_{j} 解密部分为 s_{j}=g^{rd_{j}} \ mod \ p
m=\frac{my^r}{g^{rs}}=\frac{my^r}{g^{r\sum_{j=1}^{t}d_{j}\cdot u_{j}}}=\frac{my^r}{\prod_{j=1}^{t}g^{rd_{j}\cdot u_{j}}}=\frac{my^r}{\prod_{j=1}^{t}s_{j}^{u_{j}}} \ (mod \ p)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web3.0前沿技术研究者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值