密码学许诺原理与使用 - 概览
前语
作者:@warm3snow https://github.com/warm3snow
微信大众号:暗码运用技能实战
博客园主页:https://www.cnblogs.com/informatics/
简介
许诺计划(Commitment Scheme)是一个重要的暗码学原语(cryptographic primitive), 许诺计划是一种加密协议,答应发送者许诺一个挑选的值(或声明),一起对接纳者坚持躲藏,而接纳者能够在稍后验证所许诺的值。许诺计划一般能够分为两个阶段。
- 许诺阶段(Commitment Phase): 发送方发送一个许诺值给接纳方,这个值是发送方挑选的,接纳方无法知道这个值的内容。
- 翻开阶段(Opening Phase): 发送方翻开这个许诺,接纳方能够验证这个值的内容。
暗码学许诺计划在多个范畴有广泛的运用,以下是一些首要的运用场景:
- 电子投票:在电子投票体系中,许诺计划能够确保选民在投票时能够保密其挑选,一起在投票完毕后能够验证其投票的有效性。
- 拍卖:在拍卖中,许诺计划能够让竞标者在拍卖开始时提交他们的出价,而不泄漏详细的出价金额。拍卖完毕时,一切出价能够被提醒并验证,以确保竞标者的出价是诚笃的。
- 安全多方核算:在多方核算中,参与者能够运用许诺计划来许诺他们的输入,而不需求在核算过程中泄漏这些输入。这有助于维护参与者的隐私。
- 数字签名:许诺计划能够用于构建数字签名计划,确保音讯的完整性和不可否认性。
- 区块链和加密钱银:在区块链技能中,许诺计划能够用于确保买卖的隐私和安全性。例如,某些隐私币(如Zcash)运用许诺计划来躲藏买卖金额和发送者信息。
- 身份验证:许诺计划能够用于身份验证协议中,答运用户在不泄漏其身份信息的情况下证明其身份。
- 游戏理论:在博弈论中,许诺计划能够用于规划机制,使参与者能够在不泄漏其战略的情况下进行协作或竞赛。
许诺计划原理
符号界说
- \(C\): 许诺值
- \(m\): 明文
- \(r\): 随机数,需求确保每次许诺的随机数不同
- \(H\): 哈希函数
- \(||\): 字符串衔接
- \([m]\): 明文\(m\)的许诺值
- \([m;r]\): 明文\(m\)和随机数\(r\)的许诺值
- \(G_p\): 模素数\(p\)的阶为\(q\)的循环群
- \(g\): \(G_p\)的生成元
- \(h\): \(G_p\)的生成元, 与\(g\)为独立生成元,即g和h生成的子群彼此独立
- \(G\): 椭圆曲线上的点,即\((G_x, G_y)\), 一般情况下\(G\)是椭圆曲线的生成元
- \(H\): 椭圆曲线上的点,即\((H_x, H_y)\), 一般境况下\(H\)随机选取
- 明文\(m\)的Pedersen许诺值:\([m;r] = g^m \cdot h^r\)
计划界说
许诺计划是一个三元组, 包括\((Commit, Open, Verify)\),其间:
- \(Commit\):发送方的许诺算法,一般发送方挑选一个明文\(m\)和一个随机数\(r\),核算许诺值\(C\)。
- \(Open\):发送方的翻开算法, 一般发送方提醒明文\(m\)和随机数\(r\)。
- \(Verify\):接纳方的验证算法, 一般接纳方验证许诺的正确性。
许诺值有两个特点:
- 躲藏性(Hiding):接纳方无法知道发送方的许诺值对应的明文。
- 绑定性(Binding):发送方无法修正许诺值对应的明文。
注:以上两种描绘并不谨慎
许诺计划一般涉及到两方,发送方和接纳方。发送方挑选一个明文\(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\)是明文。
哈希许诺的结构如下:
- 许诺阶段:发送方挑选一个明文\(m\),核算许诺值\(C = H(m)\),并发送\(C\)给接纳方。
- 翻开阶段:发送方提醒明文\(m\)。
- 验证阶段:接纳方从头核算许诺值\(C^{'} = H(m)\),并验证\(C^{'}\)和\(C\)是否持平。
哈希许诺的躲藏性和绑定性是根据哈希函数的性质,哈希函数是单向函数,接纳方无法从许诺值\(C\)推导出明文\(m\)。一起,哈希函数是抗磕碰的,发送方无法找到两个不同的\(m\),使得\(C = H(m)\)。
哈希许诺躲藏性较差,在明文空间有限的情况下,可能会产生磕碰; 哈希许诺关于相同的明文\(m\),许诺值\(C\)是固定的,尽管引进随机数\(r\)能够处理这个问题,但会损坏绑定性,由于发送方能够在确保\(m||r\)不变的情况下,随意更改\(m\)和\(r\)的值。
ElGamal许诺
ElGamal许诺
是一种根据离散对数问题的困难性假定结构的许诺计划。假定\(G_p\)是阶为\(q\)的循环群,\(g, h\)是生成元, \(m\)是明文
ElGamal许诺的结构如下:
- 许诺阶段:发送方挑选一个明文\(m\)和一个随机数\(r\),核算许诺值\(C = (g^r, m \cdot h^r)\),并发送\(C\)给接纳方。
- 翻开阶段:发送方提醒明文\(m\)和随机数\(r\)。
- 验证阶段:接纳方从头核算许诺值\(C^{'} = (g^r, m \cdot h^r)\),并验证\(C^{'}\)和\(C\)是否持平。
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})\),则有: