因此,2013年4月1日的xkcd Externalities网络漫画以Skein 1024 1024哈希值contest为特色。我假设这必须只是一个蛮力的努力,随机字符串被散列,以努力匹配兰德尔的发布哈希?这是对的吗?
另外,我对Skein哈希理论的了解实际上并不存在,但作为一个中等程度的程序员,我能够在本地下载并运行SkeinFish(C#)和Maarten Bodewes Skein实现(Java)在1024 1024模式下,带有一些输入字符串。但是,它们给出的哈希值与xkcd为相同输入返回的哈希值不同。这可能是一个非常天真的问题,但不同的Skein实现会给出不同的哈希值吗?什么Skein实现是xkcd使用?
感谢赦免我的无知!
答案 0 :(得分:11)
绞纱算法有几种不同的迭代。 XKCD使用的是版本1.3,这也是最新版本。可以找到来源here(寻找“V1.3”)
有趣的是,这种强力方法与比特币用于“挖掘”比特币的方法相同。最大的区别是散列算法(在这种情况下为SHA-256)和目标散列(动态确定为以一定数量的零开头的任何散列。)发现散列需要大量工作,但一次已经发现,验证源位并且生成的哈希符合标准是微不足道的。
答案 1 :(得分:7)
以下是斯坦福大学团队使用的源代码。我们在大约一百个8核EC2服务器上运行了一段时间,但不是整个竞争对手。
答案 2 :(得分:1)
如果您正在散列非字母数字字符(空格,标点符号等),则由于HTML表单编码,您可能会得到不同的结果。 XKCD表单上的“enctype”属性是“application / octet-stream”,根据https://developer.mozilla.org/en-US/docs/HTML/Element/form,它不是浏览器支持的标准。我认为当浏览器看到一个无法识别的浏览器时,它会回退到URL编码类型。
我观察到字符串“=”在Chrome中提交了URL编码,并返回了与我在本地使用最新的pyskein不同的哈希值。但是当我用这个curl命令行提交它(不再有效)时,我得到了预期的哈希:
curl -X POST --data-binary "hashable==" "http://almamater.xkcd.com/?edu=school.edu"
斯坦福代码在另一个答案中做了同样的事情,他们显然取得了一些成功。我从来没有得到任何随机数据本地哈希到比我自己的学校更好的分数,所以我没有机会彻底测试如何正确传递任意数据。我不知道确切的行为是什么(例如,如果你省略hashable =服务器会检测到并只是哈希整个POST主体),但它可能故意有点棘手,作为愚人节的一部分。