EMSA-PKCS1-V1_5-ENCODE
9.2. EMSA-PKCS1-v1_5
この符号化方法は決定論的であり、エンコード操作のみを実行します。
EMSA-PKCS1-v1_5-ENCODE (M, emLen)
オプション:
Hash ハッシュ関数(hLenはハッシュ関数の出力のオクテット単位の長さを表します)
入力:
M 符号化するメッセージ
emLen エンコードするメッセージのオクテット単位の長さ(tLen + 11以上)。tLenは、エンコード処理中に計算された特定の値Tをエンコードする識別符号化規則(DER)のオクテット長です。
出力:
EM エンコードされたメッセージ、長さemLenのオクテット文字列
エラー:「メッセージが長すぎます」「意図したエンコードされたメッセージの長さが短すぎます」
手順:
1. メッセージ M にハッシュ関数を適用してハッシュ値 H を生成します。
H = Hash(M)
ハッシュ関数が「メッセージが長すぎます」と出力した場合は、「メッセージが長すぎます」と出力して停止します。
2. ハッシュ関数のアルゴリズムIDとハッシュ値をDERでDigestInfo型のASN.1値(付録A.2.4を参照)にエンコードする。DigestInfo型の構文は以下のとおりである。 code:DigestInfo
DigestInfo ::= SEQUENCE {
digestAlgorithm AlgorithmIdentifier,
digest OCTET STRING
}
最初のフィールドはハッシュ関数を識別し、2番目のフィールドにはハッシュ値が含まれます。TはDigestInfo値のDERエンコード(下記の注記を参照)であり、tLenはTのオクテット単位の長さとします。
3. emLen < tLen + 11 の場合、「意図したエンコードされたメッセージの長さが短すぎます」と出力して停止します。
4. emLen - tLen - 3オクテット(16進値0xff)で構成されるオクテット文字列PSを生成します。PSの長さは少なくとも8オクテットになります。
5. PS、DERエンコードT、その他のパディングを連結してエンコードされたメッセージEMを形成する。
EM = 0x00 || 0x01 || PS || 0x00 || T
6. EMを出力する
Notes:
1. 付録B.1に記載されている9つのハッシュ関数の場合、DigestInfo値のDERエンコードTは次のようになります。
code:example
MD2: (0x)30 20 30 0c 06 08 2a 86 48 86 f7 0d 02 02 05 00 04 10 || H
MD5: (0x)30 20 30 0c 06 08 2a 86 48 86 f7 0d 02 05 05 00 04 10 || H
SHA-1: (0x)30 21 30 09 06 05 2b 0e 03 02 1a 05 00 04 14 || H
SHA-224: (0x)30 2d 30 0d 06 09 60 86 48 01 65 03 04 02 04 05 00 04 1c || H
SHA-256: (0x)30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20 || H
SHA-384: (0x)30 41 30 0d 06 09 60 86 48 01 65 03 04 02 02 05 00 04 30 || H
SHA-512: (0x)30 51 30 0d 06 09 60 86 48 01 65 03 04 02 03 05 00 04 40 || H
SHA-512/224: (0x)30 2d 30 0d 06 09 60 86 48 01 65 03 04 02 05 05 00 04 1c || H
SHA-512/256: (0x)30 31 30 0d 06 09 60 86 48 01 65 03 04 02 06 05 00 04 20 || H
2. このドキュメントのバージョン1.5では、TはDigestInfo値のDERエンコーディングではなく、BERエンコーディングとして定義されていました。特に、少なくとも理論上は、このドキュメント(およびバージョン2.0)で定義されている検証操作によって、PKCS #1 v1.5の仕様に関して有効な署名が拒否される可能性があります。これは、DigestInfoにDER以外の規則が適用されている場合(例えば、基礎となるSEQUENCE型の不定長エンコーディングなど)に発生します。これは実際には問題にならない可能性が高いですが、慎重な実装者は、PKCS #1 v1.5で規定されているBERデコード操作に基づく検証操作を採用することを選択できます。このようにして、PKCS #1 v1.5に基づく有効な実装との互換性が得られます。このような検証操作は、基礎となるBERエンコーディングがDERエンコーディングであるかどうか、そして、署名がこのドキュメントの仕様に関して有効かどうかを示す必要があります。