因此,2013年4月1日的xkcd Externalities网络漫画以Skein 1024 1024散列破解contest为特色。我假设这只是一个暴力的努力,其中随机字符串被散列,以努力匹配Randall发布的散列?这是正确的吗?
此外,我对Skein散列理论的了解几乎是不存在的,但作为一个还算不错的程序员,我能够下载并运行SkeinFish (C#)和Java实现( Maarten Bodewes ),在10241024模式下使用一些输入字符串。然而,他们给出的散列与xkcd为相同输入返回的散列不同。这可能是一个非常幼稚的问题,但是不同的Skein实现会产生不同的哈希吗?xkcd使用的是什么Skein实现?
谢谢你原谅我的无知!
发布于 2013-04-03 05:34:25
skein算法有几种不同的迭代。XKCD使用的是1.3版,这也是最新的版本。源代码可以在here上找到(查找"V1.3")
有趣的是,这种蛮力方法与比特币用来“开采”比特币的方法是一样的。最大的区别是散列算法(在这种情况下是SHA-256)和目标散列(它被动态地确定为以一定数量的零开始的任何散列)。发现散列需要大量的工作,但是一旦找到散列,就很容易验证源位,并且得到的散列满足标准。
发布于 2013-04-05 22:21:00
这是斯坦福团队使用的源代码。我们在大约100个8核EC2服务器上运行了一段时间,但不是整个比赛。
发布于 2013-04-06 09:49:33
如果您散列非字母数字字符(空格、标点符号等),则可能会因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=,服务器可能会检测到这一点,并只是散列整个帖子正文),但作为4月愚人节的一部分,它可能故意有点棘手。
https://stackoverflow.com/questions/15769093
复制相似问题