上一篇的结论是:自托管钱包不保管资产,它保管的是一把密钥和一个链上读取能力。由此产生一个后续问题——如果钱包里本来就没有资产,那么"钱包被黑"指的究竟是什么。
答案是:这个说法在多数场景下并不准确。钱包应用本身很少是被攻破的对象。实际发生的情况有四类,成因不同,损失范围不同,补救路径完全不同。而现实中造成二次损失的主要原因,是把类型判断错了,从而做了无效的补救。
四类情况的横向对比
按五个维度对照。
第一类:密钥泄露
· 密钥是否离开你的控制:是
· 触发动作:助记词被截图、存云端、输入仿冒页面,或设备被植入木马
· 损失范围:该助记词派生出的全部地址、全部链上的全部资产
· 时间特征:通常在获取后短时间内一次性清空
· 有效补救:立即生成全新种子并迁移剩余资产。更换设备无效,因为问题在那串词本身
第二类:授权被滥用
· 密钥是否离开你的控制:否
· 触发动作:你本人在某个页面签署了代币授权,额度通常为无限
· 损失范围:仅被授权的那一种代币,同地址其他资产不受影响
· 时间特征:常有明显延迟,签署与实际转移之间可能相隔数周
· 有效补救:撤销该条链上授权。更换钱包、重装应用、更换设备全部无效,因为问题不在设备上,而在链上一条仍然生效的授权记录里
第三类:使用了仿冒客户端
· 密钥是否离开你的控制:是
· 触发动作:在假官网、山寨应用或被替换的桌面客户端中创建或导入钱包
· 损失范围:与第一类相同
· 时间特征:可能立即执行,也可能潜伏至余额积累后再动手
· 有效补救:同第一类。识别要点:应用在启动后自行重启并要求输入助记词,是明确的恶意信号——正常钱包软件在初始化完成后不会再索取助记词
第四类:密钥生成阶段存在缺陷
· 密钥是否离开你的控制:从未泄露,但从生成起就可被推算
· 触发动作:无。用户侧没有任何操作失误
· 损失范围:该缺陷影响范围内生成的全部钱包
· 时间特征:潜伏期可以长达数年,直到有人系统性利用
· 有效补救:必须生成全新种子并迁移。升级固件只能阻止新的问题种子产生,对已存在的种子无任何作用
对比之后浮现的结构
四类之中,只有第一类和第三类属于"密钥被他人取得"。
第二类里密钥始终在用户手中,资产转移是用户本人签署授权的结果。第四类里那把密钥从一开始就不具备应有的随机性,严格说它从未真正成为过秘密。
也就是说,四种被普遍称为"钱包被黑"的情形中,有一半根本不涉及密钥被盗。
这个区分的实际价值
判断错误会导致补救完全落空,而资产在此期间仍在流失。三种典型的错误处置:
误判第二类为第一类:更换钱包应用、重装系统、甚至更换手机。链上授权依然有效,资产继续被划走。
误判第四类为第一类:更换硬件设备,但沿用原助记词。种子未变,风险原封不动地转移到了新设备上。
误判第一类为第二类:只撤销了几条授权,未更换种子。攻击者持有根密钥,可以随时清空任何一条链上的任何资产。
一个可以立刻执行的检查
多数区块链浏览器提供代币授权的查询与撤销页面。如果从未检查过,建议现在查看一次自己历史上签署过哪些授权。长期挂着的无限额度授权是相当常见的情况。
结论
"钱包被黑"是一个把四种不同事件压缩进同一个词的说法,而这种压缩恰恰妨碍了正确处置。更有用的提问方式是:密钥是否离开过我的控制,我是否签署过什么,以及这把密钥当初是怎么生成的。
那么问题是:你见过或经历过的"被黑",事后回看属于哪一类?