メインコンテンツまでスキップ

Appendix B. Supporting Techniques (サポート技術)

本附録には、本文書で使用されるサポート技術の仕様が含まれており、ハッシュ関数とマスク生成関数が含まれます。

B.1. Hash Functions (ハッシュ関数)

ハッシュ関数は、任意長のメッセージを固定長の出力にマッピングするために使用されます。本文書のスキームで使用されるハッシュ関数は、以下の特性を満たす必要があります:

  1. 原像耐性 (Preimage Resistance): ハッシュ値hが与えられたとき、Hash(m) = hとなるメッセージmを見つけることが計算上困難である
  2. 第二原像耐性 (Second Preimage Resistance): メッセージm1が与えられたとき、Hash(m1) = Hash(m2)となる異なるメッセージm2を見つけることが計算上困難である
  3. 衝突耐性 (Collision Resistance): Hash(m1) = Hash(m2)となる任意の2つの異なるメッセージm1とm2を見つけることが計算上困難である

推奨されるハッシュ関数

本文書では以下のハッシュ関数の使用を推奨します:

ハッシュ関数出力長(ビット)出力長(バイト)状態
SHA-116020⚠️ 廃止(後方互換性のみ)
SHA-25625632✅ 推奨
SHA-38438448✅ 推奨
SHA-51251264✅ 推奨
SHA-512/22422428✅ 利用可能
SHA-512/25625632✅ 利用可能

ハッシュ関数の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)

  1. maskLen > 2^32 * hLenの場合、"mask too long"を出力して停止します。

  2. Tを空のオクテット文字列とします。

  3. カウンタCを0から⌈maskLen / hLen⌉ - 1まで:

    • カウンタCを長さ4のオクテット文字列Cに変換します: C = I2OSP(C, 4)
    • mgfSeedとCのハッシュ値をTに連結します: T = T || Hash(mgfSeed || C)
  4. 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などのスキームでの使用に適しています。