本文主要介绍对于BLS数字签名机制存在的模拟成功率低的问题而提出的改进算法BLS+和BLS#。
1.BLS+数字签名机制
1.1具体构造
①初始化(同BLS)
②密钥产生(同BLS)
③签名
Sign(sk,params,m):
(c随机取0或者1的值,后面挑战者猜测会用到这里先不展开)
输出,其中
(m是待签名的消息)
④验证
Verify(pk,m,δ):
若则接受该签名,否则拒绝
签名合法性验证如下
1.2BLS+的安全性证明
安全性游戏的构造也和BLS的思路大致相同,具体如下:
(1)系统设置
随机预言机:
挑战者C设置公钥pk=h= 私钥sk=a
将公开参数params=( ,
,g,p,e,H) 和pk给敌手A
(2)询问
挑战者C会维护一个初始为空的哈希列表记录相应的询问和应答。
敌手A可适应性地进行多项式有界次的询问。
敌手可以进行如下两种询问:
①H预言机询问:
敌手A可以提交对消息(敌手的
是随机选取的)的哈希询问,若哈希列表中存在关于该消息的记录
则挑战者C返回
的给敌手A,否则挑战者C随机选取
和
并设置
最后,挑战者C将返回给敌手,并且添加该记录在哈希列表中。
分析这个哈希映射的设置可知当时设置的值嵌入了
也就是CDH问题,那么可以看做此时挑战者C猜测敌手A将要伪造该消息的签名。
②签名询问:
敌手A可以提交关于消息的签名询问,其相应的哈希列表元组为
挑战者C计算
可以看出当时挑战者C使用
=1对应的哈希值生成签名,
当时挑战者C使用
=0对应的哈希值生成签名应答,易可证这两种情况的签名都是有效的,在这里就不做证明了。
注意:这里的消息应该事先进行预言机询问过,并且这并未提及
的情况,因为挑战者C没有能力输出这种情况的签名,参考BLS的方案这种情况应该是直接终止。
(3)伪造
敌手A输出关于消息的伪造签名
,其中
未在签名询问中出现。
按照签名BLS+签名的构造可知
且其有相应的元组,若
≠
则挑战者C终止并输出“倒T”(终止的意思),因为这种情况未嵌入困难问题,挑战者不需要这个输出。
若=
则有
(其中w*=y*或w*=x*可根据c*来判断,c*=0时w*=x*,c*=1时w*=y*)
最后挑战者C输出作为CDH问题的解。
至此BLS+的安全性得证。
1.3BLS+的总结
比较BLS数字签名机制BLS+数字签名机制模拟成功的概率提高了1/2也就是xi=ci的时候成功。但是仍然存在不足就是证明过程中纯在挑战者终止的可能性,为此提出了BLS#数字签名机制。
2.BLS#数字签名机制
2.1具体构造
①初始化(同BLS)
②密钥产生(同BLS)
③签名
Sign(sk,params,m):
(就是这里不同,这里去的是Zp域内的数,BLS+中c取的是(0,1))
输出,其中
④验证
Verify(pk,m,δ):
若则接受该签名,否则拒绝(签名合法性验证类似BLS+)
2.2BLS#的安全性证明
(1)系统设置
随机预言机:
挑战者C设置公钥pk=h= 私钥sk=a
将公开参数params=( ,
,g,p,e,H) 和pk给敌手A
(2)询问
挑战者C会维护一个初始为空的哈希列表记录相应的询问和应答。
敌手A可适应性地进行多项式有界次的询问。
①H预言机询问
对于敌手A提交的的关于消息(m,r)(由敌手A生成)的哈希提问,若存在对应的记录(m,r,z,H(m,r),*)则挑战者直接返回H(m,r)。
否则挑战者C随机选取计算
并且返回相应的H(m,r)给敌手A,并且添加相应的记录(m,r,z,H(m,r),A)倒哈希列表中(在H预言机询问中返回的哈希映射都嵌入了CDH问题)。
哈希列表中的记录格式为(A和B用来区分是否嵌入CDH问题A是嵌入CDH问题的记录,反之B则没有)
②签名询问
敌手A第i次提交关于消息m的签名询问,若哈希列表中存在相应的元组 ,则挑战者C使用相应的值
生成对应的签名。
否则,挑战者C随机选取且模糊元组
使其在哈希列表中不存在。
并且添加到其中
=
哈希列表(要返回真的签名就要将嵌入的b给去掉)。
此外列表还使用了记录相应的询问应答消息
。
挑战者C返回,并且在
记录。
签名合法性易证。
这整个过程都没有终止的情况,嵌入的CDH问题只在H预言机询问中出现,签名询问过程中只会返回剔除CDH问题的真实签名。
③伪造
敌手A输出关于消息m的伪造签名,若该消息未在签名询问中出现则未被
记录,自然此时的该消息对应的哈希记录中最后一位应该为A,那么该签名就是挑战消息(嵌入CDH问题的消息)的伪造签名。
该签名是有效的则有
那么有=
挑战者C即可输出作为CDH问题的解。故BLS#的安全性得证。
2.3BLS#的总结
是敌手A对H预言机询问的总数,p是初始化中选取的域的大小,相关参数都是随机生成的,而哈希询问共取出
个数,所以签名询问中随机选取的随机数和哈希查询中所使用的随机数都不同的概率是1-
。(由于p一般远大于q故一般不考虑qH中元素相同的情况)
签名查询的次数为,每次签名询问都与哈希询问中所使用的随机数都不相同的概率为
≈1(p一般远大于q),此时也就是:挑战者C模拟成功的概率≈1。(为什么是这样挑战者C模拟成功呢?我们考虑失败的情况:由于都是随机的可能恰好消息签名(m,δ*)=(m,δ)δ恰好是在签名询问中存在的,则此时就失败了,注意在BLS#中m一直是同一个)
内容主要参考书籍:
周彦伟 编著. 公钥密码学:算法构造及安全性证明[M]. 北京:科学出版社, 2024