查看原文
其他

只有三种情况下,你的币才能被转出你的地址——准确理解私钥控制资产和合约控制资产

闪电 黄世亮 闪电HSL 2023-10-11

现在已经有媒体每周都会做一个总结性报告,报告上一周币圈安全事故,这足见币圈是多么风险的存在。

对于以太坊来说,从技术原理上讲,只有以下三种情况下你的币才有可能被转出你的地址(EOA地址——即我们绝大多数人使用的有私钥的地址)。

1.私钥丢失,那你所有的资产都会丢失;

2.erc20NFT等资产,使用了approve函数,授于了恶意合约,那这个恶意的合约是可以转走你的代币;

3.对于erc20代币资产使用了permit功能,对一个植入了恶意转币的消息进行了签名,并且签名结果信息被广播给了那个坏蛋。

除以上三种情况外,你地址上的资产都是安全的。


私钥丢失,常见的有:

1.你的助记词被他人偷看到。

这是小白最容易丢币的方式

比如你备份在纸上的助记词被人偷看了;比如你将助记词存进了云盘里;比如你将助记词截屏放在了icloud里等等;上了钓鱼网站的当,比如你为了空投,把助记词主动填写进了钓鱼网站上。

2.下载到恶意钱包。

这。。。。一定要经过至少三种不同信息来源来交叉验证你是否是下载到了正确的钱包。

3.你钱包所在电脑或手机被植入了木马程序被黑客控制了。

一般来说,现在的手机和电脑,升级到了最新版本,软件是正规网站下载的,注意基本的上网安全习惯,电脑是很难被入侵的。


approve是非常多的安全问题的源头

erc20代币和NFT代币总是免不了要和各种合约交互,比如在dex里买卖。approve函数就是允许合约调用transferForm函数,按合约代码里约定好的规则,来转移你的代币

如果你授权(approve)的合约是一个恶意的合约,即合约代码里写好了可以偷你的币,那你的资产就是危险了。

在授权任何合约前,一定要多方验证合约的安全性。

https://etherscan.io/tokenapprovalchecker

这个工具可以检查你授权给了哪些合约,并且可以取消授权。

但取消授权总是麻烦的,最好就是定期换地址,新地址就不会有授权问题了。

我们习惯了web3的登录方式,一个网站让用户调用metamask钱包对特定的消息签名,这个动作的本质是允许这个网站查看用户的地址。其实在绝大多数情况下,这种消息签名是没啥危险的,这就和你将地址复制粘贴到区块浏览器里去查看你的资产余额类似。

但对erc20协议,因为存在permit扩展功能,对特定消息签名,就可能产生意外的风险。

permiterc20协议的一个扩展功能,它允许用户通过签名消息来完成授权操作,并将签名结果发送给另外一个钱包,这可以完成资产转移操作。

最常见的是dex里的挂单功能,如1inch有一个Fusion功能,就是让用户对一个消息进行签名,这个消息包含了按某个价格出售多少代币,然后用户就可以在不支付gas的情况下将资产委托给1inch处理,然后1inch会给用户想购买的币

如果某个网站伪造了恶意消息让你签名,你的erc20资产就有可能丢失

所以也不瞎签名,不要对来历不明的web3网站进行签名登录


为了进一步准确理解资产的安全保管,我们要准确理解私钥控制资产,和,合约(智能合约)控制资产,这两个概念。

所谓的私钥控制资产所有权,就是除了私钥签名能发送币外,不可能出现其他情况让你的币转走。

像UTXO派系,普遍就是私钥控制的资产。比如比特币,基本上只有私钥才能解密你的UTXO,然后再加密到另外一个公钥里,完成币的转移。除此之外,很难见到其他情况。

比特币也有“合约”控制资产的情况,比如有anyonecanspend这种交易格式,就是不需要私钥签名,而是任何人都可以花费的。但对绝大多数人来说,基本上不会碰到。

对于纯正的以太币ETH,不是wETH-erc20,其实就是私钥控制的资产,只有私钥签名才能发送以太币。

合约控制资产,本质上是脱离了私钥控制所有权,而是将资产的所有权转移给了合约代码。

比如erc20代币,本质上erc20就是一个合约标准,就是代码定义了资产和使用资产的函数。但在绝大多数情况下,合约代码都会定义好,只有经过地址的私钥签名,才能转移erc20代币

但繁荣的链上生态,让资产的所有权变得越来越复杂,为了实现更复杂的功能,就会产生更复杂的代码逻辑来控制资产。这就是我们经常看得到在xxx条件下,代币所有权就会发生转移。

erc20代币和NFT代币等,都是合约控制的资产。

像approvepermit这两大类功能,都是允许特定的代码来接管你的erc20等资产

而代码,总会有漏洞。。。。。所以安全性问题总是层出不穷。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存