cSHAKE
NIST SP 800-185 cSHAKE128, cSHAKE256 XOF https://doi.org/10.6028/NIST.SP.800-185
https://csrc.nist.gov/pubs/sp/800/185/final
KMAC, TupleHash, ParallelHashなど用に拡張されたSHAKE128 / SHAKE256
XOFとして利用可能
ぱらめーた
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)
https://github.com/okomeki/SoftLibCrypto/blob/master/src/main/java/net/siisise/security/digest/cSHAKE.java
https://github.com/okomeki/SoftLibCrypto/blob/master/src/main/java/net/siisise/security/digest/cSHAKE128.java
https://github.com/okomeki/SoftLibCrypto/blob/master/src/main/java/net/siisise/security/digest/cSHAKE256.java