| セキュアハッシュアルゴリズム | |
|---|---|
| コンセプト | |
| ハッシュ関数、SHA、DSA | |
| 主な基準 | |
| SHA-0、SHA-1、SHA-2、SHA-3 | |
| 一般的な | |
|---|---|
| デザイナー | グイド・ベルトーニ、ジョアン・デーメン、ミカエル・ピーテルス、ジル・ヴァン・アッシュ。 |
| 初版 | 2016 |
| シリーズ | (SHA-0)、SHA-1、SHA-2、SHA-3 |
| 認証 | FIPS 202 の公開 |
| 詳細 | |
| ダイジェストサイズ | 任意 |
| 構造 | スポンジ構造 |
| スピード | 典型的なx86-64ベースのマシンでは、Keccak-f[1600]に1024ビットのXORを加えた12.6cpbとなり、 [1]これはほぼSHA2-256に相当します。 |
| 最高の公開暗号解読 | |
| Keccak-512に対する原像攻撃は8ラウンドに短縮され、2 511.5の時間と2 508のメモリを必要とする。[2] ゼロサム識別子はKeccak-f[1600]の24ラウンド全体に存在するが、ハッシュ関数自体を攻撃するために使用できない[3] | |
SHA-3(セキュアハッシュアルゴリズム3 )は、セキュアハッシュアルゴリズム標準ファミリの最新[4]メンバーであり、2015年8月5日にNISTによってリリースされました。 [5] [6] [7]同じ標準シリーズの一部ですが、SHA-3はSHA-1やSHA-2のMD5のような構造とは内部的に異なります。
SHA-3は、Guido Bertoni、Joan Daemen、Michaël Peeters、Gilles Van AsscheによってRadioGatúnを基に設計された、より広範な暗号プリミティブファミリKeccak(/ ˈ k ɛ tʃ æ k /または/ ˈ k ɛ tʃ ɑː k /)[8] [9]のサブセットです。Keccakの作者は、 NISTによって(まだ)標準化されていない関数の追加用途を提案しており、ストリーム暗号、認証暗号化システム、特定のアーキテクチャでハッシュを高速化する「ツリー」ハッシュ方式、[10] [11]およびAEAD暗号KeyakとKetjeが含まれています。[12] [13]
Keccakはスポンジ構築と呼ばれる新しいアプローチに基づいています。[14]スポンジ構築は、幅広いランダム関数またはランダム順列に基づいており、任意の量のデータ(スポンジ用語では「吸収」)を入力し、任意の量のデータ(「圧縮」)を出力し、以前のすべての入力に関して疑似ランダム関数として機能します。これにより、大きな柔軟性がもたらされます。
2007年時点で、NISTはSHA-2を撤回したり、改訂版セキュアハッシュ標準から削除する予定はありませんでした。[更新が必要? ] SHA-3の目的は、必要に応じて現在のアプリケーションでSHA-2を直接置き換えることができ、NISTのハッシュアルゴリズムツールキット全体の堅牢性を大幅に向上させることです。[15]
メッセージのサイズが小さい場合、Keccak アルゴリズムと SHA-3 関数の作成者は、調整されたパラメータと余分なオーバーヘッドのない新しいツリー ハッシュ モードを備えた、より高速な関数 KangarooTwelve を使用することを推奨しています。
歴史
Keccakアルゴリズムは、Guido Bertoni、Joan Daemen ( Vincent RijmenとともにRijndael暗号を共同設計した人物でもある)、Michaël Peeters、Gilles Van Asscheの成果である。これは、以前のハッシュ関数設計PANAMAとRadioGatúnに基づいている。PANAMAは、1998年にDaemenとCraig Clappによって設計された。PANAMAの後継であるRadioGatúnは、Daemen、Peeters、Van Asscheによって設計され、2006年にNISTハッシュワークショップで発表された。[16]参照実装のソースコードは、 CC0権利放棄によりパブリックドメインに提供された。[17]
2006年、NISTは新しいハッシュ標準SHA-3を作成するためにNISTハッシュ関数コンペティションを開催し始めました。SHA- 3はSHA-2に代わるものではありません。SHA-2に対する重大な攻撃が公に実証されていないためです[更新が必要] 。MD5 、SHA-0、SHA-1に対する攻撃が成功したため、[18] [19] NISTは代替の異なる暗号ハッシュの必要性を感じ、それがSHA-3になりました。
準備期間の後、2008年末までに入学願書を提出することになっていた。Keccakは51人の候補者の1人として受け入れられた。2009年7月、14のアルゴリズムが第2ラウンドに選ばれた。Keccakは2010年12月の最終ラウンドに進んだ。[20]
コンテスト中、参加者は発見された問題に対処するためにアルゴリズムを「微調整」することが許可されました。Keccakに加えられた変更は次のとおりです。[21] [22]
- 安全性をより重視するため、弾丸の数は12 + ℓから12 + 2ℓに増加されました。
- メッセージのパディングは、より複雑なスキームから、以下に説明する単純な 10 * 1 パターンに変更されました。
- レートr は、最も近い 2 の累乗に切り捨てられるのではなく、セキュリティ制限まで増加されました。
2012年10月2日、ケチャックがコンテスト優勝者に選ばれた。[8]
2014年にNISTはFIPS 202「SHA-3標準:順列ベースのハッシュと拡張可能な出力関数」の草案を公開した。 [23] FIPS 202は2015年8月5日に承認された。[24]
2015年8月5日、NISTはSHA-3がハッシュ標準になったと発表した。[25]
論争の弱まり
2013年初頭、NISTは、SHA-3標準の「容量」(全体的な強度と速度のパラメータ)について、提出されたものとは異なる値を選択すると発表した。[26] [27]この変更は混乱を引き起こした。
ハッシュ関数のコンペティションでは、少なくとも SHA-2 インスタンスと同程度のセキュリティを持つハッシュ関数が求められました。つまり、dビットの出力は、衝突攻撃に対してd /2 ビットの耐性と、原像攻撃に対してdビットの耐性を持つ必要があり、これはdビットの出力で達成可能な最大値です。Keccak のセキュリティ証明では、「容量」cに基づいてセキュリティ レベルを調整でき、衝突攻撃と原像攻撃の両方に対してc /2 ビットの耐性を提供します。元のコンペティション ルールを満たすために、Keccak の著者はc = 2 dを提案しました。発表された変更は、すべての形式の攻撃に対して同じd /2 ビットのセキュリティを受け入れ、 c = d を標準化することでした。これにより、各反復でハッシュされる入力がdビット追加されるため、Keccak の速度が向上します。ただし、ハッシュ関数はもはや SHA-2 と同じ原像攻撃耐性を持つ代替品ではなく、半分に削減されるため、量子コンピューティングの進歩に対して脆弱になり、実質的にさらに半分に削減されます。[28]
2013 年 9 月、Daniel J. Bernstein はNISTハッシュ フォーラム メーリング リスト[29]で、SHA-3 仕様には含まれていないものの、元々 Keccak のデフォルトとして提案されていた 576 ビット容量にセキュリティを強化することを提案しました。[30]これにより、少なくとも SHA3-224 と SHA3-256 には SHA-2 の前身と同じプリイメージ耐性が提供されますが、SHA3-384 と SHA3-512 は SHA-2 の前身よりもプリイメージ耐性が大幅に低くなります。9 月下旬、Keccak チームは、SHA-3提案で既にオプションとしてc = 256 を設定することで 128 ビットのセキュリティを提案したと述べて応答しました。 [31]削減された容量は彼らの意見では正当でしたが、否定的な反応を考慮して、すべてのインスタンスで容量をc = 512ビットに上げることを提案しました。これは、256ビットのセキュリティレベルまでのこれまでの標準と同等であり、妥当な効率性を提供しますが、[32] SHA2-384およびSHA2-512が提供する384ビット/512ビットのプリイメージ耐性はありません。著者は、「256ビットを超えるセキュリティ強度レベルを主張したり、それに依存したりすることは意味がありません」 と述べています。
2013 年 10 月初旬、ブルース・シュナイアーは、アルゴリズムの受け入れに悪影響を及ぼす可能性があるとして NIST の決定を批判し、次のように述べました。
空気中に不信感が漂いすぎている。NISTは、誰も信頼せず、誰も(強制された人を除いて)使用しないアルゴリズムを公開するリスクを負っている。[33]
彼は後に以前の発言を撤回し、次のように述べた。
NIST がアルゴリズムに「内部変更」を加えたと書いたのは誤りでした。それは私のずさんな発言でした。Keccak 順列は変更されていません。NIST が提案したのは、パフォーマンスの名の下にハッシュ関数の容量を減らすことでした。Keccak の優れた機能の 1 つは、高度に調整可能であることです。[33]
独立系ソフトウェア開発会社の暗号学者兼上級開発者であるポール・クロウリー氏は、Keccak は調整可能であるはずであり、1 つのプリミティブ内で異なるセキュリティ レベルを設定する理由はないとして、この決定への支持を表明しました。また、次のように付け加えました。
確かに、参加者に一定のセキュリティレベルを要求しておきながら、その後、異なるセキュリティレベルの標準を公開したのは、コンテストにとって少し残念なことです。しかし、コンテストを再開する以外に、今それを修正する方法はありません。間違いをそのままにしておくよう要求しても、誰にとっても状況は改善されません。[34]
Keccakに内部変更が加えられた可能性があるという混乱があったが、元のチームによって解決され、NISTのSHA-3の提案はKeccakファミリーのサブセットであり、コンテストに提出された参照コードを使用してテストベクトルを生成でき、この提案は彼らとNISTハッシュチームとの間の一連の議論の結果であると述べた。[35]
この論争を受けて、2013年11月にNISTのジョン・ケルシーは、すべてのSHA-2ドロップイン置換インスタンスに対して、元のc = 2 d提案に戻すことを提案した。 [36]この元に戻りは、その後のドラフト[37]と最終リリース[5]で確認された。
デザイン

SHA-3 はスポンジ構造[14]を採用しており、この構造ではデータがスポンジに「吸収」され、その結果が「絞り出され」ます。吸収フェーズでは、メッセージ ブロックが状態のサブセットにXOR され、その後、置換関数 を使用して全体が変換されます。(置換というと混乱するかもしれません。これは技術的には状態空間の置換、つまり要素を含むセットの置換ですが、状態ベクトルのビットを単に置換する以上のことを行います。[要出典] )「絞り出し」フェーズでは、出力ブロックが同じ状態のサブセットから、状態変換関数 と交互に読み取られます。書き込まれて読み取られる状態の部分のサイズは「レート」( と表記) と呼ばれ、入出力の影響を受けない部分のサイズは「容量」( と表記) と呼ばれます。容量によって方式のセキュリティが決まります。最大のセキュリティ レベルは容量の半分です。
入力ビット文字列、パディング関数、幅 のビットブロックを操作する置換関数、レート、出力長 が与えられた場合、容量 が得られ、長さ のビット文字列を生成するスポンジ構造は次のように機能します。[6] : 18
- pad関数を使用して入力Nを埋め込むと、長さが(整数)で割り切れるパディングされたビット文字列Pが生成されます。
- Pをn個の連続するrビットの断片P 0 , ..., P n −1に分割する
- 状態Sをbゼロビットの文字列に初期化する
- 入力を状態に吸収する:各ブロックP iについて:
- P i の末尾をcビットのゼロ文字列で拡張し、長さbの文字列を生成する。
- SとXORする
- ブロック順列fを結果に適用し、新しい状態Sを生成する。
- Zを空の文字列に初期化する
- Zの長さはdより小さいです:
- Sの最初のrビットをZに追加する
- Zがまだdビット未満の場合、 f をSに適用して新しい状態Sを生成する。
- Zをdビットに切り捨てる
内部状態Sには、Zに出力される情報に加えてcビットの追加情報が含まれているため、 Merkle–Damgård 構造に基づく SHA-2、SHA-1、MD5 などのハッシュが受けやすい長さ拡張攻撃を防ぐことができます。
SHA-3では、状態Sは5×5のwビットワード配列(w = 64)で構成され、 b = 5×5× w = 5×5×64 =合計1600ビットです。Keccakは、1ビットまでのより小さな2の累乗ワードサイズw(合計25ビットの状態)に対しても定義されています。小さな状態サイズは暗号解読攻撃のテストに使用でき、中間の状態サイズ(w = 8、200ビットからw = 32、800ビット)は実用的な軽量アプリケーションで使用できます。[12] [13]
SHA3-224、SHA3-256、SHA3-384、および SHA3-512 インスタンスの場合、rはdより大きいため、圧縮フェーズで追加のブロックの順列は必要ありません。状態の先頭のdビットが目的のハッシュです。ただし、SHAKE128 と SHAKE256 では任意の出力長が許可されるため、最適な非対称暗号化パディングなどのアプリケーションで役立ちます。
パディング
メッセージをrビットのブロックに均等に分割するには、パディングが必要です。SHA-3 は、パディング機能でパターン 10…01 を使用します。つまり、1 ビット、その後に 0 個以上の 0 ビット (最大r − 1 )、最後に 1 ビットが続きます。
r − 1 個のゼロ ビットの最大値は、最後のメッセージ ブロックの長さがr − 1ビットのときに発生します。その後、最初の 1 ビットの後に別のブロックが追加され、最後の 1 ビットの前にr − 1 個のゼロ ビットが含まれます。
メッセージの長さがすでにrで割り切れる場合でも、2つの1ビットが追加されます。[6] : 5.1 この場合、1ビットのブロックに続いてr -2個の0ビットのブロックと別の1ビットを含む別のブロックがメッセージに追加されます。これは、 rで割り切れる長さのメッセージが、パディングのように見えるもので終わっている場合、それらのビットが削除されたメッセージと同じハッシュが生成されないようにするために必要です。
最初の 1 ビットが必要なのは、末尾のいくつかの追加の 0 ビットのみが異なるメッセージでは同じハッシュが生成されないようにするためです。
最後の 1 ビットの位置は、どのレートrが使用されたかを示します (マルチレート パディング)。これは、セキュリティ証明が異なるハッシュ バリアントに対して機能するために必要です。これがないと、同じ短いメッセージの異なるハッシュ バリアントは、切り捨てまで同じになります。
ブロック順列
ブロック変換fは、SHA-3ではKeccak-f[1600]であり、 XOR、AND、NOT演算を使用する順列であり、ソフトウェアとハードウェアの両方で簡単に実装できるように設計されています。
これは、任意の 2 の累乗ワードサイズ(w = 2 ℓビット) に対して定義されます。メインの SHA-3 サブミッションでは、64 ビット ワード ( ℓ = 6)が使用されます。
状態は5 × 5 × wのビット配列と考えることができます。リトル エンディアンのビット番号規則と行優先のインデックスを使用して、a [ i ][ j ][ k ]を入力のビット(5 i + j ) × w + kとします。つまり、iは行、j は列、k はビットを選択します。
インデックス演算は、最初の 2 つの次元については 5 を法として実行され、3 番目の次元についてはw を法として実行されます。
基本的なブロック順列関数は、 5 つのステップからなる12 + 2 ℓラウンドで構成されます。
- θ(シータ)
- 5 w ( w = 64の場合は 320 ) の 5 ビット列のそれぞれのパリティを計算し、規則的なパターンで 2 つの近くの列に排他的論理和をとります。正確には、 a [ i ][ j ][ k ] ← a [ i ][ j ][ k ] ⊕ parity(a[0...4][ j -1][ k ]) ⊕ parity(a[0...4][ j +1][ k −1])
- ρ(ロー)
- 25ワードのそれぞれを、異なる三角数0、1、3、6、10、15、...でビット単位で回転します。正確には、 a [0][0]は回転せず、すべての0 ≤ t < 24に対して、a [ i ][ j ][ k ] ← a [ i ][ j ][ k −( t +1)( t +2)/2]となります。
- π(パイ)
- 25 個の単語を固定パターンで並べ替えます。a [3 i +2 j ][ i ] ← a [ i ][ j ]。
- χ (カイ)
- x ← x ⊕ (¬ y & z )を使用して、行に沿ってビット単位で結合します。正確には、a [ i ][ j ][ k ] ← a [ i ][ j ][ k ] ⊕ (¬ a [ i ][ j + 1 ][ k ] & a [ i ][ j + 2 ][ k ])です。これは SHA-3 で唯一の非線形演算です。
- ι(イオタ)
- ラウンド定数を状態の 1 ワードに排他的論理和します。正確には、ラウンドnでは、0 ≤ m ≤ ℓに対して、[0][0][2 m −1]が次数 8 のLFSRシーケンスのビットm + 7 nと XOR されます。これにより、他の手順で保持されている対称性が破壊されます。
スピード
長いメッセージのSHA-3ハッシュの速度は、 f = Keccak-f[1600]の計算と、 Sと拡張P iのXOR演算、つまりb = 1600ビットの演算によって左右されます。ただし、拡張P iの最後のcビットはいずれにしても0であり、0とのXORはNOPであるため、 rビットのみのXOR演算を実行すれば十分です(SHA3-224の場合はr = 1600 − 2 × 224 = 1152ビット、SHA3-256の場合は1088ビット、SHA3-384の場合は832ビット、SHA3-512の場合は576ビット)。rが低いほど(逆にc = b − r = 1600 − rが高いほど)、ハッシュの効率は悪くなりますが、ハッシュの安全性は高まります。これは、計算コストの高いfを適用する前に、メッセージのビット数が少なくなり、状態に XOR できる(迅速な操作)ためです。著者らは、Keccak-f[1600] と 1024 ビットの XOR を組み合わせたソフトウェア実装の速度を次のように報告しています。[1]これは、SHA3-256 にほぼ相当します。
- IA-32、Intel Pentium 3で57.4cpb [ 38]
- IA-32+MMX、Intel Pentium 3 で 41 cpb
- IA-32+SSE、Intel Core 2 Duo、または AMD Athlon 64 では 20 cpb
- 一般的な x86-64 ベースのマシンでは 12.6 cpb
- IA-64では6~7cpb [1]
x86-64上のSHA3-256の正確な値は、CPUに応じて11.7~12.25 cpbとBernsteinは測定している。[39] : 7 SHA-3は、Keccak関数をより高速に計算するための命令を持たない命令セットアーキテクチャ(CPU)では遅いと批判されてきた。SHA2-512はSHA3-512の2倍以上高速であり、SHA-1は3.2GHzで動作するIntel Skylakeプロセッサでは3倍以上高速である。[40]著者らはこの批判に応えて、SHA3-256とSHA3-512の代わりにSHAKE128とSHAKE256を使用することを提案したが、その代償として原像耐性は半分に削減される(ただし衝突耐性は維持される)。これにより、パフォーマンスはSHA2-256とSHA2-512と同等になる。
しかし、ハードウェア実装では、SHA-3は他のすべての最終候補よりも著しく高速であり、[41] SHA-2やSHA-1よりも高速です。[40]
2018年現在、ARMのARMv8 [42]アーキテクチャには、Keccakアルゴリズムをより高速に実行できるようにする特別な命令が含まれており、IBMのz/Architecture [43]には、SHA-3とSHAKEの完全な実装が1つの命令に含まれています。RISC -VにKeccak固有の命令を追加するための拡張提案もあります。 [44]
インスタンス
NIST標準では、メッセージMと出力長dに対して、次のインスタンスを定義している:[6] :20、23
以下の定義では
- ケッカック[ c ]( N , d ) = スポンジ[ケッカック-f[1600], pad10 * 1, r ]( N , d ) [6] : 20
- Keccak-f[1600] = Keccak-p[1600, 24] [6] : 17
- cは容量
- rはレート = 1600 − c
- Nは入力ビット文字列である
SHA-3 インスタンスは、SHA-2 の代替品であり、同一のセキュリティ プロパティを持つことが意図されています。
SHAKEは要求されたビット数をスポンジから生成するため、拡張可能な出力関数(XOF)となる。例えば、SHAKE128(M、256)は、128ビットのセキュリティ強度を持つ256文字のビットストリームを持つハッシュ関数として使用できる。任意の長さを疑似乱数ジェネレーターとして使用できる。あるいは、SHAKE256(M、128)は、128ビットの長さと128ビットの耐性を持つハッシュ関数として使用できる。[6]
すべてのインスタンスはメッセージにいくつかのビットを追加し、その右端はドメイン分離サフィックスを表します。この目的は、Keccakハッシュ関数の異なるアプリケーションで同じハッシュ出力を生成するメッセージを構築できないようにすることです。次のドメイン分離サフィックスが存在します: [6] [45]
追加のインスタンス
2016年12月にNISTは、SHA-3由来の追加関数を説明した 新しい文書NIST SP.800-185 [46]を公開しました。
• X はメインの入力ビット文字列です。ゼロを含む任意の長さにすることができます。
• L は、要求された出力の長さをビット単位で表す整数です。
• N は関数名ビット文字列であり、NIST が cSHAKE に基づく関数を定義するために使用します。cSHAKE 以外の関数が必要ない場合は、N は空の文字列に設定されます。
• S はカスタマイズ ビット文字列です。ユーザーはこの文字列を選択して関数のバリアントを定義します。カスタマイズが不要な場合は、S は空の文字列に設定されます。
• K はゼロを含む任意の長さのキービット文字列です。
• Bは並列ハッシュのブロックサイズ(バイト単位)です。0 < B < 2 2040となる任意の整数になります。
その後の展開
カンガルー12
| 一般的な | |
|---|---|
| デザイナー | グイド・ベルトーニ、ジョアン・デーメン、ミカエル・ピーテルス、ジル・ヴァン・アッシュ、ロニー・ヴァン・ケア、ブノワ・ヴィギエ |
| 初版 | 2016年8月10日 |
| 由来 | ケチャック |
| 詳細 | |
| ダイジェストサイズ | 任意 |
| 構造 | スポンジ作りとカンガルーホッピングによる木の切り倒し |
| ラウンド | 12 |
| スピード | AVX-512搭載SkylakeXで0.51cpb [47 ] |
| 最高の公開暗号解読 | |
| ケチャックと同じ | |
2016年に、SHA-3関数とKeccakアルゴリズムを作成した同じチームが、ツリーハッシュを使用することで並列実行が可能になり、より高速な短縮ラウンド(SHA-3の24ラウンドから12ラウンドと14ラウンドに短縮)の代替案であるKangarooTwelveとMarsupilamiFourteenを導入しました。[48]
これらの関数は、並列処理に関して、FIPS 標準化 Keccak ベースの並列化可能なハッシュ関数である ParallelHash とは異なり、小さいメッセージ サイズの場合は ParallelHash よりも高速です。
ラウンド数を減らしたのは、Keccak に重点を置いた膨大な暗号解読の取り組みによって正当化される。この取り組みでは、12 ラウンドの Keccak に近いものに対しては実用的な攻撃は生まれなかった。これらの高速アルゴリズムは SHA-3 の一部ではない (後から開発されたもの) ため、FIPS に準拠していない。しかし、同じ Keccak 順列を使用しているため、12 ラウンドに減らされた SHA-3 に対する攻撃がない限りは安全である。[48]
KangarooTwelveはKeccakの高性能版で、ラウンド数を24から12に減らしたバージョンであり、128ビットのセキュリティ[49]を持ちながら、 Skylake CPUで1バイトあたり0.55サイクルという高いパフォーマンスを発揮すると主張している。[50]このアルゴリズムはIETF RFCドラフトである。[51]
KangarooTwelve のわずかなバリエーションである MarsupilamiFourteen は、14 ラウンドの Keccak 順列を使用し、256 ビットのセキュリティを主張しています。256 ビットのセキュリティは実際には 128 ビットのセキュリティよりも有用ではありませんが、一部の標準では必須となる場合があります。[49] 128 ビットは、現在のハードウェアに対するブルートフォース攻撃を阻止するのにすでに十分であるため、ユーザーが古典的コンピューターの速度の大幅な向上を心配しない限り、256 ビットのセキュリティを持つことは実用的な価値を追加しません。量子コンピューターに対する耐性については、以下を参照してください。
KangarooTwelveとMarsupilamiFourteenはSHAKEに似た拡張出力関数であり、異なる出力長を持つ共通メッセージに対して密接に関連した出力を生成します(長い出力は短い出力の延長です)。このような特性はSHA-3やParallelHashなどのハッシュ関数では見られません(XOFバリアントを除く)。[6]
ファルファッレ建築
2016年に、Keccakチームは、Farfalle構造と呼ばれる別の構造と、Keccak-p順列を使用したFarfalleのインスタンスであるKravatte [52] 、および2つの認証暗号化アルゴリズムKravatte-SANEとKravatte-SANSE [53]をリリースしました。
桜の木ハッシュ
RawSHAKEは、まだ標準化されていないツリーハッシュ用のSakuraコーディングの基礎となっている。Sakuraは、単一ノードに1111のサフィックスを使用し、これはSHAKEと同等であり、ツリーの形状に応じて他のサフィックスが生成される。[45] : 16
量子攻撃に対するセキュリティ
一般的な結果(グローバーのアルゴリズム)によれば、量子コンピュータはで構造化原像攻撃を実行できるが、古典的なブルートフォース攻撃には 2 d が必要である。構造化原像攻撃は第 2 の原像攻撃[28]を意味し、したがって衝突攻撃 を意味する。量子コンピュータは[54]で誕生日攻撃 を実行し、したがって衝突耐性を破ることもできる(ただし、これには異論がある)。[55]最大強度が になり得ることに注目すると、SHA-3 の量子セキュリティの上限 [56]は次のようになる。
SHA-2で使用されているMerkle-Damgård構造は崩壊し、その結果量子衝突耐性があることが示されているが[57] 、SHA-3で使用されるスポンジ構造については、著者らはブロック関数fが効率的に可逆でない場合にのみ証明を提供している。しかし、Keccak-f[1600]は効率的に可逆であるため、彼らの証明は適用されない。[58] [オリジナル研究]
SHA-3 バリアントの例
以下のハッシュ値はNIST.govからのものである: [59]
SHA3-224("") 6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7 SHA3-256("") a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a SHA3-384("") 0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004 SHA3-512("") a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 SHAKE128("", 256) 7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26 SHAKE256("", 512) 46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be
1 ビットを変更すると、出力の各ビットが 50% の確率で変更され、雪崩効果が発生します。
SHAKE128(「素早い茶色のキツネが怠け者の犬を飛び越える」、256) f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66e SHAKE128(「素早い茶色のキツネは怠け者のドフを飛び越える」、256) 853f4538be0db9621a6cea659a06c1107b1f83f02b13d18297bd39d7411cf10c
SHA関数の比較
以下の表では、内部状態とは次のブロックに繰り越されるビット数を意味します。
AVX-512VL ( OpenSSLから、Skylake-X CPU上で実行)を使用したSHA3-256の最適化された実装では、大きなメッセージで1バイトあたり約6.4サイクルを達成し、 [65] Skylake CPUでAVX2を使用した場合は1バイトあたり約7.8サイクルを達成します。 [66]他のx86、Power、ARM CPUでのパフォーマンスは、使用される命令と正確なCPUモデルに応じて1バイトあたり約8〜15サイクルまで変化します。[67] [68] [69]一部の古いx86 CPUでは1バイトあたり最大25〜40サイクルになります。[70]
実装
以下は SHA-3 をサポートする暗号化ライブラリのリストです。
- Rustのsha3
- ぼたん
- バウンシーキャッスル
- 暗号++
- ライブラリgcrypt
- イラクサ
- オープンSSL
- ウルフSSL
- MIRACL 暗号化 SDK
- Golang のx/crypto/sha3
- libkeccak
ハードウェアアクセラレーション
Apple A13 ARMv8 6コアSoC CPUコアは、ARMv8.2-SHA暗号拡張セットの特殊命令(EOR3、RAX1、XAR、BCAX)を使用してSHA-3(およびSHA-512)を高速化するサポート[71]を備えています。[72]
一部のソフトウェアライブラリは、 CPUのベクトル化機能を使用してSHA-3の使用を高速化します。たとえば、Crypto++はx86でSSE2を使用してSHA3を高速化できます。 [73]また、OpenSSLは多くのx86システムでMMX、AVX-512 、またはAVX-512VLを使用できます。 [74]また、POWER8 CPUは、PowerISA 2.07で定義された2x64ビットベクトル回転を実装しており、SHA-3実装を高速化できます。[75] ARMの実装のほとんどは、スカラーコードの方が高速であるため、Neonベクトル命令を使用していません。ただし、ARM実装はSVEおよびSVE2ベクトル命令を使用して高速化できます。これらは、たとえば富士通A64FX CPUで使用できます。 [76]
IBM z/Architectureは、2017年からMessage-Security-Assist Extension 6の一部としてSHA-3をサポートしています。[77]プロセッサは、各コアに組み込まれたハードウェアアシストエンジンを使用して、KIMDおよびKLMD命令を介してSHA-3およびSHAKEアルゴリズム全体の完全な実装をサポートします。
プロトコルでの使用
参照
- Ethash – Keccakベースのハッシュ
参考文献
- ^ abc ベルトーニ、グイド; Daemen, ジョアン;ピーターズ、マイケル。ヴァン・アッシュ、ジル(2012年5月29日)。 「Kecck 実装概要」(PDF)。 p. 25.2023 年3 月 27 日に取得。
- ^ Morawiecki, Paweł; Pieprzyk, Josef; Srebrny, Marian (2013). 「Rotational Cryptanalysis of Round-Reduced Keccak」(PDF)。 Moriai, S (ed.). Fast Software Encryption。 Fast Software Encryption Lecture Notes in Computer Science. Vol. 8424. pp. 241–262. doi :10.1007/978-3-662-43933-3_13. ISBN 978-3-662-43932-6. 2013年1月8日時点のオリジナルよりアーカイブ(PDF) 。2019年2月8日閲覧。
- ^ Bertoni, Guido; Daemen, Joan; Peeters, Michaël; van Assche, Giles (2011 年 1 月 14 日). 「Keccak SHA-3 提出書類」(PDF) . keccak.team . 2011 年 8 月 19 日時点のオリジナルよりアーカイブ(PDF) . 2023 年3 月 27 日閲覧。
- ^ コンピュータセキュリティ部門、情報技術研究所 (2017 年 1 月 4 日)。「ハッシュ関数 | CSRC | CSRC」。CSRC | NIST。2024年4 月 19 日閲覧。
- ^ ab 「ハッシュ関数」。NIST。2020年6月22日。 2021年2月17日閲覧。
- ^ abcdefghi Information Technology Laboratory (2015 年 8 月). SHA-3 標準: 順列ベースのハッシュと拡張可能な出力関数(PDF) .アメリカ国立標準技術研究所. doi :10.6028/NIST.FIPS.202. S2CID 64734386. 連邦情報処理標準出版物 202. 2020 年2 月 29 日閲覧。
- ^ Dworkin, Morris J. (2015 年 8 月 4 日)。「SHA-3 標準: 順列ベースのハッシュと拡張可能な出力関数」。連邦情報処理標準 (NIST FIPS)。
- ^ ab 「NIST がセキュアハッシュアルゴリズム (SHA-3) コンペティションの優勝者を選出」。NIST。2012年10 月 2 日。2012年10 月 2 日閲覧。
- ^ Cruz, José RC (2013 年 5 月 7 日)。「Keccak: 新しい SHA-3 暗号化標準」。Dr . Dobbs。
- ^ ベルトーニ、グイド;デーメン、ジョアン。ピーターズ、マイケル。ヴァン・アッシュ、ジル。 「ケチャック仕様概要」。2023 年3 月 27 日に取得。
- ^ Chang, Shu-jen; Perlner, Ray; Burr, William E.; Sonmez Turan, Meltem; Kelsey, John M.; Paul, Souradyuti; Bassham, Lawrence E. (2012年11月). SHA-3 暗号化ハッシュアルゴリズムコンペティションの第3ラウンドレポート(PDF) . doi :10.6028/NIST.IR.7896 . 2020年2月29日閲覧。セクション 5.1.2.1 (「ツリー モード」について言及)、セクション 6.2 (「その他の機能」、認証された暗号化について言及)、およびセクション 7 (「追加機能」については将来標準化される可能性があると述べている)。
- ^ ab ベルトーニ、グイド;デーメン、ジョアン。ピーターズ、マイケル。ヴァン・アッシュ、ジル。ヴァン・キーア、ロニー(2014年3月13日)。 「CAESAR 提出: Ketje v1」(PDF) 。2020 年2 月 29 日に取得。
- ^ ab ベルトーニ、グイド;デーメン、ジョアン。ピーターズ、マイケル。ヴァン・アッシュ、ジル。ヴァン・キーア、ロニー(2014年3月13日)。 「CAESAR 提出: Keyak v1」(PDF) 。2020 年2 月 29 日に取得。
- ^ ab ベルトーニ、グイド;デーメン、ジョアン。ピーターズ、マイケル。ヴァン・アッシュ、ジャイルズ。 「スポンジと二重構造」。2023 年3 月 27 日に取得。
- ^ 「新しい暗号化ハッシュアルゴリズム(SHA-3)ファミリーの候補アルゴリズム指名の要請を発表 [米国連邦官報第72巻第212号]」(PDF) 。2007年11月2日。 2011年3月31日時点のオリジナルよりアーカイブ(PDF) 。 2017年7月18日閲覧。
- ^ ベルトーニ、グイド;デーメン、ジョアン。ピーターズ、マイケル。ヴァン・アッシュ、ジル。 「パナマからRadioGatún経由でケチャックまでの道」(PDF) 。2023 年3 月 27 日に取得。
- ^ KeccakReferenceAndOptimized-3.2.zip mainReference.c 「Keccak スポンジ関数は、Guido Bertoni、Joan Daemen、Michaël Peeters、Gilles Van Assche によって設計されました。詳細、フィードバック、質問については、当社の Web サイト http://keccak.noekeon.org/Implementation [ permanent dead link ]を参照してください。設計者 (ここでは「実装者」と表記) によるものです。法律で可能な範囲で、実装者はこのファイルのソース コードに対するすべての著作権および関連する権利または隣接する権利を放棄しています。 https://creativecommons.org/publicdomain/zero/1.0/"
- ^ Stevens, Marc; Bursztein, Elie; Karpman, Pierre; Albertini, Ange; Markov, Yarik. 「完全な SHA-1 の最初の衝突」(PDF) 。2017 年2 月 23 日閲覧。
- ^ ルーラント、ガエタン;ペイリン、トーマス。 「SHA-1 は大混乱です」。2020 年1 月 8 日に取得。
- ^ 「NIST コンピュータセキュリティ部門 – SHA-3 暗号化ハッシュアルゴリズムコンペティション、2007 年 11 月 – 2012 年 10 月」。2017 年 1 月 4 日。
- ^ “Keccak パラメータ変更ラウンド2”. Keccak Team . 2009年9月22日. 2017年11月13日時点のオリジナルよりアーカイブ。2020年2月29日閲覧。
- ^ 「第3ラウンドのKeccakのパディングルールの簡素化」Keccakチーム。2011年1月17日。 2023年3月27日閲覧。
- ^ 「SHA-3 標準化」。NIST。2015年4 月 16 日閲覧。
- ^ アメリカ国立標準技術研究所 (2015 年 8 月 5 日)。「連邦情報処理標準: 順列ベースのハッシュおよび拡張可能な出力関数など」 。2015年8 月 5 日閲覧。
- ^ 「連邦情報処理標準 (FIPS) 202、SHA-3 標準: 順列ベースのハッシュと拡張可能な出力関数の承認、および FIPS 180-4、セキュア ハッシュ標準の適用条項の改訂を発表」、2015 年 8 月 5 日。
- ^ ケルシー、ジョン。「SHA3、これまでの歩みとこれから」(PDF)。RSA カンファレンス 2013。
- ^ ケルシー、ジョン。「SHA3、過去、現在、そして未来」。CHES 2013。
- ^ ab 「要約」(PDF) . cr.yp.to .
- ^ 「NIST ハッシュ フォーラム メーリング リスト」。2017 年 1 月 4 日。
- ^ 「Keccak SHA-3 提出書類」(PDF) 2011年1月14日. 2023年3月27日閲覧。
- ^ 「128ビットセキュリティについて」 2013年10月2日. 2023年3月27日閲覧。
- ^ 「具体的な提案」 2013年10月2日. 2023年3月27日閲覧。
- ^ ab 「Schneier on Security: Will Keccak = SHA-3?」.
- ^ 「LShift: 米国政府が暗号標準を弱体化させることを支持する理由」
- ^ 「はい、これがケチャックです!」 2013年10月4日。 2023年3月27日閲覧。
- ^ 「SHA-3 の前進」(PDF)。
- ^ NIST コンピュータセキュリティ部門 (CSD)。「SHA-3 標準: 順列ベースのハッシュと拡張可能な出力関数」(PDF)。NIST。
- ^ 「約41サイクル/バイト[...]は、32ビット命令のみを使用した実装と比較して40%の高速化を表します」。式から次の式が得られます。
- ^ Bernstein, Daniel J. (2012年1月4日). 「SHA-3ソフトウェアの最適化の失敗」(PDF) . cr.yp.to . 2020年2月29日閲覧。
- ^ ab 「SHA-3 は遅いのか?」 2017 年 6 月 12 日。 2023 年3 月 27 日閲覧。
- ^ Guo, Xu; Huang, Sinan; Nazhandali, Leyla; Schaumont, Patrick (2010 年 8 月)、「第 2 ラウンド SHA-3 ASIC 実装 14 種の公正かつ包括的なパフォーマンス評価」(PDF)、NIST 2nd SHA-3 Candidate Conference : 12、2011 年2 月 18 日取得Keccakは、決勝に進めなかったLuffaに次ぐ2位です。
- ^ ARM 社、ARM アーキテクチャ リファレンス マニュアル ARMv8、ARMv8-A アーキテクチャ プロファイル用、ドキュメント ARM DDI 0487C.a (ID121917)、https://www.arm.com
- ^ http://publibfp.dhe.ibm.com/epubs/pdf/dz9zr011.pdf p. 672
- ^ Rawat, Hemendra; Schaumont, Patrick (2017). 「<sc>Keccak</sc> の効率的な計算のためのベクトル命令セット拡張」. IEEE Transactions on Computers . 66 (10): 1778–1789. doi :10.1109/TC.2017.2700795.
- ^ ab 「Sakura: ツリーハッシュのための柔軟なコーディング」(PDF)。Keccak チーム。 2014 年。 2020 年2 月 29 日閲覧。
- ^ SHA-3 派生関数: cSHAKE、KMAC、TupleHash、ParallelHashこの記事には、パブリック ドメイン
にあるこのソースからのテキストが組み込まれています。
- ^ 「ソフトウェアパフォーマンス数値」。
- ^ ab "ケチャックチーム: KangarooTwelve".ケチャックチーム。
- ^ ab 「KangarooTwelve: Keccak-p に基づく高速ハッシュ」(PDF)。国際暗号研究協会。2016 年。
- ^ 「KangarooTwelve slides presentation at ACNS 2018」(PDF)。Keccak チーム。
- ^ 「draft-irtf-cfrg-kangarootwelve-00 – KangarooTwelve」。IETFデータトラッカー。IETF 。 2020年1月17日閲覧。
- ^ ベルトーニ、グイド;デーメン、ジョアン。セス・ホファート。ピーターズ、マイケル。ヴァン・アッシュ、ジル。ヴァン・キーア、ロニー(2016年12月29日)。 「ファルファッレ: 並列置換ベースの暗号化」。暗号学 ePrint アーカイブ。
- ^ グイド・ベルトーニ;ジョーン・デーメン。セス・ホファート;マイケル・ピーターズ;ジル・ヴァン・アッシュ。ロニー・ヴァン・キーア(2018年10月12日)。 「認証された暗号化スキーム Kravatte-SANE および Kravatte-SANSE」。暗号学 ePrint アーカイブ。
- ^ Brassard, Gilles; Høyer, Peter; Tapp, Alain (1998). 「ハッシュ関数とクローフリー関数の量子暗号解析」抄録. コンピュータサイエンスの講義ノート. 第 1380 巻. pp. 163–169. arXiv : quant-ph/9705002 . doi :10.1007/BFb0054319. ISBN 978-3-540-64275-6. S2CID 118940551。
- ^ 「コスト分析」(PDF) . cr.yp.to .
- ^ 「衝突問題」(PDF) . scottaaronson.com .
- ^ 「論文」(PDF) . eprint.iacr.org . 2016年。
- ^ 「抄録」(PDF) . eprint.iacr.org . 2017年。
- ^ 「NIST.gov – コンピュータセキュリティ部門 – コンピュータセキュリティリソースセンター」。2016年12月29日。
- ^ 「測定表」bench.cr.yp.to .
- ^ Tao, Xie; Liu, Fanbao; Feng, Dengguo (2013). MD5 に対する高速衝突攻撃(PDF) . Cryptology ePrint Archive (技術レポート). IACR .
- ^ Stevens, Marc ; Bursztein, Elie ; Karpman, Pierre ; Albertini, Ange ; Markov, Yarik. 完全な SHA-1 の最初の衝突(PDF) (技術レポート)。Google Research。
- Marc Stevens、Elie Bursztein、Pierre Karpman、Ange Albertini、Yarik Markov、Alex Petit Bianco、Clement Baisse (2017 年 2 月 23 日)。「初の SHA1 衝突のお知らせ」。Googleセキュリティ ブログ。
- ^ 切り捨てがなければ、衝突耐性に関係なく、ハッシュ関数の内部状態全体がわかります。出力が切り捨てられると、ハッシュ関数を再開する前に、状態の削除された部分を検索して見つける必要があり、攻撃を続行できるようになります。
- ^ 「Keccakスポンジ関数ファミリー」。2016年1月27日閲覧。
- ^ 「openssl/openssl – kecak1600-avx512vl.pl」。GitHub 。2020年6月25日閲覧。
- ^ “openssl/openssl – keccak1600-avx2.pl”. GitHub . 2021年11月.
- ^ “openssl/openssl – keccak1600-x86_64.pl”. GitHub . 2020年6月25日閲覧。
- ^ “openssl/openssl – keccak1600-armv8.pl”. GitHub . 2021年11月.
- ^ “openssl/openssl – keccak1600-ppc64.pl”. GitHub . 2020年6月25日閲覧。
- ^ 「openssl/openssl – kccak1600-mmx.pl」。GitHub 。2020年6月25日閲覧。
- ^ “llvm/llvm-project – AArch64.td”. GitHub . 2020年6月24日閲覧。
- ^ 「ARMv8 – ARM – WikiChip」. en.wikichip.org . 2020年6月24日閲覧。
- ^ “weidai11/cryptopp”. GitHub . 2020年6月25日閲覧。
- ^ "openssl/openssl". GitHub . 2020年6月25日閲覧。
- ^ “openssl/openssl”. GitHub . 2021年11月.
- ^ 「apple/llvm-project – lib/Target/AArch64/AArch64SVEInstrInfo.td」。GitHub 。 2020年6月25日閲覧。
- ^ IBM z/Architecture Principles of Operation、発行番号 SA22-7832。第 7 章の KIMD および KLMD 命令を参照してください。
外部リンク
- Keccakのウェブサイト
- SHA-3 標準
