SHA-3

セキュアハッシュアルゴリズム
概念
ハッシュ関数SHADSA
主な規格
SHA-0SHA-1SHA-2SHA-3
SHA-3 (Keccak)
ジェネラル
デザイナーグイド・ベルトーニ、ジョアン・デーメン、ミヒャエル・ペータース、ジル・ヴァン・アッシュ
初版2016 (2016年
シリーズ( SHA-0 )、SHA-1SHA-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-1SHA-2MD5のような構造とは内部的に異なります。

SHA-3は、 Guido BertoniJoan DaemenMichaël Peeters、 Gilles Van AsscheによってRadioGatúnをベースに設計された、より広範な暗号プリミティブファミリKeccak/ ˈ k ɛ æ k /または/ ˈ k ɛ ɑː 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による成果です。このアルゴリズムは、以前のハッシュ関数設計であるPANAMARadioGatú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-0SHA-1に対する攻撃が成功したため、[ 19 ] [ 20 ] NISTは、 代替となる、異なる暗号ハッシュの必要性を認識し、それがSHA-3となりました。

準備期間の後、2008年末までに応募書類を提出することになっていた。Keccakは51人の候補者の1人として受け入れられた。2009年7月には、14のアルゴリズムが第2ラウンドに選出された。Keccakは2010年12月に最終ラウンドに進出した。[ 21 ]

コンテスト期間中、参加者は発見された問題に対処するためにアルゴリズムを「微調整」することが認められました。Keccakに行われた変更は以下の通りです。[ 22 ] [ 23 ]

  • 安全性をより重視するため、弾丸の数は12 + ℓから12 + 2ℓに増加されました。
  • メッセージのパディングは、より複雑な方式から、以下に説明する単純な 10 * 1 パターンに変更されました。
  • レートrは、最も近い 2 の累乗に切り捨てられるのではなく、セキュリティ制限まで増加されました。

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 ]で確認された。

設計

スポンジ構造の図解
ハッシュ関数のスポンジ構造。P i入力、Z iはハッシュ化された出力です。容量cは、衝突攻撃または原像攻撃に対する所望の耐性の2倍である必要があります

SHA-3はスポンジ構造[ 14 ]を採用しており、この構造ではデータがスポンジに「吸収」され、その結果が「絞り出され」ます。吸収段階では、メッセージブロックは状態のサブセットにXOR演算され、その後、順列関数(または変換)を使用して全体が変換されます。「絞り出し」段階では、出力ブロックは同じ状態のサブセットから読み出され、状態変換関数によって交互に読み出されます。書き込まれて読み出される状態の部分のサイズは「レート」( と表記)と呼ばれ、入出力に影響されない部分のサイズは「容量」( と表記)と呼ばれます。容量によって方式のセキュリティが決まります。最大のセキュリティレベルは容量の半分です。 f{\displaystyle f}f{\displaystyle f}r{\displaystyle r}c{\displaystyle c}

入力ビット文字列、パディング関数、幅 のビットブロックを操作する置換関数、レート、出力長が与えられた場合、容量とスポンジ構成が得られます。これにより、長さ のビット文字列が生成されます。[ 6 ] : 18 N{\displaystyle N}pad{\displaystyle pad}f{\displaystyle f}b{\displaystyle b}r{\displaystyle r}d{\displaystyle d}cbr{\displaystyle c=br}Zスポンジ[fpadr]Nd{\displaystyle Z={\text{sponge}}[f,pad,r](N,d)}Z{\displaystyle Z}d{\displaystyle d}

  • pad関数を使用して入力Nを埋め込むと、長さが(整数)で割り切れるパディングされたビット文字列Pが生成されます。r{\displaystyle r}n長さP/r{\displaystyle n={\text{len}}(P)/r}
  • 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ビットの追加情報が含まれているため、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]であり、 XORANDNOT演算を使用する順列であり、ソフトウェアとハ​​ードウェアの両方で簡単に実装できるように設計されています

これは任意の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 ww = 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]となります。j3210t01{\displaystyle {\begin{pmatrix}i\\j\end{pmatrix}}={\begin{pmatrix}3&2\\1&0\end{pmatrix}}^{t}{\begin{pmatrix}0\\1\end{pmatrix}}}
π(パイ)
25個の単語を固定パターンで並べ替えます。a [ 3 i +2 j ][ i ] ← a [ i ][ j ]
χ(カイ)
xx ⊕ (¬ y & z )を用いて、行に沿ってビット単位の結合を行います。正確には、a [ i ][ j ][ k ] ← a [ i ] [ j ][ k ] ⊕ (¬ a [ i ][ j + 1 ][ k ] & a [ i ][ j + 2 ][ k ])となります。これはSHA-3における唯一の非線形演算です。
ι(イオタ)
ラウンド定数を排他的論理和(XOR)で状態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 = br = 1600 − rが高いほど)、ハッシュの効率は悪くなりますが、ハッシュの安全性は高まります。これは、計算コストの高いfの各適用前に、メッセージのビット数が少なくなり、状態に XOR できる(迅速な操作)ためです。著者らは、Keccak-f[1600] に 1024 ビットの XOR を加えたソフトウェア実装について、以下の速度を報告しています。[ 1 ]これは SHA3-256 にほぼ相当します。

  • IA-32、Intel Pentium 3で57.4 cpb [ 39 ]
  • 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 について、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 )2241152448ケチャック[448]( M || 01, 224)112224224
SHA3-256( M )2561088512ケチャック[512]( M || 01, 256)128256256
SHA3-384( M )384832768ケチャック[768]( M || 01, 384)192384384
SHA3-512( M )5125761024ケチャック[1024]( M || 01, 512)256512512
SHAKE128(男性d )d1344256ケチャック[256]( M || 1111, d )最小( d /2,128)≥min( d ,128)min( d ,128)
SHAKE256(男性d )d1088512ケチャック[512]( M || 1111, d )最小( d /2,256)≥min( d ,256)min( d ,256)

以下の定義によれば

  • Keccak[ c ]( N , d ) = sponge[Keccak-f[1600], pad10 * 1, r ]( N , d ) [ 6 ] : 20
  • ケッカク-f[1600] = ケッカク-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 ] [ 46 ] [ 47 ]

接尾辞意味
00シェイク
01SHA-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( XBLS )最新のプロセッサの並列処理を利用してハッシュ処理を高速化するために設計された関数。KangarooTwelveとは異なり、ラウンド数削減型のKeccakは使用しません。
ParallelHash256( X , B , L , S )
ParallelHashXOF128( XBLS )
パラレルハッシュXOF256( X , B , L , S )
  • Xはメインの入力ビット文字列です。ゼロを含む任意の長さにすることができます。
  • L は、要求された出力の長さをビット単位で表す整数です。
  • Nは関数名ビット文字列であり、NISTがcSHAKEに基づく関数を定義するために使用します。cSHAKE以外の関数が不要な場合、Nは空文字列に設定され、その場合、SHAKEと同じになります。
  • Sはカスタマイズビット文字列です。ユーザーはこの文字列を選択して関数のバリアントを定義します。カスタマイズが不要な場合、Sは空文字列に設定されます。
  • K は、ゼロを含む任意の長さのキー ビット文字列です。
  • Bは並列ハッシュのブロックサイズ(バイト単位)です。0 < B < 2 2040となる任意の整数を指定できます。

その後の展開

カンガルー12

カンガルー12
ジェネラル
デザイナーグイド・ベルトーニ、ジョアン・デーメン、ミカエル・ピーテルス、ジル・ヴァン・アッシュ、ロニー・ヴァン・ケア、ブノワ・ヴィギエ
初版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 ]をリリースしました

Sakura木ハッシュ

RawSHAKEは、まだ標準化されていない木ハッシュのためのSakuraコーディングの基礎です。Sakuraは、単一ノードに1111というサフィックスを使用します。これはSHAKEと同等で、木の形状に応じて他のサフィックスが生成されます。[ 46 ]:16

量子攻撃に対するセキュリティ

一般的な結果(グローバーのアルゴリズム)によれば、量子コンピュータはで構造化原像攻撃を実行できるが、古典的なブルートフォース攻撃では2 dが必要である。構造化原像攻撃は第 2 の原像攻撃[ 29 ]を意味し、したがって衝突攻撃となる。量子コンピュータは[ 55 ]で誕生日攻撃も実行できるため、衝突耐性が破られる(ただし、これには異論がある)。[ 56 ]最大強度が になり得ることを考慮すると、 SHA-3 の量子セキュリティの 上限[ 57 ]は次のようになる。2d2d/2{\displaystyle {\sqrt {2^{d}}}=2^{d/2}}2d32d/3{\displaystyle {\sqrt[{3}]{2^{d}}}=2^{d/3}}c/2{\displaystyle c/2}

インスタンス 衝突に対する抵抗力におけるセキュリティ強度
衝突(Brassardら)衝突(バーンスタイン)原画像2番目の原画像
SHA3-224( M )7423112112112
SHA3-256( M )851/3128128128
SHA3-384( M )128192192192
SHA3-512( M )17023256256256
シェイク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 ]

SHA-3バリアントの例

以下のハッシュ値は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 

SHA関数の比較

以下の表では、内部状態は次のブロックに繰り越されるビット数を意味します。

SHA関数の比較
アルゴリズムとバリアント 出力サイズ(ビット) 内部状態サイズ(ビット) ブロックサイズ(ビット) ラウンド オペレーション セキュリティ(ビット) Skylakeでのパフォーマンス(中央値cpb[ 61 ]初公開
長いメッセージ 8バイト
MD5(参考)128128 (4 × 32)5124 (各ラウンドで16回の演算)And、Xor、Or、Rot、Add(mod 2 32≤ 18 (衝突が見つかった)[ 62 ]4.9955.001992
SHA-0160160 (5 × 32)51280And、Xor、Or、Rot、Add(mod 2 32< 34 (衝突が見つかりました)≈ SHA-1≈ SHA-11993
SHA-1< 63 (衝突が見つかりました) [ 63 ]3.4752.001995
SHA-2SHA-224 SHA-256224 256256 (8 × 32)51264And、Xor、Or、Rot、Shr、Add (mod 2 32 )112 1287.62 7.6384.50 85.252004 2001
SHA-384384512 (8 × 64)102480And、Xor、Or、Rot、Shr、Add (mod 2 64 )1925.12135.752001
SHA-5125122565.06135.502001
SHA-512/224 SHA-512/256224 256112 128≈ SHA-384≈ SHA-3842012
SHA-3SHA3​​-224 SHA3-256 SHA3-384 SHA3-512224 256 384 5121600 (5×5×64)1152 1088 832 57624 [ 64 ]そして、Xor、Rot、Not112 128 192 2568.12 8.59 11.06 15.88154.25 155.50 164.00 164.002015
SHAKE128 SHAKE256d(任意)d(任意)1344 1088min( d /2, 128) min( d /2, 256)7.08 8.59155.25 155.50

SHA3-256のAVX-512VLOpenSSL 、 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による効果はあまりありません。

  • 32ビットx86では、 「MMX非対応プロセッサは絶滅種」であるため、 MMX実装のみが提供されています。コメントによると、gcc-5.xで生成されたスカラーx86コードの約2倍の速度で実行されるとのことです。[ 73 ]
  • 64ビットx86では、汎用、AVX2、AVX-512、AVX-512VLの実装が存在します。プレーンバージョンはgcc-5.xで生成されたコードよりも約15%高速で、AVX2バージョンはIntelプロセッサ上で汎用バージョンよりもさらに15%高速です(Ryzenでは大幅に遅くなります)。AVX-512バージョンはSkylake-X上で汎用バージョンよりも約50%の改善を示しています。[ 74 ]
  • ARMv4以降では、手書きのスカラーコードはコンパイラ出力に比べて2倍から3倍の性能向上をもたらします。Thumb-2スカラーコードは約10%の性能向上をもたらします。NEONコードはさらに2倍の性能向上をもたらしますが、最良のケース(Snapdragon S4)でも1バイト処理あたり24サイクルかかります。[ 75 ] ARMv8では、ARMv8.2-SHA(ハードウェア支援命令でベクトルレジスタがわずかに使用される)を除き、NEON命令の使用によるメリットはありません。[ 76 ]
  • PowerPCでは、スカラーアセンブリ版はgcc-4.xコードの約2倍の速度です(新しいコンパイラではさらに高速です)。POWER8は2x64ビットのベクターローテーション機能があり、これは便利ですが、POWER9ではスカラー発行能力が向上したため、スカラー版はさらに高速になっています。[ 77 ]

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 ]

参照

  • Ethash – Keccakベースのハッシュ

参考文献

  1. ^ a b cベルトーニ、グイド; Daemen, ジョアン;ピーターズ、マイケル。ヴァン・アッシュ、ジル(2012年5月29日)。「Kecck実装概要」(PDF)。 p. 25.2023 年3 月 27 日に取得
  2. ^ 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-62013年1月8日時点のオリジナルよりアーカイブ(PDF)2019年2月8日閲覧
  3. ^ベルトーニ、グイド;デーメン、ジョアン。ピーターズ、マイケル。ヴァン・アッシュ、ジャイルズ(2011年1月14日)。「Kecck SHA-3 提出書類」(PDF)ケチャックチーム2011 年 8 月 19 日のオリジナルからアーカイブ(PDF)されました2023 年3 月 27 日に取得
  4. ^コンピュータセキュリティ部門、情報技術研究所 (2017年1月4日). 「ハッシュ関数 | CSRC | CSRC」 . CSRC | NIST . 2024年4月19日閲覧
  5. ^ a b「ハッシュ関数」 NIST 2020年6月22日. 2021年2月17日閲覧
  6. ^ a b c d e f g h i情報技術研究所 (2015年8月). SHA-3標準:順列ベースハッシュおよび拡張可能出力関数(PDF) .米国国立標準技術研究所. doi : 10.6028/NIST.FIPS.202 . S2CID 64734386.連邦情報処理標準出版物202. 2020年2月29日閲覧 
  7. ^ Dworkin, Morris J. (2015年8月4日). 「SHA-3標準:順列ベースのハッシュと拡張可能な出力関数」連邦情報処理標準(NIST FIPS).
  8. ^ a b「NIST、セキュアハッシュアルゴリズム(SHA-3)コンペティションの優勝者を選出」 NIST 2012年10月2日2012年10月2日閲覧
  9. ^ Cruz, José RC (2013年5月7日). 「Keccak: 新しいSHA-3暗号化規格」 . Dr. Dobbs .
  10. ^ベルトーニ、グイド;デーメン、ジョアン。ピーターズ、マイケル。ヴァン・アッシュ、ジル。「ケチャック仕様概要」2023 年3 月 27 日に取得
  11. ^チャン、シュージェン;パールナー、レイ。バー、ウィリアム E.ソンメス・トゥラン、メルテム。ケルシー、ジョン・M.ポール、ソウラデュティ。バッシャム、ローレンス E. (2012 年 11 月)。SHA-3 暗号化ハッシュ アルゴリズム コンペティションの第 3 ラウンド レポート(PDF)土井: 10.6028/NIST.IR.7896 2020 年2 月 29 日に取得セクション 5.1.2.1 (「ツリー モード」について言及)、セクション 6.2 (「その他の機能」、認証された暗号化について言及)、およびセクション 7 (「追加機能」については将来標準化される可能性があると述べている)。
  12. ^ a bベルトーニ、グイド;デーメン、ジョアン。ピーターズ、マイケル。ヴァン・アッシュ、ジル。ヴァン・キーア、ロニー(2014年3月13日)。「CAESAR 提出: Ketje v1」(PDF) 2020 年2 月 29 日に取得
  13. ^ a bベルトーニ、グイド;デーメン、ジョアン。ピーターズ、マイケル。ヴァン・アッシュ、ジル。ヴァン・キーア、ロニー(2014年3月13日)。「CAESAR 提出: Keyak v1」(PDF) 2020 年2 月 29 日に取得
  14. ^ a bベルトーニ、グイド;デーメン、ジョアン。ピーターズ、マイケル。ヴァン・アッシュ、ジャイルズ。「スポンジと二重構造」2023 年3 月 27 日に取得
  15. ^コンピュータセキュリティ部門、情報技術研究所(2022年12月14日)。「NIST、すべてのアプリケーションでSHA-1からの移行へ | CSRC」。CSRC | NIST 。 2024年10月9日閲覧
  16. ^ 「新しい暗号化ハッシュアルゴリズム(SHA-3)ファミリーの候補アルゴリズム指名要請の発表 [米国連邦官報 第72巻 第212号]」(PDF)。2007年11月2日。2011年3月31日時点のオリジナルからアーカイブ(PDF) 。 2017年7月18日閲覧
  17. ^ベルトーニ、グイド;デーメン、ジョアン。ピーターズ、マイケル。ヴァン・アッシュ、ジル。「パナマからRadioGatún経由でケチャックまでの道」(PDF) 2023 年3 月 27 日に取得
  18. ^ KeccakReferenceAndOptimized-3.2.zip mainReference.c「Keccakスポンジ関数は、Guido Bertoni、Joan Daemen、Michaël Peeters、Gilles Van Asscheによって設計されました。詳細情報、フィードバック、ご質問は、当社のウェブサイト(http://keccak.noekeon.org/ )をご覧ください。実装は設計者(以下「実装者」)によって行われ、法律上可能な限り、実装者はこのファイルのソースコードに関するすべての著作権および関連する権利、または隣接する権利を放棄します。https: //creativecommons.org/publicdomain/zero/1.0/
  19. ^ Stevens, Marc; Bursztein, Elie; Karpman, Pierre; Albertini, Ange; Markov, Yarik. 「完全なSHA-1の最初の衝突」(PDF) 。 2017年2月23日閲覧
  20. ^ルーラント、ガエタン;ペイリン、トーマス。「SHA-1 は大混乱です」2020 年1 月 8 日に取得
  21. ^ 「NISTコンピュータセキュリティ部門 – SHA-3暗号化ハッシュアルゴリズムコンペティション、2007年11月~2012年10月」。2017年1月4日。
  22. ^ 「Keccak パラメータ変更 ラウンド2」Keccak チーム2009年9月22日. 2017年11月13日時点のオリジナルよりアーカイブ2020年2月29日閲覧。
  23. ^ 「第3ラウンドにおけるKeccakのパディングルールの簡素化」 Keccakチーム、2011年1月17日。 2023年3月27日閲覧
  24. ^ 「SHA-3標準化」 NIST 。 2015年4月16日閲覧
  25. ^米国国立標準技術研究所(NIST)(2015年8月5日)「連邦情報処理標準:順列ベースハッシュ関数および拡張可能出力関数など」 。 2015年8月5日閲覧
  26. ^ 「連邦情報処理規格(FIPS)202、SHA-3規格:順列ベースハッシュおよび拡張可能出力関数の承認、およびFIPS 180-4セキュアハッシュ規格の適用条項の改訂を発表」 2015年8月5日。
  27. ^ケルシー・ジョン「SHA3のこれまでの歩みと今後の展望」(PDF) RSAカンファレンス2013。
  28. ^ケルシー、ジョン. 「SHA3の過去、現在、そして未来」 . CHES 2013.
  29. ^ a b「要約」(PDF) . cr.yp.to .
  30. ^ 「NISTハッシュフォーラムメーリングリスト」 2017年1月4日。
  31. ^ 「Keccak SHA-3 提出書類」(PDF) 2011年1月14日. 2023年3月27日閲覧
  32. ^ 「128ビットセキュリティについて」 2013年10月2日. 2023年3月27日閲覧
  33. ^ 「具体的な提案」 2013年10月2日. 2023年3月27日閲覧
  34. ^ a b「Schneier on Security: Will Keccak = SHA-3?」 2013年10月。
  35. ^ Crowley, Paul (2013年10月1日). 「LShift: なぜ私は米国政府が暗号規格を弱体化させることを支持するのか」 . 2016年3月24日時点のオリジナルよりアーカイブ。
  36. ^ 「Yes, this is Keccak!」 2013年10月4日. 2023年3月27日閲覧
  37. ^ 「SHA-3 の前進」(PDF)
  38. ^ NISTコンピュータセキュリティ部門(CSD)「SHA-3標準:順列ベースのハッシュと拡張可能な出力関数」(PDF) NIST。
  39. ^「約41サイクル/バイト[...]は、32ビット命令のみを使用した実装と比較して40%の高速化を意味します。」式から、1××1.40141{\displaystyle {\frac {1}{x}}\times 1.40={\frac {1}{41}}}×57.4{\displaystyle x=57.4}
  40. ^ Bernstein, Daniel J. (2012年1月4日). 「SHA-3ソフトウェアにおける最適化の失敗」(PDF) . cr.yp.to . 2020年2月29日閲覧
  41. ^ a b c「SHA-3は遅いのか?」 2017年6月12日。 2023年3月27日閲覧
  42. ^ 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位です。
  43. ^ ARM 社、ARM アーキテクチャ リファレンス マニュアル ARMv8、ARMv8-A アーキテクチャ プロファイル用、ドキュメント ARM DDI 0487C.a (ID121917)、 https://www.arm.com
  44. ^ http://publibfp.dhe.ibm.com/epubs/pdf/dz9zr011.pdf p. 672
  45. ^ Rawat, Hemendra; Schaumont, Patrick (2017). 「Keccakの効率的な計算のためのベクトル命令セット拡張」. IEEE Transactions on Computers . 66 (10): 1778– 1789. doi : 10.1109/TC.2017.2700795 .
  46. ^ a b「Sakura: ツリーハッシュのための柔軟なコーディング」(PDF) . Keccak チーム. 2014 . 2020年2月29日閲覧
  47. ^ a b SHA-3 派生関数: cSHAKE、KMAC、TupleHash、ParallelHashこの記事には、パブリック ドメインパブリックドメインにあるこのソースからのテキストが組み込まれています。
  48. ^ 「ソフトウェアパフォーマンス数値」
  49. ^ a b「Keccak Team: KangarooTwelve」 . Keccak Team.
  50. ^ a b「KangarooTwelve:Keccak-pに基づく高速ハッシュ」(PDF) .国際暗号研究協会. 2016年.
  51. ^ 「KangarooTwelveのスライドがACNS 2018で発表されました」(PDF)。Keccakチーム。
  52. ^ヴィギエ、ブノワ;ウォン、デイビッド。アッシュ、ジル・ヴァン。ダン、クイン。デーメン、ジョアン(2025年10月12日)。KangarooTwelve と TurboSHAKEIETF土井: 10.17487/RFC9861RFC 9861 2025 年11 月 4 日に取得
  53. ^ベルトーニ、グイド;デーメン、ジョアン。セス・ホファート。ピーターズ、マイケル。ヴァン・アッシュ、ジル。ヴァン・キーア、ロニー(2016年12月29日)。「ファルファッレ: 並列置換ベースの暗号化」暗号学 ePrint アーカイブ
  54. ^グイド・ベルトーニ;ジョーン・デーメン。セス・ホファート;マイケル・ピーターズ;ジル・ヴァン・アッシュ。ロニー・ヴァン・キーア(2018年10月12日)。「認証された暗号化スキーム Kravatte-SANE および Kravatte-SANSE」暗号学 ePrint アーカイブ
  55. ^ 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 .
  56. ^ 「コスト分析」PDF) . cr.yp.to
  57. ^ 「衝突問題」(PDF) . scottaaronson.com .
  58. ^ 「論文」(PDF) . eprint.iacr.org . 2016年.
  59. ^ 「抄録」(PDF) . eprint.iacr.org . 2017年.
  60. ^ 「NIST.gov – コンピュータセキュリティ部門 – コンピュータセキュリティリソースセンター」 2016年12月29日。
  61. ^ 「測定表」 . bench.cr.yp.to .
  62. ^ Tao, Xie; Liu, Fanbao; Feng, Dengguo (2013). MD5に対する高速衝突攻撃(PDF) . Cryptology ePrint Archive (技術レポート). IACR .
  63. ^ 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セキュリティブログ
  64. ^ 「Keccakスポンジ関数ファミリー」 。 2016年1月27日閲覧
  65. ^ "openssl/openssl – kecak1600-avx512vl.pl" . GitHub . 2020年6月25日閲覧
  66. ^ "openssl/openssl – keccak1600-avx2.pl" . GitHub . 2021年11月.
  67. ^ "openssl/openssl – keccak1600-x86_64.pl" . GitHub . 2020年6月25日閲覧
  68. ^ "openssl/openssl – keccak1600-armv8.pl" . GitHub . 2021年11月.
  69. ^ "openssl/openssl – keccak1600-ppc64.pl" . GitHub . 2020年6月25日閲覧
  70. ^ "openssl/openssl – kccak1600-mmx.pl" . GitHub . 2020年6月25日閲覧
  71. ^ "llvm/llvm-project – AArch64.td" . GitHub . 2020年6月24日閲覧
  72. ^ 「ARMv8 – ARM – WikiChip」 . en.wikichip.org . 2020年6月24日閲覧
  73. ^Openssl/Crypto/Sha/Asm/Keccak1600-MMX.pl at 33388b44b67145af2181b1e9528c381c8ea0d1b6 · openssl/Openssl」。GitHub
  74. ^ "openssl/openssl" . GitHub . 2020年6月25日閲覧
  75. ^Openssl/Crypto/Sha/Asm/Keccak1600-armv4.pl at 33388b44b67145af2181b1e9528c381c8ea0d1b6 · openssl/Openssl」。GitHub
  76. ^Openssl/Crypto/Sha/Asm/Keccak1600-armv8.pl at 33388b44b67145af2181b1e9528c381c8ea0d1b6 · openssl/Openssl」。GitHub
  77. ^ "openssl/openssl" . GitHub . 2021年11月.
  78. ^ IBM z/Architecture Principles of Operation、発行番号SA22-7832。第7章のKIMD命令とKLMD命令を参照してください。
  79. ^ "weidai11/cryptopp" . GitHub . 2020年6月25日閲覧
  80. ^ソロモン2019、62ページ。

出典