PKCS#1:RSA加密 版本1.5( 六 )


3. 没有理由说MD4不是一个安全度很高的数字签名方案,但是由于MD4被设计的
非常快,所以它处于被成功攻击的危险中 。假如有人找出拥有同一个散列的两个
消息这样的冲突,那么这个散列算法可以被认为是打破的(broken) 。当冲突被发
现在仅有两个散列循环[Mer90][dBB92]的MD4的变体中,并没有冲突出现在有三
个散列循环的MD4中 。在进一步的研究后,我们可以认为MD4有很高的安全性 。
MD5有四个散列循环,比MD4更慢 。在MD4被研究前,它是被推荐使用的 。
在MD5内部的压缩功能[dBB93]中的假冲突并没有任何实际的安全影响 。
MD2是三者中最慢的一个,它有最保守的设计,没有任何对MD2的攻击被公布
出来 。
10.1.3RSA加密
正如在第7章中描述的数据D被签名者的RSA私钥加密,生成一个8位字节串ED,
即被加密的数据 。其块标记为01(见8.1节) 。
10.1.48位字节串到位串的转换
被加密数据ED被转换成一个位串S,即签名 。具体来说,被加密数据的第一个字节
的第一位成为签名的第一个数据位,以此类推,直到被加密数据的最后一个字节的最后一位,
它将变成签名的最后一个数据位 。
注重:签名S的位长度是8的倍数 。
10.2验证过程
验证过程包括四个步骤:位串到字节串的转换,RSA解密,数据解码,消息散列和比
较 。验证过程的输入是字节串M,即消息;签名者的公钥;位串S,即签名 。其输出是验证
成功或失败的标记号 。
10.2.1位串到字节串的转换
签名S被转换成字节串ED,即被加密的数据 。具体来说,假设S的位长度是8的倍
数,S的第一位将变成字节串的第一个字节的第一位,以此类推,直到签名的最后一位变成
字节串的最后一个字节的最后一位 。
假如签名的位长度不是8的倍数,则是错误 。
10.2.2RSA解密
正如在第8章节中描述的使用签名者的公钥对被加密数据ED进行解密,得到字节串
D,即原始数据 。
假如在解密过程中恢复的块标记位不是01,则是错误的(见9.4节) 。
10.2.3数据解码
原始数据D将被BER解码为类型DigestInfo的ASN.1值,此值被分成消息散列MD
和消息散列算法标识符 。消息散列算法标识符决定了下一步所选的消息散列算法 。
假如消息散列算法标识符不是MD2,MD4或MD5消息散列算法,则为错误 。
10.2.4消息散列和比较
使用所选的消息散列算法对消息M进行散列,得到字节串MD`,即将进行比较的消
息散列 。假如MD`和MD相同,则表示验证成功,否则为失败 。
11、对象标识符
本文档定义了5个对象标识符:pkcs-1,rsaEncryption,md2WithRSAEncryption,
md4WithRSAEncryption和md5WithRSAEncryption 。
对象标识符pkcs-1等同于本篇文档 。
pkcs-1OBJECTIDENTIFIER::=
{iso(1)member-body(2)US(840)rsadsi(113549)
pkcs(1)1}
对象标识符rsaEncryption等同于定义在第7章节中的RSA公/私钥和定义在第8、9章
节中的RSA加/解密过程 。
rsaEncryptionOBJECTIDENTIFIER::={pkcs-11}
rsaEncryption对象标识符被用于AlgorithmIdentifier类型的algorithm域的一个值 。此
类型的parameters域有算法特定的语法ANYDEFINEDBYalgorithm,在rsaEncryption算法
中,其值为空 。
对象标识符md2WithRSAEncryption,md4WithRSAEncryption和
md5WithRSAEncryption各自表示定义在第10章节中的MD2withRSA,MD4withRSA和
MD5withRSA签名及验证过程 。
md2WithRSAEncryptionOBJECTIDENTIFIER::={pkcs-12}
md4WithRSAEncryptionOBJECTIDENTIFIER::={pkcs-13}

推荐阅读