我有三个问题:


您将使用HMAC-SHA1或HMAC-SHA256进行消息身份验证吗?
HMAC-SHA256比HMAC-SHA1慢多少? > SHA256(超过SHA1)的安全性改进是否足以证明其用法合理?


评论

#2如果您不是执行数百万个哈希值的服务,那么这两个值都应花费一秒钟的微小时间(对于相当小的消息)。

#1)我将使我的协议足够通用,这样我就可以轻松地交换出密码规范。

散列速度取决于硬件。您还应该考虑SHA512。如果只需要支持64位CPU,并且大多数消息是120字节或更长,则SHA512将比SHA256更快。如果您需要支持32位和64位CPU的混合使用,或者大多数消息的长度为55个字节或更短,则SHA256将比SHA512更快。

#1 楼


可以使用HMAC-SHA1或HMAC-SHA256进行消息身份验证吗?


是的。两者都是非常好的选择,当然,假设消息验证码是适当的解决方案(即,双方共享一个秘密密钥),并且您不需要极高的速度。

<




HMAC-SHA256比HMAC-SHA1慢多少?这些加密性能问题是特定于平台的,因此很难明确地回答。以我的经验,我已经看到SHA-1(因此是HMAC-SHA-1)比SHA-256快30%。当然,您的里程可能会有所不同。

当然,显而易见的卷土重来是“这个性能差异对您来说有多重要?”。而是取决于您添加/检查完整性标记的速度。


SHA256(在SHA1之上)的安全性改进是否足以证明其用法合理? >
据我们所知,HMAC-SHA256和HMAC-SHA1之间基本上没有安全性区别;如果密钥足够长,那么它们都不会受到蛮力的侵害;而如果标签具有相当长的长度,则两者都将以预期的概率捕获任何伪造的消息。 SHA1有一个已知的弱点,它使某人可以在比预期的时间短的时间内计算出碰撞。没有将其应用于HMAC-SHA1的已知方法,因此也没有已知的攻击方法(除了我刚才提到的暴力破解和随机猜测标签之外)。

评论


$ \ begingroup $
附录。在HMAC规范的第6节中,它解释了当前最著名的攻击的不可行性。 HMAC只调用了两次哈希函数,因此速度几乎可以忽略不计。至于输出大小,这可能是一个因素,尤其是当您通过网络发送哈希时。但是,也可以将HMAC的输出截断为一定长度。因此,实际上,在SHA1和SHA256之间进行选择并没有太大的区别。最好还是坚持使用SHA1。
$ \ endgroup $
–user3100783
2014年4月4日在1:05



#2 楼

我会使用HMAC-SHA256。

虽然雨披的回答都是安全的,但出于以下几个原因,我更倾向于使用SHA-256作为哈希: br攻击只会变得更好。 SHA-1的抗碰撞性已经被破坏,因此将来也不会发生其他攻击。
它允许您仅依赖一个哈希函数,也可以在签名算法等中使用它。必须具有抗碰撞性。
您不必证明使用损坏的基元是合理的。 (“我听说SHA-1坏了吗?”)

唯一的潜在缺点是性能,但是在大多数HMAC用例中这可能并不重要,因为在性能很重要的情况下,您可以找到更快的MAC使用代替。因此,我认为上述原因在大多数情况下足以证明使用SHA-256作为HMAC哈希是合理的。