我一直理解散列函数的位安全性与它们的输出大小有关(例如。(防撞)。然而,我最近从一个Wickr博客帖子上看到一个表,其中列出HKDF 256具有256位安全性。这张桌子:

例如,即使标签只有256位(通常是128位的抗碰撞能力),256位密钥也能提供256位的安全性吗?
对于键控BLAKE2,我找不到任何提及这些细节的内容,但根据RFC,未键的256位输出具有128位的碰撞阻力:
Algorithm | Target | Collision | Hash | Hash ASN.1 |
Identifier | Arch | Security | nn | OID Suffix |
---------------+--------+-----------+------+------------+
id-blake2b160 | 64-bit | 2**80 | 20 | x.1.5 |
id-blake2b256 | 64-bit | 2**128 | 32 | x.1.8 |
id-blake2b384 | 64-bit | 2**192 | 48 | x.1.12 |
id-blake2b512 | 64-bit | 2**256 | 64 | x.1.16 |发布于 2021-02-15 11:59:26
为了防止碰撞,哈希函数的比特安全性是其输出长度的一半。这是因为在时间n中,可以在输出长度为2^{n/2}的任何哈希函数中找到冲突。这就是为什么SHA256的位安全性相对于其主要的抗碰撞安全性而言是128。但是,这并不意味着SHA256不能用于其他目的并实现更高的比特安全性。特别是对于HKDF,输出的比特安全性基本上是输入的安全性(最多为256位,即输出长度)。因此,如果在大小为128位(或熵128的字符串)的输入键上使用HKDF,则会收到具有128位安全性的输出密钥。如果在大小为256位(或熵256的字符串)的输入键上使用HKDF,则会收到具有256位安全性的输出密钥。注意,在所有情况下,SHA256的输出都是256位,所以如果需要更短的结果(例如,当使用128位键时),则需要按照HKDF中指定的那样截断结果。
https://crypto.stackexchange.com/questions/88248
复制相似问题