为什么与数据一起发送的哈希是安全的?

信息安全 密码学 哈希 电子签名
2021-08-26 11:19:23

哈希值对于验证通过不安全通道发送的数据的完整性也很有用。可以将接收到的数据的哈希值与发送时的数据的哈希值进行比较,以确定数据是否被更改。 来源

数据传输中使用的一种常见方法是让发送者使用单向散列算法创建数据的唯一指纹。哈希与数据一起发送到接收方。接收方会重新计算数据的哈希值并与原始数据进行比较,以确保数据在传输过程中不会丢失或修改。 来源

如果计算某些数据的哈希值并将其与数据一起发送,攻击者不能更改数据,重新计算哈希值并且接收者不会更聪明吗?

3个回答

消息来源解释了一个总体概念,可能有点模棱两可,而不是完全误导。以“原始”格式与数据一起发送的哈希绝对容易受到篡改攻击,因此,我们需要:

  • 带外共享哈希值:一个简单的示例是从网站下载文件,该文件在下载链接旁边的网页上显示文件的哈希值(此处的带外通道是正在提供的网页内容在不同的通信渠道中,甚至由不同的 Web 服务器提供更好的服务)。成功下载文件后,您将独立计算文件的哈希值并比较哈希值以确保完整性。这是操作系统映像等关键文件的常见做法。
  • 验证与数据一起发送的散列:这是通过使用所谓的散列消息验证码 (HMAC)来完成的,它为您的消息提供“完整性”和“真实性”安全服务。这里有很多关于这个主题的详细答案

您的消息来源具有误导性(微软误导,谁会想到!)。你引用了这个:

哈希值对于验证通过不安全通道发送的数据的完整性也很有用

所以从技术上讲,如果数据是通过不安全的渠道发送的,它会很有用。它没有指定散列是如何发送的。您是完全正确的:如果攻击者可以篡改数据并且您在其旁边发送散列,那么他们也可以篡改散列值。

所以哈希必须通过安全的方法发送。有用的部分是您可以使用这个短哈希值(只有几个字节)并通过安全通道对其进行比较,以验证您的数 GB 数据文件是否正确。例如,您可以通过电话与某人交谈以比较哈希值(如果您知道对方的声音并相信没有人可以进行语音模仿),从而验证大文件。

第二个引用并没有真正说明安全性,只是验证没有任何修改,这可能意味着由于传输错误而修改。

如果计算某些数据的哈希值并将其与数据一起发送,攻击者不能更改数据,重新计算哈希值并且接收者不会更聪明吗?

在仅散列的数据流中,是的,它们可以。

如果您想缓解这种情况,您需要确保在没有检测到的情况下无法做到这一点,例如对哈希进行签名并将签名包含在字段中。然后,如果哈希匹配并且可以验证签名,则消息将被验证为未被篡改