安全从业人员的工具箱中有一个工具,无论你使用计算机做什么,了解它都对每个人都有帮助:密码学散列函数。这听起来可能很神秘、很技术性,甚至可能很枯燥,但我对散列是什么以及它们为什么对你重要有一个简洁的解释。
密码学散列函数,例如 SHA-256 或 MD5,将一组二进制数据(通常以字节为单位)作为输入,并为每组可能的输入给出希望是唯一的输出。对于任何特定的散列函数,输出的长度——“散列值”——对于任何输入模式通常都是相同的(对于 SHA-256,它是 32 字节或 256 位——线索就在名称中)。重要的是:从输出散列反向推导出输入在计算上应该是不可行的(密码学家讨厌不可能这个词)。这就是为什么它们有时被称为单向散列函数。
但是散列函数用于什么?为什么唯一性的属性如此重要?
唯一输出
在描述散列函数的输出时,短语“希望是唯一的”至关重要,因为散列函数用于呈现完全唯一的输出。例如,散列函数用作验证你下载的文件副本你是否与我下载的文件副本逐字节重复的方式。当你下载 Linux ISO 或来自 Linux 存储库的软件时,你将看到此验证过程在起作用。如果没有唯一性,这项技术将变得毫无用处,至少对于你通常使用它的目的而言是如此。
如果两个输入产生相同的输出,则称该散列发生“碰撞”。实际上,MD5 已经变得过时,因为现在可以很容易地使用市售的硬件和软件系统找到碰撞。
另一个重要的属性是,消息中的微小更改,即使只更改一位,也应预期会对输出产生明显的变化(这就是“雪崩效应”)。
验证二进制数据
散列函数的典型用途是确保当有人向你提供一段二进制数据时,它符合你的预期。计算世界中的所有数据都可以用二进制格式描述,无论是文本、可执行文件、视频、图像还是完整的数据数据库,因此散列的应用范围非常广泛,至少可以说如此。直接比较二进制数据既慢又在计算上繁琐,但散列函数的设计目的是非常快速的。给定几个兆字节或千兆字节大小的两个文件,你可以提前生成它们的散列,并将比较推迟到你需要它们时进行。
通常也更容易对数据的散列而不是大型数据集本身进行数字签名。这是一个非常重要的功能,以至于散列在密码学中最常见的用途之一是生成“数字”签名。
鉴于生成数据散列很容易,通常没有必要同时拥有两组数据。假设你想在你的计算机上运行一个可执行文件。但是,在你执行之前,你想检查它是否真的是你认为的文件,并且没有恶意行为者篡改它。你可以非常快速且轻松地散列该文件,并且只要你拥有散列应有的副本,你就可以相当确定你拥有所需的文件。
这是一个简单的例子
$ shasum -a256 ~/bin/fop
87227baf4e1e78f6499e4905e8640c1f36720ae5f2bd167de325fd0d4ebc791c /home/bob/bin/fop
如果我知道 fop
可执行文件的 SHA-256 校验和(由其供应商 Apache 基金会提供,在本例中)是
87227baf4e1e78f6499e4905e8640c1f36720ae5f2bd167de325fd0d4ebc791c
那么我可以确信我驱动器上的可执行文件确实与 Apache 基金会在其网站上分发的可执行文件相同。这就是散列函数的缺乏碰撞(或至少是计算碰撞的难度)属性如此重要的原因。如果恶意行为者可以制作一个与真实文件共享相同散列的替换文件,那么验证过程基本上是无用的。
实际上,对于各种属性有更专业的技术名称,我上面描述的内容将三个重要的属性混合在一起。更准确地说,这些技术名称是
- 原像抗性: 给定一个散列值,即使你知道使用的散列函数,也应该难以找到从中创建消息。
- 第二原像抗性: 给定一条消息,应该难以找到另一条消息,当散列时,它会生成相同的散列值。
- 碰撞抗性: 应该难以找到任何两条生成相同散列值的消息。
碰撞抗性和第二原像抗性听起来可能像是相同的属性,但它们在细微之处(且意义重大)上有所不同。原像抗性表示,如果你已经有一条消息,你将无法找到另一条具有匹配散列值的消息。碰撞抗性使你难以发明两条将生成相同散列值的消息,并且在散列函数中这是一个更难实现的属性。
请允许我回到恶意行为者试图交换文件(带有你可以检查的散列值)与另一个文件的情景。现在,要在“野外”——在现实世界中,超越独角兽居住和满溢无脂甜甜圈的完美安全、无错误的实现——使用密码学散列,需要满足一些重要且困难的条件。非常偏执的读者可能已经发现了一些;特别是
- 你必须确保你拥有的散列副本也没有被篡改。
- 你必须确保执行散列的实体正确地执行和报告它。
- 你必须确保比较两个散列的实体确实正确地报告了该比较的结果。
确保你能满足这些保证不一定是一件容易的任务。这是可信平台模块 (TPM) 成为许多计算系统一部分的原因之一。它们充当硬件信任根,具有提供关于验证重要二进制数据的真实性的密码学工具的保证的能力。TPM 是真实世界系统中一个有用且重要的工具,我计划在未来写一篇关于它们的文章。
本文最初发表在 Alice, Eve, and Bob 上,并经作者许可改编和转载。
评论已关闭。