?? rfc2313.txt
字號:
EB = 00 || BT || PS || 00 || D (1)
塊標記BT是一個標記字節,表示加密塊的結構。對于此文檔的版本,它有00,
01,或02值。私鑰操作為00,或01;公鑰操作為02。
填充串PS為k-3-||D||長的8位字節字符串。對于00型,填充串為00;對于01型,
填充串為ff;對于02型,填充串為假散列生成的非0值。這使得加密塊EB的長度為
k。
注意:
(1) 開始的00值字節保證了轉化成整數后的加密塊小于模數。
(2) 對于00型來說,數據D必須以一個非0字節開始,或是必須知道長度,
以便加密塊能被清楚的解析。對于01和02型來說,加密塊能被清楚的解
析,這是因為填充塊PS不包含00值字節,它可以被一個00值字節從數據
D分開。
(3) 01型被推薦為私鑰操作標志。01型有保證轉化成整數的加密塊很大的性
能,這能防止Desmedt和Odlyzko [DO86]所建議的某種攻擊。
(4) 01和02型是和被描述在RFC1423中的PEM RSA的內容加密密鑰和消息
散列的加密是兼容的。
(5) 對于02類型來說,建議為每一個加密過程都獨立生成假散列字節,特別是
如果相同的數據被輸入多于一個的加密過程。Hastad的結果 [Has88]促進
了這種建議。
(6) 對于02類型來說,填充串至少是8個字節長,這是對于公鑰操作的一個安
全措施,為了防止攻擊者通過測試所有可能的加密塊來恢復數據。類似的,
對于01類型最小長度是一樣的。
(7) 此文檔將來可以擴展為包括其他類型。
8.2 8位字節串到整數的轉換
加密塊EB需要被轉化為一個整數x,即整數加密塊。從頭到尾讓EB1, ..., Ebk
組成EB字節串。然后整數x應該滿足:
k
x = SUM 2^(8(k-i)) EBi (2)
i = 1
換句話來說,EB的第一個字節在整數中意義最重大,最后一個字節的重要性最
低。
注意:因為EB1 = 00并且 2^(8(k-1)) <= n,所以整數加密塊x滿足0 <= x < n。
8.3 RSA計算
整數加密塊x需要被求c次方冪,然后模n,最后被賦給整數y,即整數被加密
數據。
y = x^c mod n, 0 <= y < n
這是一個典型的RSA計算。
8.4 整數到字節串的轉換
整數被加密數據y需要被轉換成一個長度k的8位字節串ED,即被加密數據。
被加密數據應該滿足:
k
y = SUM 2^(8(k-i)) EDi (3)
i = 1
這里ED1, ..., Edk就是字節串ED的組成。
換句話說,ED的第一個字節在整數中最為重要,ED的最后一個字節重要性最低。
9、解密過程
此章節描述了RSA解密過程。
解密過程包含4個步驟:字節串到整數的轉換,RSA計算,整數到字節串的轉換,和
需加密塊解析。解密過程的輸入是一個8位字節串ED,即被加密數據;模數n;指數c。對
一個公鑰操作來說,整數c是一個實體的公開指數e;對一個私鑰操作來說,整數c是一個
實體的私人指數d。解密過程的輸出是一個8位字節串D,即原始數據。
如果被加密數據ED的長度不是k,則為錯誤。
簡短來說,解密過程是根據加密過程來描述的。
9.1 字節串到整數的轉換
被加密的數據ED根據等式(3)被轉化成整數被加密數據y。
如果整數被加密數據不滿足0 <= y < n,則為錯誤。
9.2 RSA計算
整數被加密數據y需要被求c次方冪,然后模n,最后被賦給整數x,即整數需加密塊。
x = y^c mod n, 0 <= x < n
這是一個典型的RSA計算。
9.3 整數到字節串的轉換
整數需加密塊x根據等式(2)被轉化成一個長度k的8位字節串EB,即需加密塊。
9.4 需加密塊解析
需加密塊EB根據等式(1)被解析成一個由塊標記BT,填充塊PS和數據D組成的
數據塊。
如果有下列情況發生,則為錯誤:
? 需加密塊不能被明白的解析(見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結合起來(簡稱MD2 with RSA);第二個簽名算法把MD4散列算法和RSA
結合起來(簡稱MD4 with RSA);第三個簽名算法把MD5散列算法和RSA結合起來(簡
稱MD5 with RSA)。
本章節描述了兩個算法的簽名過程和驗證過程。所選的散列算法取決于簽名算法,
MD2或MD5。簽名過程使用一個實體的私鑰;而驗證過程使用一個實體的公鑰。簽名過程
把一個8位字節串(消息)轉化成一個位串(簽名);而驗證過程檢驗一個位串(簽名)是
否為一個8位字節串(消息)的簽名。
注意:被定義在此的簽名算法和在PKCS #7中構建簽名的方法(加密消息散列)之間
的僅有的不同是此處的簽名用位串表示,這和X.509 SIGNED宏是一致的。在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 {
digestAlgorithm DigestAlgorithmIdentifier,
digest Digest }
DigestAlgorithmIdentifier ::= AlgorithmIdentifier
Digest ::= OCTET STRING
類型DigestInfo的域有下列含義:
? digestAlgorithm表示用于散列的算法(以及相關參數)。對應用程序來說,它標識
了所選的散列算法,MD2,MD4或MD5。作為參考,以下是相關的對象標識符:
md2 OBJECT IDENTIFIER ::=
{ iso(1) member-body(2) US(840) rsadsi(113549)
digestAlgorithm(2) 2 } md4 OBJECT IDENTIFIER ::=
{ iso(1) member-body(2) US(840) rsadsi(113549)
digestAlgorithm(2) 4 } md5 OBJECT IDENTIFIER ::=
{ iso(1) member-body(2) US(840) rsadsi(113549)
digestAlgorithm(2) 5 }
對這些對象標識符來說,散列算法的參數域是空。
? digest是消息散列過程的結果,例如消息散列MD。
注意:
1. DigestInfo值包含了一個消息散列算法標識符,用來限制由于使用消息散列算法
壓縮數據而導致的破壞。舉例來說,如果攻擊者能夠找出帶有給定的MD2消息
散列的消息,那么他就可以通過找出一個表面無害的帶有相同MD2散列的消息,
并強迫簽名者簽署這個表面無害的消息,來偽造消息簽名。這種攻擊方法只有在
使用MD2散列算法時才會成功。如果DigestInfo值只包括消息散列,攻擊者就能
攻擊使用任何消息散列的簽名者。
2. 雖然使用SEQUENCE類型違背了在X.509 SIGNED和SIGNATURE宏中的簽名
是一個ENCRYPTED OCTET STRING的書面聲明,但是正如I'Anson和Mitchell
在[IM90]中指出的,這樣的書面闡明并不被要求。
3. 沒有理由說MD4不是一個安全度很高的數字簽名方案,但是由于MD4被設計的
非常快,所以它處于被成功攻擊的危險中。如果有人找出擁有同一個散列的兩個
消息這樣的沖突,那么這個散列算法可以被認為是打破的(broken)。當沖突被發
現在僅有兩個散列循環[Mer90][dBB92]的MD4的變體中,并沒有沖突出現在有三
個散列循環的MD4中。在進一步的研究后,我們可以認為MD4有很高的安全性。
MD5有四個散列循環,比MD4更慢。在MD4被研究前,它是被推薦使用的。
在MD5內部的壓縮功能[dBB93]中的假沖突并沒有任何實際的安全影響。
MD2是三者中最慢的一個,它有最保守的設計,沒有任何對MD2的攻擊被公布
出來。
10.1.3 RSA加密
正如在第7章中描述的數據D被簽名者的RSA私鑰加密,生成一個8位字節串ED,
即被加密的數據。其塊標記為01(見8.1節)。
10.1.4 8位字節串到位串的轉換
被加密數據ED被轉換成一個位串S,即簽名。具體來說,被加密數據的第一個字節
的第一位成為簽名的第一個數據位,以此類推,直到被加密數據的最后一個字節的最后一位,
它將變成簽名的最后一個數據位。
注意:簽名S的位長度是8的倍數。
10.2 驗證過程
驗證過程包括四個步驟:位串到字節串的轉換,RSA解密,數據解碼,消息散列和比
較。驗證過程的輸入是字節串M,即消息;簽名者的公鑰;位串S,即簽名。其輸出是驗證
成功或失敗的標記號。
10.2.1 位串到字節串的轉換
簽名S被轉換成字節串ED,即被加密的數據。具體來說,假設S的位長度是8的倍
數,S的第一位將變成字節串的第一個字節的第一位,以此類推,直到簽名的最后一位變成
字節串的最后一個字節的最后一位。
如果簽名的位長度不是8的倍數,則是錯誤。
10.2.2 RSA解密
正如在第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-1 OBJECT IDENTIFIER ::=
{ iso(1) member-body(2) US(840) rsadsi(113549)
pkcs(1) 1 }
對象標識符rsaEncryption等同于定義在第7章節中的RSA公/私鑰和定義在第8、9章
節中的RSA加/解密過程。
rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 }
rsaEncryption對象標識符被用于AlgorithmIdentifier類型的algorithm域的一個值。此
類型的parameters域有算法特定的語法ANY DEFINED BY algorithm,在rsaEncryption算法
中,其值為空。
對象標識符md2WithRSAEncryption,md4WithRSAEncryption和
md5WithRSAEncryption各自表示定義在第10章節中的MD2 with RSA,MD4 with RSA和
MD5 with RSA簽名及驗證過程。
md2WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 2 }
md4WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 3 }
md5WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 4 }
這些對象標識符被用于AlgorithmIdentifier類型中的algorithm域的一個值。此類型的
parameters域有算法特定的語法ANY DEFINED BY algorithm,在此三個算法中,其值為空。
注意:X.509的對象標識符rsa也表示定義在第7章節中的RSA公鑰,但并不表示私鑰,
并且表示不同的加/解密過程。一些應用程序期望將鑒別RSA公鑰。這些公鑰和本文檔是兼
容的,使用RSA公鑰的rsaEncryption過程等同于使用rsaEncryption公鑰的rsaEncryption過
程。
安全考慮
安全內容在此備忘錄中討論。
修訂版記錄
版本1.0-1.3
此版本在1991的2月和3月被分發給RSA Data Security, Inc.的 Public-Key
Cryptography Standards會議的參加者。
版本1.4
此版本是在1991.6.3的第一次公開發布的PKCS中的一部分內容,并被發行作為
NIST/OSI Implementors的工作組文檔SEC-SIG-91-18。
版本1.5
此版本包括了幾處改變,其中有參考的更新和修訂版記錄的增加。下列是幾處實質的
改變:
? 第10章節:增加了MD4 with RSA的簽名和驗證過程。
? 第11章節:增加了md4WithRSAEncryption對象標識符。
代替1991.6.3的版本,它也被作為NIST/OSI Implementors的工作組文檔
SEC-SIG-91-18。
鳴謝
本文檔基于RSA Data Security, Inc.的一個部門RSA Laboratories的撰稿。任何實質的
使用本文檔都必須感謝RSA Data Security, Inc.。RSA Data Security, Inc.要求所有對此文檔的
資料的闡述和參考都必須表示為RSA Data Security, Inc. PKCS #1。
作者地址
Burt Kaliski
RSA Laboratories East
20 Crosby Drive
Bedford, MA 01730
Phone: (617) 687-7000
EMail: burt@rsa.com
版權聲明
Copyright (C) The Internet Society (1998). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative
works that comment on or otherwise explain it or assist in its implementation may be prepared,
copied, published and distributed, in whole or in part, without restriction of any kind, provided
that the above copyright notice and this paragraph are included on all such copies and derivative
works. However, this document itself may not be modified in any way, such as by removing the
copyright notice or references to the Internet Society or other Internet organizations, except as
needed for the purpose of developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be followed, or as required to translate it
into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by the Internet
Society or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and THE
INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS
ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY
WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE
ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS
FOR A PARTICULAR PURPOSE.
RFC2313——PKCS #1: RSA EncryptionVersion 1.5 PKCS#1:RSA加密 版本1.5
1
RFC文檔中文翻譯計劃
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -