RSA数字签名的实现毕业论文 第3页


RSADP (K, c)
输入:K        RSA私钥,其中K采用以下形式中的一种:
—— 一对(n, d)
—— 一个五元组 (p, q, dP, dQ, qInv)和 一系列可能为空的三元组 (ri, di, ti), i = 3, …, u
                c        密文代表,是一个位于0 ~n – 1之间的整数
输出:                m        消息代表,是一个位于0 ~n – 1之间的整数
出错提示:“密文代表超出范围”
假设:                RSA 私钥K 有效
步骤:
(1)如果密文代表c 不在0 ~n – 1的范围之内, 则输出“密文代表超出范围”然后终止。
(2)消息代表m 按照以下步骤计算。
a.如果K采用第一种形式(n, d), 使m = cd mod n。
b.如果K采用第二种形式(p, q, dP, dQ, qInv)和 (ri, di, ti), 则按照以下步骤进行:
ⅰ.使m1 = cdP mod p ,m2 = cdQ mod q。
ⅱ.如果u > 2, 使 mi = cdi mod ri, i = 3, …, u。
ⅲ.使h = (m1 – m2) • qInv mod p。
ⅳ.使 m = m2 + q • h。
ⅴ.如果u > 2,使R = r1 , 令i = 3 然后循环做以下各步骤,直至i= u
①使R = R • ri–1
②使h = (mi – m) • ti (mod ri)
③使m = m + R • h
④使i=i+1
⑤输出m。
注释:如果保留了p和q的定义,步骤0可以写成单个循环。然而,为了与PKCS #1 v2.0兼容,前两个素数p和q与其它素数分开处理。
5.2  签名和验证原语
签名原语在私钥的控制下从消息代表产生一个签名代表,而验证原语是在对应公钥的控制下从签名代表恢复出消息代表。本篇文档定义的签名方案中使用了一对签名和验证原语,被描述为: RSASP1/RSAVP1。
这里定义的原语与IEEE 1363-2000中定义的IFSP-RSA1/IFVP-RSA1是一样的(所不同的是这里的原语增加了对多原语RSA的支持),而且与PKCS #1 v1.5兼容。
在每个原语中的主要数学操作是幂操作,这一点和0部分中的加密和解密原语一样。RSASP1和RSAVP1与RSADP和RSAEP除了输入和输出参数的名称不一样之外,其它各方面都一样;它们的区别在于它们是为不同的目的而编写的。
5.2.1  RSASP1
RSASP1 (K, m)
输入:K  RSA私钥, 这里K具有以下形式之一:
¬¬—— 一对(n, d)
—— 一个五元组(p, q, dP, dQ, qInv)和一系列可能为空的三元组(ri, di, ti), i = 3, …, u
m  消息代表,是一个位于0~ n – 1之间的整数
输出:s  签名代表,是一个位于0~ n – 1之间的整数
出错提示:“消息代表超出范围”
假设:        RSA 私钥K有效的
步骤:
(1)如果消息代表m 不在0 ~n – 1之间,输出“消息代表超出范围” 然后终止运算。
(2)签名代表s由以下步骤计算得出。
a.如果K采用第一种形式(n, d), 使s = md mod n。
b.如果K采用第二种形式(p, q, dP, dQ, qInv)和 (ri, di, ti),则按照以下步骤进行:
ⅰ使s1 = mdP mod p ,s2 = mdQ mod q。
ⅱ如果u  > 2,让si = mdi mod ri, i = 3, …, u。
让h = (s1 – s2) • qInv mod p.
让s = s2 + q • h.
ⅲ如果u  > 2, 让R = r1 ,i = 3 ,然后循环进行以下各步骤直至i = u
①让R = R • ri–1.
②让h = (si – s) • ti (mod ri).
③让s = s + R • h
④让i = i+1
(3)输出s。
注释:如果保留了p和q的定义,步骤0还可以写成单个循环。然而,为了与PKCS #1 v2.0兼容,前两个素数p和q与其它素数分开处理。
5.2.2  RSAVP1
RSAVP1 ((n, e), s)
输入:(n, e) RSA 公钥
s 签名代表, 是一个位于0~ n – 1之间的整数
输出:m 消息代表, 是一个位于0~ n – 1之间的整数
出错提示:“签名代表超出范围”
假设:        RSA 公钥(n, e) 有效
步骤:
(1)如果签名代表s 不在范围0 ~n – 1之间,,输出“签名代表超出范围”然后终止运算。
(2)让m = se mod n。
(3)输出m。

























6  方案概述
方案结合了密码原语和其它技术以获得特定的安全目标。在本篇文档种定义了两类方案:加密方案和带附属的签名方案。
本篇文档种定义的方案适用于有限的范围,它们的操作只是由几个使用RSA公钥或私钥处理数据的步骤构成,不包括获得密钥或者证实密钥的步骤。因此,一个典型的应用除了包括方案中的操作之外,还应包括密钥管理操作(通过该操作双方可以为一次方案操作选择RSA公钥和私钥)。这些具体的额外操作以及其它细节超出了本篇文档的讨论范围。
根据密码原语,方案操作规范假定输入满足一定的条件,特别是满足RSA公钥和私钥均有效。因此,如果密钥无效,则不规定设备行为。这种不规定行为的影响依赖于实际应用。声明密钥有效的包括通过申请明确密钥有效;在公钥基础架构内密钥的有效性;使密钥生成方承担使用有效密钥进行操作的责任。
一个大体上好的密码实现是将一对给定的RSA密钥对只用于一个方案。这样就避免使一个方案的漏洞连累其它方案的安全性,这一点对维持可证实的安全性可能是至关重要的。尽管RSAES-PKCS1-v1_5和RSASSA-PKCS1-v1_5一贯被结合在一起使用,且相互之间没有任何已知的不好的影响(实际上,这就是PKCS #1 v1.5介绍的方案),在新应用中不推崇这种结合使用一个RSA密钥对的做法。
为了说明在多个方案中使用一个RSA密钥对的风险,我们假定RSAES-OAEP和RSAES-PKCS1-v1_5中使用同一个RSA密钥对。尽管RSAES-OAEP自身具备抗攻击性,但对手可以利用RSAES-PKCS1-v1_5实现中的一个漏洞恢复出用两个方案中任何一个方案加密的消息。再举另外一个例子,假设RSASSA-PSS和 RSASSA-PKCS1-v1_5中使用同一个RSA密钥对。如果对RSASSA-PSS的安全坚固性没有考虑到签名可以由另一个方案生成的可能性,那么这种坚固性将不再充分。如果一个RSA密钥对被用于这里定义的方案中的任何一个,而且也被用于其它地方定义的方案,那么可能需要作出同样的考虑。









7  加密方案
就本篇文档而言,一个加密方案由一个加密操作和一个解密操作构成,其中加密操作使用接受方的RSA公钥把消息转化成密文,而解密操作使用接受方对应的RSA私钥将密文恢复成消息。
一个加密方案能用于各种应用中。一个典型的应用是密钥建立协议,在该协议的消息中包含将被秘密地从一方递送到另一方的密钥。举例来说,PKCS #7使用这种协议将一个内容的加密密钥从发送方递送到接收方;这里定义的加密方案将会是适合于上述情况的密钥加密算法。
在本篇文档中定义了一个加密方案:RSAES-OAEP。 RSAES-OAEP是新应用的推荐标准这里给出的加密方案遵循一般的模型,这个模型类似于在IEEE Std 1363-2000中使用到的模型,就是将加密和解密原语与针对加密的编码方法结合起来。这种加密运算对消息进行消息编码运算,以产生一个编码消息,然后将编码后的消息转换成一个整数消息代表。一个加密原语作用于这个消息代表从而产生密文。反之,解密运算将解密原语作用于密文,从而恢复出消息代表,然后将这个消息代表转换成一个以八位组串为形式的编码消息。一个消息解码操作作用于这个编码消息,从而恢复出消息并验证解密运算的正确性。
为了避免与这种方式相关的实现漏洞,在解码运算中会处理错误RSAES-OAEP的编码和解码运算嵌入在各自的加密方案规范中,而不是定义在单独的规范中。该方案与PKCS #1 v2.0中的相应方案兼容。
7.1  RSAES-OAEP
RSAES-OAEP将RSAEP 和RSADP原语(参见0和0部分)与EME-OAEP编码方法结合起来EME-OAEP基于Bellare 和Rogaway的最佳非对称加密scheme[1]。(OAEP代表“最佳非对称加密填充”)。它与在IEEE Std 1363-2000中定义的IFES方案兼容,在IFES中加密和解密原语是IFEP-RSA和IFDP-RSA,消息编码方法是EME-OAEP。RSAES-OAEP能够操作长度超过k – 2hLen – 2字节的消息,这里hLen是基础散列函数输出的长度,而k是接收方RSA合数模的以八位组为计量单位的长度。
假设计算eth roots modulo n是不可行的,且RSAES-OAEP中的掩模生成函数具有固有的属性;那么RSAES-OAEP语义上能抵抗适合的选择密文攻击。如果掩模生成函数被看作是一个黑盒子或者是一个随机的启示程序,那么在攻破RSAES-OAEP的难度能直接与使RSA函数反向的难度相关的意义上,这个保证是可证实的。
RSAES-OAEP加密和解密运算都将标签L作为输入。在PKCS #1的这个版本中,L是一个空串,这个标签的其它使用超出了本篇文档的范围。相关的ASN.1语法描述参见附录A.2.1。
通过散列函数和掩模生成函数的选择以确定RSAES-OAEP的参数。这一选择过程对给定的RSA密钥是固定不变的。在附录B中给出了建议的散列函数和掩模生成函数。
注释:近来的结果对澄清OAEP编码方式[1]的安全性[1]有帮助背景如下   所述。1994年,Bellare 和 Rogaway[1]引入了一个安全概念,他们表述为明文意识(PA94)。他们证明如果一个公钥加密原语(例如RSAEP)没有私钥就难以倒转,那么对应的基于OAEP的加密方案就是有明文意识的(in the random oracle model),大致的意思是对手在没有真正知道基础明文情况下是不能产生出合法的密文的。一个加密方案的明文意识与反密文选择攻击的方案的限制有密切联系。在这种攻击中,对手有机会发送询问给一个模仿解密原语的启示程序。使用这些询问的结果,对手尝试解密一个密文。
然而,存在两类密文选择攻击,而PA94只包含了针对其中一种攻击的安全性。不同之处在于对手在获得challenge密文之后,可以做些什么事情。在对手获得challenge密文后,indifferent攻击方案(CCA1所表示的)不允许向解密启示程序提出任何询问,而adaptive方案(CCA2中有表示)允许(除了解密启示程序在其被发布之后拒绝解密challenge密文的情况)。1998年Bellare 和Rogaway与Desai 和Pointcheval一道提出了一个新的更健壮的明文意识观念(PA98),它提出了针对CCA2的安全性。
总的说来,存在两个错误观念的潜在来源:PA94和 PA98是相同的概念; 或者CCA1 和CCA2 是相同的概念。任何一个假设都会得出一个结论,那就是Bellare-Rogaway的论文提出针对CCA2的OAEP安全性,而实际上它并没有提出针对CCA2的OAEP安全性。1 OAEP从未被证明对CCA2来说是安全的;事实上,Victor Shoup已经证实这种验证并不存在于一般的情况中。简单地说,Shoup指出CCA2方案中的对手知道如何使加密原语部分反向,但不知道如何使它完全反向,这个对手也能攻破这个方案。举例来说,一个人可以想象如果攻击者知道如何恢复用RSAEP加密的一个随机整数的所有子节而不是前20个字节,那么她就能够攻破RSAES-OAEP。这样的攻击者不需要将RSAEP完全反向,因为在她的攻击过程中不需要使用前20个八位组。
同样地,RSAES-OAEP对于CCA2来说是安全的,就在Shoup宣布他的结果之后不久,这一点就被Fujisaki、 Okamoto、 Pointcheval和 Stern证明了。假如能知道pre-image的足够大的一部分,使用聪明的网点缩小技术(clever lattice reduction techniques),他们能设法说明如何使RSAEP完全反向。这个观察结合了一个验证,那就是如果基础的加密原语难以被部分反向,那么OAEP对CCA2来说是安全的;这个观察填补了Bellare和Rogaway所证明的关于RSAES-OAEP的事实和某人认为他们证实的事实之间的缺口。我们就这样被RSAEP的公开弱点挽救了(也就是说,全部反向可以从部分反向中演绎出来),这有些自相矛盾。
然而不幸的是,降低安全对于具体的参数并不有效。尽管这个验证成功地将RSAES-OAEP的CCA2安全性的对手A与反向RSA的算法I关联起来,I成功的概率仅近似于2 / 218,其中是成功的概率。另外,I的运行时间大约是t2,其中t是对手的操作时间。结果是我们不能排除攻击RSAES-OAEP比用具体参数反向RSA容易得多的可能性。安全验证的存在仍然提供了一些保证,那就是RSAES-OAEP结构比ad hoc结构(诸如RSAES-PKCS1-v1_5)合理。
Hybrid加密方案基于RSA-KEM密钥封装范例,并提供严密的安全性验证,能直接应用于具体参数;PKCS #1的后续版本可以定义基于这个范例的方案。
  PKCS #1 v2.0引用了[1]并且声称“在没有明确明文意识或选择密文攻击类型的情况下,选择密文攻击对于有明文意识的加密方案,像RSAES-OAEP,来说是无效的”。
2 在中,反向成功的概率是2 / 4。其它因子1 / 216 取决于编码消息EM的开头八个固定的零比特中考虑的OAEP变化中没有出现。(我必须两次应用A来反向RSA,且每个应用程序与因子1 / 28相应)
7.1.1  加密运算

上一页  [1] [2] [3] [4] [5] [6] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有