G = Grp.gens()[0] Gorder = G.order() print( "{0} = {1}".format(Gorder, factor(Gorder)) ) 计算结果: ...= 2 * 3049 * 14821 * 19442993 * 32947377140686418620740736789682514948650410565397852612808537 选择 19442993 这个⼤⼩适中的数,⽤中国剩余定理创建⼀个含有 19442993 个元素的⼦群: x = crt([1,0], [19442993, Gorder//19442993]) P1 = x * G 到这⾥我们就得到了第⼀个扭曲的点,把它当作公钥发送给 Bob,Bob 就可以计算第⼀个共享密钥: 最终得到的结果可表示为: 使⽤中国剩余定理即可计算出私钥 b: x = crt([ x1, x2, x3, x4, x5, x6, x7, x8, x9], [ 19442993, 3645143, 184879577, 5110460161, 15272631587, 208137522259, 64927105657, 60824497, 213156431]) print(x == b) print(hex(x)) 总结 本⽂我们通过⼀个不同常理的对话开始研究了椭圆曲线加密算法中的扭曲曲线攻击,分析了漏洞的存在的原因,虽然漏洞利⽤场景有限,但不失为⼀个很有价值的漏洞,希望能对⼤家的学习研究有所启发。 最后,感谢领先的⼀站式数字资产⾃托管服务商 Safeheron 提供的专业技术建议。 参考资料: [1].https://etherscan.io/tx/0xcf0b3487dc443f1ef92b4fe27ff7f89e07588cdc0e2b37d50adb8158c697cea6 [2]. https://github.com/LimelabsTech/eth-ecies [3]. GitHub - openpgpjs/openpgpjs: OpenPGP implementation for JavaScript [4]. Elliptic curve constructor - Elliptic curves By: Johan 来源:DeFi之道 来源:金色财经lg...