FIPS PUB 202
https://csrc.nist.gov/pubs/fips/202/final
doi:10.6028/NIST.FIPS.202
KECCAK など
SHA-3標準:順列ベースハッシュ
および拡張可能な出力関数
連邦情報処理標準出版物 (FIPS PUBS) は、1996 年情報技術管理改革法 (公法 104-106) の第 5131 条および 1987 年コンピュータ セキュリティ法 (公法 100-235) に基づいて商務長官の承認を得て、米国国立標準技術研究所 (NIST) によって発行されます。
1. 規格名称:SHA-3規格:順列ベースハッシュおよび拡張可能出力関数(FIPS PUB 202)。
2. 規格カテゴリ:コンピュータセキュリティ規格、暗号化。
3. 説明:本規格(FIPS 202)は、バイナリデータに対するセキュアハッシュアルゴリズム3(SHA-3)ファミリの関数を規定する。各SHA-3関数は、NISTがSHA-3暗号ハッシュアルゴリズムコンペティションで優勝者に選定したKECCAKアルゴリズムのインスタンスに基づいている。本規格は、KECCAKの基礎となる順列を含む、KECCAK-pファミリの数学的順列も規定する。これらの順列は、将来規定される可能性のある追加の暗号関数の主要構成要素として利用できる可能性がある。
SHA-3ファミリは、4つの暗号ハッシュ関数と2つの拡張可能出力関数(XOF)で構成される。暗号ハッシュ関数は、SHA3-224、SHA3-256、SHA3-384、SHA3-512 と呼ばれ、XOF は SHAKE128 および SHAKE256 と呼ばれます。
ハッシュ関数では、入力はメッセージ、出力は(メッセージ)ダイジェストまたはハッシュ値と呼ばれます。メッセージの長さは変化する可能性がありますが、ダイジェストの長さは固定です。暗号ハッシュ関数は、衝突耐性や原像耐性など、情報セキュリティの多くのアプリケーションで重要な特殊な特性を提供するように設計されたハッシュ関数です。例えば、暗号ハッシュ関数は、メッセージ自体ではなくダイジェストにデジタル署名する場合、デジタル署名方式のセキュリティと効率を向上させます。この文脈において、ハッシュ関数の衝突耐性は、元のメッセージが同じハッシュ値、つまり同じ署名を持つ別のメッセージに変更されないことを保証します。暗号ハッシュ関数の他の用途には、疑似乱数ビット生成、メッセージ認証コード、キー導出関数などがあります。
本規格で規定される4つのSHA-3ハッシュ関数は、FIPS 180-4 1 で規定されるハッシュ関数(SHA-1およびSHA-2ファミリ)を補完するものである。両規格は根本的に異なる設計原理に基づいているため、ハッシュ関数解析における将来の進歩に対する耐性を提供する。設計の多様性に加えて、本規格のハッシュ関数は、FIPS 180-4のハッシュ関数に対して補完的な実装特性および性能特性を提供する。
XOFの場合、出力の長さは個々のアプリケーションの要件に合わせて選択できる。XOFは、ハッシュ関数に特化することも、追加のセキュリティ考慮事項を適用することも、他のさまざまなアプリケーションに使用することもできる。XOFの承認された用途は、NIST Special Publicationsで規定される。
KECCAK-p順列は、認証や暗号化のための鍵付き関数を含む、さまざまな暗号関数の主要コンポーネントとして適しているように設計された。 6つのSHA-3関数は、KECCAK-p1600,24順列の動作モード(モード)と考えることができます。将来的には、この順列または他のKECCAK-p順列の追加モードがFIPS出版物またはNIST特別出版物で規定され、承認される可能性があります。
4. 承認機関:商務長官
5. 維持機関:米国商務省、国立標準技術研究所(NIST)、情報技術研究所(ITL)。
6. 適用範囲:本規格は、米国法典第10編第2315条(10 USC 2315)の適用を受けず、かつ米国法典第40編第11103条(a)(1)(40 USC 11103(a)(1))に定義される国家安全保障システムの範囲外である、機微な非機密情報の保護に関して、すべての連邦政府省庁および機関に適用される。連邦政府のアプリケーションで安全なハッシュアルゴリズムが必要とされる場合(他の暗号アルゴリズムおよびプロトコルの構成要素として必要とされる場合を含む)、本規格または連邦情報処理規格(FIPS)180のいずれかを実装しなければならない。本規格は、連邦政府機関以外でも採用および使用することができる。
7. 仕様:連邦情報処理標準(FIPS)202、SHA-3標準:
順列ベースのハッシュおよび拡張可能出力関数(添付)。
8. 実装:連邦政府機関は、KECCAK-p順列の実装を、本標準で規定されているSHA-3関数など、FIPS承認またはNIST推奨の動作モード内でのみ使用しなければならない。SHA-3関数は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組み合わせで実装することができる。これらの関数の実装は、暗号アルゴリズム検証プログラムによって検証されたもののみが、本標準に準拠しているとみなされる。検証プログラムに関する情報は、http://csrc.nist.gov/groups/STM/cavp/index.html で入手可能である。
9. 実装スケジュール:本規格は即時発効します。NIST特別刊行物の新規または改訂版の発行に依存する本規格の適用または拡張は、対応する特別刊行物の最終発行時に発効します。
10. 特許:本規格のSHA-3関数の実装は、米国または外国の特許によって保護されている場合があります。
11. 輸出管理:特定の暗号装置およびそれらに関する技術データは、連邦輸出規制の対象となります。本規格を実装した暗号モジュールおよびそれらに関する技術データの輸出は、これらの連邦規制に準拠し、米国商務省輸出管理局の許可を得る必要があります。輸出規制に関する情報は、http://www.bis.doc.gov/index.htm で入手できます。
12. 資格:本規格は、情報セキュリティアプリケーションに適した構成要素となる数学関数を規定していますが、本規格への適合は、特定の実装が安全であることを保証するものではありません。各機関または省庁の責任当局は、全体的な実装が許容可能なレベルのセキュリティを提供することを保証するものとします。
本規格は、その適切性を評価するため、5年ごとに見直されます。
13. 免除手続き:連邦情報セキュリティマネジメント法(FISMA)は、商務長官によって義務付けられたFIPSの免除を認めていません。
14. 本規格の入手先:本出版物は、http://csrc.nist.gov/publications/ から電子的に入手できます。NISTが発行するその他のコンピュータセキュリティ出版物も、同じウェブサイトから入手できます。
連邦情報処理標準規格 202
SHA-3 標準の仕様:順列ベースハッシュおよび拡張可能出力関数
5 KECCAK
KECCAKはスポンジ関数のファミリーであり、元々は8で定義されました。KECCAKのパディング規則はマルチレートパディングと呼ばれ、5.1節で規定されています。KECCAKのパラメータと基礎となる順列は5.2節で説明されており、より小規模なKECCAK関数ファミリーであるKECCAKcが明示的に規定されており、これは6節のSHA-3関数を定義するのに十分です。
5.1 pad10*1 の仕様
アルゴリズム 9: pad10*1(x, m)
入力:
正の整数 x;
非負の整数 m。
出力:
m + len(P) が x の正の倍数となるような文字列 P。
手順:
1. j = (- m - 2) mod x とする。
2. $ P = 1 || 0^j || 1 を返す。
したがって、「pad10*1」のアスタリスクは、必要な長さの出力文字列を生成するために、必要に応じて「0」ビットが省略されるか繰り返されることを示します。
5.2 KECCAKcの仕様
KECCAKは、$ KECCAK-p[b, 12 + 2l] 順列(3.3節で定義)を基礎関数とし、pad10*1(5.1節で定義)をパディング規則とするスポンジ関数の族である。この族は、レートrと容量cの任意の選択によってパラメータ化され、$ r + cは {25, 50, 100, 200, 400, 800, 1600}、すなわち表1のbの7つの値のいずれかとなる。
b = 1600の場合に限定する場合、KECCAK族は$ KECCAK[c] と表記される。この場合、rはcの選択によって決定される。特に、
$ KECCAK[c] = SPONGE[KECCAK-p[1600, 24], pad10*1, 1600 – c] .
したがって、入力ビット列Nと出力長dが与えられた場合、
$ KECCAK[c] (N, d) = SPONGE[KECCAK-p[1600, 24], pad10*1, 1600 – c] (N, d)
となります。
6. SHA-3 関数仕様
セクション 6.1 では、4 つの SHA-3 ハッシュ関数が定義され、セクション 6.2 では、2 つの SHA-3 XOF が定義されています。セクション 6.3 では、各 SHA-3 XOF の代替定義が中間関数の観点から示されています。
6.1 SHA-3 ハッシュ関数
メッセージ M が与えられた場合、セクション 5.2 で指定された KECCAK[c] 関数から、M に 2 ビットのサフィックスを追加し、出力の長さを指定することによって、4 つの SHA-3 ハッシュ関数が次のように定義されます:
code:sha3
SHA3-224(M) = KECCAK448 (M || 01, 224);
SHA3-256(M) = KECCAK512 (M || 01, 256);
SHA3-384(M) = KECCAK768 (M || 01, 384);
SHA3-512(M) = KECCAK1024 (M || 01, 512).
いずれの場合も、容量はダイジェスト長の 2 倍、つまり c = 2d であり、結果として得られる KECCAK[c] への入力 N は、サフィックスが追加されたメッセージ、つまり N = M || 01 です。サフィックスはドメイン分離をサポートします。つまり、SHA-3 ハッシュ関数から発生する KECCAK[c] への入力を、セクション 6.2 で定義された SHA-3 XOF から発生する入力、および将来定義される可能性のある他のドメインから発生する入力と区別します。
6.2 SHA-3 Extendable-Output Functions
メッセージ M が与えられた場合、2 つの SHA-3 XOF、SHAKE128 と SHAKE256 は、セクション 5.2 で指定された KECCAK[c] 関数から、任意の出力長 d に対して、M に 4 ビットの接尾辞を追加することによって定義されます。
code:shake
SHAKE128(M, d) = KECCAK256 (M || 1111, d),
SHAKE256(M, d) = KECCAK512 (M || 1111, d).
追加ビット 1111 の目的については、セクション 6.3 で説明します。
6.3 SHA-3 拡張可能出力関数の代替定義
RawSHAKE128 と RawSHAKE256 と呼ばれる 2 つの追加のスポンジ関数は、KECCAK[c] の次のインスタンスとして定義されます。ここで、入力文字列は J で示され、出力の長さは d で示されます。
code:RawSHAKE
RawSHAKE128(J, d) = KECCAK256 (J || 11, d),
RawSHAKE256(J, d) = KECCAK512 (J || 11, d).
これらの関数は、セクション6.2の定義と同等のSHAKE128とSHAKE256の代替定義を可能にします。特に、
code:shakeRawshake
SHAKE128(M, d) = RawSHAKE128 (M || 11, d),
SHAKE256(M, d) = RawSHAKE256 (M || 11, d).
KECCAK[c]への次の入力Nは、これらの入力MとJのパディングの結果です。
N = J || 11 = M || 11 || 11.
B.2 Hexadecimal Form of Padding Bits
SHA-3 関数の場合、2 ビットまたは 4 ビットのサフィックスがメッセージ M に追加され、KECCAK[c] への入力文字列 N が生成され、追加のビットがマルチレート パディング ルールの一部として追加されます。ほとんどのアプリケーションでは、メッセージはバイト アラインメントされます。つまり、非負の整数 m の場合、len(M) = 8m です。この場合、メッセージに追加される q で表されるバイトの総数は、m とレート r によって次のように決定されます。
q = (r/8) – (m mod (r/8)).
この場合、q の値は、セクション B.1 で指定されている変換関数に従って、これらのバイトの 16 進形式を決定します。結果として得られるパディングされたメッセージは、表 6 にまとめられています。
table:表6 バイト整列メッセージの SHA-3 パディングの 16 進形式
SHA-3関数の型 パディングバイト数 埋められたメッセージ
Hash q=1 M || 0x86
Hash q=2 M || 0x0680
Hash q>2 M || 0x06 || 0x00... || 0x80
XOF q=1 M || 0x9F
XOF q=2 M || 0x1F80
XOF q>2 M || 0x1F || 0x00... || 0x80