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

比特承诺:

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

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

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

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

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

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

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

常用比特承诺协议:

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

协议开始前,双方在TTP的帮助下协商出安全的加密算法$Enc_{(\cdot)}(\cdot)$和解密算法$Dec_{(\cdot)}(\cdot)$

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

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

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

选择想承诺的比特$b$

生成一个密钥$k$

计算$Enc_k(r||b)$

$Enc_k(r||b) \rightarrow$  
  打开阶段  
  $k \rightarrow$  
    验证解密后得到的r,b

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

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

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

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

Alice   Bob

生成随机比特串$r_1,r_2$

和希望承诺的比特$b$一同计算哈希值$Hash(r_1||r_2||b)$

$Hash(r_1||r_2||b),r_1,\rightarrow$  
  打开阶段  
  $r_2$ 计算$Hash(r_1||r_2||b)$并验证

好处:Bob无需发送消息.

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

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

 

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

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

Alice   Bob

选择需要承诺的比特$r$

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

计算

$$c=\left\{\begin{matrix} G(s) & b=0 \\  G(s)\oplus R & b=1 \end{matrix}\right.$$

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

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

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

Pedersen承诺协议:

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

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

Alice   Bob

选择承诺的比特$b$,产生随机数$r\in [1,p-1]$

计算$c=g^ry^b \mod p$

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

隐藏性:因为$r$随机产生,因此Bob无法区分$c_0=g^r$和$c_1=g^ry$.

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

$$\begin{aligned}g^{r'}=&g^ry \\g^{r'-r} =& y \\r'=& \log_g y+r \mod p\end{aligned}$$

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

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

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

posted @ 2023-09-10 20:56  Isakovsky  阅读(101)  评论(0编辑  收藏  举报