近期区块链领域黑客攻击事件频发,其中有一个很让Cocoa感兴趣的就是Wintermute钱包因靓号地址的问题损失约1.6亿美元,具体说来话长,可以参见慢雾的这篇分析。
0.背景简介
关于什么是靓号地址这里简单解释一下,以太坊钱包的地址是一个由0x开头40个随机字符的16进制字符串,比如V神的钱包地址就是0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B,很难记忆,也没有个性特色。
因此有人就别出心裁,通过暴力枚举的方式,试图找到好看的靓号地址,比如0x888888开头,或者为了节约合约部署的费用,使用0x00000开头的地址。
Profanity就是这样一个靓号地址生成工具。Profanity的特点就是使用了GPU,所以比其他工具更快地找到靓号地址。
安全团队:以太坊上PEAKDEFI遭攻击,黑客获利约6.6万美元:金色财经报道,根据区块链安全审计公司Beosin旗下Beosin?EagleEye 安全风险监控、预警与阻断平台监测显示,ETH链上的PEAKDEFI项目遭受攻击,攻击者利用合约中sellLeftoverToken()函数未进行权限校验。导致黑客合约中转走29832 BAT,5083 SUSHI,32508 matic,831 link,总价值66659美元。[2022/11/5 12:19:47]
总之,原项目因为存在漏洞,目前仓库已关闭,而且也不推荐使用,但发现漏洞的1inch帮人帮到底、送佛送上天,提供了船新版本的无漏洞Profanity2,继续满足大家的虚荣心。
但个人感觉1inch安全功夫了得,文档水平太烂,Cocoa贵为期末考试满分的密码学小王子,都看了5分钟才理解到底怎么用。废话少说,以下就是使用教程。
安全消息:zk.money疑似出现Bug,同一个地址收款两次以上后可发送余额显示有误:8月22日消息,据Aztec官方Discord消息显示,隐私DeFi服务zk.money疑似出现Bug,同一个地址收款两次以上,用户将需要分开多次转账来增加显示可用余额,在未来的几周时间会在新系统修复这个问题,自动合并用户的余额,让用户的可发送余额显示正常。[2022/8/22 12:39:44]
1.编译代码
考虑到私钥的安全性,这类项目建议从官方源码编译使用,不过Profanity2有个创新改进,下面会提。
1inch这次提供的是Linux下编译的代码,在Windows下编译需要改一个地方,主要是把Dispatcher.cpp中的以下代码修改掉。
澳大利亚网络安全行业咨询委员会:建议安全采用加密货币:3月2日消息,澳大利亚网络安全顾问“网络安全行业咨询委员会”发布“探索加密货币”的研究报告指出,随着该国快速转型为先进的数字经济,加密货币的采用率正在上升。咨询委员会建议探索可以“帮助确保在澳大利亚安全采用加密货币”的四个关键领域:最低网络安全标准、能力、跟随领先的方法和运营商透明度。
1. 为了抑制针对加密货币的网络安全威胁,委员会建议对加密货币交易所和持有加密货币的澳大利亚企业实施最低网络安全标准。
2. 建议通过对可用加密机会以及相应的网络犯罪和威胁的专业培训,更加关注提高公众意识。
3. 学习并实施加密领域的国际最佳实践。
4. 委员会强调加密货币固有的伪匿名性,呼吁提高注册加密货币交易所和基于区块链的公司的透明度。(Cointelegraph)[2022/3/2 13:32:46]
#include<arpa/inet.h>改成#include<Winsock2.h>
腾讯安全将发行网络安全主题数字藏品:11月3日消息,2021腾讯数字生态大会将于武汉隆重开幕。行业领袖、技术领军人物、经济学者等将共同探讨数字经济发展趋势,展示产业互联网的优秀实践成果。其中,由腾讯安全主办的云安全专场、数字化业务风控专场将聚焦数字化进程下产业安全防护和安全体系建设等问题于11月4日召开,届时,腾讯安全将特别举办一场数字藏品艺术画展,联合三大美院7位青年艺术家,设计发行网络安全主题数字藏品,于线上、线下限量发放6007份,以世界名画趣解网络安全。(新世纪科技)[2021/11/3 6:28:27]
另外还涉及到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
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。