其实在大多数资产被盗事件中,最后一道安全门(签名授权)都是用户自己把守的,如果用户留个心眼,看懂了签名内容就大概率能规避很多风险。

那么钱包签名有哪些类型?又该如何识别可疑交易?接下来笔者将简单介绍这方面内容。

签名与授权的区别

首先还是有必要科普一下签名与授权的区别。

  • 简单来讲,用户签名就像公司董事长签署文件一样,是一种认证和许可方式。所有交互,不管是普通的身份认证、转账,还是Dapp里的操作,最终都需要得到我们的签名操作才能进行。在实际钱包使用过程中,只要弹出了认证界面(包括Sign、Confirm等)都是应用在寻求你的签名,一次认证就等于做了一次签名。

  • 授权(包括Approve、Permit等),就是给予应用某些权限(如0.1ETH以下的转账可以代用户执行),它属于签名的子集。在实际钱包使用过程中,签名可能会带上某些授权,但授权是一定要用户签名的。值得注意的是,授权本是为了提升用户体验,但在授权时也要仔细甄别授权对象及内容,防止资产被盗。

特别对于撸毛用户来说,为了做交互任务,钱包可能已经积累了各种网站授权,安全的建议是定期检查钱包授权,取消一些可疑或不常用网站的授权,不然辛辛苦苦做的撸毛精品号可能是给别人做了嫁衣。

Revoke是目前最常用的查看和取消钱包授权网站,链接如下:

https://revoke.cash

不同的签名类型

在以太坊中,主要有三种签名方式:Personal_Sign、EIP712 Sign(eth_signTypedData)、Eth_Sign。

  • Personal_Sign

Personal_Sign是一种最常见的签名方式,常被用于身份验证和网站、Dapp登陆操作。

以下图中Opensea的登陆时使用的Personal_Sign为例,我们来一一介绍该签名中的部分及注意事项:

1、最顶部是用户的账户和余额,没什么好说的;

2、往下是Opensea的域名,很多用户有时会忽略这个信息,但这是值得我们查看的,因为有些钓鱼网站会在自己的域名下伪造相同的签名来诱骗用户上当,所以不管是在浏览器中登陆Dapp还是后续在Dapp中的交互签名,都需要看域名是否正确;

3、最后底部便是消息,共有6段内容,包括下图中标识的:(1)欢迎信息(2)免责合同(3)提醒这次签名不会花费Gas(4)提醒这次签名有效时间为24h(5)签名的钱包地址(6)证明该签名是唯一的随机数。

但是不是所有应用的Personal_Sign的消息都能做到Opensea这样“所见即所签”的程度,有些应用图省事并不会写的像Opensea这样完善,也有的干脆直接呈现一段用户不可读的字符串(俗称“盲签”),即使没有安全问题也能反映出这种项目不注重用户体验。

  • EIP712 Sign(eth_signTypedData)

EIP712 Sign是一种可读性更高的签名方式,因此常被用于与合约交互相关的签名,例如买卖NFT、swap交互、治理投票等。

如下图,顶部信息与Personal_Sign类似,包括账户、余额和域名,不同的是底部的消息,不仅是可读的而且根据不同类型进行显示(From、Wallet、To、Amount等),这样能使用户更好的检查待签内容是否有误。

不过这并不等于说EIP712 Sign就是绝对安全的,如果用户在签名的时候从来不看内容,写得再详细也没用。就像这次Galxe攻击中,交易内容也是明写在签名里(虽然不是EIP712 Sign),但还是有用户中招。

  • Eth_Sign

Eth_Sign是MetaMask很早期时提供的签名方法,它被公认为是一种非常危险的签名方式,一般的骗局都会使用它。因为Eth_Sign是彻底的“盲签”,底部消息中呈现的字符串是不可读的。用户根本不知道自己正在签署什么内容,可能是网站登陆请求或者一个授权,也可能是一笔转移你所有资产的交易。

因此,一般遇到Eth_Sign的签名MetaMask都会提出红色警告(如下图)以提醒用户不要进入骗局,但也不排除没有警告的情况。总之遇到这类“盲签”,作为用户来说一律不签才是最保险的。

当然,对于“盲签”内容,有个识别技巧是如果字符串是以“0x”开头的,那大概率该签名涉及交易;如果不是以“0x”开头则可能是身份认证或授权之类的签名(如下图)。

总结

我们不仅要明白攻击是怎么一回事,更重要的是为自己敲响警钟。

以上只是简单介绍了几种签名方式及在签名时需要注意的事情,这可能并不能帮你躲过所有网络钓鱼攻击,因为黑客的钓鱼与攻击手段也在不断的更新。但无论如何,唯一要牢记的是自己要守好“签名”这最后一道安全门,在真正的交互中不管是多小的签名或者多知名的网站要求授权都需要留个心眼,仔细验证待签内容。