几个秘密共享方案

秘密共享是信息安全和数据保密中的重要手段,它在重要信息和秘密数据的安全保存、传输及合法利用中起着非常关键的作用。


秘密共享由两个算法——秘密份额的分配算法和秘密的恢复算法构成。
在执行秘密份额的分配算法时,分发者将秘密分割成若干份额在一组参与者中进行分配,使得每个参与者都得到关于该秘密的一个秘密份额;
秘密的恢复算法保证只有参与者的一些特定的子集才能有效的恢复秘密,其他子集不能有效地恢复秘密,甚至得不到关于秘密任何有用信息[1]。

[1]张福泰, 赵福祥, 王育民. 可验证秘密分享及其应用[J]. 电子学报, 2002, 30(10):1519-1525.

1. Shamir秘密共享分案

最早被提出的秘密共享模型是Shamir门限秘密共享模型。
在(t,n) 门限秘密共享体制中,秘密的持有者,把秘密分割成 n 个份额,分别分配于n个参与者,使得只要获得这n个份额中的至少t个才可能有效地恢复出原来的秘密,而任何少于t个的份额集合都不能恢复出原来的秘密,得不到关于原秘密任何有用的信息。

分发秘密

首先选择有限域Fq(q\geqn)。设参与者集合为P={P1,P2,…,Pn},t为门限值,秘密信息s。选择Fq上的n个互不相同的非零元素x1,x2,……,xn,公开这些元素。

随机选择a_i \in F_q上的t-1次多项式y=f(x)=a_0+a_1x+a_2x+...+a_{t-1}x^{t-1},其中a0=s,也就是秘密信息。分别计算y_i=f(x_i),其中i=1,2,…,n,将(x_i,y_i)作为子秘密分发给成员Pi。

合并秘密

任意t个成员可以将其持有的子秘密共享,从而通过拉格朗日插值公式恢复出子秘密s。设t个成员的子秘密为{(x_1,y_1),…,(x_t,y_t)},拉格朗日插值公式如下图:

由多项式理论可知,一个t-1次多项式在t个不同的点及取值就可求解出多项式函数,于是可以求出y=f(x)。由此计算出f(x0)=s=a0。

不足:
Shamir秘密共享其实是包含了一些可能不切实际的假设的——秘密的分发者和参与者都是诚实的,然而, 在现实生活中, 参与者可能是不诚实, 他可能会故意或是由于一些非主观因素(如网络传输错误 )提供了错误的份额, 这样会导致也无法正确地恢复秘密[2]。

为了检验共享的正确性,出现了可验证的秘密共享方案。 一个正常执行的可验证秘密共享方案能够保证:在秘密分发阶段, 分发者发送给参与者的共享是正确的;在秘密恢复阶段, 参与者提交的共享也是正确的[2]。

[2]石润华, 黄刘生. 一种简单的可验证秘密共享方案[J]. 计算机应用, 2006(08):77-79.

2. Feldman可验证的秘密共享方案

Feldman可验证的秘密共享方案和pederson可验证秘密共享方案是最早出现的也是现在应用最多的两个秘密共享方案,其中Feldman可验证秘密共享方案是最早提出的不需要可信机构的计算安全的秘密共享方案,而pederson是最早提出的无条件安全的秘密共享方案[1]。

[1]张福泰, 赵福祥, 王育民. 可验证秘密分享及其应用[J]. 电子学报, 2002, 30(10):1519-1525.

什么是计算安全?什么是无条件安全?
评估密码系统安全性主要有三种方法:
(1)无条件安全性
这种评价方法考虑的是假定攻击者拥有无限的计算资源,但仍然无法破译该密码系统。
(2)计算安全性
这种方法是指使用目前最好的方法攻破它所需要的计算远远超出攻击者的计算资源水平,则可以定义这个密码体制是安全的。
(3)可证明安全性
这种方法是将密码系统的安全性归结为某个经过深入研究的数学难题(如大整数素因子分解、计算离散对数等),数学难题被证明求解困难。这种评估方法存在的问题是它只说明了这个密码方法的安全性与某个困难问题相关,没有完全证明问题本身的安全性,并给出它们的等价性证明[3]。
[3] https://blog.csdn.net/wangtingyao1990/article/details/79475842

算法参数设置

设p、q是大素数,且有q |(p-1),g是乘法群{Z_q}^*中的一个p阶元素,这些参数都是公开的。

分发秘密

设参与者集合为P={P1,P2,…,Pn},t为门限值,秘密信息s。

随机选择a_i \in F_q上的t-1次多项式y=f(x)=a_0+a_1x+a_2x+...+a_{t-1}x^{t-1}。每个节点Pi分别计算y_i=f(x_i)),其中i=1,2,…,n,将\left ( x_i,y_i \right )作为子秘密分发给成员Pi。并且广播承诺\left \{ \alpha_i=g^{a_i}\ mod \ q \right \}其中i={0,1,2,... ,t-1}。

共享验证

每个节点 P_j检验它所接受的f_j(x_i) (j=0,1,2,...,n)是否满足等式:g^{f_j(x_i)}=\prod_{j=0}^{t-1}{\alpha_j}^{x_i} \ mod \ q 。如果等式不成立,那么节点 Pi所收到的共享f(x_i)是无效的。
等式为什么会成立:

\prod_{j=0}^{t-1}\alpha_j^{x_i}\ mod \ q =g^{a_0} g^{a_1x_i}g^{a_2x_i^2} ...g^{a_{t-1}x_i^{t-1}}=g^{a_0+a_1x_i+a_2x_i+...+a_{t-1}x_i^{t-1}}=g^{f(x_i)}
 

合并秘密

每一参与者p向其他参与者广播自己的共享R_i,当接受到的R_i值大于t个,且均被验证为有效时,通过拉格朗日插值计算恢复出秘密值s。

 这一方案可抵抗(n-1)/2个恶意的参与者,由于\alpha_i被公开;所以该方案只是计算安全的(根据密码学中的计算离散对数的困难性可得(\alpha_i=g^{\alpha_i} \ mod \ q中已知g、\alpha_i和q是很难算出来\alpha_i的。[2]

[2]石润华, 黄刘生. 一种简单的可验证秘密共享方案[J]. 计算机应用, 2006(08):77-79.

3. Pederson可验证的秘密共享方案

设g,h是群G_q的两个生成元,但{log_g}^h未知,记Pedersen 承诺E(s,t)=g^sh^t,具体Pedersen VSSS算法如下:

初始化阶段

秘密分发者选择两个t-1阶多项式,其中秘密为s,t为随机数,
F(x)=s+f_1x+f_2x^2+...+f_{t-1}x^{t-1}

G(x)=t+g_1x+g_2x^2+...+g_{t-1}x^{t-1}

公开承诺E_0(s,t), \ {E_i(F_i,G_i)}(i=1,2,3,...,t-1)

分发秘密

对 i = 1,2,...,n,计算s_i=F(i), \ t_i=G(i), 并将(s_i,t_i)发送给对应的参与者Pi。

共享验证

每个参与者P使用下面公式验证从秘密分发者收到的秘密份额
E(s_i,t_i)={\prod_{j=0}^{t-1}E_j^i}^j=E_0(s,t)E_1(F_1,G_1)x_i...E_{t-1}(F_{t-1},G_{t-1})x_i^{t-1}

=g^sh^tg^{f_1x_i}h^{g_1x_i}...g^{f_{t-1}x_i}h^{g_{t-1}x_i}

=g^{s+f_1x_i+f_2x_i+...+f_{t-1}x_i}h^{t+g_1x_i+g_2x_i+...+g_{t-1}x_i}=g^{F(i)}h^{G(i)}=g^{s_i}h^{t_i}=E(s_i,t_i)

注:该验证利用了pederson承诺加法同态性质
 

秘密重构

在秘密重构时,参与者P_j首先利用上面验证公式验证其他参与者发送过来的(s_i,t_i)然后使用拉格朗日插值法进行秘密重构。

 除此之外秘密共享还有可公开验证秘密共享(PVSS) ,先应秘密共享(Proactive Secret Sharing)等等。其他内容以后慢慢分享,,,
 

参考内容:

Shamir 秘密共享方案和Feldman可验证的秘密共享方案_feldman可验证加密共享_yilishabai哈哈的博客-CSDN博客
秘密共享算法_shamir算法_haiminhuang的博客-CSDN博客基于Pedersen承诺的可验证秘密共享方案: Pedersen VSS_孙绿如叶~的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值