网络安全把关不求人! MetaMask钱包签名前要留神!

MetaMask 是一个非常出名且最多人使用的 EVM (以太坊虚拟机器) 加密数字钱包,相信任何熟悉加密数字领域的人或多或少都有使用过 MetaMask 钱包。 然而,随着越来越多人进入加密数字领域,因此而衍生的数字骗案亦逐渐增多,而因为不熟悉区块链的运作模式,而导致的数字资产被盗的个案,则更是层出不穷。

曾经有朋友就发生过这样的情况,自己明明没有做任何交易,但发现自己钱包内的数字资产被无故转移,他确定助记词并没有洩露给他人,但自己曾多次使用该钱包登入不同网站,参与不同的 dApp 互动等,因此,非常有可能问题就出在签名上。

这次我们就以 MetaMask 为例,来说说关于区块链的三个签名问题。

所谓签名,实际上就是一个身份认证的过程。就如同你去银行提款,银行除了接收你的操作指示以外,还必不可少要进行身份认证,确保你是真正的账户拥有者。银行的身份认证可以是用密码,签名,印章等方式进行。

区块链签名

区块链上的交易亦是如此, 当你进行一个交易时,除了要指示区块链「要做什麽」,还需要进行身份认证,确保你是真正的账户拥有者,才可进行相应操作。 这个身份认证,就是我们所说的「签名」。

签名的具体做法,是使用你保存在区块链钱包(如 MetaMask)中的私钥(Private Key)透过加密演算法,对你发出的指示做数字签署,而这个签署,是可以透过与你的地址公钥(Public Key)比对从而认证确实是你发出的相应指示,而完成认证过程。另外,「签名」这个动作,可以是不需要上链的。在没有网路的情况下亦可进行。

因此,只要拥有一个有效的交易签名,配合对应的交易指令(例如转账),即可正常完成一次交易。

说到这裡,相信聪明的读者都能够看出其中的玄机,在整个过程中交易签名是重中之重。换句话说,骗徒可以伪造一个交易,骗取你的交易签名,然后骗徒便可以凭藉这个签名,执行该伪造交易,从而导致你在莫名其妙的情况下,损失资产。而交易签名洩露,也就是许多数字资产被盗的元凶之一。

Personal Sign

常见Web3 登入的签署

Personal Sign 可以用于签署一段 UTF-8 编码的文字,使用这种方法,MetaMask会清楚显示被签名的内容 ,这种方式常见于网站登入。

上面我们说到的 OpenSea 登入, 就是使用了 Personal Sign 这个方式。

Eth_Sign

用户需要提高警觉的签署

ethsign 是 MetaMask 很早期提供的签名方法,这个方法需要传入一个 32 byte 的杂凑数 (Hash) 以供签名,而杂凑数可以是由任何内容得到,因此,仅凭这个无意义的杂凑数,签名者完全不会知道自己正在签署什么内容,这个内容可能是一个交易,一个授权,也可能是网站登入请求,又或者其它任何内容,因此有非常大的风险,现在 MetaMask 已经开始对这类的签名请求弹出红色警告,以警示用家,避免堕入骗局。

噹噹,敲敲钟。 ethsign 是一个非常危险的签名方式,这也是许多骗案所使用的签名方法。 上面我们说到的 OpenSea 登入, 就是使用了 Personal Sign 这个方式。

EIP712 Sign

一种更高级、更安全的交易签名方法

EIP712 Sign是一种更安全的签名标准,这个标准规定了签名数据的结构,也加入了对数据的作用域限制,如 domain,验证合约地址等。

ERC712 签名经常会被用在执行 metatransaction 等合约执行中,例如 OpenSea NFT 上架,降低价格等过程都会出现 EIP712 签名请求。

这个标准的好处是,签名者可以清楚看到自己在签署的内容,很大程度上降低被钓鱼的风险。 但是,这并不等于这种签名是绝对安全的,签名时,一定要看清楚究竟在签署什么内容。

结语

综上所述,绝对不可以认为签名不上链,没有风险。相反,区块链的签名其实可以认为是无所不能,特别是使用 ethsign 的方式弹出的签名,无论是开发团队还是个人都要加倍小心。

除了 metamask 交互本身的安全以外,其他的安全建议有:

1.私钥和助记词无论如何不能给出,也不要用剪切板 copy ,更不能拍照截屏,或者存在网盘里。记住私钥或者助记词就是你的钱包全部

2.冷热钱包分离,所有要去交易的都用热钱包,冷钱包只做转入转出操作,如果要卖一个冷钱包里的NFT,宁可花一点gas把他先转出来到热钱包里

3.去 mint 时,或者试一些 dApp 时,最好用一个小号钱包

4.大额资产最好放在交易所,或者硬件钱包,硬件钱包助记词只能手写,不能存放在网络之中

希望大家来到加密世界开心,并且保护好钱包,钱包就是我们生存在web3世界的钥匙,如果钥匙丢了,被人盗用,钱包就不在属于你了,如果发生这种情况,立即划走钱包里面的资产,钱包弃用。