密码协议学习笔记(4):比特承诺

比特承诺:

股票经纪人甲试图说服乙购买他的服务,甲表示,它已分析出若干支股票将会涨停,但在乙出钱购买它的服务之前,它不能透露如此有价值的信息,于是甲将这几支股票写在纸上,并锁进保险箱里,将保险箱交给乙,表示,一个月后将钥匙给乙,如果到时候打开保险柜,看看里面写的股票是否确实涨停,以此来判定甲的预测能力.

这便是比特承诺的概念.比特承诺包含两方:承诺者与验证者.

比特承诺包括以下几个阶段:

  1. 承诺阶段:承诺者选择一个要承诺的比特b{0,1},把能代表该比特的信息c发送给验证者
  2. 打开阶段:承诺者把用于打开c的信息d和承诺的比特b发送给验证者,验证者用d打开c并验证是否是b

安全的比特承诺需要满足的性质:

  1. 隐藏性:打开阶段开始前,验证者无法得到b,进一步地,称一个方案是完善隐蔽的,指验证者不能从c中获得任何关于b的信息.
  2. 绑定性:承诺者不能在打开阶段之前改变自己承诺的比特.

类似于密码算法安全性的定义,比特承诺的属性分为计算上隐藏的,计算上绑定的,和信息论上隐藏的,信息论上绑定的.

常用比特承诺协议:

使用对称加密函数的比特承诺:

协议开始前,双方在TTP的帮助下协商出安全的加密算法Enc()()和解密算法Dec()()

(博主注:为何一定要在TTP帮助下协商呢,如果密钥是安全的,直接将加密解密算法公开不行吗)

注:用||表示字符串拼接

Alice   Bob
  r 生成一个随机比特串r

选择想承诺的比特b

生成一个密钥k

计算Enck(r||b)

Enck(r||b)  
  打开阶段  
  k  
    验证解密后得到的r,b

隐藏性:Bob不知道密钥k则无法解密Enck(r||b) 

绑定性:如果消息不含r,则Alice随便就能找到一个密钥k就可以使得解密后得到的值反转.而包含r后,虽然Alice也能通过穷举做到,但在计算上是不可行的.

使用单向哈希的比特承诺:

协议开始前,双方在TTP的帮助下协商出安全的哈希算法Hash()

Alice   Bob

生成随机比特串r1,r2

和希望承诺的比特b一同计算哈希值Hash(r1||r2||b)

Hash(r1||r2||b),r1,  
  打开阶段  
  r2 计算Hash(r1||r2||b)并验证

好处:Bob无需发送消息.

隐藏性:由于不知道r2,Bob无法区分Hash(r1||r2||0),Hash(r1||r2||1)

绑定性:Alice要伪造承诺,需要计算哈希碰撞Hash(r1||r2||b)=Hash(r1||r2||b),这在计算上是不可行的.

 

使用伪随机数发生器的比特承诺:

双方在TTP的帮助下选择一个伪随机数发生器G,再选择一个足够长的随机串R

Alice   Bob

选择需要承诺的比特r

产生s作为伪随机数发生器的种子

计算

c={G(s)b=0G(s)Rb=1

c  
  打开阶段  
  s,b 计算G(s)并验证

隐藏性:由于不知道s,Bob无法区分G(s),G(s)R

绑定性:要伪造承诺,则需计算G(s)=G(s)R或者G(s)R=G(s),这在计算上是不可行的.

Pedersen承诺协议:

比特承诺协议也可以利用数论中的一些计算困难的问题来构造,例如该协议就是通过离散对数问题进行构造的.

双方在TTP的帮助下选择大素数p,Zp的生成元p(g\in[1,p-1]),随机数y[1,p1]

Alice   Bob

选择承诺的比特b,产生随机数r[1,p1]

计算c=grybmodp

c  
  打开阶段  
  b,r  
    计算并验证

隐藏性:因为r随机产生,因此Bob无法区分c0=grc1=gry.

绑定性:若Alice要篡改自己的承诺(以将b=1篡改为b=0为例),则需要计算r,使得

gr=grygrr=yr=loggy+rmodp

这需要计算离散对数问题,这在计算上是不可行的.

(博主注:以上几个协议的隐藏性都是信息论级别的,绑定性则只有计算复杂度级别)

如果要用比特承诺协议承诺多个比特,可以重复应用协议多次,而对Pedersen承诺协议而言,也可以直接将承诺的字符串m作为计算c=grymmodp的指数应用.(注意,此时要求m[1,q1],否则需要对字符串进行分块.)

posted @   Isakovsky  阅读(221)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示