密码学承诺协议

承诺协议

密码学承诺方案是一个涉及两方的二阶段交互协议,双方分别为承诺方和接收方。第一阶段为承诺阶段 c ← C o m ( x , r ) c \leftarrow Com(x,r) cCom(x,r),承诺方将声明 x x x和随机数 r r r用OWF做变换,发送承诺 c c c给接收方。第二阶段为打开阶段 ( x , r ) ← D e c o m ( c ) (x,r) \leftarrow Decom(c) (x,r)Decom(c),承诺方简单地发送 c c c对应的 x , r x,r x,r给接收方,接收方判断 c = C o m ( x , r ) c=Com(x,r) c=Com(x,r)是否满足。

承诺方案需要满足的两个基本性质:

  1. 隐藏性(Hiding):对于任意PPT敌手,声明 x 1 x_1 x1和声明 x 2 x_2 x2的承诺 c 1 , c 2 c_1,c_2 c1,c2不可区分。即承诺不泄露声明的额外信息。

  2. 绑定性(Binding):对于任意PPT敌手,找到两个声明 x 1 ≠ x 2 x_1 \neq x_2 x1=x2以及随机数 r 1 , r 2 r_1,r_2 r1,r2,使得 c 1 = c 2 c_1=c_2 c1=c2的概率可以忽略。即不同的声明难以生成相同的承诺。

根据参与方计算能力的不同,承诺方案一般分为两类:计算隐藏完美绑定承诺方案、计算绑定完美隐藏承诺方案。

构造

Hash承诺

  1. 承诺阶段:承诺者计算声明 x ∈ { 0 , 1 } ∗ x\in\{0,1\}^* x{0,1}和随机数 r r r的承诺 C o m ( x , r ) : = H a s h ( x ∣ ∣ r ) Com(x,r) := Hash(x||r) Com(x,r):=Hash(xr),发送承诺 c c c给接收者
  2. 打开阶段:承诺者解承诺 D e c o m ( c ) : = ( x , r ) Decom(c):= (x,r) Decom(c):=(x,r),公开声明 x x x和随机数 r r r,接收者判断 c = H a s h ( x ∣ ∣ r ) c=Hash(x||r) c=Hash(xr)是否满足

用途:校验数据是否发生改变或丢失。

基于PRG的比特承诺

  1. 承诺阶段:接收者生成 l l l长随机串 A ← P R G ( s ) A \leftarrow PRG(s) APRG(s)发送给承诺者,承诺者生成 l l l长随机串 B ← P R G ( s ′ ) B \leftarrow PRG(s') BPRG(s),并计算声明 x ∈ { 0 , 1 } x \in \{0,1\} x{0,1}的承诺 C o m ( x , A , B ) : = B ⊕ ( x ∧ A ) Com(x,A,B) := B \oplus (x \wedge A) Com(x,A,B):=B(xA),发送承诺 C C C给接收者
  2. 打开阶段:承诺者解承诺 D e c o m ( C ) : = ( x , s ′ ) Decom(C):= (x,s') Decom(C):=(x,s),公开声明 x x x和随机种子 s ′ s' s,接收者判断 C = P R G ( s ′ ) ⊕ ( x ∧ A ) C = PRG(s') \oplus (x \wedge A) C=PRG(s)(xA)是否满足

基于加密算法的承诺

  1. 承诺阶段:接收者随机选择 r ∈ { 0 , 1 } ∗ r\in\{0,1\}^* r{0,1}发给承诺者,承诺者随机选择密钥 K K K,计算声明 x ∈ { 0 , 1 } ∗ x\in\{0,1\}^* x{0,1}的承诺 C o m ( x , r ) : = E n c K ( x ∣ ∣ r ) Com(x,r) := Enc_K(x||r) Com(x,r):=EncK(xr),发送承诺 c c c给接收者
  2. 打开阶段:承诺者发送密钥 K K K给接收者,接收者解承诺 D e c o m ( c ) : = D e c K ( c ) Decom(c):= Dec_K(c) Decom(c):=DecK(c)得到声明 x x x和随机数 r ′ r' r,接收者判断 r = r ′ r=r' r=r是否满足

Pedersen承诺

  1. 初始化阶段:选择乘法群 G = Z q ∗ G=Z_q^* G=Zq,生成元为 g , h g,h g,h,公开三元组 ( g , h , q ) (g,h,q) (g,h,q)
  2. 承诺阶段:承诺者随机选择 r ∈ Z q r \in Z_q rZq,计算声明 x ∈ Z q x \in Z_q xZq的承诺 C o m ( x , r ) : = g x h r m o d    q Com(x,r) := g^xh^r \mod q Com(x,r):=gxhrmodq,发送承诺 c c c给接收者
  3. 打开阶段:承诺者解承诺 D e c o m ( c ) : = ( x , r ) Decom(c):= (x,r) Decom(c):=(x,r),公开声明 x x x和随机数 r r r,接收者判断 c = g x h r m o d    q c=g^xh^r \mod q c=gxhrmodq是否满足

加法同态性质:
C o m ( x 1 , r 1 ) ⋅ C o m ( x 2 , r 2 ) ≡ g x 1 + x 2 h r 1 + r 1 ≡ C o m ( x 1 + x 2 , r 1 + r 2 ) Com(x_1,r_1)\cdot Com(x_2,r_2) \equiv g^{x_1+x_2}h^{r_1+r_1} \equiv Com(x_1+x_2,r_1+r_2) Com(x1,r1)Com(x2,r2)gx1+x2hr1+r1Com(x1+x2,r1+r2)
用途:恒等关系验证,证明两数之和等于第三个数,并且不透露具体取值。

基于二次剩余的比特承诺

  1. 初始化阶段:选择素数 q ≡ 3 m o d    4 q\equiv3\mod 4 q3mod4,群 G = Z q ∗ G=Z_q^* G=Zq中元素 y ≡ − 1 m o d    q y \equiv -1 \mod q y1modq,公开二元组 ( y , q ) (y,q) (y,q)
  2. 承诺阶段:承诺者随机选择 r ∈ Z q r \in Z_q rZq,计算声明 x ∈ { 0 , 1 } x \in \{0,1\} x{0,1}的承诺 C o m ( x , r ) : = y x r 2 m o d    q Com(x,r) := y^xr^2 \mod q Com(x,r):=yxr2modq,发送承诺 c c c给接收者
  3. 打开阶段:承诺者解承诺 D e c o m ( c ) : = ( x , r ) Decom(c):= (x,r) Decom(c):=(x,r),公开声明 x x x和随机数 r r r,接收者判断 c = y x r 2 m o d    q c=y^xr^2 \mod q c=yxr2modq是否满足

由于 q ≡ 3 m o d    4 q\equiv3\mod 4 q3mod4,所以Legendre符号满足 ( − 1 q ) = − 1 ({-1 \over q})=-1 (q1)=1,因此 x = 0 x=0 x=0当仅当 c = C o m ( x , r ) ∈ Q R q = { c ∈ Z q ∗ ∣ ∃ r ∈ Z q ∗ , r ≡ c 2 m o d    q } c=Com(x,r) \in QR_q=\{c\in Z_q^*|\exist r \in Z_q^*,r \equiv c^2 \mod q\} c=Com(x,r)QRq={cZqrZq,rc2modq},这是NP问题。

加法同态性质:
C o m ( x 1 , r 1 ) ⋅ C o m ( x 2 , r 2 ) ≡ y x 1 + x 2 ( r 1 r 2 ) 2 ≡ C o m ( x 1 ⊕ x 2 , r 1 r 2 ) Com(x_1,r_1)\cdot Com(x_2,r_2) \equiv y^{x_1+x_2}(r_1r_2)^2 \equiv Com(x_1\oplus x_2,r_1r_2) Com(x1,r1)Com(x2,r2)yx1+x2(r1r2)2Com(x1x2,r1r2)
用途:双方协同掷硬币,硬币正反面取决于异或值。

例子

电子游戏“砸金蛋”:一共有 10 10 10个蛋,其中一个是“金蛋”(可以孵化出小恐龙),其他的都是“银蛋”(只能孵化出小鸡)。玩家选择一个蛋打开,如何让玩家相信是自己没砸中“金蛋”呢?
我们简单地可以给玩家放一段小鸡破壳而出的动画!(开个玩笑)

实际步骤如下:

  1. 系统随机生成“金蛋”位置,并对 10 10 10个蛋做编码,比如码字 m = 0 b 0010000000 m=0b0010000000 m=0b0010000000表示第三个蛋实际上是“金蛋”
  2. 系统将 m m m用随机数 r r r做承诺, c ← C o m ( m , r ) c \leftarrow Com(m,r) cCom(m,r),发送给玩家
  3. 玩家选择一个蛋打开,比如码字 m ′ = 0 b 0000100000 m'=0b0000100000 m=0b0000100000表示玩家选择第五个蛋
  4. 系统做解承诺, D e c o m ( c ) → m , r Decom(c) \rightarrow m,r Decom(c)m,r,发送给玩家
  5. 玩家验证 c = C o m ( m , r ) c = Com(m,r) c=Com(m,r),并比较 m , m ′ m,m' m,m获知自己是否砸开了“金蛋”

这里,承诺的作用是:1. 系统在不知道玩家的选择之前已经生成了“金蛋”位置,即使之后获得了玩家的选择信息,系统再无法更改已有的“金蛋”位置。2. 玩家虽然知道承诺值,但无法获知“金蛋”位置的任何信息,也就只能随机选择一个蛋。即:“金蛋”确实存在,且系统生成的“金蛋”位置与玩家的选择相独立,这是公平的游戏。

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值