首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HMACSHA256与HMACSHA512的区别

HMACSHA256与HMACSHA512的区别
EN

Stack Overflow用户
提问于 2013-08-06 12:40:04
回答 3查看 18.8K关注 0票数 17

我们使用下面的代码来针对HMac中的敏感值生成一个C#哈希

代码语言:javascript
复制
public string GenerateHMac(string key, string message)
{
    var decodedKey = Convert.FromBase64String(key);

    var hasher = new HMACSHA256(decodedKey);

    var messageBytes = Encoding.Default.GetBytes(message);

    var hash = hasher.ComputeHash(messageBytes);

    return Convert.ToBase64String(hash);
}

传入的密钥是256位基64编码字符串。有人提出了一个问题,即我们应该使用HMACSHA256、HMACSHA384还是HMACSHA512来散列值。

  • 与HMACSHA256相比,使用HMACSHA256有什么好处?
  • 它是否更安全?
  • 当使用更长的键时,是否有戏剧性的性能影响?

顺便提一句,如果我使用decodedKey,我要传递给构造函数的HMACSHA512值是否需要是一个512位键?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-06 14:55:07

TL;DR:使用HMAC- use 512实现最佳的速度、安全性和OK兼容性.HMAC- bit 256也非常安全,可用于32位操作的CPU.此外,它在许多最新的CPU上加速。

要查看散列方法本身的强度,请查看keylength.com网站。您将看到,即使是SHA-256也有相当大的安全性。

更重要的是,HMAC算法几乎忽略了对底层哈希算法的攻击。HMAC不受生日问题的影响,该问题将关键强度减半到哈希输出的一半。它并不是简单的应用,因为对手没有掌握秘密密钥,因此不能尝试创建冲突。这就是为什么连HMAC-SHA1 1都相当安全的原因。

现在哈希的速度取决于执行环境。但一般来说,你可以做以下假设:

  1. 沙-1一般比在同一平台上的任何SHA-2的执行速度都快;
  2. 在64位机器上,SHA-512比SHA-256快(因为它们在内部使用64位算术);
  3. 在8位、16位和32位机器上,SHA-256比SHA-512快.

如果您预期会出现兼容性问题,请使用SHA-1。否则,您还可以选择SHA-512 (并将结果削减到合理的位数)。SHA-512的内部状态和更高的安全性可能是一个小小的优势。由于算法的一般问题,我遇到了客户不接受任何形式的SHA-1的问题;换句话说,它在一般情况下不安全这一事实可能会阻碍接受。

注意,SHA-384和鲜为人知的SHA-512/256和SHA-512/224散列方法是SHA-512的一种特殊形式,被切割到384、256和224位输出。因此,这些算法的速度是相同的。除了输出大小之外,唯一的区别是这些特殊形式在内部使用不同的初始值。否则,SHA-512切割到384位的安全性和速度与SHA-512/384相同。但是,如果需要特定的输出大小,则应该使用SHA-384来保持兼容。

SHA-384和SHA-512/256和SHA-512/224使用不同的初始值,因此它们的输出与SHA-512和SHA-512不同,这是一种称为域分离的特性。域分离使得无法使用攻击或(部分)预测其他相关哈希函数的哈希结果。

输入键大小不依赖于基础哈希函数。关键首先是XOR蒙面,然后由底层哈希函数进行散列;哈希算法可以将几乎无限数量的数据作为输入。

建议使用至少与使用的散列方法大小相同的密钥大小,否则可能会降低HMAC方法提供的安全裕度。如果密钥大小强制哈希算法散列多个块,则可能会造成较小的性能损失。

您还可以使用(即将推出的) SHA-3标准,因为它是安全的。HMAC-SHA-3目前没有太多的意义。HMAC实际上是SHA-3 (Keccak)的过度杀伤;即使没有HMAC构造,SHA-3也应该是安全的。到目前为止,KMAC已被标准化为SHA-3的MAC结构.

SHA-2结构在SHA-3比赛中表现出了相当好的抵抗隐秘分析的能力,这有点令人惊讶.因此,没有迫切需要升级到KMAC / SHA-3。

票数 33
EN

Stack Overflow用户

发布于 2013-08-06 13:17:29

我不认为您需要担心安全性优势,HmacSha1仍然被认为是安全,并且安全性应该被认为相对于密钥长度。Sha256与Sha512的性能将取决于实现、平台等,您需要自己进行测试。您提供给HMAC的密钥长度与散列算法无关,请参见伪码

票数 5
EN

Stack Overflow用户

发布于 2016-04-30 04:28:09

HMAC两次调用哈希算法,而SHA3不需要对密钥哈希进行HMAC构造,因此双调用很容易避免。因此,SHA3在性能上优于HMAC-SHA1 2,在安全性方面优于HMAC-SHA1 1(这两者都是最好的)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18080445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档