Profanity 爆炸

每个对密码稍有了解的人都知道,不要发明你自己的轮子。

密码学突击课

不幸的是,Profanity 的用户并没有理解这句话。作为一个常用的靓号生成器,Profanity 的密码学实现出现了致命的错误 - 它并没有生成256位的随机数作为摇靓号的基础,而是生成32位随机数后使用梅森旋转算法扩张成256位的私钥,之后对其进行迭代增加。
Profanity 的迭代数大概是 2^28,也就是说总的复杂度大概在2^282^32=2^60,这个复杂度也不是不能接受。
但是还有一个致命问题,以太坊的私钥是使用椭圆曲线算法生成的,而在椭圆曲线密码学中,椭圆曲线上的有限域中分配律成立,也就是说,对于公钥 P,私钥 k,有 P+d\
G=(k+d)*G,其中 G 是椭圆曲线上的一个生成元,d为任意数字。根据上面的公式,我们可以把私钥分解成32位的私钥和迭代数,列出所有私钥种子的可能情况,然后进行迭代增加,这样就可以把复杂度降低到2^28*迭代数,这样破解时间就会接近生成时间,这个问题叫做中间相遇攻击

带黑阔的狂欢

在 1inch 引爆这颗地雷以后,任何一个有基本的编程于密码学知识的人都可以非常非常快速的写出一个 PoC,然后洗劫 Profanity 地址。
最先倒霉的是 Wintermute,他们意识到了 Profanity 的问题,但是没有正确的把他们的地址拉黑,因此,他们为了节约 Gas 生成的虚荣地址造成了大量的损失,差不多够他们付几百年的 Gas 费了。
当然,这肯定不是结束,之后的几天,各路黑阔们纷纷洗劫 Profanity 地址,其中有获利几百万美元的。
再往后,Wintermute 的地址成了广告牌,所有人都开始把破解 Wintermute 地址当成一种跑分来玩。

总结

  1. 不要自己造密码轮子,用别人轮子之前先看一眼,万一发现暴富机会了呢。
  2. 看完新闻记得想想怎么正确的处理
  3. 谦虚一点比较好