授权盗币:你签的那个字是什么
一句话速览
一次无限额度授权可以让对方随时转走你的币,而签名时的界面看起来完全正常。
这节课要你带走的
授权是什么、为什么一次签名可以让对方随时转走你的币、以及怎么检查和撤销已有的授权。
这一类损失有个特点:你的私钥没有泄露,助记词也没给别人, 币却被转走了。
原因是你签过一个字。
授权是什么
在链上跟一个应用交互时, 你通常需要先授权它动用你钱包里的某种代币。 这是正常机制,不然应用没法帮你完成兑换之类的操作。
问题在于授权可以有两个维度被放得很大:
| 维度 | 安全的做法 | 危险的做法 |
|---|---|---|
| 额度 | 只授权这次需要的数量 | 授权无限额度 |
| 时效 | 用完撤销 | 长期有效,你忘了它还在 |
「无限额度 + 长期有效」的组合意味着: 对方在任何时候都可以把你钱包里那种代币全部转走, 不需要你再签任何字。
为什么容易中招
一是签名界面看起来很正常。 钱包弹出的确认框里是一串技术信息, 多数人不会逐项去看那个额度是多少。
二是无限授权曾经是默认。 它能省掉后续每次交互的重复签名, 所以很多应用把它做成了默认选项。
三是时间差。 授权在今天签,币可能在三个月后被转走。 等到那时候,你根本不会把两件事联系起来。
三条防护
一
签字前看额度
确认框里会显示授权数量。 如果显示的是一个极大的数或者「无限」,改成实际需要的量。 多数钱包支持手动修改。
二
定期检查并撤销
有公开工具可以列出一个地址的全部现存授权,并逐条撤销。
建议养成习惯:每隔一段时间清一次, 尤其是那些你早就不用的应用。 撤销需要付一笔链上手续费,但比丢币便宜得多。三
大额资产单独放
用一个专门的地址存放长期资产,这个地址不跟任何应用交互。 日常交互用另一个地址,里面只放少量。
这条最有效,因为它不依赖你每次都看清楚。 没有授权过的地址,不存在被授权盗走的可能。一个必须分清的区别
授权被滥用 ≠ 私钥泄露。
私钥泄露意味着整个钱包全部资产都可能被转走, 而且换任何链都一样。 授权被滥用只影响你授权过的那种代币, 而且是在授权的额度之内。
这个区别决定了应对方式: 发现异常授权,撤销它就够了; 怀疑私钥泄露,必须立刻把所有资产转到新钱包。
做
今天就做这一件事
用一个公开的授权检查工具,把你常用地址的现存授权列一遍。
多数人会发现里面有好几个自己早就忘了的应用,其中一些还是无限额度。
把不再用的全部撤销掉。
带走这一条:授权被滥用时私钥并没有泄露,但对方可以随时转走你授权过的代币。无限额度加长期有效是最危险的组合。而最有效的防护是大额资产放在一个从不跟应用交互的地址。