密码学中的哈希算法详解

什么是哈希函数?

哈希函数(H)接收一个可变长度的数据块,并返回一个固定大小的哈希值。一个优秀的哈希函数具有这样的特性:当它应用于大量输入时,其输出将均匀分布且看起来是随机的。通常,哈希函数的主要目的是维护数据完整性。任何对结果中哪怕一个或多个比特的更改,都会以极高的概率导致哈希码的改变。

出于安全目的所需的哈希函数类型被称为 密码学哈希函数

密码学哈希函数(或密码学哈希算法)是一种算法,当用于查找以下内容时,其在计算上是低效的(即没有比暴力破解更有效的攻击手段):

  • 映射到预定义哈希结果的数据对象
  • 在无冲突属性下映射到同一哈希结果的两个数据对象。

正因为具备这些特性,哈希函数常被用于检查数据是否已被篡改。

!密码学原理图:哈希函数;h = H(M)密码学原理图:哈希函数;h = H(M)

密码学中哈希算法的内部机制

既然我们对密码学中的哈希函数有了基本的了解,让我们来深入剖析一下它的内部机制。

哈希算法的第一步是将庞大的输入数据分割成大小相等的块。随后,算法会逐一对这些数据块应用哈希处理。

虽然每个块是单独进行哈希运算的,但所有块之间都是相互关联的。第一个数据块的输出哈希值会被作为输入值,并与第二个数据块进行合并(或求和)。类似地,第二个块的哈希输出会与第三个块合并,合并后的输入值再次被哈希。这个过程会不断重复,直到我们得到最终的哈希输出,它是所有参与计算的块的累加值。

因此,篡改任何块的数据都会改变其哈希值。由于它的哈希值会输入到后续的块中,所有的哈希值都会随之改变。这就是为什么即使是输入数据中最微小的变化也能被检测出来,因为它会改变整个哈希值。

让我们来看一个实际场景:Alice 是一位供应商,她的业务是向 Bob 的办公室赊账提供文具。一个月后,她给 Bob 发送了一张包含库存清单、账单金额和她的银行账户详情的发票。她在发送给 Bob 之前对文档进行了数字签名并进行了哈希处理。然而,名叫 Todd 的黑客在文件传输过程中拦截了它,并将 Alice 的银行账户详情替换成了他自己的。

当 Bob 收到这封信时,他的计算机计算了文档的哈希值,发现它与原始哈希值不同。Bob 的计算机立即发出警报,警告他文档有些不对劲,他不应该信任它。

如果没有经过哈希处理的文档,Bob 很容易就会信任文档的内容,因为他认识 Alice,而且文档中的交易细节看起来也是真实的。然而,由于哈希值不匹配,Bob 意识到了内容被篡改。现在,他通过电话联系 Alice,并与他分享了他收到的文档中的信息。Alice 确认她的银行账户与文档中写的不一致。

这就是哈希函数如何让 Alice 和 Bob 免受金融欺诈的。现在想象一下,如果这个场景发生在你自己的业务中,结果会怎样。

主要术语

原像: 假设我们有一个哈希值(哈希值 h = h(x))。我们说 x 是 h 的原像。我们可以将 x 称为一个数据块,其哈希函数(使用函数 H)是 h。因为 H 是多对一映射,对于任何哈希值 h,总会存在一定数量的原像。
碰撞: 如果 x≠y 且 H(x) = H(y),我们就遇到了碰撞。既然我们在处理哈希函数,显然我们不希望发生碰撞。

常见的哈希函数

哈希函数在计算领域扮演着重要角色,提供了多种多样的功能,例如:快速检索数据、安全保护信息(密码学)、确保数据保持不变(完整性验证)。一些常用的哈希函数包括:

消息摘要 5 (MD5)

MD5 是一种特定的消息摘要算法,属于密码学哈希函数的一种。它接受任意长度(一条消息)的输入,并生成一个固定长度(128位)的哈希值,这就像该消息的独特指纹。

从 20 世纪 90 年代初开始,MD5 被广泛用于各种用途,包括:

  • 文件校验:确保从网上获取的文件在传输过程中未被更改。MD5 被用来为原始文件生成代码,并与接收到的文件的代码进行比较。
  • 密码存储:MD5 有时用于在服务器上存储密码。然而,它从来都不……

> 注意:MD5 如今已被认为是不安全的,对于加密用途应当避免使用,推荐使用更安全的算法如 SHA-256 或 SHA-3。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/49704.html
点赞
0.00 平均评分 (0% 分数) - 0