安全性证明(二)改进的BLS数字签名机制

本文主要介绍对于BLS数字签名机制存在的模拟成功率低的问题而提出的改进算法BLS+和BLS#。

1.BLS+数字签名机制

1.1具体构造

        ①初始化(同BLS)

        ②密钥产生(同BLS)

        ③签名

         Sign(sk,params,m):

        c\leftarrow_R \{0,1\}(c随机取0或者1的值,后面挑战者猜测会用到这里先不展开)

        输出\delta =(\delta_1,\delta_2)=(c,H(m,c)^a),其中m\in \{0,1\}^*(m是待签名的消息)

        ④验证

        Verify(pk,m,δ):

        若e(\delta_2,g)=e(H(m,\delta_1),h)则接受该签名,否则拒绝

        签名合法性验证如下

        e(\delta_2,g)=e(H(m,c)^a,g)=e(H(m,c),g^a)=e(H(m,c),h)

        1.2BLS+的安全性证明

        安全性游戏的构造也和BLS的思路大致相同,具体如下:

(1)系统设置

        随机预言机:H: \{0,1\}*\rightarrow G_1

        挑战者C设置公钥pk=h=g^a 私钥sk=a

        将公开参数params=( G_1​  , G_2,g,p,e,H) 和pk给敌手A

(2)询问

        挑战者C会维护一个初始为空的哈希列表记录相应的询问和应答。

        敌手A可适应性地进行多项式有界次的询问。

        敌手可以进行如下两种询问:

        ①H预言机询问:

        敌手A可以提交对消息(m_i,c_i)(敌手的c_i是随机选取的)的哈希询问,若哈希列表中存在关于该消息的记录(m_i,x_i,y_i,z_i,H(m_i,0),H(m_i,1))则挑战者C返回H(m_i,c_i)的给敌手A,否则挑战者C随机选取y_i,z_i\leftarrow _R Z_px_i\leftarrow _R\{0,1\}并设置

                                        \begin{cases} &H(m_i,0)=g^{b+y_i},\, H(m_i,1)=g^{z_i}, \, x_i=0 \\ & H(m_i,0)=g^{y_i},\, H(m_i,1)=g^{b+z_i}, \, x_i=1 \end{cases}

        最后,挑战者C将返回H(m_i,c_i)给敌手,并且添加该记录在哈希列表中。

        分析这个哈希映射的设置可知当x_i=c_i时设置的值嵌入了g^b也就是CDH问题,那么可以看做此时挑战者C猜测敌手A将要伪造该消息的签名。

        ②签名询问:

        敌手A可以提交关于消息(m_i,c_i)的签名询问,其相应的哈希列表元组为       

                                        (m_i,x_i,y_i,z_i,H(m_i,0),H(m_i,1))                           

        挑战者C计算

                                       \delta_i=(c_i,H(m_i,c_i)^a)=\begin{cases} & (1,(g^a)^{z_i}),\,\, x_i=0 \\ & (0,(g^a)^{y_i}),\,\, x_i=1 \end{cases}

        可以看出当x_i=0时挑战者C使用c_i=1对应的哈希值生成签名,

        当x_i=1时挑战者C使用c_i=0对应的哈希值生成签名应答,易可证这两种情况的签名都是有效的,在这里就不做证明了。

        注意:这里的消息m_i应该事先进行预言机询问过,并且这并未提及x_i=c_i的情况,因为挑战者C没有能力输出这种情况的签名,参考BLS的方案这种情况应该是直接终止。

        (3)伪造

        敌手A输出关于消息m^*的伪造签名\delta^*,其中m^*未在签名询问中出现。

        按照签名BLS+签名的构造可知\delta^*=(\delta^*_1,\delta^*_2)=(c^*,H(m^*,c^*)^a) 

        且其有相应的元组(m^*,x^*,y^*,z^*,H(m^*,0),H(m^*,1)),若c^*x^*则挑战者C终止并输出“倒T”(终止的意思),因为这种情况未嵌入困难问题,挑战者不需要这个输出。

        若c^*=x^*则有\delta^*_2=H(m^*,c^*)^a=(g^{b+w^*})^a=g^{ab+aw^*}(其中w*=y*或w*=x*可根据c*来判断,c*=0时w*=x*,c*=1时w*=y*)

        最后挑战者C输出\frac{\delta^*_2}{(g^a)^{w^*}}=\frac{g^{ab+aw^*}}{g^{aw^*}}=g^{ab}作为CDH问题的解。

        至此BLS+的安全性得证。

        1.3BLS+的总结

        比较BLS数字签名机制BLS+数字签名机制模拟成功的概率提高了1/2也就是xi=ci的时候成功。但是仍然存在不足就是证明过程中纯在挑战者终止的可能性,为此提出了BLS#数字签名机制。

2.BLS#数字签名机制

2.1具体构造

        ①初始化(同BLS)

        ②密钥产生(同BLS)

        ③签名

         Sign(sk,params,m):

        r\leftarrow_R Z_p(就是这里不同,这里去的是Zp域内的数,BLS+中c取的是(0,1))

        输出\delta =(\delta_1,\delta_2)=(r,H(m,r)^a),其中m\in \{0,1\}^*

        ④验证

        Verify(pk,m,δ):

        若e(\delta_2,g)=e(H(m,\delta_1),h)则接受该签名,否则拒绝(签名合法性验证类似BLS+)

2.2BLS#的安全性证明

 (1)系统设置

        随机预言机:H: \{0,1\}*\rightarrow G_1

        挑战者C设置公钥pk=h=g^a 私钥sk=a

        将公开参数params=( G_1​  , G_2,g,p,e,H) 和pk给敌手A

(2)询问

        挑战者C会维护一个初始为空的哈希列表记录相应的询问和应答。

        敌手A可适应性地进行多项式有界次的询问。

        ①H预言机询问

        对于敌手A提交的的关于消息(m,r)(由敌手A生成)的哈希提问,若存在对应的记录(m,r,z,H(m,r),*)则挑战者直接返回H(m,r)。

        否则挑战者C随机选取z\leftarrow _RZ_p计算H(m,r)=g^{b+z}并且返回相应的H(m,r)给敌手A,并且添加相应的记录(m,r,z,H(m,r),A)倒哈希列表中(在H预言机询问中返回的哈希映射都嵌入了CDH问题)。

        哈希列表中的记录格式为(i,m,r_i,z_i,H(m,r_i),A\,or B)(A和B用来区分是否嵌入CDH问题A是嵌入CDH问题的记录,反之B则没有)

        ②签名询问

        敌手A第i次提交关于消息m的签名询问,若哈希列表中存在相应的元组        (m,r_i,y_i,H(m,r_i),B),则挑战者C使用相应的值H(m,r_i)生成对应的签名。

        否则,挑战者C随机选取r_i,y_i\leftarrow _R Z_p且模糊元组(m,r_i,*,*,A)使其在哈希列表中不存在。

        并且添加(m,r_i,y_i,H(m,r_i),B)到其中H(m,r_i)=g^{y_i}哈希列表(要返回真的签名就要将嵌入的b给去掉)。

        此外列表还使用了L_{sign}记录相应的询问应答消息(m,\delta_i)

        挑战者C返回\delta_i=(r,H(m,r_i)^a)=(r,(g^a)^{y_i}),并且在L_{sign}记录。          

签名合法性易证e(\delta_2,g)=(H(m,r_i)^a,g)=((H(m,r_i),g^a)=((H(m,r_i),h)

        这整个过程都没有终止的情况,嵌入的CDH问题只在H预言机询问中出现,签名询问过程中只会返回剔除CDH问题的真实签名。

        ③伪造

        敌手A输出关于消息m的伪造签名\delta^*,若该消息未在签名询问中出现则未被L_{sign}记录,自然此时的该消息对应的哈希记录中最后一位应该为A,那么该签名就是挑战消息(嵌入CDH问题的消息)的伪造签名。

        该签名是有效的则有\delta^*=(\delta^*_1,\delta^*_2)=(r^*,H(m,r^*)^a)

        那么有H(m,r^*)^a=g^{b+z^*}

        挑战者C即可输出\frac{\delta_2^*}{(g^a)^{z^*}}=\frac{g^{ab+az^*}}{g^{az^*}}=g^{ab}作为CDH问题的解。故BLS#的安全性得证。

 2.3BLS#的总结

        q_H是敌手A对H预言机询问的总数,p是初始化中选取的域的大小,相关参数都是随机生成的,而哈希询问共取出q_H个数,所以签名询问中随机选取的随机数和哈希查询中所使用的随机数都不同的概率是1-\frac{q_H}{p}。(由于p一般远大于q故一般不考虑qH中元素相同的情况)

       签名查询的次数为q_s,每次签名询问都与哈希询问中所使用的随机数都不相同的概率为(1-\frac{q_H}{p})^{q_s}≈1(p一般远大于q),此时也就是:挑战者C模拟成功的概率≈1。(为什么是这样挑战者C模拟成功呢?我们考虑失败的情况:由于都是随机的可能恰好消息签名(m,δ*)=(m,δ)δ恰好是在签名询问中存在的,则此时就失败了,注意在BLS#中m一直是同一个)

内容主要参考书籍:

        周彦伟 编著. 公钥密码学:算法构造及安全性证明[M]. 北京:科学出版社, 2024

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值