密码学哈希函数


哈希函数非常有用,几乎出现在所有信息安全应用中。

哈希函数是一种将数字输入值转换为另一个压缩数字值的数学函数。哈希函数的输入是任意长度,但输出始终是固定长度。

哈希函数返回的值称为消息摘要或简称为哈希值。下图说明了哈希函数 -

哈希函数

哈希函数的特点

哈希函数的典型特征是 -

  • 固定长度输出(哈希值)

    • 哈希函数将任意长度的数据转换为固定长度。此过程通常称为对数据进行哈希处理

    • 一般来说,哈希值比输入数据小得多,因此哈希函数有时称为压缩函数

    • 由于哈希是较大数据的较小表示,因此它也称为摘要

    • 具有n位输出的哈希函数称为n位哈希函数。流行的哈希函数生成 160 到 512 位之间的值。

  • 运作效率

    • 一般来说,对于任何具有输入 x 的哈希函数 h,h(x) 的计算都是快速操作。

    • 计算哈希函数比对称加密快得多。

哈希函数的属性

为了成为有效的加密工具,哈希函数需要具有以下属性 -

  • 预像抵抗

    • 这个属性意味着反转哈希函数在计算上应该是困难的。

    • 换句话说,如果哈希函数 h 产生哈希值 z,那么找到哈希到 z 的任何输入值 x 应该是一个困难的过程。

    • 此属性可防止仅拥有哈希值并试图查找输入的攻击者。

  • 第二原像抵抗

    • 此属性意味着给定输入及其哈希值,应该很难找到具有相同哈希值的不同输入。

    • 换句话说,如果输入 x 的哈希函数 h 产生哈希值 h(x),那么应该很难找到任何其他输入值 y 使得 h(y) = h(x)。

    • 哈希函数的这一特性可以防止攻击者拥有输入值及其哈希值,并希望用不同的值作为合法值来代替原始输入值。

  • 抗碰撞性

    • 此属性意味着应该很难找到产生相同哈希值的任意长度的两个不同输入。此属性也称为无冲突哈希函数。

    • 换句话说,对于哈希函数 h,很难找到任何两个不同的输入 x 和 y 使得 h(x) = h(y)。

    • 由于哈希函数是固定哈希长度的压缩函数,因此哈希函数不可能不发生冲突。这种无碰撞特性仅证实这些碰撞应该很难发现。

    • 此属性使攻击者很难找到具有相同哈希值的两个输入值。

    • 此外,如果哈希函数是抗冲突的,那么它就是第二原像抗的。

哈希算法的设计

散列的核心是一个数学函数,它对两个固定大小的数据块进行运算以创建散列码。该散列函数构成散列算法的一部分。

每个数据块的大小根据算法而变化。通常块大小为 128 位到 512 位。下图演示了哈希函数 -

哈希函数结构

哈希算法像分组密码一样涉及上述哈希函数的轮次。每轮都采用固定大小的输入,通常是最新消息块和上一轮输出的组合。

根据散列整个消息所需的次数,重复此过程。哈希算法的示意图如下图所示 -

哈希算法

因为,第一个消息块的哈希值成为第二个哈希运算的输入,第二个哈希运算的输出改变了第三个运算的结果,依此类推。这种效应被称为哈希的雪崩效应。

雪崩效应会导致两条消息的哈希值存在显着差异,甚至仅相差一个数据位。

正确理解哈希函数和算法之间的区别。哈希函数通过对两个固定长度的二进制数据块进行操作来生成哈希码。

哈希算法是使用哈希函数的过程,指定如何分解消息以及如何将先前消息块的结果链接在一起。

流行的哈希函数

让我们简要看看一些流行的哈希函数 -

消息摘要 (MD)

MD5 是多年来最流行和广泛使用的哈希函数。

  • MD 系列由哈希函数 MD2、MD4、MD5 和 MD6 组成。它被采纳为互联网标准 RFC 1321。它是一个 128 位哈希函数。

  • MD5 摘要已广泛应用于软件领域,以保证传输文件的完整性。例如,文件服务器通常为文件提供预先计算的 MD5 校验和,以便用户可以将下载文件的校验和与其进行比较。

  • 2004年,MD5中发现了碰撞。据报道,使用计算机集群的分析攻击仅在一小时内就成功了。此碰撞攻击导致 MD5 受损,因此不再建议使用。

安全哈希函数 (SHA)

SHA 系列由四种 SHA 算法组成;SHA-0、SHA-1、SHA-2 和 SHA-3。虽然来自同一个家族,但结构上却有所不同。

  • 最初的版本是 SHA-0,一种 160 位的哈希函数,由美国国家标准与技术研究所 (NIST) 于 1993 年发布。它有一些弱点,并且没有变得非常流行。1995 年晚些时候,SHA-1 旨在纠正 SHA-0 的所谓缺陷。

  • SHA-1 是现有 SHA 哈希函数中使用最广泛的。它被用于多种广泛使用的应用程序和协议中,包括安全套接字层 (SSL) 安全性。

  • 2005 年,发现了一种在实际时间范围内发现 SHA-1 冲突的方法,这使得 SHA-1 的长期使用性受到质疑。

  • SHA-2 系列还有四种 SHA 变体:SHA-224、SHA-256、SHA-384 和 SHA-512,具体取决于其哈希值中的位数。目前还没有关于 SHA-2 哈希函数的成功攻击的报告。

  • 虽然 SHA-2 是一个强大的哈希函数。尽管有很大不同,但其基本设计仍然遵循 SHA-1 的设计。因此,NIST 呼吁新的竞争性哈希函数设计。

  • 2012年10月,NIST选择Keccak算法作为新的SHA-3标准。Keccak 具有许多优点,例如高效的性能和良好的攻击抵抗能力。

RIPEMD

RIPEMD 是 RACE 完整性原语评估消息摘要的缩写。这套哈希函数是由开放研究社区设计的,通常被称为欧洲哈希函数家族。

  • 该套件包括 RIPEMD、RIPEMD-128 和 RIPEMD-160。该算法还存在 256 和 320 位版本。

  • 原始 RIPEMD(128 位)基于 MD4 中使用的设计原理,并且被发现提供的安全性值得怀疑。RIPEMD 128 位版本作为快速修复替代品来克服原始 RIPEMD 上的漏洞。

  • RIPEMD-160是改进版本,也是该系列中使用最广泛的版本。256 和 320 位版本减少了意外碰撞的可能性,但分别与 RIPEMD-128 和 RIPEMD-160 相比没有更高级别的安全性。

漩涡

这是一个 512 位的哈希函数。

  • 它源自高级加密标准(AES)的修改版本。其中一位设计师是 Vincent Rijmen,他是 AES 的共同创建者。

  • Whirlpool 已发布三个版本;即 WHIRLPOOL-0、WHIRLPOOL-T 和 WHIRLPOOL。

哈希函数的应用

基于哈希函数的密码学特性,哈希函数有两种直接应用。

密码存储

哈希函数为密码存储提供保护。

  • 大多数登录进程都不是以明文形式存储密码,而是将密码的哈希值存储在文件中。

  • 密码文件由一个格式为(用户 ID,h(P))的对表组成。

  • 登录过程如下图所示 -

登录流程
  • 入侵者即使访问了密码,也只能看到密码的哈希值。他既不能使用哈希登录,也不能从哈希值推导出密码,因为哈希函数具有抗原像的特性。

数据完整性检查

数据完整性检查是哈希函数最常见的应用。它用于生成数据文件的校验和。该应用程序向用户保证数据的正确性。

该过程如下图所示 -

数据完整性检查

完整性检查可帮助用户检测对原始文件所做的任何更改。然而,它不提供任何关于原创性的保证。攻击者可以更改整个文件并计算新的哈希值并将其发送给接收者,而不是修改文件数据。仅当用户确定文件的原创性时,此完​​整性检查应用程序才有用。