📄 rfc2313.txt
字号:
组织:中国互动出版网(http://www.china-pub.com/)
RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
译者:徐孜骏(happygogo happygogo@sina.com)
译文发布时间:2001-7-14
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须
保留本文档的翻译及版权信息。
Network Working Group B. Kaliski
Request for Comments: 2313 RSA Laboratories East
Category: Informational March 1998
PKCS#1:RSA加密 版本1.5
本备忘录的状态
本备忘录为Internet社区提供了信息。它没有讲述任何一种Internet标准.本备忘录的发
布不受任何限制。
版权声明
Copyright (C) The Internet Society (1998). 保留所有权利。
略读
此篇文章描述了如何使用RSA公钥密码体系加密数据。
目录
1、范围 2
2、参考 2
3、定义 4
4、标志和缩写 5
5、总的概述 5
6、密钥生成 5
7、密钥语法 6
7.1公钥语法 6
7.2私钥语法 6
8、加密过程 7
8.1加密块格式化 7
8.2 8位字节串到整数的转换 8
8.3 RSA计算 8
8.4 整数到字节串的转换 9
9、解密过程 9
9.1 字节串到整数的转换 9
9.2 RSA计算 9
9.3 整数到字节串的转换 9
9.4 需加密块解析 10
10、签名算法 10
10.1 签名过程 10
10.2 验证过程 12
11、对象标识符 13
安全考虑 14
修订版记录 14
鸣谢 14
作者地址 14
版权声明 15
1、范围
此篇文档描述了如何使用RSA公钥密码体系加密数据。这将被用作数字签名和数字信
封,且在PKCS#7中有描述:
? 数字签名:签名内容首先被消息散列算法(如MD5)缩减成一个消息散列,然后
使用签名者的RSA私钥加密含有消息散列的字符串。原文和被加密的消息散列一
起组成符合PKCS #7中语法的数字签名。这种应用和PEM是兼容的。
? 数字信封:首先将被加信封的内容使用一个内容加密算法(例如DES)的内容加
密密钥加密,然后使用收件人的RSA公钥加密内容加密密钥。那个被加密内容和
被加密的密钥一起组成符合PKCS #7中语法的数字信封。这种应用和PEM是兼
容的。
此篇文档还描述了有关一个RSA公钥和私钥的语法。公钥语法被用于证书;私钥语法
被用于PKCS#8中的私钥信息。公钥语法在X.509和PEM是完全相同的。这样X.509/PEM
RSA密钥能被用于此篇文当中。
此篇文档还定义了三个签名算法,它们被用于签署X.509/PEM证书和CRL,PKCS#6
扩展证书,和其他使用数字签名的对象(例如X.401消息标记)。
有关消息散列和内容加密算法的细节并不属于此篇文档的范围,并且有关被文档要求
的假随机位的来源也不在此文档范围中。
2、参考
FIPS PUB 46-1 National Bureau of Standards. FIPS PUB 46-1:
Data Encryption Standard. January 1988.
PKCS #6 RSA Laboratories. PKCS #6: Extended-Certificate
Syntax. Version 1.5, November 1993.
PKCS #7 RSA Laboratories. PKCS #7: Cryptographic Message
Syntax. Version 1.5, November 1993.
PKCS #8 RSA Laboratories. PKCS #8: Private-Key Information
Syntax. Version 1.2, November 1993.
RFC 1319 Kaliski, B., "The MD2 Message-Digest
Algorithm," RFC 1319, April 1992.
RFC 1320 Rivest, R., "The MD4 Message-Digest
Algorithm," RFC 1320, April 1992.
RFC 1321 Rivest, R., "The MD5 Message-Digest
Algorithm," RFC 1321, April 1992.
RFC 1423 Balenson, D., "Privacy Enhancement for
Internet Electronic Mail: Part III: Algorithms,
Modes, and Identifiers," RFC 1423, February 1993.
X.208 CCITT. Recommendation X.208: Specification of
Abstract Syntax Notation One (ASN.1). 1988.
X.209 CCITT. Recommendation X.209: Specification of
Basic Encoding Rules for Abstract Syntax Notation
One (ASN.1). 1988.
X.411 CCITT. Recommendation X.411: Message Handling
Systems: Message Transfer System: Abstract Service
Definition and Procedures.1988.
X.509 CCITT. Recommendation X.509: The Directory--
Authentication Framework. 1988.
[dBB92] B. den Boer and A. Bosselaers. An attack on the
last two rounds of MD4. In J. Feigenbaum, editor,
Advances in Cryptology---CRYPTO '91 Proceedings,
volume 576 of Lecture Notes in Computer Science,
pages 194-203. Springer-Verlag, New York, 1992.
[dBB93] B. den Boer and A. Bosselaers. Collisions for the
compression function of MD5. Presented at
EUROCRYPT '93 (Lofthus, Norway, May 24-27, 1993).
[DO86] Y. Desmedt and A.M. Odlyzko. A chosen text attack
on the RSA cryptosystem and some discrete
logarithm schemes. In H.C. Williams, editor,
Advances in Cryptology---CRYPTO '85 Proceedings,
volume 218 of Lecture Notes in Computer Science,
pages 516-521. Springer-Verlag, New York, 1986.
[Has88] Johan Hastad. Solving simultaneous modular
equations. SIAM Journal on Computing,
17(2):336-341, April 1988.
[IM90] Colin I'Anson and Chris Mitchell. Security defects
in CCITT Recommendation X.509--The directory
authentication framework. Computer Communications
Review, :30-34, April 1990.
[Mer90] R.C. Merkle. Note on MD4. Unpublished manuscript,
1990.
[Mil76] G.L. Miller. Riemann's hypothesis and tests for
primality. Journal of Computer and Systems
Sciences, 13(3):300-307, 1976.
[QC82] J.-J. Quisquater and C. Couvreur. Fast
decipherment algorithm for RSA public-key
cryptosystem. Electronics Letters, 18(21):905-907,
October 1982.
[RSA78] R.L. Rivest, A. Shamir, and L. Adleman. A method
for obtaining digital signatures and public-key
cryptosystems. Communications of the ACM,
21(2):120-126, February 1978.
3、定义
由于此篇文档的目的,下列定义将被使用。
算法标识符:通过对象标识符定义一种算法和相关参数的类型,此类型被定义在X.509
中。
ASN.1:抽象语法标记1,定义在X.208中。
BER:基础编码规则,定义在X.209中。
DES:数据加密标准,定义在FIPS PUB 46-1中。
MD2:RSA Data Security, Inc.的MD2消息散列算法,定义在RFC 1319中。
MD4:RSA Data Security, Inc.的MD4消息散列算法,定义在RFC 1320中。
MD5:RSA Data Security, Inc.的MD5消息散列算法,定义在RFC 1321中。
Modulus(模数):由两个素数形成的整数。
PEM:因特网私人加密邮件,定义在RFC 1423和相关文当中。
RSA:RSA公钥密码体系,定义在[RSA78]中。
私人密钥:模数和私人指数。
公开密钥:模数和公开指数。
4、标志和缩写
大写标志(例如BT)表示字符串和位串(就签名S而言),小写标志(例如c)表示
整数。
ab 16进制8位组值 c 指数
BT 块类型 d 私人指数
D 数据 e 公开指数
EB 需加密块 k 模数的8位组长度
ED 被加密的数据 n 模数
M 消息 p, q 模数的素数组成
MD 消息散列 x 整数需加密块
MD' 比较的消息散列 y 整数被加密数据
PS 填充字符串 mod n 模 n
S 签名 X || Y X,Y的级连
||X|| X字节长
5、总的概述
下面的六个章节详细的叙述了密钥生成,密钥语法,加密过程,解密过程,签名算法
和对象标识符。每个实体都要生成一对密钥:公钥和私钥。加密过程需要使用其中一个密钥,
解密过程需要使用另一个密钥。所以加密过程或是一个公钥操作过程或是一个私钥操作过
程,解密过程也一样。这两种过程都是把一个8位字符串转化成另一个8位字符串。这两个
过程是互相相反的,如果一个过程使用了一个实体的公钥,那么另一个过程使用同一实体的
私钥。加密和解密过程或是能实现典型的RSA转换,或是实现填充变换。
6、密钥生成
此章节描述RSA密钥生成。每个实体都需要选择一个正整数e作为它的公开指数。每
个实体都需要私人的随机的选择两个不同的奇素数p和q,以便e和(p-1)*(q-1)互素。
公开模数n是私人的素数p,q的乘积:n=p*q 。私人指数是一个正整数d,以便d*e-1可
以被(p-1)*(q-1)整除。模数n的字节长为k,k满足2^(8(k-1)) <= n < 2^(8k)。模数长度
k必须是至少12个字节,使之适应此文档中的块格式(见第8章)。
注意:
(1) 公开模数在特殊应用程序中可以是标准化的。在X.509的附录C中提到使用3
或65537可以有一些实际的好处。
(2) 为了使模数n的因数分解更困难,可以考虑一些额外的选择素数的条件。这些
保障安全的条件超出了此文档的论述范围。长度k的下限是为了适应块格式,
并不是为了保障安全。
7、密钥语法
此章节给出了RSA公钥和私钥的语法
7.1公钥语法
一个RSA公钥需要有ASN.1的RSAPublicKey类型:
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e }
(这个类型被定义于X.509中,保留在此处是为了兼容性。)
RSAPublicKey类型的字段有下列含义:
modulus是模数n;
publicExponent是公开指数e。
7.2私钥语法
一个RSA私钥有一个ASN.1的RSAPrivateKey类型:
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER -- (inverse of q) mod p }
Version ::= INTEGER
RSAPrivateKey类型的字段有下列含义:
? version是一个为兼容将来此文档的修改的版本号。为了适应此文档的版本它
应该是0;
? modulus是模数n;
? publicExponent是公开指数e;
? privateExponent是私人指数d;
? prime1是组成模数n的一个素数p;
? prime2是组成模数n的一个素数q;
? exponent1是d mod (p-1);
? exponent2是d mod (q-1);
? coefficient是中国剩余理论中的系数q-1 mod p。
注意:
(1) 一个RSA私钥逻辑上仅包含模数n和私人指数d。p,q, d mod (p-1), d
mod (p-1)和q-1 mod p的出现是为了提高效率,正如Quisquater和Couvreur
显示在[QC82]中。如果公钥知道的话,按照Miller[Mil76]的结果,一个不
包含其他值的私人密钥语法是很容易转化成此处定义的语法。
(2) 公开指数e的出现是为了可以容易的从私钥中得到公钥。
8、加密过程
此章节描述了RSA的加密过程。
加密过程包括4个步骤:加密块格式化,8位字符串到整数的转化,RSA计算,整数
到8位字符串的转化。加密过程的输入为数据8位字符串,模数n,指数c。对于公钥操作
来说,整数c是实体的公开指数e;对于私钥操作来说,整数c是实体的私人指数d。加密
过程的输出为被加密的数据,一个8位字符串ED。
数据D的长度不应该长于k-11个8位字节,其必为正数,因为模数的长度k是至少
12个8位字节。这种限制保证了填充串PS的长度至少为8个8位字节,这是一项安全措施。
注意:
(1) 在此文档的对于加密内容加密密钥和消息散列的典型应用中,||D|| <= 30。这样
RSA模数的长度至少需要328位(41个8位字节),这是合理的,并且和安全
建议是一致的。
(2) 如果被加密的数据在传输中被破坏,加密过程并不提供一个帮助错误侦察的外
在的完整性检查。然而,加密块的结构保证了破坏没被检查出的可能性小于
2-16,这是一个随机加密块看起来像类型2的可能性的上限。
(3) 定义在此的对于除了包含一个消息散列的8位字节串的数据的私钥操作的应用
并不被推荐,需要更多的研究。
(4) 此文档可以被扩展,来控制长度长于k-11个8位字节串
8.1加密块格式化
加密块是一个8位字节串EB,由块标记BT,填充块PS和数据D组成。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -