如何实现数字资产的冷存储?

原创
02/02 19:08
阅读数 22


所有信息,只要连到互联网上,就有可能泄露。

这方面的教训太多了,以至于人们对大规模信息泄露这种新闻连看都不想看了,因为这太寻常了。

本质原因在于,所有的信息系统,都会有漏洞,正如所有的软件都有bug一样。

控制数字资产的根本是私钥,谁拥有私钥,谁就拥有该私钥对应的数字资产。

所以,你还敢把私钥放在联网的设备上吗?

只有把私钥完全与网络隔离,才能保证不被黑客通过网络拿走。

冷存储就是干这事的。

一、冷存储的基本概念

为简单起见,本文中,“冷存储”就是“冷钱包”。

所谓冷钱包,就是在一台永远不会联网的电脑(或一部永远不会联网的手机)上,安装一个钱包App。

另外有一个可以联网的热钱包配合使用。

本文选择Electrum钱包为示例。

冷钱包所做的,主要是:生成私钥、生成地址、生成私钥的助记词、签名交易报文。

热钱包所做的,主要是:查询余额、制作未签名的交易报文、广播已签名的交易报文。

二、冷钱包制作步骤

你所需要的,只是:

1、一台永不联网的电脑或一部永不联网的智能手机。(当然,从经济角度考虑,最好是一部老的,平时不会用的。)

2、在这台电脑上安装上干净的操作系统。(虽然不联网,但干净一点总是好的)

具体操作步骤可以参见文章:如何在一台旧电脑上安装一个Linux操作系统?

3、产生新钱包,记下助记词,然后将助记词多存几个地方。

注意:

  • Electrum中可创建多个wallet,每个wallet有一套助记词,每个wallet里有多个地址(包括找零地址)。

  • Electrum的每个wallet一个文件,都保存在~/.electrum/wallets目录下。

  • Electrum的助记词可不是BIP39兼容的。

三、如何使用冷钱包

冷钱包是不能单独使用的,它需要和热钱包配合使用。

下面这些步骤,介绍两者如何配合起来完成资金的查询和发送。

1、把冷钱包产生的地址,导入到热钱包中。

在冷钱包的“控制台”中,使用listaddresses()命令获取地址。

然后通过U盘导入到热钱包中(也可以通过二维码做这件事)。

下图是导入进热钱包的示意(事实上是建立了一个只读钱包)。

这个热钱包可以查看余额,但不拥有私钥,无法签名。

2、接收资金时,提供地址即可。

在热钱包和冷钱包中都可以看到这些地址。

地址本身是不需要保密的(地址是公钥的hash),但可能要考虑隐私问题。

3、发送资金前,先制作未签名的交易报文。

在热钱包中输入要发送的地址以及金额,选择合适的手续费。

这一步也可以在冷钱包上做,但热钱包上做更便利一些。

4、导出未签名的交易报文。

在上一步骤中,点击“预览”按钮。

点击上图的“导出”按钮,会导出一个unsigned.txn的文本文件。(文件内的报文为json格式,里面含有未签名报文的hex编码。)

点击上图“导出”按钮左边的二维码图标,则展示一个二维码,里面含有未签名报文的信息。(可以让冷钱包扫描这个二维码获得报文。)

这个图中的“签名”、“广播”等按钮都是灰色不可用的,原因是热钱包上没有私钥,无法签名。

5、在冷钱包上签名。

在冷钱包中导入未签名的交易报文,可以用文件方式导入(如下图),也可以用扫描二维码方式导入。

导入成功后,会展示步骤4中的那个图,由于有私钥,此时“签名”按钮可用了。

点击“签名”按钮完成签名。

签完名后,可以导出一个名为signed_***.txn的文件(***是交易ID的前8个字符)。

也可以展示二维码。

6、在热钱包上广播交易。

然后在热钱包上导入这个已经签名的报文,就可以点击“广播”按钮了。

四、关于钱包软件的下载和验证

以下是几点注意:

1、一定要从官网下载软件。

2、验证该软件的签名,防范伪造。

3、选择支持冷存储的HD钱包。

4、钱包最好是开源的。(一旦出了问题,至少还有源码)

下面以Electrum为例作说明:

Electrum是一款开源的轻钱包,简单好用,颇受欢迎。其官网地址为:

https://www.electrum.org

注意会有假冒的Electrum,他们要么偷走你的私钥,要么在你转账时把接受资金的地址改掉。

黑客会想方设法让用户下载这些假冒的Electrum。

其手法非常巧妙,极具迷惑性1

Electrum轻钱包不同于MultiBit或Breadwallet等比特币轻钱包,无法与比特币全节点直接通讯,只能与Electrum server进行通讯。黑客在有限的Electrum server节点中混入了黑客控制的malicous节点。

当Electrum轻钱包用户连接到的几个节点全都是黑客的malicous节点时,malicous节点便会拒绝帮用户广播转账消息,然后返回自定义的错误消息,此时Electrum轻钱包软件便会弹窗展示malicous server的自定义消息给用户,自定义消息提示用户需要到https://github.com/Electrum-wallet/Electrum/releases去下载最新版Electrum 软件。由于弹窗在Electrum中显示,迷惑性极大。实际上Electrum软件的真正下载地址是https://github.com/spesmilo/Electrum/releases,根本不是弹窗中的地址。

黑客还会发起DDoS攻击2,让真正的Electrum server也不能正常工作,目的还是让Electrum弹窗提示用户下载新版Electrum软件。

所以,即便是你在用的真的Electrum弹出窗口让你下载新版软件,你也不要在这里下载,你要去官网下载。

官网下载的一定就是对的吗?从非常谨慎的角度考虑,也不一定,因为官网有可能被黑客拿下。

所以要验证签名。

可以看一下签名的大致样子:

验证签名的方法,网站上有说明,如下。

其中在Windows和Macos操作系统下的验证方法的链接分别在:

https://bitzuma.com/posts/how-to-verify-an-electrum-download-on-windows/

https://bitzuma.com/posts/how-to-verify-an-electrum-download-on-mac/

我在本地使用GPG验证,结果如下,这种提示就是表明验证通过了。

注意第4行写到:“完好的签名”,签名人为Thomas。

五、冷存储注意事项

1、使用二维码作为冷、热钱包的信息交互方式是非常推荐的,毕竟U盘还是有可能带病毒。

2、冷钱包的载体(那个旧电脑)要保存好,不要丢失。一旦丢失,立刻转移资金。

3、冷钱包最好也设置口令,防范丢失后缺乏保护,另一方面也可以防范邪恶女仆攻击。

4、助记词要多存两个地方,以防万一。

5、根据个人情况,看是否需要把wallet文件保存几个地方,以备不时之需。

六、总结一下

事实上,做一个冷钱包,就相当于自己做了一个硬件钱包,只不过这个硬件,是自己的一台旧电脑。

自己做,毕竟放心一些。

虽然稍微麻烦一些,但是值得。

(关于硬件钱包的基本知识,可以看一下这篇文章:硬件钱包是否值得入手?

关注公众号“微月人话”(ID:man-mind),回复“区块链”,学习区块链基本知识。

引用文献:


  1. Electrum轻钱包钓鱼事件简析(https://www.freebuf.com/vuls/193231.html) ↩

  2. 黑客利用钓鱼攻击窃取了Electrum钱包用户771个BTC(https://bcsec.org/index/detail/tag/1/id/546) ↩


本文分享自微信公众号 - 微月人话(man-mind)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部