([ˈkætʃæk]あるいは[kɛtʃɑːk])[4][5]として知られた暗号学的ハッシュ関数である。construction)とは全く異なっている。Asscheによって設計された。(NIST)によるこれらに類似した構造を持たないハッシュ関数を求めたコンペティションによるものである。その後、SHA-2への攻撃法の研究は進んだものの、2017年初頭時点では効率的な(有効な)攻撃法の報告はまだ無いことなどのため、結果としてSHA-2の代替の用意が重要ではなくなるなど、状況が変化している[9]。して公表された[2]。function)[10][11]を採用しており、メッセージのブロックは状態の初期ビットとのXORを取ったのちに後述のブロック置換が行われる。SHA-3で用いられているバージョンでは、状態は64ビットのワード長の5×5アレイから構成され、総計で1600ビットである。byteの速度が出ると主張している[3]。ハードウェア実装では他のどの最終候補よりも高速であった[12]。Keccakの設計者は、認証付き暗号や特定のアーキテクチャにおいてより高速のハッシュ計算を実現する「木」構造のハッシュなど、標準化されていない関数の利用法を提唱している[13]。あり、そのときの状態は25ビット)。小さい状態長は暗号研究でのテストに有用であり、中間的な状態長(w=4のとき100ビット、w=32のとき800ビット)は、実用的な軽量の代替実装として利用できる。cは、衝突攻撃や原像攻撃に対して望む耐性の2倍必要である。Keccakはスポンジ構造を採用しており、入力が一定の比率で内部状態に「吸収」され、ハッシュ出力では同じ比率で「絞り出」される。ビットを吸収するときには、データと状態の先頭ビットの排他的論理和を取り、ブロック置換を行う。ビットを出力として生成し、さらなる出力が必要な時にはブロック置換を行う。保守的な設定がなされている。それぞれ1152、1088、832、576となる。SHA-2シリーズと異なり、SHA-3の関数(固定長を出力する224、256、384、512バージョンおよび可変長出力のSHAKE128およびSHAKE256)は全て同じブロック置換関数を持つ。これらのハッシュ関数を区別するものはパディングとスポンジ関数のパラメータの差のみである。ビットごとに分割する。ビットごとに分割した入力と状態の排他的論理和を取ってからブロック置換を行う。ビットが求めるハッシュ値である。大きいため、絞り出す過程において更なるブロック置換は不要である。ビットごとのブロックに分割するためにはパディングが必要である。個まで)、そして最後に1つのビット1を追加する。割り切れる場合であっても追加される。ブロックが追加される。ブロックが追加される。このような処理は、ブロック数が増加するため無駄に見えるかもしれないが、安全性のために必要である。最初のパディングビット1がない場合は、パディングが必要なメッセージのハッシュ値と、「パディングされたかのようなメッセージ」のハッシュ値が同じになってしまう(衝突)。最後のビット1は、異なるレート(異なるハッシュ長)のバリアントに対して安全性を保障するために必要である(マルチレートパディング)。場合)が同じになってしまう。ビットの状態を別の状態に変換する。状態は5×5×wビットのアレイで表現される。番目の入力ビットとなる。繰り返しで構成される。計算し、さらに隣接する2つのカラムとの排他的論理和を取る。A[0][0]はローテートせず、出力A’にコピーする。