原文教材 与 参考资料:
Boneh Dan , Shoup Victor . A Graduate Course in Applied Cryptography[J].
该书项目地址(可以免费获取):http://toc.cryptobook.us/
博客为对该书的学习笔记,并非原创知识,仅帮助理解,整理思路。
关于第15章的一些说明:
由于第15章后期包括的 :高级椭圆曲线密码学主题 与 函数加密主题 理解难度较大,后续将安排单独的博客篇幅予以讨论学习。椭圆曲线基础部分,包括所有BLS方案的学习与讨论,暂时结束,后边会直接进入 第17章 SIGMA协议 与 第18章 零知识证明的部分。
15.5.1 Signature aggregation
BLS 签名方案还有一个重要属性为签名聚合属性 aggregation:
即为将不同密钥签名的不同消息聚合起来成为一个聚合签名,短聚合签名使得验证者相信所有的输入的消息都已经被正确的签名。下面给出一个支持聚合签名性质的签名协议SA定义,相比标准的数字签名协议,带有聚合属性的数字签名需要额外的两个算法,签名聚合算法A,还有聚合签名的验证算法VA:
算法A的输出的聚合签名长度应该和一个单独消息的签名长度一样长,聚合要求即使在不掌握私钥的知识和不与签名者进一步交互的情况下任何人使用公钥向量和签名向量都能聚合产生。特别是,聚合可以在各部分签名生成很长一段时间以后完成,对时效性无特殊要求。例如,CA对证书链的签名满足聚合属性。
BLS签名的聚合属性:
BLS签名的聚合验证属性:
需要注意的是:
(1)聚合签名具有可除性。
(2)多次聚合同一个签名,不会对聚合签名的安全性产生影响。
(3)对同一个消息m进行签名,可以先聚合公钥,然后验证,速度较快。
The rogue public key attack:
基本的BLS聚合签名方案是不安全的,其无法抵抗rogue public key攻击,这个攻击方式
是这样的,敌手不掌握用户的私钥,但是却能生成一个用户参与的聚合签名,并且能够通过验证,
Rogue Public Key 攻击描述如下:
显然,敌手A不掌握用户B的私钥,但是却可以构造一个可通过A和B聚合公钥验证的聚合签名,该方案的不安全核心因素是签名消息m和公钥没有一个绑定与认定关系。即为,公钥很可能会被约掉而不被发现。
所以,应当给与聚合性质一个安全的定义:亦可以这样理解,存在一个n元素的公钥向量,其中敌手能够掌握n-1个公钥(意味着可以获得该公钥对应的私钥),然后敌手构造一个合法的聚合签名(能够通过所有n个公钥验证)。在敌手输出伪造签名之前,敌手可以就向不掌握的那个公钥对应参与者进行签名询问。
聚合签名安全模型如下所示:
15.5.2~3 Secure BLS aggregation
为了抵抗上述攻击,需要对BLS方案进行一定的改造,有两种构造方法可以防止这种攻击:
第一种:
使用一个哈希函数,每次签名将公钥和待签名的消息绑定,方法如下:
聚合算法与原始BLS方案相同,将所有得到的签名相乘即可。验证算法和聚合验证算法,与原始BLS类似,只要替换哈希函数即可,如下:
第二种:
由于第一种方法在M都相等时,由于每个签名内容是不同公钥和消息哈希得到的,那么将失去快速的批量验证这个性质。为了该方案能够保持在消息相同下,具备快速聚合验证的属性,并且要抵抗rogue public key 攻击,所以可以要求参与者在每次签名时,同步公开一个持有密钥对的证明。每次签名验证前,首先由验证者验证公钥的有效性,然后再进行签名的验证,防止恶意公钥攻击。这里需要一个哈希函数能够将G1群元素映射到G0群元素上,方案描述如下:
仔细观察上述valid proofs, 这验证方式与之前的BLS和BLS+是不同的,这里首先要进行一个公钥有效性的验证,这就是该哈希函数为什么要映射到G0上的原因。这里的证明其实是一个变相的BLS签名实例。这里生成证明的哈希函数应该要和生成签名的哈希函数不同,这两处使用的哈希函数都可以从SHA256派生,但是不能使用完全相同的构造,不然会导致不安全情况出现。另外,这里公钥的证明和被签名的消息完全是不相关的(不依赖的),所以公钥所有者的证明只需要验证一次就好。对于第二种构造,特别是明文消息相同的场景下,验证是非常高效的。还有,其实这对于不同公钥的证明也是可以聚合的(原理和BLS一样)。
总体来看,如果有需要对不同消息进行签名的需求或者更新公钥的要求,那么第一种构造是合适的。如果签名经常是多用户对同样的消息进行签名,且公钥都是提前公布的,那么构造二是合适的。
15.5.4 Signature schemes secure without random oracles
在之前的章节中,我们讨论的都是pairing-based signatures, 并且在随机谕言机模型下证明了该方案的安全性,本节主要讨论这样一种构造方法:方案的安全性不依赖于随机谕言机,特别是,当签名消息非常短时,这里不在需要签名之前和验证之前再进行哈希计算,在一个具体的应用中,这是一个非常有用的属性。
这里有非常多的方法基于co-CDH以及相关的假设构造签名方案,在不使用随机谕言机的情况下(标准模型)。这里给出两个构造方式,依赖于一个比Co-CDH假设更强的假设(这里的更强意味着限制更多,并非安全性更强,反而意味着安全性稍弱了)。但是其安全性证明确是短而直接的。第一个构造要求签名者使用一个PRF,第二个构造无需使用对称原语当签名一个短消息时。
不失一般性,我们还是使用一个基本的非对称群基本群工具,令PRF是一个K*Zq到Zq上的映射,具体的方案内容描述如下图所述:
G密钥生成算法:
公钥由两个部分组成,一个是GT群元素,一个是G1群元素并且是部分公钥GT元素的生成元素,自己本身也是部分公钥。
私钥为三个元素,两个是公钥所隐藏的秘密信息,一个PRF的seed。
S签名生成算法:
对于一个消息m的签名如下:
V签名验证算法:
验证算法如下:
PRF算法被使用来确保对于相同的明文消息,一定返回相同的签名,如果对同一个消息发起多次签名请求也要给出一样的结果。这是为了签名的安全证明,也是为了协议的安全。显然,验证阶段是不需要重新运算PRF的。为了证明安全性,这里给出一个假设被称为d-CDH的假设,或者给出更强的CDH假设,这里的CDH假设比原本的CDH更强(限制更多)。
d-CDH 攻击游戏如下:
这个假设是合法的,只要d远小于q(群的阶数),存在一些q会使得不安全。在本方案中,d是与敌手发起数字签名次数有关的,这是一个相对小的数值,例如,小于2^40。改进的方式为选择一个更大的q,或者修改对运算e。这个d-CDH假设以及它的变体被广泛应用在密码学构造中,下面的等式是非常重要的。
显然,回忆一下之前提到d-CDH假设,我们只要将以g0为生成元的所有元素乘起来,就可以计算P(X)的过程。下面给出该签名方案的证明,这里d = Q +1, Q是敌手访问签名的次数。
给出安全性定理如下:
算法B1将使用A来攻破(Q+1)-CDH假设,为了实现这个过程,B1作为模拟器必须能够回复A的所有签名询问,B1必须能够知道大多数消息空间中消息对应的签名,但是对于A将要输出伪造的消息m, B1是不能知道该消息签名的,因为B1这里其实有一个该消息的签名(从CDH困难问题实例得到)。
这里通过以下的方法克服这个障碍,B1给与A一个确定的公钥,B1知道每一个消息对应的合法签名结果,这些签名将会被用来作为敌手A的签名询问结果。如果敌手重复询问同一个签名在同一个消息m上,B1每次将会返回同样的签名结果,因为B1只知道每个m的唯一合法签名。这就是使用PRF的原因,PRF在这里直接使得签名变成了唯一的签名。最终,A输出其伪造的签名。
我们将会以压倒性的概率看到,这个伪造的签名在m上是与B1知道的签名是不同的。因此B1学到了一个针对m消息的新签名值。我们将会发现这个新的伪造签名可以使得我们解决(Q+1)-CDH困难问题实例。
证明过程:
在证明过程中,我们将会使用一个随机函数F替换PRF。现在构造一个敌手B1,B1作为敌手A的挑战者企图解决(Q+1)CDH实例。B1具备如下输入(从B1自己的CDH挑战者处获得):
如果能找到,B1将获得该Q+1-CDH的一个解。
B1预先准备如下的数据:
(1)B1选择衣蛾随机的多项式,阶数为Q+1.
系数是随机选择的:
(2)B1将P(X)其实是作为类似原版BLS方案中对签名模拟的角色,
B1计算:作为困难问题的嵌入。
然后设置公钥如下:
B1开始模拟:
B1将上述公钥发送给敌手A,B1回复敌手的一系列签名询问,签名询问回复如下:
显然敌手输出的伪造签名是合法的:
这里有一个问题需要进一步讨论,我们使用PRF后,在这里将PRF替换为了一个随机函数,我们必须证明rj 在 Zq上的确是随机与独立的从敌手的视图来看。由于Q阶多项式P是一个随机的,那么其实对于敌手而言rj = P(m) 就是独立的,在Q+2阶的多项式依然成立。挑战者给与敌手一对公钥(a,P(a)), 在多项式P上,并且多个签名询问都是在(mi,P(mi))上。因为敌手最多进行Q次签名询问,所以敌手至多可以看到Q+1个点在P上,所有这些点在Zq上都是独立的。
最终,敌手输出一个伪造签名(r,w),如果P(m) = r, 那么B1中断,B1早已经掌握了该签名。B1中断的概率为1/q(出现这种情况的可能就是敌手从Zq中随机选择一个r, 正好和p(m)相等,所以为1/q)。
这里有三种情况:
(1)m是签名询问过的消息,那么敌手输出的r和B1计算的rj = P(m) 不相等,否则这是一个不合法的签名。[攻破PRF 对应 BPRFadv]
(2)如果m = , 那么敌手能够解决(Q+1)-CDH假设。[对应PCDHadv]
(3)如果m是没有询问过签名的消息,也不是挑战消息,那么该m不与任何的Q+1个消息相对应,那么,P(m)必是Q+2阶上的点,从敌手的角度看依然是独立的,这意味着r = P(m)以最多1/q的概率成立,即随机选取一个值。[对应1/q]
故,
这里我们需要简单思考一下:
这个标准模型下,与RO相比而言,到底有什么不同?
RO:有Hash,由敌手来决定对哪次签名进行伪造,如果模拟成功,敌手将对困难问题实例进行运算,并输出困难问题实例的解,且挑战者不能回复挑战签名询问。只有一次真正的挑战询问。
SS:无Hash,敌手来决定对哪次签名进行伪造,挑战者可以回复敌手任意的请求,包括挑战的签名请求,如果敌手伪造成功,那么亦是针对困难问题的实例进行了攻击。
15.5.5 另一种标准模型下安全数字签名构造
下述方案不依赖对称原语PRF,方案描述如下: