开发者工具 · SHA 哈希计算器
碰撞、原像和第二原像:三个哈希安全目标
· 背景
sha-256 密码学 安全
一份公告称,算法存在冲突问题,您需要知道您的使用是否受到影响。本文定义了三个电阻属性,显示了哪些用例依赖于哪些用例,并将它们应用于 SHA-1。
我的使用受到影响吗? ——咨询很少直接回答这个问题
收到通知称 SHA-1 存在冲突问题,因此您的系统必须升级。但是,如果您的系统仅将 SHA-1 用于密钥派生,而不用于验证消息怎么办?如果 SHA-1 仅用于删除重复的相同文件,而不是证明真实性怎么办?问题“我的系统是否受到影响?”如果不了解哈希函数的哪些属性实际上被破坏以及您的用例依赖于哪些属性,则无法回答。
哈希函数提供多种安全属性:原像抗性、第二原像抗性和碰撞抗性。一个属性的破坏不会破坏另一个属性,并且某些用例仅依赖于保持安全的属性。 ToolAcre SHA 哈希计算器显示算法及其摘要宽度以及确定每个安全目标范围的属性。了解这些属性是确定通报是否影响您的系统的第一步。
原像抵抗 - 给定一个散列,你找不到产生它的输入
原像抵抗意味着给定一个摘要,应该不可能找到产生该摘要的输入。您收到密码的哈希值并想要猜测密码;这是原像攻击。第二个原像抵抗意味着给定一条消息及其散列,应该不可能找到具有相同散列的不同消息。您有一个下载的文件及其 SHA-256 校验和;攻击者想要将该文件与具有相同哈希值的不同文件交换;这是第二次原像攻击。
抗冲突意味着不可能找到具有相同哈希值的任意两条不同消息。您正在签署一份文件;攻击者想要创建具有相同签名的不同文档;这是碰撞攻击。这三种场景需要攻击者付出不同的工作量,并且安全范围也不同。原像抗性是最强的属性,而且很少被打破。给定一个摘要,找到原像需要在可能的输入空间中进行强力搜索。摘要宽度会影响通用搜索空间,但本文不会在未推导操作计数并定义攻击模型的情况下说明操作计数。
第二原像抵抗 - 给定一个输入,您无法找到具有相同哈希值的不同输入
第二原像抵抗力是第二强的,并且它也很少被单独打破。给定一条消息及其哈希值,找到具有相同哈希值的不同消息也需要摘要大小的指数工作。第二原像和碰撞搜索为攻击者提供了不同的选择,因此它们的通用边界不可互换。在这里,定性的区别就足够了;如果没有内联推导,则不会断言数值界限。如果存在不需要强力的结构攻击,算法就会失去第二原像抵抗力。
抗碰撞性是三种性能中最弱的一种,也是最容易断裂或弯曲的一种。与其他两个目标不同,碰撞搜索允许攻击者选择两个输入,因此它具有不同的通用界限。本文有意省略了生日相关的数据和硬件时间表,因为它们的推导和采购不在经过验证的材料之内。
抗碰撞性 — 您找不到任何两个具有相同哈希值的输入,以及为什么这是三个输入中最弱的一个
将三个安全属性映射到用例显示每个任务需要哪个属性。重复数据删除依赖于这样的假设:如果两个文件具有相同的哈希值,则它们是同一个文件。这需要抗冲突性:如果可能发生冲突,攻击者可以使用相同的哈希创建两个不同的文件并破坏重复数据删除不变量。然而,这是一个较弱的要求,因为即使理论上可能发生,实际的碰撞也极其罕见。
数字签名需要强形式的抗冲突性。当签名者为文档的哈希生成签名,并且验证者随后检查该签名时,两者必须检查相同的哈希。如果冲突很容易,攻击者可以通过发现与签名文档的冲突来伪造不同文档的签名。这是促使证书从 SHA-1 升级到 SHA-256 的攻击。如果哈希值发生冲突,CA 签名的证书和具有相同签名的伪造证书都会通过验证。
碰撞抵抗与原像目标不同;没有推导就不会出现生日限制的数字
内容寻址存储使用哈希作为查找键。如果文件存储在由其哈希确定的位置,并且稍后使用相同的哈希进行检索,则这两个操作必须到达同一个文件。如果存在主动攻击者,则需要抗碰撞性,但如果攻击者是被动攻击者,则仅需要第二原像抗性。被动攻击者无法制造碰撞;他们只能观察合法文件是否偶然发生冲突。
下载验证使用校验和来确认从 Internet 检索的文件未损坏。校验和通常与可信来源的文件一起发布。修改下载文件的攻击者在无法访问受信任源的情况下无法更新校验和。此用例需要第二个原像抵抗:给定原始文件及其校验和,攻击者不应该能够生成具有相同校验和的不同文件。尽管碰撞破裂,SHA-1 第二原像抵抗仍然坚固。
将完整性和命名用途映射到所需的属性;普通哈希不是密码存储
密码存储是散列函数不是正确工具的一种用例。如果密码存储为 SHA-256 哈希值,并且哈希数据库被泄露,则攻击者可以运行字典攻击:哈希数百万个猜测并检查是否有匹配存储的哈希值。攻击者对于每个密码仅需要一个原像,并且快速函数为攻击者提供了高效的离线比较循环,而没有应用程序速率限制。
密码需要故意缓慢、内存困难、每用户加盐函数,如 Argon2id、scrypt 或 bcrypt。每个用户独特的盐使得相同的密码产生不同的存储记录,而密码函数的配置内存和时间成本使每个候选者故意更加昂贵。确切的参数需要本地基准测试,此处不作规定。 ToolAcre SHA 哈希计算器不执行密码哈希处理,指南文档解释了为什么 SHA-256 不适合此用例。
工作示例 — 将映射应用到 Git 存储库中的 SHA-1 与证书中的 SHA-1
一个有效示例:Git 存储库中的 SHA-1。每个 Git 提交都有一个 SHA-1 哈希值作为其对象 ID。如果 SHA-1 碰撞抵抗被破坏,Git 存储库是否容易受到攻击?答案是:也许吧。攻击者可以使用与现有提交相同的 SHA-1 创建提交,并将其推送到存储库服务器,然后该服务器可能向不同的客户端提供不同的提交。然而,这需要选择一个特定的目标并计算碰撞,即使 SHA-1 损坏,这也是昂贵的。
Git 项目成员已发布了迁移到 SHA-256 的路线图,但紧迫性中等,因为实际攻击需要冲突技术和服务器妥协。对于开发人员询问“我的 Git 存储库安全性是否依赖于 SHA-1 抗碰撞性?”答案是肯定的,但与其他安全威胁相比,实际风险较低。 ToolAcre SHA 哈希计算器提供 SHA-1 和 SHA-256,并进行适当标记,以便开发人员可以计算其中任何一个并了解差异。
要点:在惊慌失措之前命名该属性 — ToolAcre SHA 哈希计算器可让您查看设置每个算法边界的摘要长度
对于任何使用 SHA-1 的系统,升级决定取决于用例是否需要损坏的特定属性。如果用例是针对主动攻击者的数字签名或重复数据删除,则需要抗冲突性,并且 SHA-1 已被破坏,因此请立即升级到 SHA-256。如果用例是内容寻址存储或校验和,则需要第二个原像抵抗,并且 SHA-1 对于该目的仍然是安全的,尽管 SHA-256 更适合面向未来。
如果用例是密钥派生或密码验证,则需要原像抵抗,并且根本不应该使用此工具包中的任何内容,因为更快的函数更适合密钥派生。 ToolAcre SHA 哈希计算器可让开发人员计算摘要并查看实际的属性。了解这三个属性并将它们与用例相匹配是在实际系统中做出安全加密选择的基础。