由于数字货币相关的一些概念和传统的不太一样,许多不搞技术的同学对于如何有效保护自己数字资产的安全,还是有点搞不清楚。希望本篇可以对非技术同学说清楚钱包的安全问题。
钱包本身只是一个比喻的说法,而且可能是很有害的一个比喻,因为实际情况跟传统世界的钱包隔了十万八千里。
打一个更恰当一点的比方:
注解
助记词
现在大部分钱包在生成密钥对的时候都是符合统一规范的,助记词就是这个规范的一部分。根据助记词可以推导出你的钥匙,所以只需要保存自己的助记词,就等于是保存了自己的钥匙。
所以,你的数字资产的安全性首先取决于这把钥匙是如何保管的,所以使用钱包时,第一个需要确认的就是钥匙被存放在哪里。 比如有些人把交易所当钱包,这个时候钥匙就是在交易所的手上。还有一些服务器钱包,你的钥匙实际上也是放在钱包服务商的手上。这些情况下,实际上你都是把自己的钱托管给了别人,安不安全就看对方人品了。
还有一些闭源钱包,比如imtoken以及其他一些,虽然他们说钥匙只会存放在你的设备上,但是理论上来说,不检查他的源代码,我们是无法确切地知道他说的是不是事实的。
如果真的想要确保数字资产的安全,首先钥匙要保管在自己手上是最基本的,而且为了确保这一点,你最好使用一个开源的并且有一定声望的钱包。
确保钥匙保存在本地的情况下,接下来的风险就是钥匙被盗了。如果保存钥匙的设备(电脑或手机)感染了病毒,那么你的钥匙就有可能被别人拷贝走。
所以大部分钱包都会对钥匙的存储进一步做加密处理,这些钱包会提示你设置一个密码,这个密码就是用来对你的钥匙进行加密,你本地存储的是加密后的版本。就算病毒或黑客盗取了你的密钥文件,在他不知道你密码的情况下,也无法使用你的钱。(所以如果你忘记了这个密码,也不用太担心,只要你备份的助记词还在,依然可以把私钥重新恢复出来)
对密钥做加密有一个微妙的地方需要注意就是,不要在内存里留下明文密钥的痕迹,这一点其实很多钱包可能并没有考虑地这么细致。 因为在钱包运行过程中,当私钥刚创建出来或者被使用的时候,私钥的明文是必然会在内存里出现的,而传统编程的时候,对于不再使用的内存,通常的做法是不管它,这样就很容易把明文的私钥在内存里留下痕迹,给黑客盗取私钥提供了可能性。正确的做法是在使用完后要主动把私钥明文对应的内存区域清零。
其实只要这几点做到位了,你的私钥的安全性就有了基本的保证。就算钱包软件其他地方有漏洞,或者你的系统本身有漏洞导致被病毒或黑客入侵,你的私钥也不会立刻被泄漏出去。 要做到整个软件完全没有安全漏洞可能比较难,但是把上面几点做到位,只要有心,一般还是问题不大的。
但是终极的确保私钥安全性的办法,还是要从一开始就保证私钥不触网,也就是冷钱包的概念。找一台不联网的干净电脑,或者一个开启飞行模式的干净手机,把私钥创建在上面,并且这台设备以后也永远不联网,或者干脆创建后把私钥删掉(如果你只存钱很少花钱并且备份好了助记词的话) 因为查询余额以及收款的操作是不需要私钥的,只有花钱的时候才需要私钥。 这甚至可能比硬件钱包还要安全,毕竟硬件钱包还取决于硬件本身设计有没有bug。
私钥以外的安全性,主要就是交易数据正确性的风险,也就是双花的风险了。虽然公链项目团队可能花了大力气去设计共识算法保证链上数据的一致性,但是如果钱包这临门一脚撂了挑子,还是白搭。
所谓双花风险就是,虽然你在钱包上看到对方给你转账成功了,但是等你给对方发货后,发现那笔转账是有问题的。
从这个维度来说,又可以把钱包分为几种类型:全节点钱包、轻钱包、连轻都算不上钱包。这几种钱包模式的区别就在于他们如何获取区块链上的交易数据。
Cardano的官方钱包因为一些细节的技术决策上的问题导致体验不太好,一直被大家所诟病,不过最近版本更新改进不少。
我自己在阅读Cardano实现的过程中,有时候也会产生一些自己的想法,于是写了一些代码 python-cardano ,目前已经基本能够实现命令行界面的钱包功能,私钥加密部分是直接复用的官方代码,加上目前Cardano本身还没进入去中心化阶段,区块数据都来源于iohk的服务器,所以基本的安全保障还是有的。 不过项目代码整体还处在开发阶段,所以目前只建议用来学习研究,不要实际用它管理资产。
目前这个项目已经能够通过命令行界面提供一些官方钱包还没有的特性,比如:
下一步计划是基于它开发ADA手机钱包,未来这个项目可能也可以作为Cardano侧链生态中的一个开发平台,目前也可以作为大家学习研究的一个基础。有兴趣的朋友可以加电报群一起探讨: Safe ADA Wallet 。
转载请注明出处,收藏或分享这篇文章到:
Website content copyright © by 黄毅. All rights reserved.