SHA-3 Derived Functions
SP 800-185 SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash, and ParallelHash
4个函数底层都基于KECCAK。
注意security strength同时在函数名里体现,例如cSHAKE128, cSHAKE256。
sha3 fixed-output-length; sha3-x, x/2 bits 强度, x bits的output
shake variable-output-length; shake-x, x bits 强度,至少2x bits的output
cSHAKE
cSHAKE是可指定目标输出长度的hash,底层实际调用KECCAK。
cSHAKE(X, L, N, S) X 为输入 L 为目标长度 N 为function-name bit string S 为customization bit string
当N与S均为空string时,
当N/S不全为空string时,
注意128/256的区别仅在于bytepad对齐的rate值不同,为168/136 bits。
KMAC
在XOF(extendable output Function)模式下,KMAC运算时并不确定目标长度right_encode(0),仅在生成output之后,再truncate。
KMAC256 主要注意rate值不同。
TupleHash
TupleHash的核心是对一个序列计算Hash,通过对序列内每个元素的encode_string处理,避免不同序列得到重复的结果,例如(“abc”, “d”)与(“ab”, “cd”)是不同的。
encode_string处理后的序列,拼接后作为输入,再调用cSHAKE处理。
TupleHashXOF128 与 前面类似,主要是right_encode(0)
TupleHash256 主要注意rate值不同。
ParallelHash
ParallelHash 的核心是对一个超长序列,分块进行并行计算,加速。
ParallelHashXOF128 与 前面类似,主要是right_encode(0)
ParallelHash256 主要注意rate值不同。
Hashing into a Range
假设要生成一个[ 0, R ) 内的整数
可以计算 k = cell(lg(R)) + 128
hash计算得到k bits的输出Z
将Z转换为整数
security
L, S 最长不超过 \(2^2040 - 1\) bits。
K长度不应低于security strength。
MAC场景下,L长度不应低于32bits,尽量>=64bits。