30

因此,2013 年 4 月 1 日的 xkcd Externalities网络漫画以 Skein 1024 1024 哈希破解比赛为特色。我假设这一定是一种蛮力努力,其中随机字符串被散列以匹配 Randall 发布的散列?它是否正确?

此外,我对 Skein 散列理论的了解几乎不存在,但作为一名中途的程序员,我能够在 1024 1024 模式下使用一些输入字符串在本地下载和运行SkeinFish (C#) 和Maarten Bodewes Skein实现 (Java)。然而,他们给出的哈希值与 xkcd 为相同输入返回的哈希值不同。这可能是一个非常幼稚的问题,但是不同的 Skein 实现会给出不同的哈希值吗?xkcd 使用什么 Skein 实现?

谢谢你原谅我的无知!

4

3 回答 3

11

绞纱算法有几种不同的迭代。XKCD 使用的是 1.3 版本,这也是最新的。可以在此处找到源(查找“V1.3”)

有趣的是,这种蛮力方法与比特币用来“挖掘”比特币的方法相同。最大的区别是散列算法(在这种情况下为 SHA-256)和目标散列(动态确定为以一定数量的零开头的任何散列。)发现散列需要大量工作,但一次已经发现验证源位和生成的哈希符合标准是微不足道的。

于 2013-04-02T21:34:25.363 回答
7

这是斯坦福团队使用的源代码。我们在大约一百台 8 核 EC2 服务器上运行了一段时间,但不是整个竞争。

https://github.com/jhiesey/skeincrack

于 2013-04-05T14:20:59.827 回答
1

如果您对非字母数字字符(空格、标点符号等)进行散列处理,由于 HTML 表单编码,您可能会得到不同的结果。XKCD 托管的表单上的“enctype”属性是“application/octet-stream”,根据https://developer.mozilla.org/en-US/docs/HTML/Element/form ,它不是浏览器支持的标准。我假设浏览器在看到它无法识别的 URL 编码类型时会退回到 URL 编码类型。

我观察到字符串“=”在 Chrome 中提交 URL 编码,并返回与我在本地使用最新 pyskein 获得的不同的哈希值。但是当我使用这个 curl 命令行(不再有效)提交它时,我得到了预期的哈希:

curl -X POST --data-binary "hashable==" "http://almamater.xkcd.com/?edu=school.edu"

另一个答案中的斯坦福代码做同样的事情,他们显然取得了一些成功。我从来没有得到任何随机数据在本地散列到比我自己的学校更好的分数,所以我从来没有机会彻底测试如何正确传递任意数据。我不知道确切的行为是什么(例如,如果你省略了 hashable=,服务器可能会检测到它并只是散列整个 POST 主体),但作为愚人节的一部分,它可能故意有点棘手。

于 2013-04-06T01:49:33.233 回答