我们提供安全,免费的手游软件下载!
作者:@warm3snow https://github.com/warm3snow
微信公众号:密码应用技术实战
博客园首页: https://www.cnblogs.com/informatics/
标签:技术分享模板
承诺方案(Commitment Scheme) 是一个重要的密码学原语( cryptographic primitive ), 承诺方案是一种加密协议,允许发送者承诺一个选择的值(或声明),同时对接收者保持隐藏,而接收者能够在稍后验证所承诺的值。承诺方案通常可以分为两个阶段。
密码学承诺方案在多个领域有广泛的应用,以下是一些主要的应用场景:
承诺方案是一个三元组, 包含 \((Commit, Open, Verify)\) ,其中:
承诺值有两个属性:
注:以上两种描述并不严谨
承诺方案一般涉及到两方,发送方和接收方。发送方选择一个明文 \(m\) 和一个随机数 \(r\) ,计算承诺值 \(C\) ,并发送 \(C\) 给接收方。在某个时刻,发送方打开承诺,揭示 \(m\) 和 \(r\) 。接收方使用 \(C\) 和揭示的 \(m\) 和 \(r\) 验证承诺的正确性。
常见的承诺方案有
哈希承诺
、
ElGamal承诺
、
Pedersen承诺
和
Sigma承诺
等。虽然承诺方案的实现方式不同,但其基本原理相似。
关键流程如下:
[01] 发送承诺:Sender选取随机数
\(r\)
, 并计算
\(m\)
的承诺值
\(C\)
,发送给Receiver。(这里的随机数
\(r\)
是为了保证每次承诺的值不同)
[02] 打开承诺:Sender打开承诺,揭示
\(m\)
和
\(r\)
。
[03] 验证承诺:Receiver重新计算承诺值
\(C^{'}\)
,并验证
\(C^{'}\)
和
\(C\)
是否相等。相等则认为承诺验证通过,否则承诺验证失败。
哈希承诺
是一种简单的承诺方案,通过哈希函数来实现承诺。假设
\(H\)
是一个哈希函数,
\(m\)
是明文。
哈希承诺的构造如下:
哈希承诺的隐藏性和绑定性是基于哈希函数的性质,哈希函数是单向函数,接收方无法从承诺值 \(C\) 推导出明文 \(m\) 。同时,哈希函数是抗碰撞的,发送方无法找到两个不同的 \(m\) ,使得 \(C = H(m)\) 。
哈希承诺隐藏性较差,在明文空间有限的情况下,可能会发生碰撞; 哈希承诺对于相同的明文 \(m\) ,承诺值 \(C\) 是固定的,虽然引入随机数 \(r\) 可以解决这个问题,但会破坏绑定性,因为发送方可以在保证 \(m||r\) 不变的情况下,随便更改 \(m\) 和 \(r\) 的值。
ElGamal承诺
是一种基于离散对数问题的困难性假设构造的承诺方案。假设
\(G_p\)
是阶为
\(q\)
的循环群,
\(g, h\)
是生成元,
\(m\)
是明文
ElGamal承诺的构造如下:
ElGamal承诺的隐藏性和绑定性是基于离散对数问题的困难性假设,接收方无法从承诺值 \(C\) 推导出明文 \(m\) ,发送方无法找到两个不同的 \((r_1, m_1)\) 和 \((r_2, m_2)\) ,使得 \(C = (g^{r_1}, m_1 \cdot h^{r_1}) = (g^{r_2}, m_2 \cdot h^{r_2})\) 。
假设发送方找到两个不同的 \((r_1, m_1)\) 和 \((r_2, m_2)\) ,使得 \(C = (g^{r_1}, m_1 \cdot h^{r_1}) = (g^{r_2}, m_2 \cdot h^{r_2})\) ,则有:
与假设矛盾,因此ElGamal承诺具有绑定性。
Pedersen承诺
是一种基于离散对数问题的困难性假设构造的承诺方案。假设
\(G_p\)
是阶为
\(q\)
的乘法群,
\(g, h\)
是独立生成元,
\(m\)
是明文。
Pedersen承诺的构造如下:
Pedersen承诺的隐藏性和绑定性是基于离散对数问题的困难性假设,接收方无法从承诺值 \(C\) 推导出明文 \(m\) ,发送方无法找到两个不同的 \((r_1, m_1)\) 和 \((r_2, m_2)\) ,使得 \(C = g^{m_1} \cdot h^{r_1} = g^{m_2} \cdot h^{r_2}\) 。
假设发送方找到两个不同的 \((r_1, m_1)\) 和 \((r_2, m_2)\) ,使得 \(C = g^{m_1} \cdot h^{r_1} = g^{m_2} \cdot h^{r_2}\) ,则有:
由于 \(g\) 和 \(h\) 是独立生成元, 即它们生成的子群没有重叠,这意味着 \(g^{m_1 - m_2} = h^{r_2 - r_1}\) 只有在 \(_1 - m_2 = 0\) 和 \(r_2 - r_1 = 0\) 时才成立,即:
与假设矛盾,因此Pedersen承诺具有绑定性。
Pedersen承诺也可以基于ECC构造,假设 \(G\) 和 \(H\) 是椭圆曲线上的点, \(m\) 是明文, \(r\) 是随机数。
- 承诺阶段 :发送方选择一个明文 \(m\) 和一个随机数 \(r\) ,计算承诺值 \(C = mG + rH\) ,并发送 \(C\) 给接收方。
- 打开阶段 :发送方揭示明文 \(m\) 和随机数 \(r\) 。
- 验证阶段 :接收方重新计算承诺值 \(C^{'} = mG + rH\) ,并验证 \(C^{'}\) 和 \(C\) 是否相等。
隐藏性和绑定性略,与上述类似。
Pedersen承诺有一个重要的性质:同态性。即两个Pedersen承诺的和等于明文的和的Pedersen承诺。假设 \(C_1 = g^{m_1} \cdot h^{r_1}\) 和 \(C_2 = g^{m_2} \cdot h^{r_2}\) 是两个Pedersen承诺, \(m_1, m_2\) 是明文, \(r_1, r_2\) 是随机数。则有:
使用ECC构造的Pedersen承诺也具有同样的性质。如下:
Pedersen承诺的同态性可以用于保证密态的加法性,即两个密文的和等于明文的和的密文。如在门罗币中,矿工节点通过验证Pedersen承诺可以检查交易UTXO的输入和是否等于输出和(是否凭空产生门罗币)。
在上一章中介绍的承诺方案中,发送方和接收方之间的通信是明文的,即接收方可以获得发送方的明文信息。在某些情况下,发送方希望向接收方证明自己拥有某个明文,而不透露明文的具体内容。这时,可以使用
零知识证明承诺
方案。
零知识证明承诺
是一种特殊的承诺方案,允许发送方向接收方证明自己拥有某个明文,而不透露明文的具体内容。零知识证明承诺方案根据在证明阶段是否交互可以分为:
Sigma承诺
是一种基于离散对数问题的困难性假设构造的零知识承诺方案。Sigma承诺的交互式证明流程如下:
等式左边等于等式右边,因此按照Sigma承诺协议流程,验证方Receiver可以正确验证
非严格证明,由于Receiver仅知道 \(C\) ,根据离散对数问题的困难性假设,Receiver无法计算出 \(r\) 的值,保证了承诺的隐藏性。
假设Receiver可以找到两个不同的 \((r_1)\) 和 \((r_2)\) ,使得 \(C = r_1.G = r_2.G\) ,则有:
与假设矛盾,因此Sigma承诺具有绑定性。
非严格证明,由于Receiver仅知道 \((Q, C, e, z)\) ,并且基于该已知信息,无法计算出 \(m\) 的值,保证了承诺的零知识性
Sigma承诺也可以使用Fiat-Shamir heuristic构造为非交互式零知识证明承诺。具体流程如下:
Sigma承诺的非交互式零知识证明承诺的正确性、隐藏性、绑定性和零知识性证明与交互式零知识证明承诺类似。需要注意的是:
Pedersen承诺
也可以构造为零知识承诺方案。 下面我们直接介绍非交互式版本的Pedersen零知识承诺方案。
Pedersen零知识承诺的隐藏性、绑定性与Pedersen承诺类似。需要注意的是:
等式左边等于等式右边,因此按照Pedersen零知识承诺协议流程,验证方Receiver可以正确验证.
非严格证明,由于Receiver仅知道 \((C, P, x^{'}, y^{'})\) ,并且基于该已知信息,无法计算出 \(m\) 和 \(r\) 的值,保证了承诺的零知识性。
下表对比了哈希承诺、ElGamal承诺、Pedersen承诺和Sigma承诺的性质:
承诺方案 | 隐藏性 | 绑定性 | 同态性 | 零知识性 | 性能 | |
---|---|---|---|---|---|
哈希承诺 | 差 | 差 | 否 | 否 | 高 |
ElGamal承诺 | 好 | 好 | 是 | 否 | 较高 |
Pedersen承诺 | 好 | 好 | 是 | 否 | 较高 |
Sigma承诺-交互式 | 好 | 好 | 是 | 是 | 一般 |
Sigma承诺-非交互式 | 好 | 好 | 是 | 是 | 较高 |
Pedersen零知识承诺-非交互式 | 好 | 好 | 是 | 是 | 较高 |
通过对比发现,Pedersen承诺和Sigma承诺是比较优秀的承诺方案,具有隐藏性、绑定性和同态性。Sigma承诺是一种零知识承诺方案,可以保证发送方向接收方证明自己拥有某个明文,而不透露明文的具体内容。Pedersen承诺具有同态性,可以用于保证密文的加法性。因此,Pedersen承诺和Sigma承诺在实际应用中具有广泛的应用。
本文介绍了承诺方案的基本原理和常见的承诺方案,包括哈希承诺、ElGamal承诺、Pedersen承诺和Sigma承诺。承诺方案是一种重要的密码学原语,可以用于保证发送方的承诺值对应的明文,同时隐藏明文的具体内容。承诺方案在多个领域有广泛的应用,包括电子投票、拍卖、安全多方计算、数字签名、区块链和加密货币、身份验证和游戏理论等。通过对比发现,Pedersen承诺和Sigma承诺是比较优秀的承诺方案,具有隐藏性、绑定性和同态性。Pedersen承诺具有同态性,可以用于保证密文的加法性。Sigma承诺是一种零知识承诺方案,可以保证发送方向接收方证明自己拥有某个明文,而不透露明文的具体内容。因此,Pedersen承诺和Sigma承诺在实际应用中具有广泛的应用。
希望通过本文的介绍,读者对承诺方案有一个更深入的了解,为实际应用提供参考。
相关资讯
热门资讯