web3eye.eth

Posted on Mar 16, 2022Read on Mirror.xyz

走进科学 | 2. 如何使用钱包进行安全签名

签名这个词语对我们来说并不陌生,在很多场景中都会使用到签名。比如:

1、登录某网站时,连接钱包之后会提示你进行签名。

2、discord 使用 collab.land 进行身份认证时,要求连接钱包并签名。

3、在 coinlist 登记优先队列时,也会用参与任务的钱包地址签名进行认证。

或许上面这些场景你都没遇到过,但其实只要你使用过 eth 进行转账,其实你也用到过签名,只不过签名的步骤包含在发起交易的过程中了。所以签名在加密世界里面无处不在,我们如果要使用代码去调用合约抢跑交易,自然也是少不了签名的,所以在本文中,我们将重点讨论下签名的原理和工具。

什么是签名

现实生活中我们都有过签名的经历,很多时候不仅要签名还要盖上指纹印,这里签名的作用就是通过字迹和指纹来证明这是经过你本人确权的,是有法律效应的。当然,我们这里要讨论的是数字签名,和现实中的签名类似,也是要证明你签署的信息或者交易确实是你本人发起的,它的主要作用就是保证了数据的有效性(验证是谁发的)和完整性(证明信息没有被篡改)。这一过程是如何做到的呢?

我们的钱包地址都会有一个私钥,私钥是唯一的并且非常重要,如果别人知道你的私钥他就可以盗走你的资金,拥有私钥的人就拥有整个钱包资产的所有权。这个私钥可以推导公钥,但由于公钥太长,为了简便实用,就出现了“地址”,地址是公钥推导出来的。这些推导过程是单向不可逆的,所以地址不能推出公钥,公钥也不能推出私钥。对比生活中的签名,你的字迹和指纹就代表了你的私钥,只有你可以解锁你的资产。而数字签名就是用你的私钥签署一段信息,而验证人可以通过公钥来验证签署信息的合法性。

注意签名安全

在新版的 metamask 中,会把签名的原始信息展示给用户,比如使用 collab.land 验证 discord 的身份时,点击签名按钮之后会出现签名确认的界面,如图所示:

除了特别注意签名的原始内容之外,还要注意签名界面上发起签名的网页地址是正确的网页地址。

对于一些比较复杂的交易,也要注意签名内容是否正确,比如在 opensea 升级之后,会重点显示签名的原始信息,需要核实签名的信息和当前设置的价格是否一致,以及合约地址等信息,当然重点也要关注发起签名的网页地址是否是官方地址。

所以在签名的过程中,应该反复确认签名的网页发起地址和签名内容,而对于不能确认的网页地址或者域名,或者出现了自己不能确认的签名内容,千万不要确认签名。

签名的工具

在 coinlist 验证优先队列的时候,需要对一段特定的文字进行签名,并提交签名结果,遇到这样的场景,推荐使用 myetherwallet 进行签名和验签,具体使用方法如下:

1、访问 https://www.myetherwallet.com/,选择 “Access my wallet”

2、选择 "Browser Extension", 选择该项使用浏览器钱包,选择小狐狸钱包

3、进入 dashboard 之后,找到左边菜单栏的 “Message” 菜单,这里提供了签名和验签的功能

4、点击 “Sign message”,使用签名功能,输入一段文字信息,如 “I love Web3Eye” ,点击 “Sign” 按钮会调用小狐狸钱包,对签名的内容进行确认,然后点击 “签名按钮完成签名” 。

5、在跳转的页面中便可以看到签名的返回结果,“sig” 字段便是对原始信息 “I love Web3Eye” 签名之后的信息。

6、复制签名信息,可到 “Verify Message” 中进行验签

除此之外,etherscan 也提供了签名和验签的功能,我们也可以把上面的签名结果拿去 etherscan 进行验证。

1、访问 https://etherscan.io/verifiedSignatures,选择 “Verify Signature” 按钮,依照上面的签名信息分别填入地址,签名原始信息和签名信息( sig 字段中的信息,注意在 etherscan 中使用需要加上 0x 的前缀)

2、点击 “continue” 之后便可查看签名结果,注意这里默认选择不对外发布签名信息,这样你签名的信息只有你自己看到,如果选择下面的 “verify & publish ...” 便会将签名信息发布出去,别人也能访问到。

如果你替换签名的信息或者地址,便不能通过验证签名,即使只是改变原始消息的大小写也不能通过验证。

3、点击 “Sign Message” 按钮,可以连接钱包之后,输入原始信息进行签名,该过程和 myetherwallet 类似,大家可以体验一下,这里不再赘述。

至此,我们已对签名有初步的了解和认知,并能使用一些工具进行签名和验签,当然,这已经能帮助我们完成一些工作了,但如果要在抢跑过程中用代码实现签名交易,自动发送交易还需要有更深入的学习和了解,在后面的小节中我们再详细讲解。

关于我们

Web3Eye 是一个专注于技术研究和分享的 Web3 加密技术社区,团队拥有多年区块链研发经验和安全技术能力,以帮助更多人安全地进入 Web3 世界,欢迎关注我们的 Twitter 帐号,了解最新动态。