?? 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 + -