cSHAKE
ぱらめーた
X 0bit以上のメインストリーム
L 出力ビット長
N ファンクション名
S カスタムビット列
table:Keccak
X L N S ブロック長 bit byte L デフォルト出力長(bit)
SHAKE128 ✓ ✓ 1600 - 128*2 1344 168 256
SHAKE256 ✓ ✓ 1600 - 256*2 1088 136 512
cSHAKE128 ✓ ✓ ✓ ✓ 1600 - 128*2 1344 168 256
cSHAKE256 ✓ ✓ ✓ ✓ 1600 - 256*2 1088 136 512
SHA-3,SHAKE128,SHAKE256などは付加ビットで区別(出力結果が変わる)されていたが、cSHAKE128,cSHAKE256は追加パラメータのNのファンクション名とSのバリアントで区別する。別々の機能で同じ値が出てくることがなくなる。
省略も可能。Nファンクション名は用途によって固定。
ファンクション名とラベルが両方空の場合はSHAKE128 / SHAKE256と同じ処理に変える。
cSHAKE128(X, L, "", "") = SHAKE128(X, L)
cSHAKE256(X, L, "", "") = SHAKE256(X, L)
cSHAKE128(X, L, N, S)
制限: $ len(N) < 2^{2040} and $ len(S) <2^{2040}
If N == "" and S == ""
return SHAKE128(X, L);
Else
return $ KECCAK[256] (bytepad(encode_string(N) || encode_string(S), 168) || X || 00, L)
cSHAKE256(X, L, N, S)
制限: $ len(N)<2^{2040} and $ len(S) < 2^{2040}
If N == "" and S == ""
return SHAKE256(X, L);
Else
return $ KECCAK[512] (bytepad(encode_string(N) || encode_string(S), 136) || X || 00, L)