我使用scrypt作为密钥派生函数(而不是存储密码)。为了传递分离的密钥头,我使用在Colin的scrypt实现(scryptenc.c#L224)中实现的标准编码。
原
得到的96个字节构成键头。
用Blake2代替SHA-256进行校验和签名对我有什么影响吗?安全方面有什么不同吗?
如果我使用Blake2-256,我会切断16字节的校验和(这似乎是不建议),使用32字节还是保持它就像使用SHA-256?
谢谢!
发布于 2017-03-29 18:46:05
请注意,布莱克2‘S的安全目标是SHA-256安全目标的超集:
所以是的,如果Blake2是安全的,这个替代应该是安全的。有一点要注意的是,对于这一步:
...you不想使用HMAC,因为Blake2有一个内置的键控模式,其目标与HMAC相同。(HMAC-Blake2并不是不安全的-这不是使用Blake2作为MAC的标准方式。)
如果我使用Blake2-256,我会切断16字节的校验和(这似乎是不建议),使用32字节还是保持它就像使用SHA-256?
您所链接的答案并不是说截断Blake2总是不安全的。其要点是:
在您的情况下,我将回到这样一个事实:您正在采用一个已经设计的协议,并用Blake2替换它对SHA-256的使用。这意味着,如果协议是安全的,那么您的替换也应该是安全的,因为如果Blake2是安全的,那么它应该具有该协议期望SHA-256提供的所有属性。因此,如果原始协议截断了SHA-256的输出,那么截断Blake2的输出也不会更糟。
https://crypto.stackexchange.com/questions/45127
复制相似问题