首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在HMAC上使用Pedersen承诺方案的原因是什么?

在HMAC上使用Pedersen承诺方案的原因是什么?
EN

Cryptography用户
提问于 2018-06-25 09:41:52
回答 2查看 1.7K关注 0票数 5

对于任意长度的消息,我想实现非交互式比特承诺方案。

我很好奇,为什么在盐渍Hash上使用Pedersen承诺方案(换句话说,HMAC)。

例如来自维基百科的硬币翻转协议:

  1. 爱丽丝“呼唤”硬币翻转,但只告诉鲍勃对她的召唤的承诺,
  2. 鲍勃抛硬币并报告结果,
  3. 爱丽丝透露了她的承诺,
  4. 鲍勃证实爱丽丝的电话符合她的承诺,
  5. 如果爱丽丝的发现与鲍勃报告的硬币结果相符,艾丽斯就赢了

使用HMAC,Alice在步骤1中计算她调用的哈希,并将其报告给Bob,并将密钥(salt)保密。在展示步骤(3)中,她展示了一把钥匙。

在Pedersen承诺方案中,她在步骤1报告她的承诺,然后在步骤3显示她的呼叫,并提供与方案相关的其他数据。

EN

回答 2

Cryptography用户

回答已采纳

发布于 2019-09-09 09:21:08

在许多应用中,特别是在零知识证明中,我们需要附加同态的承诺方案.Pedersen承诺方案确实具有此属性,基于散列的承诺方案不具有此属性。

如果出于性能考虑,我们在椭圆曲线上做Pedersen承诺,将两点PQ固定在曲线上,那么我们可以定义:

\text{commit}(s,r) := sP + rQ

或者,在更一般的形式中,如果我们将点P_1, \ldots, P_nQ固定在曲线上,我们可以同时提交多个值s_1, \ldots, s_n

\text{commit}(s_1, s_2, ..., s_n, r) := s_1P_1 + s_2P_2 + ... + s_nP_n + rQ

这个Pedersen承诺方案是加性同态的。实际上,在只有一个值的\text{commit}(s,r)情况下,我们可以提交两个值-- s_1s_2

\text{commit}(s_1 + s_2, r_1 + r_2) = (s_1 + s_2)P + (r_1 + r_2)Q

等于

(s_1P + r_1Q) + (s_2P + r_2Q) = \text{commit}(s_1, r_1) + \text{commit}(s_2, r_2)

ns_1, \ldots, s_n的同时承诺也是如此。

基于散列的方案

\text{commit}(s,r) := H(s)P + rQ

并不是额外的同态,因为:

\text{commit}(s_1+s_2, r_1+r_2) \ne H(s_1 || s_2)P + (r_1+r_2)Q

另请参阅:

票数 6
EN

Cryptography用户

发布于 2018-06-25 10:07:56

在这种情况下,可能没有什么区别。

Pedersen承诺方案经常用于加密协议,因为:

  1. 它允许零知识证明来证明所承诺值的某些性质。
  2. 它是完全隐藏的,这对于证明协议的安全性是非常重要的。

基于哈希的承诺方案不具有上述两个属性。但是,它们可能更有效率,在某些情况下更可取。

票数 5
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/60279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档