近期区块链领域黑客攻击事件频发,其中有一个很让Cocoa感兴趣的就是Wintermute钱包因靓号地址的问题损失约1.6亿美元,具体说来话长,可以参见慢雾的这篇分析。
0.背景简介
关于什么是靓号地址这里简单解释一下,以太坊钱包的地址是一个由0x开头40个随机字符的16进制字符串,比如V神的钱包地址就是0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B,很难记忆,也没有个性特色。
因此有人就别出心裁,通过暴力枚举的方式,试图找到好看的靓号地址,比如0x888888开头,或者为了节约合约部署的费用,使用0x00000开头的地址。
Profanity就是这样一个靓号地址生成工具。Profanity的特点就是使用了GPU,所以比其他工具更快地找到靓号地址。
Shibarium测试网Puppynet已处理近20万个独立钱包超过100万笔交易:金色财经报道,据 BlockScout 数据显示,Shiba Inu 的 Layer2 解决方案 Shibarium 早期测试版 Puppynet 自 3 月 11 日推出以来,已处理近 20 万个独立钱包超过 100 万笔交易。此外,据 CoinDesk 援引 Polygon 生态衍生品协议 SynFutures CEO Rachel Lin 表示,Shibarium 背后的公司 Unification 宣布,正在开发一种一体化钱包解决方案,该解决方案将支持本地双向资产转移、质押 / 委托,并包括一个 Shibaswap 集成模块。[2023/3/31 13:37:40]
总之,原项目因为存在漏洞,目前仓库已关闭,而且也不推荐使用,但发现漏洞的1inch帮人帮到底、送佛送上天,提供了船新版本的无漏洞Profanity2,继续满足大家的虚荣心。
Stargate基金会发起“引入GSR作为做市商,并为其分配800万枚STG两年期欧式期权”的提案:2月15日消息,基于LayerZero的跨链流动性协议Stargate发起引入GSR作为做市商,并为其分配价值800万枚STG两年期期权的提案。提案指出,近期多家CEX通知Stargate基金会,STG因流动性不足或面临退市风险,基金会因此提议引入做市机构GSR作为做市商,并为其分配价值800万枚STG两年期期权。
提案透露,该期权的行权条件是24个月后的STG平均价格高于1.15美元。若未达到指定条件,GSR将在合作期后向Stargate DAO归还所有Token,并不会为做市服务收取费用。[2023/2/15 12:08:26]
但个人感觉1inch安全功夫了得,文档水平太烂,Cocoa贵为期末考试满分的密码学小王子,都看了5分钟才理解到底怎么用。废话少说,以下就是使用教程。
Tornado DAO成员:社区应聘请法律团队来对抗美国的制裁:金色财经报道,Tornado DAO成员目前正在讨论社区如何挑战美国财政部最近对 Tornado Cash 实施的制裁。根据提议者的说法,成功推翻制裁可能为Tornado Cash等其他加密隐私解决方案开创先例。该提案呼吁DAO利用美国法律体系,即使加密用户对政府协议持怀疑态度。
另一位社区成员建议,DAO的治理应该管理链上的任何法律辩护基金。也有人呼吁DAO进行链上投票,以选择合适的律师事务所在法律程序中代表社区。?
然而,该提案的一些回应者对这种方法提出了质疑。MakerDAO 代表Chris Blec认为,由于没有名为“Tornado Cash”的法律实体,在这样的情况下为法律辩护筹集资金可能 打开了一个全新的麻烦,具有误导性和危险性。Blec表示,Tornado Cash是软件代码,最好的办法是争取个人的隐私权。[2022/8/12 12:22:06]
1.编译代码
Merit Circle DAO提议以YGG此前购买MC代币价格的10倍来买断其份额:6月7日消息,链游公会Merit Circle DAO社区针对最近通过的关于建议撤销YGG的种子轮代币分配的提案发布的投票提案显示,建议Merit Circle DAO以0.32美元的价格买断Yield Guild Games(YGG)和Nifty Fund的分配,共计5,468,750枚MC代币,总计175万美元。双方将签署一份法律协议,以合法地执行收购要约并保护双方免受未来诉讼。截止目前,MC报价1.12美元。投票截止时间为6月9日15:58。YGG和YGG联合创始人Gabby Dizon的个人基金Nifty Fund此前以0.032美元的价格向Merit Circle共投资17.5万美元,总共获得5,468,750枚MC代币。(vote.meritcircle.io)[2022/6/7 4:08:11]
考虑到私钥的安全性,这类项目建议从官方源码编译使用,不过Profanity2有个创新改进,下面会提。
1inch这次提供的是Linux下编译的代码,在Windows下编译需要改一个地方,主要是把Dispatcher.cpp中的以下代码修改掉。
#include<arpa/inet.h>改成#include<Winsock2.h>
另外还涉及到OpenCL的SDK以及编译环境搭建的问题,总之这里就假设你已经拿到了可执行程序。
2.本地生成密钥对
Profanity2的一大改进就是将原来直接生成私钥、再计算公钥的步骤,改成:
先生成密钥对然后把公钥A放到程序去跑,生成私钥B最后把私钥A和私钥B数学相加,得到私钥C这个私钥C对应的公钥C就是你想要的的靓号了。
其中的数学原理Cocoa还没深入研究,大致猜测就是先用一个安全可靠的工具生成密钥对,再通过程序暴力试出一个偏差量,使私钥加上这个偏差量可以导出靓号公钥。
这样的一个好处就是Profanity2可以交由第三方或者云端来运行,因为最终的私钥C,是由私钥A和私钥B相加得到的。
因此首先要生成私钥A和公钥A,官方提供了命令,在Linux下直接执行即可:
$opensslecparam-genkey-namesecp256k1-text-noout-outformDER|xxd-p-c1000|sed's/41534e31204f49443a20736563703235366b310a30740201010420/PrivateKey:/'|sed's/a00706052b8104000aa144034200/'$'nPublicKey:/'
上述命令执行完成后,屏幕上便会显示出PrivateKey和PublicKey,分别就是私钥A和公钥A,请注意私钥A一定要保管好。
3.使用公钥A去跑出私钥B
将上面步骤得到的PublicKey去掉开头的04也就是公钥A,放到Profanity2中去跑,命令如下:
profanity2--matchingc0c0aXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-z公钥A
稍等一会就会跑出来一个私钥B,过程和原版Profanity类似。
4.最终计算得到靓号地址对应的私钥C
拿到私钥B后,我们只要加上私钥A,即可得出最终靓号地址对应的私钥C了。
官方给了两个命令,分别是shell的和python的,因为我的kali好像没有bc,所以用了python的那个。其中私钥A记得前面加上0x。
(echo'ibase=16;obase=10'&&(echo'(PRIVATE_KEY_A+PRIVATE_KEY_B)%FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F'|tr''''))|bc
$python3
hex((PRIVATE_KEY_A+PRIVATE_KEY_B)%0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F)
最后就得到一个0x开头的私钥C,导入metamask等钱包就可以看到我们的靓号地址啦。
附赠章节:漏洞原理简介
以太坊的私钥是32字节的,但是原版Profanity在生成这个256位的私钥时,仅采用了4字节的随机数作为伪随机数生成器的seed。
这是小弟第一篇区块链安全文章,欢迎各位大佬批评指教。我的twitter:@featherye
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。