网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

哈希算法在密码学中的运用方式是什么?

更新时间:2026年03月27日   作者:spoto   标签(Tag):

哈希函数(Hash Function,简称H)接收一个可变长度的数据块,并返回一个固定大小的哈希值。一个好的哈希函数的特点是:当将其应用于大量输入时,输出结果会均匀分布且看起来是随机的。通常,哈希函数的主要作用就是确保数据的完整性。如果结果中的任何一位或几位发生了变化,那么哈希码也必然会随之发生变化,这种变化的几率非常高。

出于安全考虑而需要使用的哈希函数类型,被称为……加密哈希函数。

加密哈希函数(或加密哈希算法)是一种在计算上效率较低的算法。当用于查找以下内容时,这种算法的效率并不高:

  • 一个与预定义的哈希结果相对应的数据对象。
  • 这两个数据对象与哈希结果相对应,因此它们具有无冲突的特性。

由于这些特性,哈希函数常被用来判断数据是否发生了变化。

加密函数的框图:哈希函数;h = H(M)

在密码学中,对哈希算法的研究非常重要。

现在,我们已经对密码学中哈希函数的基本概念有了一定的了解。接下来,让我们来详细了解一下哈希函数的内部运作机制吧。

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

虽然每个数据块都被单独哈希处理,但实际上所有数据块都是相互关联的。第一个数据块的哈希值被作为输入值,然后与第二个数据块的哈希值相加。同样地,第二个数据块的哈希值与第三个数据块的哈希值相加,然后再对得到的合并后的哈希值进行哈希处理。这个过程不断重复,直到得到最终的哈希值——也就是所有参与处理的各个数据块的哈希值的累加结果。

因此,对任何数据块进行篡改后,其哈希值都会发生变化。由于该哈希值会被用于后续数据块的生成过程中,所以所有数据块的哈希值都会受到影响。这样一来,即使输入数据中只有极小的变化,也能被检测到,因为这种变化会直接影响到整个哈希值。

艾丽斯是一名供应商,她的业务是向鲍勃的办公室提供文具产品,采用赊账方式销售。一个月后,她给鲍勃发送了一份发票,上面有库存清单、账单金额以及她的银行账户信息。她在文件上签了数字签名,并对文件进行了哈希处理,然后再将其发送给鲍勃。不过,黑客托德在文件传输过程中截获了这份文件,并将艾丽斯的银行账户信息替换成了自己的信息。

当鲍勃收到这封信时,他的计算机会计算出文件的哈希值。结果发现,这个哈希值与原始哈希值不一致。鲍勃的计算机立即发出警报,提醒他:这份文件有些问题,他不应该相信它。

如果没有这个哈希值的话,Bob很容易就会相信这份文件的内容,因为他与Alice很熟悉,而且文件中记载的交易细节也是真实的。不过,由于哈希值不匹配,Bob意识到发生了一些变化。于是,他通过电话与Alice联系,并将自己收到的文件中的信息告诉了她。Alice确认自己的银行账户信息与文件中所写的并不一致。

这就是哈希函数如何帮助Alice和Bob避免财务欺诈的。现在,想象一下这种情况在你的商业场景中会如何发生吧。

主要术语/关键词

原像:假设我们有一个哈希值,即 h = h(x)。那么可以说,x就是h的第一个“图像”。我们把x称为一个数据块,而该数据块的哈希函数就是H。由于H是一个多重映射,因此对于任何哈希值h,都一定存在某个预像。

碰撞如果x不等于y如果 H(x) = H(y),那么就会发生碰撞现象。由于我们处理的是哈希函数,显然,出现碰撞现象是不希望发生的。

流行的哈希函数

哈希函数在计算中发挥着重要作用,它具备多种功能,比如:能够快速检索数据、能够安全地保护信息。加密技术确保数据保持原样不变(即数据的完整性得到验证)。一些常用的哈希函数包括:

消息摘要算法5(MD5)

MD5是一种特定的消息摘要算法,属于加密哈希函数的一种。它接受任意长度的输入(即一条消息),然后生成一段固定长度(128位)的哈希值。这个哈希值实际上相当于该消息的“唯一指纹”。

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

  • 文件检查:确保从网络上下载的文件在传输过程中没有发生任何更改。首先,使用MD5算法生成第一个文件的校验码,然后将其与接收到的文件的校验码进行比较。
  • 密码存储:有时,人们会使用MD5算法来将密码存储在服务器上。不过,直接以明文形式存储密码是不被推荐的。相反,密码会被通过MD5算法进行哈希处理,然后存储得到的哈希值。这样一来,即使发生安全漏洞,实际的密码也不会被泄露。

安全哈希函数(SHA)

SHA指的是Safe Hash Algorithm。它是由NIST开发的一系列用于保护数据安全的编码方式。这些编码可以将任何大小的输入数据转换为一种固定的编码形式,这种编码被称为哈希值或消息摘要。

存在多种不同的SHA算法,它们各自具有不同的长度以及安全性特性。

  • SHA-1:这是最早的SHA算法,它生成的哈希值长度为160位。不过由于存在漏洞,该算法已经不再安全了,因此已不再被使用。
  • SHA-2:一系列经过改进的SHA算法,其输出长度可以有所不同。
    • SHA-224(224位)
    • SHA-256(256位——最常用的方法)
    • SHA-384(384位)
    • SHA-512(512位)
  • SHA-3:这是一种经过彻底重新设计的哈希函数,其诞生是因为在SHA-2算法中发现了一些安全漏洞。与SHA-2相比,SHA-3提供了更高的安全性,不过目前其应用范围仍然有限。

SHA技术在数字安全领域中有着广泛的应用。

  • 数据完整性:检查数据是否发生了更改。即使只是微小的变化,也会导致哈希值发生相应的改变。
  • 电子签名:用于验证文件的有效性。该方式采用私钥对数据进行哈希处理后再进行签名。接收方则使用发送方的公钥来验证签名,同时重新计算哈希值以确认签名的有效性。
  • 密码保护:在保存密码之前,密码会被加密处理。如果密码被泄露,那么只有密码的哈希值会被暴露,而原始密码本身不会暴露。
  • 软件检查:请确保下载的文件没有发生任何更改。通常,发行商会提供文件的哈希值,以验证文件的真实性。

应用程序/软件

消息认证

消息认证是一种用于确保消息真实性的过程或机制。它还可以确保接收到的数据与发送的数据一致,即数据没有被篡改、删除或重新发送。在大多数情况下,消息认证还可以确保发送者确实就是其所声称的那个人。

更准确地说,哈希函数可以被称作是一种……消息摘要当哈希函数被用于验证消息时。

数字签名

在数字签名的情况下,消息的哈希值会使用发送者所拥有的私钥进行加密处理。这样一来,其他人就无法轻易地篡改发送者所发送的内容了。那些试图查看该内容的人,只需在几秒钟内通过各种网络进行扫描,就能轻松发现篡改后的内容。这些网络包括企业内部网或政府内部的网络。 有了这些信息之后,黑客们就会试图破解密码以及其他安全保护措施。这样一来,那些从事盗版下载的人就可以在没有任何限制的情况下自由地下载文件了,而这在合法情况下是绝对不可能发生的。

哈希码被用于生成数字签名。

a. 该哈希码是通过加密方式生成的。公钥加密使用发送方的私钥来进行操作。这种方式不仅可以实现身份验证,还可以生成数字签名,因为只有发送方才能生成该加密后的哈希值。实际上,这就是数字签名技术的核心所在。

b. 如果你既希望保持消息的保密性,又希望获得数字签名,那么你可以对消息以及相关的内容进行加密处理。私钥使用对称密钥对数据进行加密处理,生成加密后的哈希值。这是一种常见的技术。

创建一个单遍密码生成方式

哈希函数最常见的用途之一,就是用来创建一次性密码文件。 单次登录密码文件是一种机制,在这种机制中,操作系统存储的是用户密码的哈希值,而不是原始密码本身。换句话说,操作系统所存储的就是该密码的哈希值而已。 这就是为什么黑客无法从该文件中获取真正的密码。 当您在计算机上输入密码时,系统会使用该密码的哈希值来确认您输入的密码是否正确。 许多系统都采用这种方法来保护密码安全。

入侵检测与病毒识别

哈希函数也可以用来检测入侵行为和病毒。对于系统中每个文件,都需要存储其哈希值,并将这些哈希值保存在安全的地方(例如,存储在受保护的CD光盘上)。之后,可以通过重新计算H(F)来确认该文件是否发生了变化。例如,入侵者必须在不改变H(F)的情况下修改F。

伪随机数生成器(PRNG)

可以使用加密哈希函数来生成随机函数或伪随机生成器。基于哈希函数的随机函数最常见的用途之一就是用于生成对称密钥。

加密哈希函数的安全需求

要求/规定

描述/说明

可变的输入尺寸

H可以应用于任何大小的数据块上。

固定的输出尺寸

H生成的是固定长度的输出。

效率

对于任意给定的x值,计算H(x)相对容易。因此,无论是硬件还是软件实现方式,都相当可行。

抗原像性(单向特性)

对于任何一个给定的哈希值,要找到这样的u,使得H(y) = h,这在计算上是不可行的。

第二种预映像抗性(弱碰撞抗性)

对于任何一个给定的块x来说,要找到它是不可能的,因为这样做在计算上非常困难。y ≠ x当 H(y) = H(x) 时。

抗碰撞性(强抗碰撞性)

要找到这样的一个对(x, y),使得H(x) = H(y),这在计算上是不可行的。

伪随机性

H的输出符合伪随机性的标准测试要求。

  • 前三个特性是哈希函数能够实际被使用的必要条件。
  • 第四个特性是:具有原像抵抗性。 生成一条消息的代码其实很容易,但反过来,要为一个代码生成一条消息则几乎是不可能的。 当认证技术需要使用一个秘密值时,这个属性就变得非常重要了。因为在这种情况下,该秘密值是不需要被发送的。 如果哈希函数不具备单向性,那么攻击者就可以很容易地破解该秘密值。 例如,如果攻击者能够观察到或拦截到传输过程,他们就可以获取消息M。 他们还可以得到哈希码 h = H(S)。 M)。 然后,他们可以反转哈希函数S。 M = H-1(MD)M)然后获得SAB|| M. 因为他们现在同时拥有M和S两种属性。AB|| M,恢复S其实很简单。AB.
  • 第五个特性是“二次预映像不可伪造性”。这意味着,你无法找到与原始消息具有完全相同哈希值的另一个消息。这一特性能够有效防止伪造行为。如果这一特性不成立的话,攻击者就可以采取以下操作:首先,他们可以截获消息以及其加密后的哈希值;其次,他们可以从消息中提取未加密的哈希值;最后,他们可以生成另一个具有相同哈希值的消息。
  • 一个弱哈希函数满足前五个性质。
  • 如果第六个条件——即哈希函数具有抗碰撞性——也得到满足的话,那么这种哈希函数就可以被称为“强哈希函数”。强哈希函数能够防止那种一方为另一方生成消息并让另一方对其进行签名的情况发生。
  • 最后一个要求——伪随机化——传统上并不被视作密码哈希函数的必要条件,但实际上它还是存在于哈希函数中。因为密码哈希函数通常用于生成密钥和伪随机数,而在消息完整性验证中,这三种抵抗攻击的特性都依赖于哈希函数输出的随机性。因此,验证某个哈希函数是否真的能够产生随机输出是合乎逻辑的。

缺点/不利因素

就像其他技术和工艺一样,密码学中的哈希函数也并非完美无缺。有一些关键问题值得注意。

  • 在过去,像MD5和SHA-1这样的常用算法有时会为不同的数据返回相同的哈希值。因此,这些算法的抗碰撞能力受到了损害。
  • 有一种名为“彩虹表”的技术,黑客们利用这种技术来破解未经加密的哈希值。因此,在进行哈希处理之前进行加盐处理是非常重要的,这样才能确保密码的安全存储。
  • 有一些软件服务和硬件工具,它们被称为“哈希破解设备”。这些工具被黑客、安全研究人员,有时甚至是政府机构所使用,用来破解经过哈希处理的密码。
  • 某些类型的暴力攻击能够破解这些经过哈希处理的数据。

结论

哈希算法是一种非常有用的加密工具,在信息技术领域中被广泛应用于各种验证任务中:比如验证数字签名、文件完整性,以及数据的完整性等。虽然哈希算法并不完美,但它们仍然是一种相当不错的校验和验证机制。当使用加盐技术时,哈希算法就是其中一种安全存储密码的方法。不过,这种方法的实施方式其实并不现实。网络犯罪分子甚至试图将其颠倒过来,以使其能够被使用。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料