原文教材 与 参考资料:
Boneh Dan , Shoup Victor . A Graduate Course in Applied Cryptography[J].
该书项目地址(可以免费获取):http://toc.cryptobook.us/
博客为对该书的学习笔记,并非原创知识,仅帮助理解,整理思路。
13.3 Signatures from tradoor permutations: the full domain hash
给出一个根据陷门置换(trapdoor permutation)构造的数字签名协议通用方案,然后使用一个陷门置换的实例RSA来实例化一个数字签名协议。
此处有一点需要注意,我们是对明文消息M的哈希值进行数字签名,而签名采用的陷门置换函数的映射空间为X->Y. 所以哈希函数的映射空间应该符合M ->X. 故而定义,如果哈希函数的输出长度和陷门置换的输入长度相同则称之为Full Domain Hash (FDH),这是一个非常重要的性质。
下面给出一个宏观上使用FDH + TDP 构造数字签名方案的描述:
这里将哈希函数建模为一个随机谕言机,挑战者随机选择一个函数作为随机谕言机的实例,敌手可以在任意时刻请求随机谕言机的回复。
下面给出该方案的安全性定理描述:
该协议需要的组件:单向陷门置换 :X ; 哈希函数:M -> X ;
存在一个敌手A,对方案SFDH进行攻击,A可以进行至多Qro次随机谕言机询问和Qs次签名询问,那么存在一个敌手B可以调用A攻击单向陷门置换。
证明思路:
本方案的安全性证明依赖于一个引理,该引理在后续进行介绍,此处给出一个证明思路。如果敌手能够伪造一个数字签名,意味着敌手可以计算陷门置换的逆运算。考虑到H作为一个随机谕言机,那么对于一个随机值进行单向陷门置换的逆运算应当是困难的。并且,这里还不能处理这样的一个事实,即敌手在伪造之前可以获得任意消息的签名。
进一步,考虑H被建立为一个随机谕言机模型,这将有效的意味着敌手如果想要攻破该方案需要遵守下述的一个攻击游戏(用攻击游戏来抽象刻画敌手的攻击行为)。敌手可以看到多个消息的哈希值(即,敌手可以进行随机谕言机的访问),敌手可以请求一些消息哈希值的陷门原像(即,敌手可以进行签名请求),然后敌手输出至少一个没有请求过原像的哈希值的原像(即,输出伪造的数字签名)。可以看出敌手攻击该方案的优势不会比攻击一个单向陷门置换更容易,在通常情况下。这个事实将被在后文提到的引理13.5中在RO模型下使用“guessing argument”技巧被证明,进一步我们可以使用该引理证明上述定理13.3.
需要注意的点:
Unique signatures: 这个方案生成的数字签名是唯一的,给定一个公钥任何消息m都存在一个可以被验证的合法签名,意味着可以实现强不可伪造性。
The importance of hashing: 哈希函数在这个方案是至关重要的,如果没有哈希函数,那么在该方案中任意选择一个全域中的随机数r作为签名,然后直接输出m = F(PK,r). 此时,m就是一个合法签名的消息,整个过程没有使用私钥与签名算法。也不需要选择明文攻击的辅助,当然整个消息值m在这里其实就是一个随机值了可能不具备意义,但是的确合法。这足以证明哈希函数在该方案中的重要性,但是,我们只能在随机谕言机模型下证明该方案是安全的,不能在标准假设下证明。
13.3.1 Signatures based on the RSA trapdoor permutation
使用哈希全域置换实例化这样一个构造,称之为RSA full domain hash签名协议。由RSAgen()每次输出一对公私钥,然后对于每个公私钥需要一个哈希函数将M映射到公钥N模数上。这里存在一个问题,由通用构造来看,H的输出空间依赖于公钥的模数长度。因此,这里定义哈希函数的输出长度定义为:1~2^2l-2。 这覆盖了Zn空间的很大一部分范围。并要求,哈希函数的输出长度下界为四分之一N的长度,这对安全性证明是非常重要的。例如,N可能至少是2048比特长度的东西,那么H的输出也必须接近2048长度,不能简单的使用SHA256.
这里给出RSA-FDH实例方案的描述:
对于该RSA方案,需要注意的是RSAFDH签名实际上是一个签名很慢但是验证很快的数字签名算法,并且RSA的签名较长,不利于在受限制的条件下存储与使用。
在RSA-FDH系统中签名的重要性:
与上文提到的一样,如果在本系统中不使用Hash函数,那么任何人都可以获得一个伪造的签名,选择一个随机值作为签名,然后运行验证算法,将得到的运行结果作为消息m,尽管这个消息m是随机的可能并不具备意义。
利用RSA的随机自规约性可以发动更强的伪造签名攻击,敌手可以选择一个随机的消息m, 然后发动如下的攻击:
那么此时敌手输出的这个签名,并不是m`的签名,而是一个最开始选择消息m的合法签名,验证过程如下所示:
不过这种敌手这种将一个随机消息转化为一个选择消息的签名在盲签名技术中发挥了重要的作用。
RSA-FDH的安全性:在定理13.3中,我们看到其安全性描述(规约)实际上一种非常宽松的描述,其中询问次数是非常大的为Qro+Qs+1, 在后文利用RSA的随机自我规约性将会降低该系数达到大约Qs. 因为随机谕言机的请求Qro其实要远远大于签名次数的请求。一方面,随机谕言机请求就是运行H的过程,敌手可以线下自己计算,其运行次数完全取决于敌手自己的可利用资源。另一方面,每个签名请求要求参与者诚实的计算一个签名。下述的证明中将哈希虚函数H定义为从M映射到Y上的函数,并建模为随机谕言机,Y的长度这里要求大于等于四分之一的N长度(任何常数定义都可以未必是四分之一)。下面给出RSA-FDH的签名性定理:
关于定理13.4的证明,该书放到了下一节内容,因为其需要依赖一个引理。
13.4 Security analysis of full domain hash
13.4.1 Repeateed one-way functions: a useful lemma
这里的引理主要描述了这样一种概念,如果存在一个t-repeated one-way problem.这个问题描述如下文所述,给定一个t次的陷门原像查询,敌手依然不能攻破单向函数,注意这里和原来的单向陷门函数敌手那个假设不同,在那个假设中,敌手只进行陷门请求运算或者是否有原像的谕言机运算,并不会进行原像查询。
下面给出引理13.5 这引理指出上述攻击游戏等价与一个标准的单向函数攻击,也就是说,攻击上述游戏不会比求单向函数的逆更容易。
证明:
证明方法采用一个“guessing argument”技术,如果存在一个A敌手能够赢得上述游戏13.3那么,可以使用敌手A构造一个敌手B赢得标准的单向函数求逆的游戏。
所以B扮演的是一个A的挑战者,亦是标准单向函数的敌手,B选择一个挑战请求*,然后调用A去获得该挑战请求的原像。B做的第一件事就是猜测,A最终会在何时选择这个挑战请求*作为目标。B准备t个函数值,其中t-1个是依据单向函数计算出来的,只有一个是挑战请求(可看做是用OW-challenger处获取的),但是B并不知道敌手A最终选择挑战请求的下标是多少,所以B只能猜测一个下标,然后把挑战请求*放入到准备好的t-1个函数值中,如果B的猜测正确,那么模拟就是完备的B回复了所有A的请求,最终A输出B想要知道挑战请求的原像。
给出攻击游戏13.3的形式化描述:
由此,给出Game 0, 其描述的如同攻击游戏13.3中的一样,敌手最终输出某一个函数的原像。给出Game 1, 与Game 0没有太大区别,除了这次是挑战者随机选择嵌入挑战询问实例值。敌手在Game 1中赢得游戏的与在0中一样,输出的下标必须和B设置的一样。这两个游戏是完全一样的,除了修改了游戏获胜的条件。我们得到下述表达式:
显然,B可以在Game 1中扮演一个OW敌手,所以 OWadv[B,f] = Pr[W1]. Pr[v=w|Wo]的下界是1/t,故而Pr[w1] >= (1/t)*Pr[W0], 引理13.5不等式成立。
上述引理可直接应用到陷门函数,如果存在陷门置换在X,Y上,那该协议是单向的当且仅当有一函数f = F(pk,*)是单向的。
A tighter reduction for RSA:
对于一个通用的单向函数f, 实际上敌手可询问的次数还是非常宽的,如果敌手的优势是a, 那么敌手赢得t-ow游戏,那么用该引理构造一个攻击OW敌手的优势仅有a/t.
当f实例为一个RSA函数,我们可以获得一个更紧的规约使用RSA的随机自我规约属性。我们将系数t 替换为一个系数Q,Q是敌手的揭露请求,Q通常是远小于t的。给出一个修改的t-repeated RSA 攻击游戏如下:
最终证明t-RSA 问题等价与标准的RSA问题,并给出一个更小的系数e(自然对数约等于2.72)。
证明思路和上文说到的13.5是类似的,不过这里使用RSA的随机自规约属性,将挑战请求的随机版本放入在多个敌手A可以选择的位置。如果敌手能够避免请求这些被放入的挑战请求*,并且输出时,又能输出挑战请求的原像,那我们称为成功的模拟。通过增加嵌入的位置,敌手在挑战请求输出的时刻增加了,避免选择挑战请求的机会减少了。通过改进的挑战点抽样策略,我们可获得期望的最优概率。
证明:
B获得系统参数(公钥),企图获得某个挑战请求的e次根(e本质上单向陷门的私钥)。
B首先处理几个特殊的情形,如果挑战请求y*不在模数n的范围内。如果y*=0, 那么e次根为0,否则可以使用gcd算法得到n的素因子,并得到y*的e次根。所以到现在为止,我们假设y*是在Zn之内的,B使用A去计算y*的e次根如下图所示:
B选择t个随机数,并且发送给, 这些随机数,有的是带有困难挑战的y*, 有的是不带困难挑战的x^e. 至于那些随机数具备困难挑战,只跟B在构造这些数时掷硬币的结果有关。当B收到敌手A的反馈后,只需要把对象下标的x除去,就可得到y*的e次根。这里xi 是一定在Zn*内部的。
下面给出不等式13.7的证明:定义Game 0为攻击游戏13.4。然后修改Game0 为Game1, 因为Game 1中,随机的将给挑战放入了请求序列中,所以需要修改敌手A赢得游戏的条件,即为敌手必须不能够在原像询问中问到挑战请求的内容,且输出的解必须对应某一个挑战询问。那么,我们的到如下的表达式(每一个请求是否包括内容挑战y* 的概率为1/(Q+1),1是最终的那一次挑战):
容易得到下式:
B本质上仅仅只运行在Game 1中,两个游戏中所有的变量都是相同的。B如果在询问与输出阶段都不中断,那么B的模拟是完备的。由概率论与数理统计中的知识,我们得到断言如下:
进而得到:
定理13.3 的证明:
对于原始的SFDH协议存在一个敌手A,我们企图构建一个敌手B去攻破OW函数,这是我们的证明目标:
首先,我们对敌手A做一些简单的假设(或者说明确敌手的能力)。
(1)敌手A请求签名的消息,必须是之前在随机谕言机处请求过的。
(2)A输出一个消息的伪造签名,但是必须之前在随机谕言机处请求过的。
(3)A不能请求同样的随机谕言机两次,也就是说,所有的谕言机请求都是不同的。
如果敌手A不能满足上述性质,我们可以总是转换敌手A为A1,通过增加随机谕言机的请求至多到Qs+1。(考虑到首先定义的原敌手A,其所有行为都必须询问过随机谕言机,那么就不存在在没有询问随机谕言机的情况下,直接选择消息进行签名询问的情况,也不存在对一个消息进行多次签名询问的情况,也不存在没有进行随机谕言机请求而进行伪造签名的情况。)
如果一个敌手A不满足上述条件,我们可以将该敌手转换成为一个敌手A`, 通过增加访问谕言机次数的方式,最多增加Qs + 1次随机谕言机询问,保证A `能满足A的要求。所以,到目前为止,我们定义一个敌手A`能够满足上述三个条件,但是其要进行t = Qro + Qs +1次随机谕言机询问,其攻击RSA-DFH的优势与敌手A相同。我们可以进一步通过A`构造一个敌手B,B可以攻击t-OW 问题,并且A`将以相同的优势攻击成功签名协议,根据引理13.5 我们可以立即得到定理13.3的证明,这里我们再关注一下敌手B`的运行过程,敌手B`从TOW挑战者处获取一些系列的实例yi,用这些请求去回复敌手A的请求,当敌手A1请求签名时,可以保证已经进行过对应的随机谕言机询问,如果是随机谕言机请求,B1获得一个打开内容发送给A1,最后,当A1输出一个候选的伪造签名,那么也应当保障该消息进行过随机谕言机请求。B1输出该对应的请求下标和签名。