SHAKE
SHAKE128 / SHAKE256
Secure Hash Algorithm with Keccack (SHAKE)
シャケではないかも SHA-3 XOF とか呼ばれることもある。
SHA-2の後継としてはこちらが主流でSHA-3は互換性目的のようだ。
出力が1回のKeccak-fより長い場合は入力が空でくり返すKeccakのスポンジ構造を使う。
1600bitを攪拌し、入力も出力も1600 - 暗号強度bit ぐらいの長さを使う。
出力長に関わる値は入力値に含まれないため出力長を変えても基本的な出力は同じ。ハッシュ値がかぶった場合は隠れている部分が違ってくるので後の結果も変わるが、SHAのように出力長が違うと値も変わるものを想定したところでは使えない。
RawSHAKE にビットを付加したもの。付加することで同じ出力にならない。
SHAKE128(M,d) = RawSHAKE128(M || 11,d) = Keccak[256](M || 1111,d)
SHAKE256(M,d) = RawSHAKE256(M || 11,d) = Keccak[512](M || 1111,d)
Mはメッセージ(ビット単位) dは出力長 1はビット
ブロック長など
table:仕様?
名 ブロック長 デフォルト?ハッシュ長
SHAKE128 1600-128*2 1344 256
SHAKE256 1600-256*2 1088 512
ECDSAなどで使われるときのハッシュ長、HMACで使われるブロック長など SHA-3より長い
ラベルを付けたりできるcSHAKE128 / cSHAKE256もある Keccak
RawSHAKE
SHAKE
SHA3
ECDSAでハッシュ関数の代わりに使われたりするらしい こんな感じにしてみる