当选择的加密哈希函数被破坏时会发生什么?
考虑到从历史上看,流行的加密哈希函数的有效生命周期大约为10年,因此只有谨慎地为哈希函数可能遭到的成功攻击做好计划。对于某些应用程序,有意生成散列冲突的能力没有显著影响。对于其他人来说,这将导致数据损坏或被恶意数据替换。
微不足道或无影响
在某些系统中,碰撞的结果是微不足道的或不引人注意的。如果单个像素的颜色值是错误的,或者显示了错误的字体,许多人根本不会注意到。搜索引擎绝对不保证搜索结果的准确性,用户也不期望搜索结果的准确性;返回错误的页面搜索可能会激怒程序员的良心,但没有实际影响。
只有可信用户
今天,许多系统使用CBA和完全破坏的密码哈希;rsync使用MD5,许多归档文档存储系统使用MD5。然而,这些系统仍然是实用和有用的,因为只有没有破坏系统动机的可信用户才被允许将数据引入系统。确实,你的用户将无法存储某些有用的数据;一个真实的例子是,当密码学家发布冲突输入以证明加密哈希函数已被破坏时。(自从第一次MD5冲突被公开后,我的笔记本电脑文件系统就一直包含有MD5校验和冲突的文件。)其他系统只允许可信用户向系统添加数据;各种基于cba的版本控制系统,如git和Monotone就属于这一类。如果用户可以在系统中创建散列冲突,那么他们也可以直接签入代码来实现相同的效果,所以为什么要担心花哨的散列冲突攻击呢?教育用户不要故意存储冲突数据,问题就解决了。
判断您的系统是否真的属于这一类的一种方法是,设想将它与一个损坏的加密哈希函数(具有足够数量的比特)一起使用,然后看看是否发现任何问题。事实上,在这种情况下,使用最快的合适的加密哈希函数是有意义的,而不管它是否被破坏。
注意,unix风格的操作系统并不假定用户是可信的。文件系统和其他操作系统服务必须假定用户是不受信任的,并且可能故意引入散列冲突(有时甚至不是恶意的,如在验证已发布的冲突时)。一般来说,系统软件将有许多不受信任的或完全恶意的用户,并将以不可预测的方式使用。应用程序可以比系统软件更精确地指定有效用户和输入。
贪污或保安问题
在其他系统中,故意生成散列冲突的能力会导致数据损坏或安全漏洞。如果不受信任的用户可以向系统添加数据,那么实际上,他们可以用一段数据替换另一段数据,产生不同的结果。散列被破坏的程度会影响可行的攻击类型(请阅读更多相关内容)在维基百科上有抗碰撞,抗原图像,抗二次原图像),但简单的思想实验表明,即使是最简单的攻击,也有可能产生重大的安全问题,因为两个随机输入发生了冲突。最简单的版本是二进制,它检查单个位值,并根据该位做正确或错误的事情;用一个输入分配它,使它做正确的事情,然后用一个不同的位值的冲突输入替换这个输入(其余的可能是垃圾)。(让人们下载你的二进制文件、运行它等等,留给读者作为练习。)
上面的人为示例可以经受最简单的散列冲突攻击,这种攻击只能找到任意冲突,但现实世界中有意义的MD5输入冲突的例子现在比比皆是。几个:
- Postscript文档:http://www.cits.rub.de/MD5Collisions/
- 可执行文件(适用于Windows和Linux):http://www.mscs.dal.ca/~selinger/md5collision/
- 证书:http://www.win.tue.nl/hashclash/TargetCollidingCertificates/
很严重,但可以解决的
受到哈希冲突严重影响的系统仍然可以安全地使用CBA,如果它们有一种机制,可以在攻击成功时升级哈希函数。像BitTorrent这样的点对点文件共享系统很容易受到攻击,因为任何不受信任的用户都可以提供文件片段。但如果协议允许更改加密哈希函数,用户可以通过切换到新的加密哈希函数并拒绝接受使用旧加密哈希函数的对等点的数据来保护自己。其他系统则更难改装。使用CBA存储来自不受信任用户的数据的文件系统或归档服务将需要重新索引存储来更改加密哈希函数,这需要读取使用中的每个块,计算新的哈希值,并将新值写出来——这是一个耗时且潜在风险的操作。只要问问您的系统管理员,她对重新索引公司的长期归档存储有什么看法。
总结
那么,什么时候基于内容的寻址对您的应用程序有意义呢?使用CBA如果:
- 计算和比较密码哈希比直接比较或传统哈希表要快。
- 无论如何,密码散列是出于其他原因而需要的。
- 只有可信的用户才能介绍数据,
- 或者,不受信任的用户可以引入数据,但哈希函数可以在必要时进行升级。
相反,如果:
- 基于内容的寻址比其他方法慢或不理想。
- 其他目的不需要加密散列(仅对错误检测而言,更快的非安全散列更有意义)。
- 不受信任的用户会向系统中添加数据,哈希函数难以升级。
确认
多年来,如果没有许多程序员和密码学家的建议和批评,就不可能写出这篇文章。我特别要感谢Fred Douglis、Armando Fox、Yongdae Kim和Aaram Yun在格式和清晰度方面的更正和许多改进。当然,所有的错误和不合时宜的措辞都是我自己的。
关于作者
瓦莱丽·汉森是伏安时咨询,一家专门从事Linux文件系统咨询的公司。她第一次对加密哈希函数感兴趣是在OSDI 02如果有人愿意和她一起玩,她就会发起一个幻想哈希函数联盟。她发表的第一篇论文,逐哈希比较的分析,引发了关于基于内容的寻址的争论,但对程序员没有什么有用的建议,她正试图弥补这一点。
了解更多关于这个主题的信息
进一步的阅读
高效的排序和同步算法(详细描述rsync算法)
文件系统支持增量压缩(xdelta详细描述)
这篇文章,“用于基于内容寻址的密码哈希的代码猴子指南”,最初是由LinuxWorld——(美国) .