| セキュアハッシュアルゴリズム | |
|---|---|
| 概念 | |
| ハッシュ関数、SHA、DSA | |
| 主な規格 | |
| SHA-0、SHA-1、SHA-2、SHA-3 | |
| ジェネラル | |
|---|---|
| デザイナー | グイド・ベルトーニ、ジョアン・デーメン、ミヒャエル・ペータース、ジル・ヴァン・アッシュ |
| 初版 | 2016 (2016年) |
| シリーズ | ( SHA-0 )、SHA-1、SHA-2、SHA-3 |
| 認証 | FIPS PUB 202 |
| 詳細 | |
| ダイジェストサイズ | 任意 |
| 構造 | スポンジ構造 |
| 速度 | 典型的なx86-64ベースのマシンでは、Keccak-f[1600]に1024ビットのXORを加えた場合12.6cpbとなり、 [ 1 ]これはSHA2-256にほぼ相当します。 |
| 最高の公開暗号解読 | |
| Keccak-512に対する原像攻撃は8ラウンドに短縮され、2511.5の時間と2508のメモリを必要とする。[ 2 ] ゼロサム識別器は24ラウンドのKeccak-f[1600]全体に存在するが、ハッシュ関数自体を攻撃するためには使用できない[ 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 ]スポンジ構築は、幅広いランダム関数、つまりランダム順列に基づいており、任意の量のデータ(スポンジ用語では「吸収」)を入力でき、任意の量のデータ(「圧縮」)を出力できます。その際、以前のすべての入力に対して擬似ランダム関数として機能します。これにより、大きな柔軟性が得られます。
2022年現在、NISTはSHA-2を撤回したり、改訂版セキュアハッシュ標準から削除する予定はありません。[ 15 ] SHA-3の目的は、必要に応じて現在のアプリケーションでSHA-2を直接置き換えることができ、NISTのハッシュアルゴリズムツールキット全体の堅牢性を大幅に向上させることです。[ 16 ]
メッセージのサイズが小さい場合、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ハッシュワークショップで発表されました。[ 17 ]参照実装はパブリックドメインにリリースされました。[ 18 ]
2006年、NISTは新しいハッシュ標準であるSHA-3を作成するためのNISTハッシュ関数コンペティションを開始しました。SHA-3はSHA-2を置き換えるものではありません。SHA-2に対する重大な攻撃が公に実証されていないためです。MD5 、SHA-0、SHA-1に対する攻撃が成功したため、[ 19 ] [ 20 ] NISTは、 代替となる、異なる暗号ハッシュの必要性を認識し、それがSHA-3となりました。
準備期間の後、2008年末までに応募書類を提出することになっていた。Keccakは51人の候補者の1人として受け入れられた。2009年7月には、14のアルゴリズムが第2ラウンドに選出された。Keccakは2010年12月に最終ラウンドに進出した。[ 21 ]
コンテスト期間中、参加者は発見された問題に対処するためにアルゴリズムを「微調整」することが認められました。Keccakに行われた変更は以下の通りです。[ 22 ] [ 23 ]
2012年10月2日、ケチャックがコンテストの優勝者に選ばれた。[ 8 ]
2014年、NISTはFIPS 202「SHA-3標準:順列ベースのハッシュおよび拡張可能な出力関数」の草案を公開しました。[ 24 ] FIPS 202は2015年8月5日に承認されました。[ 25 ]
2015年8月5日、NISTはSHA-3がハッシュ標準になったと発表した。[ 26 ]
2013年初頭、NISTはSHA-3規格の「容量」(全体的な強度と速度のパラメータ)について、提出されたものとは異なる値を選択すると発表した。[ 27 ] [ 28 ]この変更は混乱を引き起こした。
ハッシュ関数コンペティションでは、少なくともSHA-2インスタンスと同等のセキュリティを持つハッシュ関数が求められました。これは、dビットの出力が衝突攻撃に対してd /2ビットの耐性を持ち、原像攻撃に対してdビットの耐性を持つ必要があることを意味します。これは、 dビットの出力で達成可能な最大値です。Keccakのセキュリティ証明は、「容量」 cに基づいて調整可能なセキュリティレベルを可能にし、衝突攻撃と原像攻撃の両方に対してc /2ビットの耐性を提供します。当初のコンペティションルールを満たすため、Keccakの著者はc = 2 dを提案しました。発表された変更は、あらゆる形態の攻撃に対して同じd /2ビットのセキュリティを受け入れ、c = dを標準化することでした。これにより、各反復で追加のdビットの入力をハッシュできるため、Keccakの速度が向上しました。しかし、ハッシュ関数はもはやSHA-2と同じ原像攻撃耐性を持つ代替品ではなく、半分に分割され、量子コンピューティングの進歩に対して脆弱になり、事実上、さらに半分に分割されることになります。[ 29 ]
2013年9月、Daniel J. BernsteinはNISTハッシュフォーラムのメーリングリスト[ 30 ]で、SHA-3仕様には含まれていないが、当初Keccakのデフォルトとして提案された576ビット容量にセキュリティを強化することを提案した。[ 31 ]これにより、少なくともSHA3-224とSHA3-256にはSHA-2の前身と同じプリイメージ耐性が提供されたが、SHA3-384とSHA3-512はSHA-2の前身よりもプリイメージ耐性が大幅に低下した。9月下旬、Keccakチームは、SHA-3提案で既にc = 256をオプションとして設定することにより、128ビットのセキュリティを提案したと述べて反論した。[ 32 ]削減された容量は正当であると彼らは考えていたが、否定的な反応を考慮して、すべてのインスタンスでc = 512ビットに容量を上げることを提案した。これは、256ビットのセキュリティレベルまでのこれまでの標準と同等の性能を備えながら、妥当な効率性を提供しますが[ 33 ]、SHA2-384およびSHA2-512が提供する384/512ビットの原像暗号耐性には及びません。著者らは、「 256ビットを超えるセキュリティ強度レベルを主張したり、それに頼ったりすることは無意味である」と述べています。
2013年10月初旬、ブルース・シュナイアー氏は、アルゴリズムの受け入れに悪影響を及ぼす可能性があるとしてNISTの決定を批判し、次のように述べた。
空気中に不信感が蔓延しすぎている。NISTは、誰も信頼せず、(強制的に利用させられた者を除いて)誰も使わないアルゴリズムを公開してしまう危険を冒している。[ 34 ]
彼は後に以前の発言を撤回し、次のように述べた。
NISTがアルゴリズムに「内部変更」を加えたと書いたのは誤りでした。私の不注意でした。Keccak順列は変更されていません。NISTが提案したのは、パフォーマンスを優先してハッシュ関数の容量を削減することでした。Keccakの優れた特徴の一つは、高度に調整可能であることです。[ 34 ]
独立系ソフトウェア開発会社の暗号学者兼シニア開発者であるポール・クロウリー氏は、この決定を支持し、Keccakは調整可能であるべきであり、一つのプリミティブ内で異なるセキュリティレベルを設定する理由はないと述べた。さらに、彼は次のように付け加えた。
そうですね、コンテスト参加者に一定のセキュリティレベルを要求した上で、異なるセキュリティ基準を策定したのは、コンテストにとって少し残念なことです。しかし、今更この状況を修正するには、コンテストを再開する以外に方法はありません。過去の過ちをそのまま受け入れるよう求めることは、誰にとっても状況の改善にはなりません。[ 35 ]
Keccakに内部的な変更が加えられたのではないかという混乱があったが、元のチームによって、NISTのSHA-3提案はKeccakファミリーのサブセットであり、コンテストに提出された参照コードを使用してテストベクトルを生成できること、この提案は彼らとNISTハッシュチームとの間の一連の議論の結果であると述べたことで解消された。[ 36 ]
この論争を受けて、2013年11月にNISTのジョン・ケルシーは、すべてのSHA-2ドロップイン置換インスタンスについて、元のc = 2 d提案に戻すことを提案した。 [ 37 ]この元に戻したことは、その後の草案[ 38 ]と最終リリース[ 5 ]で確認された。

SHA-3はスポンジ構造[ 14 ]を採用しており、この構造ではデータがスポンジに「吸収」され、その結果が「絞り出され」ます。吸収段階では、メッセージブロックは状態のサブセットにXOR演算され、その後、順列関数(または変換)を使用して全体が変換されます。「絞り出し」段階では、出力ブロックは同じ状態のサブセットから読み出され、状態変換関数によって交互に読み出されます。書き込まれて読み出される状態の部分のサイズは「レート」( と表記)と呼ばれ、入出力に影響されない部分のサイズは「容量」( と表記)と呼ばれます。容量によって方式のセキュリティが決まります。最大のセキュリティレベルは容量の半分です。
入力ビット文字列、パディング関数、幅 のビットブロックを操作する置換関数、レート、出力長が与えられた場合、容量とスポンジ構成が得られます。これにより、長さ のビット文字列が生成されます。[ 6 ] : 18
内部状態Sには、 Zに出力される情報に加えてcビットの追加情報が含まれているため、SHA-2、SHA-1、MD5、およびMerkle–Damgård 構造に基づくその他のハッシュが受けやすい長さ拡張攻撃を防ぐことができます。
SHA-3では、状態Sは5×5のwビットワード配列( w = 64)で構成され、 b = 5×5× w = 5×5×64 = 1600ビットとなる。Keccakは、2のべき乗のワードサイズwを1ビット(合計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 ℓラウンドで構成されます。
長いメッセージの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 にほぼ相当します。
x86-64 上の SHA3-256 について、Bernstein は CPU に応じて 11.7~12.25 cpb を測定しています。[ 40 ] :7 SHA-3 は、Keccak 関数をより高速に計算するための命令を持たない命令セットアーキテクチャ (CPU) では遅いと批判されてきました。SHA2-512 は SHA3-512 の 2 倍以上高速であり、SHA-1 は 3.2 GHz でクロックされた Intel Skylake プロセッサで 3 倍以上高速です。[ 41 ]著者らはこの批判に対して、SHA3-256 と SHA3-512 の代わりに SHAKE128 と SHAKE256 を使用することを提案しました[ 41 ]が、プリイメージ耐性が半分に削減されるという犠牲を払います (ただし衝突耐性は維持されます)。これにより、パフォーマンスは SHA2-256 および SHA2-512 と同等になります。
しかし、ハードウェア実装では、SHA-3は他のすべての最終候補よりも著しく高速であり、[ 42 ] SHA-2やSHA-1よりも高速です。[ 41 ]
2018年現在、ARMのARMv8 [ 43 ]アーキテクチャには、Keccakアルゴリズムの実行速度を向上させる特別な命令が含まれており、IBMのz/Architecture [ 44 ]には、SHA-3とSHAKEを1つの命令で完全に実装しています。RISC -Vにも、Keccak固有の命令を追加するための拡張提案があります。[ 45 ]
NIST規格では、メッセージMと出力長dに対して、以下のインスタンスを定義しています。 [ 6 ]:20, 23
| インスタンス | 出力サイズd | レートr = ブロックサイズ | 容量c | 定義 | 衝突に対する抵抗力におけるセキュリティ強度 | ||
|---|---|---|---|---|---|---|---|
| 衝突 | 原画像 | 2番目の原画像 | |||||
| SHA3-224( M ) | 224 | 1152 | 448 | ケチャック[448]( M || 01, 224) | 112 | 224 | 224 |
| SHA3-256( M ) | 256 | 1088 | 512 | ケチャック[512]( M || 01, 256) | 128 | 256 | 256 |
| SHA3-384( M ) | 384 | 832 | 768 | ケチャック[768]( M || 01, 384) | 192 | 384 | 384 |
| SHA3-512( M ) | 512 | 576 | 1024 | ケチャック[1024]( M || 01, 512) | 256 | 512 | 512 |
| SHAKE128(男性、d ) | d | 1344 | 256 | ケチャック[256]( M || 1111, d ) | 最小( d /2,128) | ≥min( d ,128) | min( d ,128) |
| SHAKE256(男性、d ) | d | 1088 | 512 | ケチャック[512]( M || 1111, d ) | 最小( d /2,256) | ≥min( d ,256) | min( d ,256) |
以下の定義によれば
SHA-3 インスタンスは、SHA-2 の代替品であり、同一のセキュリティ特性を持つことが意図されています。
SHAKEは、要求されたビット数だけスポンジからビットを生成するため、拡張可能な出力関数(XOF)である。例えば、SHAKE128(M, 256)は、128ビットのセキュリティ強度を持つ256文字のビットストリームを持つハッシュ関数として使用できる。任意の長さのビットストリームは、疑似乱数生成器として使用できる。また、SHAKE256(M, 128)は、128ビット長で128ビットの耐性を持つハッシュ関数として使用できる。[ 6 ]
すべてのインスタンスはメッセージにいくつかのビットを付加し、その右端はドメイン分離サフィックスを表します。これは、Keccakハッシュ関数を異なる方法で適用しても、同じハッシュ出力を生成するメッセージが構築されないようにするためです。以下のドメイン分離サフィックスが存在します。[ 6 ] [ 46 ] [ 47 ]
| 接尾辞 | 意味 |
|---|---|
| 00 | シェイク |
| 01 | SHA-3 |
| …11 | 生シェイク |
| 1111 | シェイク |
2016年12月、NISTはSHA-3由来の追加関数を説明する 新しい文書、NIST SP.800-185 [ 47 ]を公開しました
| インスタンス | 説明 |
|---|---|
| cSHAKE128( X , L , N , S ) | カスタマイズ パラメータによる明示的なドメイン分離をサポートする SHAKE のバージョン。 |
| cSHAKE256( X , L , N , S ) | |
| KMAC128( K , X , L , S ) | Keccakに基づくキー付きハッシュ関数。キーなしで通常のハッシュ関数として使用することもできます。 |
| KMAC256( K , X , L , S ) | |
| KMACXOF128( K , X , L , S ) | |
| KMACXOF256( K , X , L , S ) | |
| タプルハッシュ128( X , L , S ) | 文字列のタプルをハッシュ化する関数。この関数の出力は、入力文字列の内容と順序の両方に依存します。 |
| タプルハッシュ256( X , L , S ) | |
| タプルハッシュXOF128( X , L , S ) | |
| タプルハッシュXOF256( X , L , S ) | |
| ParallelHash128( X、B、L、S ) | 最新のプロセッサの並列処理を利用してハッシュ処理を高速化するために設計された関数。KangarooTwelveとは異なり、ラウンド数削減型のKeccakは使用しません。 |
| ParallelHash256( X , B , L , S ) | |
| ParallelHashXOF128( X、B、L、S ) | |
| パラレルハッシュXOF256( X , B , L , S ) |
| ジェネラル | |
|---|---|
| デザイナー | グイド・ベルトーニ、ジョアン・デーメン、ミカエル・ピーテルス、ジル・ヴァン・アッシュ、ロニー・ヴァン・ケア、ブノワ・ヴィギエ |
| 初版 | 2016年8月10日 ( 2016-08-10 ) |
| 出典 | ケチャック |
| 詳細 | |
| ダイジェストサイズ | 任意 |
| 構造 | スポンジ構造とカンガルーホッピングによるツリーハッシュ |
| ラウンド | 12 |
| 速度 | SkylakeX(AVX-512搭載)で0.51cpb [ 48 ] |
| 最高の公開暗号解読 | |
| Keccakのものと同じ | |
2016年、SHA-3関数とKeccakアルゴリズムを開発した同じチームが、木構造ハッシュを用いた並列実行の可用性を活用できる、より高速な短縮ラウンド(SHA-3の24ラウンドから12ラウンドと14ラウンドに短縮)の代替案、KangarooTwelveとMarsupilamiFourteenを導入しました。[ 49 ]
これらの関数は、並列性に関して、FIPS 標準化 Keccak ベースの並列化可能なハッシュ関数である ParallelHash とは異なり、小さいメッセージ サイズの場合は ParallelHash よりも高速です。
ラウンド数の削減は、Keccakに焦点を絞った膨大な暗号解読研究によって正当化されます。これらの研究は、12ラウンドのKeccakに近いものに対して実用的な攻撃を生み出せなかったからです。これらの高速アルゴリズムはSHA-3の一部ではありません(後発開発であるため)。したがってFIPS準拠ではありません。しかし、同じKeccak順列を使用しているため、12ラウンドに削減されたSHA-3に対する攻撃がない限り、安全です。[ 49 ]
KangarooTwelveはKeccakの高性能版で、ラウンド数を24から12に減らしたバージョンであり、128ビットのセキュリティ[ 50 ]を持ちながら、 Skylake CPUで1バイトあたり0.55サイクルという高いパフォーマンスを実現している。[ 51 ]このアルゴリズムはIETF RFC 9861で規定されている。 [ 52 ]
KangarooTwelveの若干のバリエーションであるMarsupilamiFourteenは、Keccak順列を14ラウンド使用し、256ビットのセキュリティを主張しています。256ビットのセキュリティは実際には128ビットのセキュリティよりも有用ではありませんが、一部の標準規格では要求される場合があります。[ 50 ] 128ビットは既に現在のハードウェアに対するブルートフォース攻撃を阻止するのに十分であるため、ユーザーが古典コンピュータの速度の大幅な向上を懸念しない限り、256ビットのセキュリティを持つことは実用的な価値を追加しません。量子コンピュータへの耐性については、以下を参照してください。
KangarooTwelveとMarsupilamiFourteenはSHAKEと同様に拡張可能な出力関数であり、共通メッセージに対して異なる出力長を持つ密接に関連した出力を生成します(長い出力は短い出力の拡張です)。このような特性は、SHA-3やParallelHash(XOFバリアントを除く)などのハッシュ関数には見られません。[ 6 ]
2016年、ケッカックチームはファルファッレ構築と呼ばれる別の構築と、ケッカック-p順列を用いたファルファッレのインスタンスであるクラヴァット[ 53 ]、および2つの認証暗号化アルゴリズムであるクラヴァット-SANEとクラヴァット-SANSE [ 54 ]をリリースしました
RawSHAKEは、まだ標準化されていない木ハッシュのためのSakuraコーディングの基礎です。Sakuraは、単一ノードに1111というサフィックスを使用します。これはSHAKEと同等で、木の形状に応じて他のサフィックスが生成されます。[ 46 ]:16
一般的な結果(グローバーのアルゴリズム)によれば、量子コンピュータはで構造化原像攻撃を実行できるが、古典的なブルートフォース攻撃では2 dが必要である。構造化原像攻撃は第 2 の原像攻撃[ 29 ]を意味し、したがって衝突攻撃となる。量子コンピュータは[ 55 ]で誕生日攻撃も実行できるため、衝突耐性が破られる(ただし、これには異論がある)。[ 56 ]最大強度が になり得ることを考慮すると、 SHA-3 の量子セキュリティの 上限[ 57 ]は次のようになる。
| インスタンス | 衝突に対する抵抗力におけるセキュリティ強度 | |||
|---|---|---|---|---|
| 衝突(Brassardら) | 衝突(バーンスタイン) | 原画像 | 2番目の原画像 | |
| SHA3-224( M ) | 74+2 ⁄ 3 | 112 | 112 | 112 |
| SHA3-256( M ) | 85+1/3 | 128 | 128 | 128 |
| SHA3-384( M ) | 128 | 192 | 192 | 192 |
| SHA3-512( M ) | 170+2 ⁄ 3 | 256 | 256 | 256 |
| シェイク128( M , d ) | 分( d /3,128) | 分( d /2,128) | ≥min( d /2,128) | 分( d /2,128) |
| SHAKE256(男性、d ) | 最小( d /3,256) | 最小( d /2,256) | ≥min( d /2,256) | 最小( d /2,256) |
SHA-2で使用されているMerkle–Damgård構造は崩壊し、その結果量子衝突耐性を持つことが示されているが[ 58 ]、SHA-3で使用されているスポンジ構造については、ブロック関数fが効率的に逆変換可能でない場合にのみ証明を提供している。しかし、Keccak-f[1600]は効率的に逆変換可能であるため、その証明は適用されない。[ 59 ]
以下のハッシュ値はNIST.govからのものである: [ 60 ]
SHA3-224("") 6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7 SHA3-256("") a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a SHA3-384("") 0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004 SHA3-512("") a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a6 15b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 シェイク128("", 256) 7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26 SHAKE256("", 512) 46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be
1 ビットを変更すると、出力の各ビットが 50% の確率で変更され、雪崩効果が発生します。
SHAKE128(「素早い茶色のキツネが怠け者の犬を飛び越える」、256) f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66e SHAKE128(「素早い茶色のキツネは怠け者のドfを飛び越える」, 256) 853f4538be0db9621a6cea659a06c1107b1f83f02b13d18297bd39d7411cf10c
以下の表では、内部状態は次のブロックに繰り越されるビット数を意味します。
| アルゴリズムとバリアント | 出力サイズ(ビット) | 内部状態サイズ(ビット) | ブロックサイズ(ビット) | ラウンド | オペレーション | セキュリティ(ビット) | Skylakeでのパフォーマンス(中央値cpb)[ 61 ] | 初公開 | ||
|---|---|---|---|---|---|---|---|---|---|---|
| 長いメッセージ | 8バイト | |||||||||
| MD5(参考) | 128 | 128 (4 × 32) | 512 | 4 (各ラウンドで16回の演算) | And、Xor、Or、Rot、Add(mod 2 32) | ≤ 18 (衝突が見つかった)[ 62 ] | 4.99 | 55.00 | 1992 | |
| SHA-0 | 160 | 160 (5 × 32) | 512 | 80 | And、Xor、Or、Rot、Add(mod 2 32) | < 34 (衝突が見つかりました) | ≈ SHA-1 | ≈ SHA-1 | 1993 | |
| SHA-1 | < 63 (衝突が見つかりました) [ 63 ] | 3.47 | 52.00 | 1995 | ||||||
| SHA-2 | SHA-224 SHA-256 | 224 256 | 256 (8 × 32) | 512 | 64 | And、Xor、Or、Rot、Shr、Add (mod 2 32 ) | 112 128 | 7.62 7.63 | 84.50 85.25 | 2004 2001 |
| SHA-384 | 384 | 512 (8 × 64) | 1024 | 80 | And、Xor、Or、Rot、Shr、Add (mod 2 64 ) | 192 | 5.12 | 135.75 | 2001 | |
| SHA-512 | 512 | 256 | 5.06 | 135.50 | 2001 | |||||
| SHA-512/224 SHA-512/256 | 224 256 | 112 128 | ≈ SHA-384 | ≈ SHA-384 | 2012 | |||||
| SHA-3 | SHA3-224 SHA3-256 SHA3-384 SHA3-512 | 224 256 384 512 | 1600 (5×5×64) | 1152 1088 832 576 | 24 [ 64 ] | そして、Xor、Rot、Not | 112 128 192 256 | 8.12 8.59 11.06 15.88 | 154.25 155.50 164.00 164.00 | 2015 |
| SHAKE128 SHAKE256 | d(任意)d(任意) | 1344 1088 | min( d /2, 128) min( d /2, 256) | 7.08 8.59 | 155.25 155.50 | |||||
SHA3-256のAVX-512VL(OpenSSL 、 Skylake-X CPU上で動作)を使用した最適化実装では、大きなメッセージで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をサポートする暗号化ライブラリのリストです。
Apple A13 ARMv8 6コアSoC CPUコアは、ARMv8.2-SHA暗号拡張セットの専用命令を使用してSHA-3(およびSHA-512)を高速化するためのサポート[ 71 ]を備えています。 [ 72 ]これらの命令は完全なSHA3手順を実装しているわけではなく、EOR3(3方向XOR)、RAX(回転とXOR)、XAR(XORと回転)、BCAX(ビットクリアとXOR)などの小さな操作を実装しています。
OpenSSLには、SHA-3(正確にはKeccak-f[1600]スポンジ関数)の様々なアセンブリ言語実装が含まれています。改善の大部分はスカラーコードの最適化によるものであり、 SIMDによる効果はあまりありません。
IBM z/Architectureは、 2017年からMessage-Security-Assist Extension 6の一部としてSHA-3をサポートしています。プロセッサは、各コアに組み込まれたハードウェアアシストエンジンを使用して、KIMDおよびKLMD命令を介してSHA-3およびSHAKEアルゴリズム全体の完全な実装をサポートしています。[ 78 ]
ParallelHash128のようなSHA-3の並列バリアントは高速化が容易です。SSSE3のそのような実装の1つはCrypto ++にあります。[ 79 ]
イーサリアムはKeccak-256ハッシュ関数を使用しています(これは、BertoniらによるSHA-3コンテストの優勝エントリーのバージョン3に準拠しており、最終的なSHA-3仕様とは異なります)。[ 80 ]