我需要使用BLAKE2在我的代码中计算256位哈希.
我知道我可以将BLAKE2设置为为任何数据生成一个256位的散列,但我很想知道什么可以更安全、更快:
1-使用Blake2Config模块创建256位;或者2-截断正常的512位结果,得到最左边的32字节(256位)。
在第一次,我想得到最左边的32个字节可能更安全,也不会比直接从Blake获得256位的速度慢。
我说错了吗?谢谢你的评论。
发布于 2015-12-12 19:31:57
如果您需要一个标准输出大小(例如224、256、384、512位),请使用推荐的参数集。
这主要适用于像SHA-3这样的标准,如果您使用SHA-3-256,您将得到一个与"Keccak-256“、SHA-3-512/256和SHAKE128-256不同的(更标准的输出),这些标准都使用所谓的”域分离“(即在输入中追加一个特定的字节序列以获得不同的散列)。
第一次发言的理由如下:
config选项总是与/优于手动截断。在最坏的情况下(例如,握手),它只是对无限长的密钥流的简单截断,因此显示出与手动截断相同的安全属性。在最好的情况下(例如,Skein),选定的输出大小将影响输出,也就是说,Skein-256-256将为消息m提供与Skein-256-255完全不同的输出。显然,这是更安全的(而且通常不会降低速度),因为它将保证Trunc(H_{d}(m),t)\neq H_t(m)可能是一个理想的属性(尽管很少需要)。
Blake2对应于第二种情况(即摘要大小影响输出)。所请求的摘要大小被用作初始的内部链接值(在IV之后)以及一个静态常量和MAC键(如果使用)。因此,它对哈希的影响和IV一样大,这意味着对于相同的消息,Blake2b-32将与Blake2b-64有很大的不同。这可以在RFC 7693 on 第4页(可变名称)和第9页(散列大小的使用)中找到。
https://crypto.stackexchange.com/questions/31221
复制相似问题