Network Working Group B. Kaliski Request for Comments: 2313 RSA Laboratories East Category: Informational March 1998 PKCS #1: RSA暗号化 バージョン1.5 このメモの位置付け このメモは、インターネット・コミュニティに情報を提供するものである。 インターネット標準を規定するものではない。このメモの配布は無制限である。 著作権表示 Copyright (C) The Internet Society (1998). All Rights Reserved. 概要 本ドキュメントでは、RSA公開鍵暗号方式を使用してデータを暗号化するための 方法を示す。 1. 適用範囲 本ドキュメントでは、RSA公開鍵暗号方式を使用してデータを暗号化するための 方法を示す。その目的は、デジタル署名とデジタル封筒を作成することである。 これらは PKCS #7 で示されている。 o デジタル署名ではまず、メッセージダイジェストアルゴリズム(例えば MD5 など) を使用することにより、署名されるコンテンツからメッセージダイジェストを 生成する。そしてそのメッセージダイジェストを含むオクテット文字列は、 コンテンツの署名者の RSA 私有鍵で暗号化される。コンテンツと暗号化された メッセージダイジェストは、PKCS #7 の構文にしたがって一緒に表記され、 デジタル署名となる。この仕様は、Privacy-Enhanced Mail (PEM) と互換性を もつ。 o デジタル封筒ではまず、封筒に入れられるコンテンツは、コンテンツ暗号化鍵と コンテンツ暗号化アルゴリズム(例えば DES )により暗号化される。そして そのコンテンツ暗号化鍵は、コンテンツ受信者の RSA 公開鍵で暗号化される。 暗号化されたコンテンツと、暗号化されたコンテンツ暗号化鍵は、PKCS #7 の 構文にしたがって一緒に表記され、デジタル封筒となる。この仕様もまた、PEM 方式と互換性をもつ。 本ドキュメントではまた、RSA 公開鍵と私有鍵の構文を示す。公開鍵構文は証明書 において使用される。私有鍵構文は PKCS #8 私有鍵情報で通常使用される。公開 鍵構文は X.509 と Privacy-Enhanced Mail の両方と同じものである。したがって X.509/PEM RSA 鍵は、このドキュメントでも使用することができる。 本ドキュメントではまた、X.509/PEM 証明書と証明書失効リスト、PKCS #6 拡張 証明書、そしてデジタル署名を使用するその他のもの、例えば X.401 メッセージ トークンなど、で使用される3つの署名アルゴリズムを定義する。 メッセージダイジェストとコンテンツ暗号化アルゴリズムの詳細は、このドキュ メントの範囲外である。またこのドキュメントのいくつかの方法において必要と される擬似乱数ビットの発生方法の詳細も同様である。 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. 定義 このドキュメントでは、以下の定義が適用される。 AlgorithmIdentifier: (オブジェクト識別子により)algorithmと、それ に関連するparametersを特定するための型。この型はX.509により定義される。 ASN.1: Abstract Syntax Notation One。X.208で定義される。 BER: Basic Encoding Rules。X.209で定義される。 DES: Data Encryption Standard。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 で定義される。 モジュラス: 2つの素数の積により作成される整数。 PEM: Internet Privacy-Enhanced Mail。RFC 1423 と関連するドキュメントで 定義される。 RSA: RSA 公開鍵暗号方式。[RSA78]で定義される。 私有鍵: モジュラスと私有指数。 公開鍵: モジュラスと公開指数。 4. 記号と略号 大文字の記号(例えば BT)は、オクテット文字列とビット文字列(署名 S の 場合)を表す。小文字の記号(例えば c)は整数を表す。 ab 16進オクテット値 c 指数 BT ブロック型 d 私有指数 D データ e 公開指数 EB 暗号ブロック k モジュラスのオクテット長 ED 暗号データ n モジュラス M メッセージ p, q モジュラスの素数ファクタ MD メッセージダイジェスト x 整数暗号ブロック MD' 比較対象メッセージ y 整数暗号データ ダイジェスト PS パディング文字列 mod n 法 n S 署名 X || Y XとYの連結 ||X|| Xのオクテット長 5. 概略 以下の6つの章では、鍵生成、鍵構文、暗号化処理、復号処理、署名アルゴリズム、 そしてオブジェクト識別子を規定する。 それぞれのエンティティは、1組の鍵を生成する。公開鍵と私有鍵である。暗号 化処理は、そのうちの1つの鍵で実行される。そして復号処理は他方の鍵で実行 される。したがって暗号化処理は、公開鍵処理、私有鍵処理のどちらにもなり うる。復号処理も同様である。どちらの処理も、オクテット文字列を他のオク テット文字列に変換する。1つの処理においてエンティティの公開鍵を使用して おり、他方の処理で同じエンティティの私有鍵を使用しているならば、それぞれ の処理は互いに逆の処理である。 暗号化処理と復号処理は、従来のRSA変換、またはパディングのある変化形で あってもよい。 6. 鍵生成 本章では、RSA鍵生成を示す。 それぞれのエンティティは、正の整数 e をその公開指数として選択する。 それぞれのエンティティは、プライベートに、そしてランダムに、2つの異なる 素数 p と q を、(p-1)と e が互いに素であり、また (q-1) と e が互いに 素となるように選択する。 公開されるモジュラス n は、私有されるファクタ p と q の積とされる。 n = pq 私有指数は、正の整数 d を、de-1が p-1 と q-1 の双方で割り切れるように 選択する。 モジュラス n のオクテット長は整数 k で、以下を満足する。 2^(8(k-1)) <= n < 2^(8k) モジュラス長 k は、本ドキュメントにおけるブロックフォーマットに対応する ために、少なくとも12オクテットでなければならない(第8章を参照)。 注: 1. 公開指数は、特定の仕様により標準化してもよい。値3とF4(65537)にはいくつ かの実用的な利点がある。これは X.509 Annex C で示されている。 2. さらなる素数選択条件を考慮に入れることにより、モジュラスの因数分解を 困難にさせてもよい。これらのセキュリティ条件はこのドキュメントの範囲 外である。長さ k の下限は、ブロックフォーマットに対応するためであり、 セキュリティの関係ではない。 7. 鍵構文 本章では、RSA 公開鍵と私有鍵の構文を示す。 7.1 公開鍵構文 RSA 公開鍵は、 ASN.1 RSAPublicKey 型をもつ。 RSAPublicKey ::= SEQUENCE { modulus INTEGER, -- n publicExponent INTEGER -- e } (この型は X.509 で指定されているもので、互換性のためにここに記載する。) RSAPublicKey 型のフィールドは、以下のような意味をもつ。 o modulus はモジュラス n である。 o 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 型のフィールドは、以下のような意味をもつ。 o version はバージョン番号である。本ドキュメントの改定版との互換性 のためのものである。本ドキュメントの本バージョンでは、この値は 0 である。 o modulus はモジュラス n である。 o publicExponent は公開指数 e である。 o privateExponent は私有指数 d である。 o prime1 は n の素数ファクタ p である。 o prime2 は n の素数ファクタ q である。 o exponent1 は d mod (p-1)である。 o exponent2 は d mod (q-1)である。 o coefficient は中国人剰余定理係数 q-1 mod p である。 注: 1. RSA 私有鍵は、理論的にはモジュラス n と私有指数 d のみから構成される。 値 p、q、d mod (p-1)、d mod (p-1)、および q-1 mod p が存在している のは、処理効率が意図されているためで、これは Quisquater and Couvreur [QC82] で示されている。これらの値の一部が含まれていない私有鍵構文は、 公開鍵が既知であれば、Miller [Mil76] による結果を使用することにより、 ここで定義している構文に容易に変換することが出来る。 2. 公開指数 e が存在しているのは、私有鍵から公開鍵を得ることが簡単に できるように意図されているためである。 8. 暗号化処理 本章では、RSA暗号化処理を記述する。 暗号化処理は 4 つのステップから構成されている。暗号ブロックフォーマット 処理、オクテット文字列-整数変換、RSA 計算、および整数-オクテット文字列 変換である。暗号化処理への入力は、オクテット文字列 D(データ)、整数 n (モジュラス)と整数 c(指数)である。公開鍵を使用した処理においては、 整数 c はエンティティの公開指数 e である。私有鍵を使用した処理においては、 これはエンティティの私有指数 d である。暗号化処理の出力は、オクテット 文字列 ED(暗号化データ)である。 データ D の長さは k-11 オクテットを超えない。モジュラス長 k は少なくとも 12 オクテットであるため、k-11 は正値である。この制限により、パディング 文字列 PS の長さは少なくとも 8 オクテットであることが保証される。これは セキュリティ条件である。 注: 1. このドキュメントの仕様をコンテンツ暗号化鍵やメッセージダイジェストの 暗号化に適用する際は通常、 ||D|| <= 30 となる。それゆえ、RSA モジュ ラスの長さは、少なくとも 328 ビット (41オクテット)である必要がある。 これは適切であり、セキュリティ推奨とも一致している。 2. 暗号化処理では、暗号化されたデータが転送中に壊れたとしても、その エラー検出を容易にするための保全チェック方法を提供していない。 しかし、暗号化ブロックの構造により、そのデータ崩壊が検出されない 確率は 2 の -16 乗よりも小さいことが保証されている。この値は、 ランダムな暗号化ブロックが、ブロック型 02 に似る確率の上限である。 3. ここで定義されている私有鍵処理を、メッセージダイジェストを含むオク テット文字列以外に適用することは推奨されない。これに関してはさらなる 研究が必要である。 4. このドキュメントは、k-11オクテットよりも長いデータを処理するために 拡張されるかもしれない。 8.1 暗号ブロックフォーマット処理 ブロック型 BT、パディング文字列 PS、そしてデータ D はフォーマットされ、 オクテット文字列 EB(暗号ブロック)とされる。 EB = 00 || BT || PS || 00 || D (1) ブロック型 BT は1オクテットで、暗号ブロックの構造を示すものである。本ド キュメントの本バージョンでは、これは 00、01、02 の値をもつ。私有鍵を使用 した処理では、ブロック型は 00、または 01 である。公開鍵を使用した処理では 02 である。 パディング文字列 PS は、k-3-||D|| オクテットから構成されている。ブロック型 00 では、オクテットは値 00 をもつ。ブロック型 01 では、値 FF をもつ。 ブロック型 02 では、擬似乱数的に生成されたゼロでない値をもつ。これにより、 暗号ブロック EB の長さは k とされる。 注: 1. 先頭の 00 オクテットにより、整数変換された暗号ブロックはモジュラス より小さいことが保証される。 2. ブロック型 00 においては、データ D はゼロでないオクテットから始まるか、 またはその長さが既知でなければならない。これにより暗号ブロックはあい まいさなしに解析することができる。ブロック型 01 と 02 においては、 暗号化ブロックはあいまいさなしに解析することが出来る。なぜならば、 パディング文字列 PS には、値 00 をもつオクテットはなく、パディング 文字列とデータ D は値 00 をもつオクテットによって分離されているから である。 3. 私有鍵処理においては、ブロック型 01 が推奨される。ブロック型 01 には、その暗号化ブロックを整数に変換すると、値が大きくなることが 保証されるという特性がある。これは、 Desmedt and Odlyzko [DO86] によって提案されている種別の攻撃を防ぐ。 4. ブロック型 01 と 02 は、RFC 1423で記述されているコンテンツ暗号化鍵 とメッセージダイジェストの PEM RSA暗号化と互換性をもつ。 5. ブロック型 02 においては、擬似乱数オクテットはそれぞれの暗号化プロ セスごとに生成することが推奨される。特に、1つのデータを1つ以上の 暗号化処理に入力する場合に推奨される。Hastadの結果 [Has88] がこの 推奨の動機となっている。 6. ブロック型 02 においては、パディング文字列は最小でも 8 オクテット である。これは、攻撃者が可能性のあるすべての暗号化ブロックを試すこと によりデータを復号することを防ぐための、公開鍵処理のセキュリティ条件 である。簡便さのため、この最小の長さはブロック型 01 と同じとなって いる。 7. このドキュメントは将来、他のブロック型が使用できるよう拡張されるかも しれない。 8.2 オクテット文字列-整数変換 暗号ブロック EB は、整数 x (整数暗号ブロック)に変換される。EB オクテット の先頭から最後までをEB1, ..., EBkとすると、整数 x は以下を満たす。 k x = SUM 2^(8(k-i)) EBi (2) i = 1 すなわち、EB の最初のオクテットは整数の最上位オクテットとなり、EB の最後の オクテットは最下位オクテットとなる。 注:整数暗号ブロック x は、0 <= x < n を満たす。これは EB1 = 00 であり、 2^(8(k-1)) <= n であるからである。 8.3 RSA計算 整数暗号ブロック x は c 乗され、法 n により整数 y (整数暗号化データ)に 変換される。 y = x^c mod n, 0 <= y < n これは従来のRSA計算である。 8.4 整数-オクテット文字列変換 整数暗号化データ y は、長さ k のオクテット文字列 ED (暗号化データ)に 変換される。暗号化データ ED は以下を満たす。 k y = SUM 2^(8(k-i)) EDi (3) i = 1 ここで ED1, ..., EDkは、オクテット ED の先頭から最後までを表す。 すなわち、ED の最初のオクテットは整数の最上位オクテットであり、ED の最後の オクテットは最下位オクテットである。 9. 復号処理 本章では、RSA復号処理を記述する。 復号処理は 4 つのステップから構成されている。オクテット文字列-整数変換、 RSA計算、整数-オクテット文字列変換、および暗号ブロック構文解析である。 復号処理への入力は、オクテット文字列 ED(暗号化データ)、整数 n(モジュ ラス)と整数 c(指数)である。公開鍵を使用した処理においては、整数 c は エンティティの公開指数 e である。私有鍵を使用した処理においては、これは エンティティの私有指数 d である。復号処理の出力は、オクテット文字列 D (データ)である。 暗号化データ EDの長さが k でないときはエラーである。 簡素化のため、復号処理は暗号化処理の見地から記述される。 9.1 オクテット文字列-整数変換 暗号化データ ED は、整数 y (整数暗号化データ)に変換される。これには 式(3)が用いられる。 整数暗号化データ y は、 0 <= y < n を満たさなければエラーである。 9.2 RSA計算 整数暗号化データ y は c 乗され、法 n により整数 x (整数暗号ブロック) に変換される。 x = y^c mod n, 0 <= x < n これは従来のRSA計算である。 9.3 整数-オクテット文字列変換 整数暗号ブロック x は、長さ k のオクテット文字列 EB (暗号ブロック)に 変換される。これには式(2)が用いられる。 9.4 暗号ブロック解析 暗号ブロック EB は解析され、ブロック型 BT、パディング文字列 PS、そして データ D に分解される。これには式(1)が使用される。 以下の条件のどれかが発生するとエラーである。 o 暗号ブロック EB が明白には解析できない(第8.1節の注を参照) o パディング文字列 PS が 8 オクテットよりも少ない、またはブロック型 BT と一致しない。 o 復号処理が公開鍵処理であり、かつブロック型 BT が 00 または 01 でない。 または、復号処理が私有鍵処理であり、かつブロック型が 02 でない。 10. 署名アルゴリズム この章では、第8章と第9章で示された RSA 暗号化処理に基づいた、3つの署名 アルゴリズムを定義する。 署名アルゴリズムは、X.509/PEM証明書や証明書失効 リスト、PKCS #6 拡張証明書、およびX.401メッセージトークンなどデジタル署名 を採用している他のものにおいての使用が意図されている。アルゴリズムは、 PKCS #7 でのデジタル署名を作成するための使用は意図されていない。最初の署名 アルゴリズム(わかりやすく書くと "MD2 with RSA")では、MD2メッセージダイ ジェストアルゴリズムを RSA と連結させる。2つ目 (わかりやすく書くと "MD4 with RSA")では、MD4メッセージダイジェストアルゴリズムを RSA と連結 させる。そして3つ目(わかりやすく書くと "MD5 with RSA")では、MD5メッ セージダイジェストアルゴリズムを RSA と連結させる。 この章では、2つのアルゴリズムの署名処理と検証処理を記述する。この「選ば れた」メッセージダイジェストアルゴリズムはMD2またはMD5で、これは署名 アルゴリズムにより選択される。署名処理はエンティティの私有鍵で実行され、 検証処理はエンティティの公開鍵で実行される。署名処理では、オクテット 文字列(メッセージ)をビット文字列(署名)に変換する。検証処理では、 そのビット文字列(署名)がオクテット文字列(メッセージ)の署名であるか 否かを決定する。 注: ここで定義される署名アルゴリズムと、PKCS #7で生成される署名(暗号化 されたメッセージダイジェスト)による方法との唯一の違いは、ここでの署名は ビット文字列として表記されることである。これはX.509 SIGNEDマクロと一致 させるためである。PKCS #7 では、暗号化されたメッセージダイジェストは オクテット文字列である。 10.1 署名処理 署名処理は、4つのステップから構成されている。メッセージダイジェスト処理、 データエンコード、RSA 暗号化、およびオクテット文字列-ビット文字列変換 である。署名処理への入力は、オクテット文字列 M (メッセージ)と署名者の 私有鍵である。署名処理の出力は、ビット文字列 S (署名)である。 10.1.1 メッセージダイジェスト処理 メッセージ M は、選択されたメッセージダイジェストアルゴリズムでダイジェスト 処理される。これによりオクテット文字列 MD (メッセージダイジェスト)を得る。 10.1.2 データエンコード メッセージダイジェストMDと、メッセージダイジェストアルゴリズム識別子は 連結され、DigestInfo型の ASN.1 値とされる。DigestInfo型は以下で記述される。 これは BER エンコード処理され、オクテット文字列 D (データ)となる。 DigestInfo ::= SEQUENCE { digestAlgorithm DigestAlgorithmIdentifier, digest Digest } DigestAlgorithmIdentifier ::= AlgorithmIdentifier Digest ::= OCTET STRING DigestInfo型の各フィールドは以下のような意味をもつ。 o digestAlgorithmは、メッセージダイジェストアルゴリズム(とそれに関連 するparameters)を識別する。本仕様では、これは選択されたメッセージ ダイジェストアルゴリズムである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 } これらのオブジェクト識別子では、digestAlgorithm 値の parameters フィールドは NULL である。 o digest はメッセージダイジェスト処理の結果、すなわちメッセージ ダイジェスト MD である。 注: 1. メッセージダイジェストアルゴリズム識別子は、DigestInfo 値に格納され、 1つのメッセージダイジェストアルゴリズムが危険となったことから生じる 損害を制限するために使用する。例えば、ある与えられた MD2 メッセージ ダイジェストをもつメッセージを、敵が見つけることができたと仮定する。 その敵は、同じ MD2 メッセージダイジェストを使用して、一見すると無害に 見えるようなメッセージを見つけ出し、署名者にそれを署名させることに より、メッセージの署名を偽造しようとするかもしれない。この攻撃は、 署名者が MD2 を使用する場合にだけ成功するであろう。しかし、もし DigestInfo 値にメッセージダイジェストだけしか含まれていなかったなら ば、どのメッセージダイジェストを使用しても、敵は署名者を攻撃すること が可能となる。 2. SEQUENCE型を使用することにより、署名は ENCRYPTED OCTET STRING である (ENCRYPTED SEQUENCEではない) という、X.509の SIGNED and SIGNATURE マクロに違反することになると主張するかもしれないが、このような文字 通りの解釈は必要ない。これは I'Anson and Mitchell により指摘されて いる [IM90] 。 3. MD4は非常に高いセキュリティをもつデジタル署名体系には向いていない、 という理由は知られていないが、MD4は特に高速な計算ができるよう設計 されたため、暗号的な攻撃が成功されてしまうという危険に関して 「ぎりぎり」である。メッセージダイジェストアルゴリズムは、だれかが 衝突、すなわち2つのメッセージが同じダイジェストをもつこと、を見つける ことができたならば、それは「破られた」と考えることが出来る。2つだけの ダイジェスト"ラウンド"をもつような MD4 の変形種では複数の衝突が発見 されている[Mer90][dBB92] が、3つのラウンドをもつ MD4 自体ではまだ 発見されていない。さらなる重要なレビューの後に、非常に高いセキュリ ティ仕様でのMD4 の使用を考慮するのが適切であろう。 MD5は、4つのラウンドをもっており、それに比例して MD4 よりも遅いが、 MD4 のレビューが終わるまではこれが推奨される。MD5 内部の圧縮関数での 「擬似衝突」が報告されている[dBB93]が、これは MD5 のセキュリティには 実用的な影響力はないようである。 MD2は、3つの中で最も遅いが、最も保守的な設計が行われている。MD2に 対する攻撃はまだ発表されていない。 10.1.3 RSA 暗号処理 データ D は、第7章で示されるように、署名者の RSA 私有鍵で暗号化される。 これによりオクテット文字列 ED (暗号化データ) が得られる。ブロック型は 01 である。(第8.1節を参照。) 10.1.4 オクテット文字列-ビット文字列変換 暗号化データ ED は、ビット文字列 S (署名) に変換される。特に、暗号化データ の最初のオクテットにおける最上位ビットは、署名の最初のビットになる。そして 暗号化データの最後のオクテットにおける最下位ビットは、署名の最後のビットに なる。 注: 署名 S のビット長は、8の倍数である。 10.2 検証処理 2つの署名アルゴリズムのための検証処理は、4つのステップから構成されている。 ビット文字列-オクテット文字列変換、RSA復号、データデコード、そして メッセージダイジェスト処理と比較である。検証処理への入力は、オクテット 文字列 M (メッセージ)、署名者の公開鍵、そしてビット文字列 S(署名)で ある。検証処理の出力は、成功または失敗という情報である。 10.2.1 ビット文字列-オクテット文字列変換 署名 S は、オクテット文字列 ED (暗号化データ)に変換される。明らかに、 署名 S のビット長が 8 の倍数であるときには、署名の最初のビットは、 暗号化データの最初のオクテットの最上位ビットになる。署名の最後のビット は、暗号化データの最後のオクテットの最下位ビットになる。 署名 S のビット長が 8 の倍数でないときにはエラーである。 10.2.2 RSA 復号 暗号化データ ED は、第8章で示されたように、署名者の RSA 公開鍵で復号され、 オクテット文字列 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 とされているが、これはこのアルゴリズムでは ASN.1 NULL 型となる。 オブジェクト識別子 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 であるが、これは これらのアルゴリズムでは ASN.1 NULL 型となる。 注: X.509 のオブジェクト識別子 rsa はまた、第7章で定義される RSA 公開鍵 を識別するが、私有鍵は識別せず、さらに他の暗号化、復号処理を識別する。 いくつかの仕様では、rsa により公開鍵が識別されるであろう。そのような公開 鍵は、このドキュメントと互換性がある。すなわち、 rsa 公開鍵を使用した rsaEncryption 処理は、rsaEncryption 公開鍵を使用した rsaEncryption 処理 と同じである。 セキュリティに関する考察 セキュリティ問題は、このメモ全体を通じて議論されている。 変更履歴 バージョン 1.0-1.3 バージョン 1.0-1.3 は、1991年2月と3月に行われた RSA Data Security, Inc. の Public-Key Cryptography Standards ミーティングの参加者に配布された。 バージョン 1.4 バージョン 1.4 は、1991年6月3日に最初に公開された PKCS の1つである。 バージョン 1.4 は、NIST/OSI Implementors' Workshop ドキュメント SEC-SIG-91-18 として発行された。 バージョン 1.5 バージョン 1.5 では、さまざまな編集上の変更が行われている。これには参考 文献の更新と変更履歴への追加を含む。以下の実質的な変更が行われた。 o 第10章: "MD4 with RSA" 署名と検証処理が追加された。 o 第11章: md4WithRSAEncryption オブジェクト識別子が追加された。 1991年6月3日のバージョンは無効化された。これは NIST/OSI Implementors' Workshop ドキュメント SEC-SIG-91-18 として発行されたものである。 謝辞 このドキュメントは、RSA Data Security, Inc の1部門である RSA 研究所の 貢献に基づいている。このドキュメントの文章を使用する場合には、 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. 日本語訳 西原 啓輔 2001年5月 訳者は、訳出した文書を利用することにより発生したいかなる損害に対しても 責任を負いません。 本文書には、技術的あるいは翻訳上の誤りがある可能性があります。技術的に 正しい知識を獲得しなければならない場合は、InterNIC/IETFから発行されて いる原文を参照してください。