本文へスキップ
ecdsa.com

SHAKE128 と SHAKE256

Keccak スポンジから要求された任意の長さの出力を生成する、FIPS 202 の拡張出力関数(XOF)です。出力が十分に長ければ、安全性はそれぞれ 128 ビットと 256 ビットです。
別表記SHAKE128SHAKE256XOFextendable-output function

ダイジェスト長が固定されたハッシュと異なり、XOF には出力のビット数 d を指定します。衝突耐性は min(d/2, キャパシティ/2)、原像耐性は min(d, キャパシティ/2) です。キャパシティは SHAKE128 が 256 ビット、SHAKE256 が 512 ビットです。SHAKE256 に 32 バイトや 64 バイトを要求すると同じストリームの先頭部分が得られるため、呼び出し側は用途ごとにドメインを分離しなければなりません。cSHAKE(SP 800-185)では、明示的なカスタマイズ文字列を追加できます。

SHAKE はポスト量子暗号のあらゆる場面で使われています。ML-KEM と ML-DSA は公開行列を SHAKE128 で展開し、その他の値を SHAKE256 で導出します(FIPS 203 と FIPS 204 では XOF、H、J、G と呼ばれています)。SLH-DSA には SHAKE のパラメーターセットがあり、Ed448 は SHAKE256 でハッシュします。FIPS 186-5 は、RSASSA-PSS のハッシュ関数とマスク関数として SHAKE を使うことも認めています。

識別子:OID は 2.16.840.1.101.3.4.2.11(SHAKE128)と …2.12(SHAKE256)、OpenSSL では -xoflen を指定した shake128 と shake256、Python では hashlib.shake_256(data).digest(n) です。

規格と参考文献

すべての用語