Appendix B. Supporting Techniques (サポート技術)
本附録には、本文書で使用されるサポート技術の仕様が含まれており、ハッシュ関数とマスク生成関数が含まれます。
B.1. Hash Functions (ハッシュ関数)
ハッシュ関数は、任意長のメッセージを固定長の出力にマッピングするために使用されます。本文書のスキームで使用されるハッシュ関数は、以下の特性を満たす必要があります:
- 原像耐性 (Preimage Resistance): ハッシュ値hが与えられたとき、Hash(m) = hとなるメッセージmを見つけることが計算上困難である
- 第二原像耐性 (Second Preimage Resistance): メッセージm1が与えられたとき、Hash(m1) = Hash(m2)となる異なるメッセージm2を見つけることが計算上困難である
- 衝突耐性 (Collision Resistance): Hash(m1) = Hash(m2)となる任意の2つの異なるメッセージm1とm2を見つけることが計算上困難である
推奨されるハッシュ関数
本文書では以下のハッシュ関数の使用を推奨します:
| ハッシュ関数 | 出力長(ビット) | 出力長(バイト) | 状態 |
|---|---|---|---|
| SHA-1 | 160 | 20 | ⚠️ 廃止(後方互換性のみ) |
| SHA-256 | 256 | 32 | ✅ 推奨 |
| SHA-384 | 384 | 48 | ✅ 推奨 |
| SHA-512 | 512 | 64 | ✅ 推奨 |
| SHA-512/224 | 224 | 28 | ✅ 利用可能 |
| SHA-512/256 | 256 | 32 | ✅ 利用可能 |
ハッシュ関数のASN.1識別子
SHA-256のアルゴリズム識別子:
id-sha256 OBJECT IDENTIFIER ::= {
joint-iso-itu-t(2) country(16) us(840) organization(1)
gov(101) csor(3) nistalgorithm(4) hashalgs(2) 1
}
SHA-384のアルゴリズム識別子:
id-sha384 OBJECT IDENTIFIER ::= {
joint-iso-itu-t(2) country(16) us(840) organization(1)
gov(101) csor(3) nistalgorithm(4) hashalgs(2) 2
}
SHA-512のアルゴリズム識別子:
id-sha512 OBJECT IDENTIFIER ::= {
joint-iso-itu-t(2) country(16) us(840) organization(1)
gov(101) csor(3) nistalgorithm(4) hashalgs(2) 3
}
B.2. Mask Generation Functions (マスク生成関数)
マスク生成関数 (Mask Generation Function, MGF) は、可変長のオクテット文字列と必要な出力長を入力として受け取り、指定された長さの出力オクテット文字列を生成します。マスク生成関数は、ハッシュ関数または他の関数に基づいている場合があります。
マスク生成関数の主な用途は、パディングスキームでランダムな外観のデータを生成することです。
B.2.1. MGF1
MGF1は、ハッシュ関数に基づくマスク生成関数です。MGF1 (mgfSeed, maskLen)は、可変長のシードと必要なマスク長を入力として受け取り、指定された長さのマスクを出力します。
MGF1 (mgfSeed, maskLen)
入力 (Input)
mgfSeed マスク生成シード、任意長のオクテット文字列
maskLen 期待されるマスクの長さ(オクテット単位)
出力 (Output)
mask 長さmaskLenのマスク、オクテット文字列
エラー (Error)
"mask too long" (マスクが長すぎる)
ステップ (Steps)
-
maskLen > 2^32 * hLenの場合、"mask too long"を出力して停止します。
-
Tを空のオクテット文字列とします。
-
カウンタCを0から⌈maskLen / hLen⌉ - 1まで:
- カウンタCを長さ4のオクテット文字列Cに変換します: C = I2OSP(C, 4)
- mgfSeedとCのハッシュ値をTに連結します: T = T || Hash(mgfSeed || C)
-
Tの最初のmaskLenオクテットをマスクとして出力します。
MGF1オプション (MGF1 Options)
MGF1のデフォルトハッシュ関数はSHA-1です。新しいアプリケーションでは、SHA-256以上のハッシュ関数の使用が推奨されます。
MGF1とSHA-256のASN.1識別子:
id-mgf1 OBJECT IDENTIFIER ::= { pkcs-1 8 }
-- MGF1のパラメータは使用されるハッシュ関数
AlgorithmIdentifier { ALGORITHM:IOSet } ::= SEQUENCE {
algorithm ALGORITHM.&id({IOSet}),
parameters ALGORITHM.&Type({IOSet}{@algorithm}) OPTIONAL
}
MGFのセキュリティに関する考慮事項
ランダムオラクルモデルにおいて、基礎となるハッシュ関数が適切に動作する場合、MGF1の出力は計算上、真のランダム文字列と区別できません。これにより、MGF1はOAEPやPSSなどのスキームでの使用に適しています。