数据块 。
假如有下列情况发生,则为错误:
? 需加密块不能被明白的解析(见8.1节的注重) 。
? 填充串PS少于8字节,或是和块标记BT不匹配 。
? 解密过程是一个公钥操作过程,块标记不能为00或01;或者解密过程是一个私
钥操作过程,块标记不能为02 。
10、签名算法
本章定义了3个基于被描述在第8、9章中的RSA加密过程的签名算法 。签名算法主
要被用于签署X.509/PEM证书,CRL,PKCS#6扩展证书,以及其他使用数字签名的对象,
例如X.401消息环 。算法并不被特意用来构建PKCS#7的数字签名 。第一个签名算法把MD2
散列算法和RSA结合起来(简称MD2withRSA);第二个签名算法把MD4散列算法和RSA
结合起来(简称MD4withRSA);第三个签名算法把MD5散列算法和RSA结合起来(简
称MD5withRSA) 。
本章节描述了两个算法的签名过程和验证过程 。所选的散列算法取决于签名算法,
MD2或MD5 。签名过程使用一个实体的私钥;而验证过程使用一个实体的公钥 。签名过程
把一个8位字节串(消息)转化成一个位串(签名);而验证过程检验一个位串(签名)是
否为一个8位字节串(消息)的签名 。
注重:被定义在此的签名算法和在PKCS#7中构建签名的方法(加密消息散列)之间
的仅有的不同是此处的签名用位串表示,这和X.509SIGNED宏是一致的 。在PKCS#7中
被加密的消息散列是8位字节串 。
10.1签名过程
签名过程包括4个步骤:消息散列,数据编码,RSA加密和8位字节串到位串的转换 。
签名过程的输入是一个8位字节串M,即消息;签名者的私人密钥 。其输出是一个位串S,
即签名 。
10.1.1消息散列
使用所选的消息散列算法来散列消息M,得到一个8位字节串MD,即消息散列 。
10.1.2数据编码
消息散列MD和消息散列算法标识符组成了以下描述的ASN.1类型DigestInfo的值,
此类型将通过BER编码来生成一个8位字节串D,即原始数据 。
DigestInfo::=SEQUENCE{
digestAlgorithmDigestAlgorithmIdentifier,
digestDigest}
DigestAlgorithmIdentifier::=AlgorithmIdentifier
Digest::=OCTETSTRING
类型DigestInfo的域有下列含义:
? digestAlgorithm表示用于散列的算法(以及相关参数) 。对应用程序来说,它标识
了所选的散列算法,MD2,MD4或MD5 。作为参考,以下是相关的对象标识符:
md2OBJECTIDENTIFIER::=
{iso(1)member-body(2)US(840)rsadsi(113549)
digestAlgorithm(2)2}md4OBJECTIDENTIFIER::=
{iso(1)member-body(2)US(840)rsadsi(113549)
digestAlgorithm(2)4}md5OBJECTIDENTIFIER::=
{iso(1)member-body(2)US(840)rsadsi(113549)
digestAlgorithm(2)5}
对这些对象标识符来说,散列算法的参数域是空 。
? digest是消息散列过程的结果,例如消息散列MD 。
注重:
1. DigestInfo值包含了一个消息散列算法标识符,用来限制由于使用消息散列算法
压缩数据而导致的破坏 。举例来说,假如攻击者能够找出带有给定的MD2消息
散列的消息,那么他就可以通过找出一个表面无害的带有相同MD2散列的消息,
并强迫签名者签署这个表面无害的消息,来伪造消息签名 。这种攻击方法只有在
使用MD2散列算法时才会成功 。假如DigestInfo值只包括消息散列,攻击者就能
攻击使用任何消息散列的签名者 。
2. 虽然使用SEQUENCE类型违反了在X.509SIGNED和SIGNATURE宏中的签名
是一个ENCRYPTEDOCTETSTRING的书面声明,但是正如I"Anson和Mitchell
在[IM90]中指出的,这样的书面阐明并不被要求 。
推荐阅读
- ESP CBC模式加密算法
- NULL加密算法及其在IPsec协议中的应用
- 联想z5s中为应用加密具体操作步骤
- vivox23幻彩版开启应用指纹加密
- Moboplayer怎么文件夹加密
- Next桌面教程-加密隐藏应用
- 在华为手机里给短信加密操作过程
- 快图浏览加密图片文件夹方法
- 联想z5pro中为应用加密具体操作步骤
- CAD图纸怎么加密 一个软件即可搞定
