SHA 和“安全点”

信息安全 哈希
2021-09-10 01:05:48

我研究了几种形式的加密/散列,并且经常遇到“安全位”一词。例如,至少有一个消息来源声称 SHA-256 = AES128 = ECC256 = 128 位安全性。

我的问题是,如果这是真的,我可以采用 256 位 SHA-256 摘要并将其压缩到 128 位而不损失安全性吗?(例如,只取摘要的高 128 位和低 128 位的异或)

在我的特殊情况下,摘要很小很重要。提前感谢您的任何回复。

3个回答

加密哈希函数必须具有几个属性:

  • 对原像的抵抗:给定x ,找到m使得h(m) = x应该是不可行的
  • 对第二原像的抵抗:给定m ,找到m'使得h(m) = h(m')应该是不可行的
  • 碰撞性:找到mm'使得m ≠ m'h(m) = h(m')应该是不可行的

这些属性并不等价,您不一定需要所有这些属性。这取决于您使用散列函数的协议。例如,散列函数用于数字签名的初始步骤,冲突不是问题——除非攻击者能够选择要签名的确切消息。细节可能很微妙。

如果哈希函数的输出为n位,则存在通用攻击,它们分别找到原像、第二原像和与成本的冲突,分别为 2 n、 2 n和 2 n /2“通用”攻击意味着它适用于所有哈希函数,无论它们多么完美。这设置了最大可实现的安全级别。

如果您将 SHA-256 输出“压缩”为 128 位(无论您可能想要使用什么压缩过程,甚至是简单的截断),那么您实际上是在定义一个具有 128 位输出的新哈希函数。因此,该函数对原像和第二原像的抵抗力最多为 2 128,而对碰撞的抵抗力最多为 2 64因此,您的截断 SHA-256 将仅在冲突不是问题的使用环境中提供“128 位安全性”。但由于很难确定冲突确实不是问题,因此不建议“压缩”散列函数输出。

一般来说,我们宁愿安全也不愿后悔;因此,当我们想要“128 位安全性”时,我们使用 256 位散列函数。这样,我们就不必担心碰撞是否会被用于实际攻击。SHA-256 冲突在现有技术下是不可行的。

任何强 256 位加密散列是否具有 128 或 256 位的安全级别的评估完全取决于它的使用方式。在攻击者只需找到任何哈希冲突即可成功的应用程序中,安全级别不能超过 128 位,因为简单的生日攻击将(概率)在 2^128 次随机尝试后成功。如果将散列缩短为 128 位散列,则在此上下文中将其安全级别降低到 64 位。

然而,应用程序是可以想象的,成功的攻击必须找到一个(或很少)给定哈希的冲突,例如伪造数字签名消息不是通过伪造签名本身,而是通过找到产生相同的不同消息哈希(这是签名方案实际签名的内容)。在仅存在一个真实签名的极端情况下,当仅在本示例中使用时,SHA256 可以说允许 256 位的安全级别。

不。在散列的上下文中,“安全位”是衡量一个散列函数有多少可能的输出的量度,因此,找到具有给定输出的输入的难度。它采用对数刻度,因此每增加一位,安全性就会加倍。

您无法比较 SHA-256、AES-128 和 ECC-256 的安全性。它们是完全不同的东西:SHA-256 是加密散列函数,AES-128 是对称块密码,ECC-256 是公钥密码

您提议的对 SHA-256 的修改将大大降低安全性,基本上将其变成 128 位散列函数。然而,这样做比任何标准的 128 位散列函数都更安全,因为它们都具有已知的碰撞攻击,并且其中一些具有原像或第二原像攻击。对于您的目的,128 位可能足够安全。