本文共 2136 字,大约阅读时间需要 7 分钟。
哈希表 哈希函数 时间
安全从业人员的功能表中有一个工具可以帮助每个人理解,无论他们对计算机进行什么操作:加密哈希函数。 这听起来听起来像是神秘的,技术性的,甚至可能很无聊,但是我对什么是哈希以及它们为什么对您很重要有一个简洁的解释。
诸如SHA-256或MD5之类的加密散列函数将一组二进制数据(通常以字节为单位)作为输入,并希望输出对于每组可能的输入都是唯一的。 对于任何特定的哈希函数,输出的长度(“哈希”)对于任何输入模式通常都是相同的(对于SHA-256,它的长度为32字节或256位-线索就是名称)。 重要的是:从输出哈希到输入反向工作应该在计算上难以置信(密码学家讨厌“ 不可能”这个词)。 这就是为什么有时将它们称为单向哈希函数的原因。
但是哈希函数有什么用? 为什么独特的特性如此重要?
如果两个输入产生相同的输出,则哈希称为“冲突”。 实际上,MD5已过时,因为现在可以轻松找到与市售的硬件和软件系统之间的冲突。
另一个重要的特性是,消息中的微小更改(甚至更改单个位)都有望对输出产生明显的更改(这就是“雪崩效应”)。
哈希函数的典型用法是确保当有人将您的二进制数据交给您时,它就是您所期望的。 可以用二进制格式描述计算领域中的所有数据,无论是文本,可执行文件,视频,图像还是完整的数据数据库,因此至少可以说哈希广泛地适用。 直接比较二进制数据在计算上很慢且很费力,但是哈希函数设计得非常快。 给定两个文件,大小为几兆字节或几千兆字节,您可以提前产生它们的哈希值,并将比较结果推迟到需要它们时使用。
通常,对数据的哈希值进行数字签名也比对大量数据本身进行签名更容易。 这是一个非常重要的功能,以至于哈希在密码学中最常见的用途之一就是生成“数字”签名。
考虑到容易产生数据散列的事实,通常不需要同时拥有两组数据。 假设您要在计算机上运行可执行文件。 但是,在执行此操作之前,您需要检查它是否确实是您认为的文件,并且没有恶意行为者对其进行篡改。 您可以非常快速,轻松地对文件进行哈希处理,并且只要您具有哈希表的外观副本,就可以确定您拥有所需的文件。
这是一个简单的例子:
$ shasum -a256 ~ / bin / fop 87227baf4e1e78f6499e4905e8640c1f36720ae5f2bd167de325fd0d4ebc791c / home / bob / bin / fop
如果我知道由其供应商(本例中为Apache Foundation)提供的fop
可执行文件的SHA-256总和为:
87227baf4e1e78f6499e4905e8640c1f36720ae5f2bd167de325fd0d4ebc791c
那么我可以确信驱动器上的可执行文件的确与Apache Foundation在其网站上分发的可执行文件相同。 这就是哈希函数缺乏冲突(或至少难于计算冲突 )属性如此重要的地方。 如果恶意行为者可以制作与真实文件共享相同哈希值的替换文件,则验证过程实质上是无用的。
实际上,各种属性还有更多的技术名称,而我上面所描述的将三个重要的属性融合在一起。 更准确地说,这些技术名称是:
耐碰撞性和第二次成像前的抗性听起来像是相同的属性,但它们之间(且显着)不同。 镜像前抵抗力表示,如果您已经有一条消息,则将无法找到具有匹配哈希值的另一条消息。 抗冲突性使您很难发明两条将生成相同哈希值的消息,而这是在哈希函数中要实现的难得多的属性。
请允许我回到一种恶意行为者试图与另一个交换文件(带有哈希,可以检查)的情况。 现在,要在“野外”使用加密哈希(在现实世界中),除了由独角兽填充并充满无脂甜甜圈的完美安全,无错误的实现方式之外,还有一些重要而困难的条款需要遇见。 非常偏执的读者可能已经发现了其中的一些内容。 特别是:
确保您可以满足这样的保证不一定是一件容易的事。 这是受信任的平台模块(TPM)是许多计算系统的一部分的原因之一。 它们充当了硬件的信任根,具有提供有关加密工具的保证,以验证重要二进制数据的真实性。 TPM是用于实际系统的有用且重要的工具,我计划将来写一篇有关它们的文章。
本文最初发表于 ,经作者许可改编和转载。
翻译自:
哈希表 哈希函数 时间