Top PageSecurity TopAlgorithm

鍵管理アルゴリズム

CMSでサポートされる鍵管理アルゴリズムについて示す。

鍵配送アルゴリズム (Key Transport Algorithms)

封筒化データ(Enveloped-data)タイプ及び、AuthenticatedDataタイプの のRecipientInfo Type (受取人情報)において、 KeyTransRecipientInfoを選択した場合に使用可能な鍵管理アルゴリズムを示す。

CMSでは、RSA (PKCS #1 v1.5)を使った鍵配送アルゴリズムが定義される。

RSA (PKCS #1 v1.5)

RSA
1.2.840.113549.1.1.1

RSA暗号による鍵配送の詳細は、"RFC 2313 [PKCS#1]"を参照。
parametersは、NULLを含めなければならない。

parameters ::= NULL

Triple-DESの鍵を使う場合、 RSA暗号化に先立って、Triple-DES鍵で構成しているそれぞれのDES鍵の為、パリティビットを適合させなければならない。

鍵合意アルゴリズム (Key Agreement Algorithms)

封筒化データ(Enveloped-data)タイプ及び、AuthenticatedDataタイプの のRecipientInfo Type (受取人情報)において、 KeyAgreeRecipientInfoを選択した場合に使用可能な鍵管理アルゴリズムを示す。

鍵合意アルゴリズムを使用する場合、更に鍵暗号化アルゴリズムも必要になる。
したがって、鍵合意には、それぞれのコンテンツ暗号用のアルゴリズムに対して、 鍵暗号化のアルゴリズムが定義されている必要がある。
Triple-DES及びRC2の共通鍵をラップするためのアルゴリズムは、"RFC 3217 [WRAP]"で定義される。

X9.42 Ephemeral-Static Diffie-Hellman

Ephemeral-Static Diffie-Hellmanによる鍵管理の詳細は、"RFC 2631 [DH-X9.42]"を参照。
このアルゴリズムを使う場合は、KeyAgreeRecipientInfoフィールドは以下の通りにしなければならない。

Versionは、3としなければならない。

originatorは、 originatorKeyを選択しなければならない。
その際、algorithmは、以下のdh-public-numberのoidとしなけばならない。

dh-public-number
1.2.840.10046.2.1

ukmは、有っても無くても良いが、存在する場合は、 短期間の秘密鍵が一回以上使用される場合において、違う鍵暗号化用の鍵が生成される事を確実にする為に使われなければならない。

keyEncryptionAlgorithmは、以下のid-alg-ESDHのoidとしなければならない。
parametersは、共通鍵(データ暗号用)を暗号化する為に使われた共通鍵暗号アルゴリズムを示す。
(鍵暗号化用の鍵は、鍵管理アルゴリズム"ESDH"を使って生成したペアの鍵暗号化用の鍵)

id-alg-ESDH
1.2.840.113549.1.9.16.3.55
parameters ::= AlgorithmIdentifier

recipientEncryptedKeysKeyAgreeRecipientIdentifierは、以下の何れかを格納しなければならない。
両方のケースにおいて受取人の公開鍵証明書には、静的な受取人の公開鍵を含む。
・受取人の公開鍵証明書を識別するissuerAndSerialNumber。
・受取人の公開鍵証明書を識別する主体鍵が含まれたRecipientKeyIdentifier。
recipientEncryptedKeysのEncryptedKeyは、 ESDHが生成したペアの鍵暗号用の鍵(parametersで指定された鍵暗号用のアルゴリズムで使われた)で、 暗号化されたコンテンツ暗号化用の共通鍵を含まなければならない。

X9.42 Static-Static Diffie-Hellman

Static-Static Diffie-Hellmanによる鍵管理の詳細は、"RFC 2631 [DH-X9.42]"を参照。
このアルゴリズムを使う場合は、KeyAgreeRecipientInfoフィールドは以下の通りにしなければならない。

Versionは、3としなければならない。

originatorは、 issuerAndSerialNumberか、 subjectKeyIdentifierを選択しなければならない。
両方のケースにおいて受取人の公開鍵証明書には、静的な送信者の公開鍵を含む。
"RFC 3279 [CERTALGS]"は、作成者の公開鍵証明書に格納されている AlgorithmIdentifierのparameterの構造と値を定義する。
作成者の公開鍵証明書のsubjectPublicKeyInfoフィールドには、 以下のdh-public-numberオブジェクトを含めなければならない。

dh-public-number
1.2.840.10046.2.1

ukmは、存在しなければならない。
ukmは、同じ発信者と受信者間のそれぞれメッセージの為に、違う鍵暗号化用の鍵が生成される事を確実にする。

keyEncryptionAlgorithmは、以下のid-alg-SSDHのoidとしなければならない。
parametersは、共通鍵(データ暗号用)を暗号化する為に使われた共通鍵暗号アルゴリズムを示す。
(鍵暗号化用の鍵は、鍵管理アルゴリズム"SSDH"を使って生成したペアの鍵暗号化用の鍵)

id-alg-SSDH
1.2.840.113549.1.9.16.3.10
parameters ::= AlgorithmIdentifier

recipientEncryptedKeysKeyAgreeRecipientIdentifierは、以下の何れかを格納しなければならない。
両方のケースにおいて受取人の公開鍵証明書には、静的な受取人の公開鍵を含む。
・受取人の公開鍵証明書を識別するissuerAndSerialNumber。
・受取人の公開鍵証明書を識別する主体鍵が含まれたRecipientKeyIdentifier。
recipientEncryptedKeysのEncryptedKeyは、 SSDHが生成したペアの鍵暗号用の鍵(parametersで指定された鍵暗号用のアルゴリズムで使われた)で、 暗号化された、コンテンツ暗号化用の共通鍵を含まなければならない。

共通鍵暗号化鍵アルゴリズム (Symmetric Key-Encryption Key Algorithms)

封筒化データ(Enveloped-data)タイプ及び、AuthenticatedDataタイプの のRecipientInfo Type (受取人情報)において、 KEKRecipientInfoを選択した場合に使用可能な鍵管理アルゴリズムを示す。

CMSでは、Triple-DES, RC2用の鍵暗号化の鍵を用いる、共通鍵暗号化鍵アルゴリズムが定義される。
RC2暗号をサポートする場合、RC2の128bitの共通鍵は鍵暗号化用の鍵の様に使われ RC2ParameterVersionのparameterは58と設定する。
CMS手法は、ミックスされた鍵暗号化とコンテンツ暗号化のアルゴリズムをサポートする。
例えば、コンテンツ暗号化用の40bitのRC2鍵は、 168-bitのTriple-DESの鍵暗号化用の鍵か、128-bitのRC2の鍵暗号化用の鍵でラップされる。

鍵合意アルゴリズムの出力は鍵暗号化用の鍵で、この鍵はコンテンツ暗号化用の鍵を暗号化する為に使われる。
鍵合意をサポートする為に、鍵ラップ・アルゴリズムの認証は、
封筒化データ(Enveloped-data)タイプ及び、AuthenticatedDataタイプの
RecipientInfos KeyAgreeRecipientInfo keyEncryptionAlgorithmフィールドに格納されるが、 本質的にアクセス資格認証で提供される鍵合意アルゴリズムは、AuthenticatedDataだけで使われるべきである。
ラップされたコンテンツ暗号化用の鍵は、
EnvelopedData RecipientInfos KeyAgreeRecipientInfo RecipientEncryptedKeys encryptedKey フィールドに格納され、
ラップされたメッセージ・アクセス資格認証用の鍵は、
AuthenticatedData RecipientInfos KeyAgreeRecipientInfo RecipientEncryptedKeys encryptedKey フィールドに格納される。

Triple-DES Key Wrap

id-alg-CMS3DESwrap
1.2.840.113549.1.9.16.3.6
parameters ::= NULL

Triple-DESのコンテンツ暗号化用の共通鍵を、Triple-DES鍵暗号化用の鍵で暗号化する為に使うアルゴリズムは、" RFC 3217 [WRAP]"の3.1項を参照。

RC2 Key Wrap

id-alg-CMSRC2wrap
1.2.840.113549.1.9.16.3.7
parameters ::= RC2ParameterVersion
RC2ParameterVersion ::= INTEGER

RC2のコンテンツ暗号化用の共通鍵を、RC2鍵暗号化用の鍵で暗号化する為に使うアルゴリズムは、" RFC 3217 [WRAP]"の4.1項を参照。

鍵導出アルゴリズム (Key Derivation Algorithms)

封筒化データ(Enveloped-data)タイプ及び、AuthenticatedDataタイプの のRecipientInfo Type (受取人情報)において、 PasswordRecipientinfoを選択した場合に使用可能な鍵管理アルゴリズムを示す。

鍵導出アルゴリズムは、パスワードによる鍵管理手法で使われ、パスワードを鍵暗号化用の鍵に変換する為に使われる。
パスワードから導き出された鍵暗号化用の鍵(KEK)は、コンテンツ暗号化用の鍵(CEK)を暗号化する為に使われる。

暗号化(パスワードから導き出された鍵暗号化用の鍵で)されたコンテンツ暗号化用の鍵は、
EnvelopedData RecipientInfos PasswordRecipientInfo encryptedKeyに格納される。
暗号化(パスワードから導き出された鍵暗号化用の鍵で)されたメッセージ・アクセス資格認証用の鍵は、
AuthenticatedData RecipientInfos PasswordRecipientInfo encryptedKeyに格納される。

鍵導出アルゴリズムでは、以下に示す2つのアルゴリズムを指定する。

Key Derivation Algorithm

パスワードから鍵暗号化用の鍵"KEK"を導出するアルゴリズム。

Key Encryption Algorithms

コンテンツ用の暗号鍵CEK(乱数から生成される)を暗号化する暗号アルゴリズム。
鍵は、鍵導出関数でパスワードから導出した鍵を使用する。