用 hashcash 打击垃圾邮件
2007-03-29 12:40:11 来源:WEB开发网然而,要确认一个戳记,只需要进行一次 SHA-1 计算即可。对于电子邮件中的应用来说,当前推荐使用的是 20-比特值:为了找到一个合法的戳记,发送者需要进行大约一百万次尝试,在最新的 CPU 和经过编译的应用程序上,这将需要不到一秒的时间。在相对旧一些的机器上它也只需要几秒钟的时间。
虽然我们已经开始讨论 bashcash 基础知识,但在继续讨论之前,让我们先领略一下 SHA 算法的强大功能。
SHA 有多么强大?
在一次被证明是密码界中具有重大意义的事件中,披露出一个对 SHA-0 的碰撞(collision)(请参阅 参考资料中指向 Pascal Junod 的电子邮件的链接,它给出了实际碰撞的细节)。所使用的攻击需要大约 2^51 步,远远少于我们所期望的暴力构造碰撞所需要的大约 2^80 步(以及存储空间)(遵循“生日悖论(birthday paradox);关于生日悖论以及如何将它应用于散列函数的更多信息的链接,请参阅 参考资料)。
在过于担心这种与 bashcash 相关的攻击之前,要紧记两点:一是这种方法攻击的是 SHA-0,不是 SHA-1(目前还不是)。另一相关的保证是,在当前最快的 CPU 上,2^51 步需要的时间仍会超过 9 CPU 年。即便有类似的方法可以应用于 SHA-1,构造虚假碰撞的代价也不可能低于构造更大数量的 20-位戳记(或者甚至是 40-位 hashcash 戳记)。
回到我们先前的讨论。
hashcash(版本 1)格式
只有一个特定的 SHA-1 散列值是不够的。我们还希望戳记特定于被请求的资源 —— 也就是说,用于 mertz@gnosis.cx 的戳记应该与用于 someuser@yahoo.com 的戳记具有不同的适用性。如果不是这样,垃圾邮件制造者就可以只生成一个高比特值的戳记并到处去使用它。
更多精彩
赞助商链接