“区块链数字钱包”就是未来世界的银行卡,认识和保护它就是在守卫我们自己的财产。在未来的区块链数字世界,当傲娇女碰到了理工男可要小心了。在各大聊天平台交流中和相关数字货币的报道中,我们看到了不少人由于对“区块链数字钱包”的理解不清而至私钥保护不善造成个人数字资产损失的情况,这真的不应该。
每当进行数字资产投资时,我们不能仅仅依靠交易所来存储数字资产,我们更需要有个自己的数字钱包,来存储属于我们个人的数字资产,了解“区块链数字钱包”(以下简称钱包)的相关知识更是我们投资前就应该弄清楚的。
一. 初识“区块链数字钱包”
钱包本质上是一个工具,目前绝大多数的钱包都是在网络中建立了属于用户的单独区块空间,它是去中心化的。一般意义上的银行卡是由中心化的银行发放,并进行其中的资产管理,我们密码丢失,可以通过相关证明来让银行帮忙找回,我们银行卡遗失,别人拿到银行卡没有密码也取不走我们的资产,我们更可以通过银行冻结个人银行卡账户,重新办理新的银行卡废除旧的银行卡;钱包则不然,丢失了打开钱包的钥匙谁也没法帮我们找回钱包。
1. 区块链钱包(Block Chain Wallet)
区块链钱包(Block Chain Wallet): 是密钥的管理工具,它只包含密钥而不是确切的某一个代币;钱包中包含成对的私钥和公钥,用户用私钥来签名交易,从而证明该用户拥有交易的输出权;而输出的交易信息则存储在区块链中;用户在使用钱包时, 你的 Keystore, 助记词, 明文私钥, 都是钱包;Keystore 是你加了”锁”的钱包,而助记词和明文私钥是完全暴露在外的钱包,没有任何安全性可言,所以在使用助记词和明文私钥时,一定要注意保密。
区块链钱包在2011年8月诞生,并此后在代币交易中发挥着巨大的作用;由于该平台被密码学严格保护,因此基本不用担心被黑客袭击。区块链钱包本身就相当于个人银行账户,在银行中我们创建存款账户并且存取现金,那么类似地,在区块链钱包中我们创建区块链账号并且存取比特币。在该平台上,用户可以在任何时间段将比特币转换成现金或用现金来支付比特币,下图比较了区块链钱包和银行的区别,左边的区块链钱包识别码对应右边银行的客户ID,左边的比特币地址对应右边银行的存款账号。
2. 钱包需要先理解几个概念
钱包一般包含以下内容:公钥、私钥、助记词、keystore、密码;这里的内容就稍微有点烧脑了,本质上,钱包和钥匙是一一对应的,固定的钥匙直接就可以在网络上打开属于自己的钱包,但为了避免在网络传输过程中的泄密,密码学家运用非对称加密技术,发明了公钥和私钥,公钥用于传输,私钥用于解密,简单的看,我们可以认为公钥就是银行卡号,而私钥就是银行密码。
私钥=keystore+密码,私钥是由五六十位包含数字和区分大小写的字母所组成。为了方便数字资产交易,用简单的密码加上keystore我们就能便捷的转移数字资产。助记词是加密了的私钥,基本也就是私钥,它是为了便于导出keystore而发明的。
3. 钱包可以有多种分类方式
(1)on-chain
给一个钱包地址发送数字货币,这笔交易在全网广播、被确认、被打包进区块。这是发生在链上的,被称为on-chain交易;on-chain钱包需要自己保管私钥。
(2)off-chain
相对于on-chain交易是off-chain交易。通常,通过交易所进行的交易是off-chain的,本人并没有私钥。私钥在交易所,由交易所托管。所以,交易所的钱包也是中心化的钱包。
(3)冷钱包
冷即离线、断网,也就是说,私钥存储的位置不能被网络所访问。例如纸钱包、脑钱包、硬件钱包等等。
(4)热钱包
热即联网,也就是私钥存储在能被网络访问的位置。例如存放在交易所的、在线钱包网站、手机App钱包都属于热钱包。通常而言,冷钱包更加安全,热钱包使用更加方便。
(5)全节点钱包
除了保存私钥外,全节点钱包还有保存了所有区块的数据,最为著名的是bitcoin-core。
(6)轻钱包
它不必保存所有区块的数据,只保存跟自己相关的数据。基本可以实现去中心化。
(7)中心化钱包
在交易所中的钱包,以及类似 OKLink 提供的保险柜服务。
二. “区块链钱包”的技术颠覆在哪里?
在使用钱包的时候,大家一定要多学习多研究。因为区块链是有匿名性的,使用各种钱包是不需要实名认证。虽然你可以看到交易转账的地址,但是你并不知道地址的使用者是谁。
而且,区块链的信息是不可逆转的,万一你小心把币打错地址了,可就找不回来了。我们把币存在钱包里,到底是放在哪里了呢?是不是就在钱包里呢?
我们使用的去中心化的区块链货币钱包,其实只是一个区块链的软件。你的币不是存在钱包公司,也不是存在你的手机设备上的,币还是在区块链网络的地址中的。钱包只是通过服务器来把区块链的各种代码展现给你,建立了一个通道,把你的各种操作指令发到区块链上。所以,区块链钱包是不存在银行冻结你账户或者公司冻结你账户的情况,只要丢失了私钥,你就再也无法打开钱包,损失你钱包中的币。从这个角度来看,其实钱包安不安全与你私钥保管有很大的关系,因为钱包服务商是不会保存你的私钥的,不会放在服务器上;即使是钱包出现问题无法登陆,或者版本更新,再或者被黑客攻击等等各种问题,都不会影响你的资产。这么来看,其实私钥是保存加密货币最重要的东西。
1. 钱包背后的密码学原理
数字钱包的生成可以简单的分解为三个步骤:
- 创建随机私钥(64位16进制字符/256比特/32字节);
- 从私钥推导出公钥(128位16进制字符/512比特/64字节);
- 从公钥中导出地址(40位16进制字符/160比特/20字节)。
简单的步骤背后已经囊括了密码学中大多数的技术:随机数生成器、非对称加密、单向散列函数等。
(1)随机数
随机数是专门的随机试验的结果。在钱包中随机数用于生成私钥,因其相关安全性的重要性,所以必须保证随机数具备以下三种特性:
- **随机性:**不存在统计学偏差,完全杂乱的数列;
- **不可预测性:**不能从过去数列推测下一个出现的数;
- **不可重现性:**除非将数列保存下来,否则不能重现相同的数列。
也就是真随机数。当然,实际上只要给定边界条件,真随机数并不存在。但目前大多数的看法是密钥存在一定的循环周期,只要该周期足够长,也会有足够好的安全性和保密性。
(2)非对称加密
非对称加密算法于1976年提出,用于在不安全的媒体上解决信息公开传送和密钥管理的问题。它将一般的密钥分为加密密钥和解密密钥,也就是我们常说的公钥和私钥。公钥私钥一一对应,由公钥加密的密文,必须使用与公钥配对的私钥才可以解密。如下图所示,甲乙之间使用非对称加密的方式完成了重要信息的安全传输。
- 乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。
- 得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。
- 乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。
在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文;同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。
(3)单向散列函数
单向散列函数又称为单向Hash函数、杂凑函数。它有一个输入和一个输出,输入称为消息,输出称为散列值(也称为消息摘要)。单向散列函数可以把任意长度的输入串变化成固定长的输出串,也就是可以根据消息的内容计算出散列值,而散列值就可以用来检查消息的完整性。由于它的单向性,其输出不依赖于输入。已知一个散列值,要找到预映射的值,使它的散列值等于已知的散列值在计算上是不可行的。单向散列函数的安全性使它主要用于完整性效验和提高数字签字的有效性。
2. 区块链钱包“私钥”、“公钥”、“地址”间的智能合约
(1)私钥
通常是由随机算法生成的,说白了,就是一个巨大的随机整数,以太坊钱包的私钥就是64 位的 16 进制哈希值字符串。
(2)助记词
这么多个字节可怎么记呢?所以有的钱包就就出现了助记词,一般情况下,助记词由一些单词组成,只要你记住这些单词,按照顺序在钱包中输入,也能打开钱包,对吧,单词可比一串代码好记多了。
(3)keystore
有的钱包会采取把私钥制作成keystore让用户导出保存,这个Keystore就是私钥经过加密过后的一个文件,需要你自己设置的密码才能打开文件。这样的好处是就算keystore文件被盗,只要你额外设置的密码够长够随机,那么短时间内私钥也不会泄露,有充足的时间转移地址里面的加密货币到其他地址。
(4)公钥
那么,别人要给你转账怎么办呢?但是你肯定不能把私钥告诉别人,对吧,私钥就代表了你对钱包的所有权,这是用密码学来保护的。所以,我们需要另一个东西,就是别人能给你转账,同时又不会泄露你的私钥,我们用到了哈希加密技术,把私钥转换一下得到一串字符,我们把它叫做公钥。哈希加密技术目前的技术水平是不可逆的,也就是说通过公钥几乎不可以倒推出来私钥,所以可以认为这种方法比较安全。一般情况,我们转账都用一个收币地址,这是通过公钥转化过来的,是公钥的缩减版本,公钥和收币地址之间是可以相互转换的。
3. 钱包的单向、不可逆特性
钱包生成私钥,通过椭圆曲线算法可以从私钥计算得到公钥。注意:它是单向的,不可逆的。
下图可知私钥是可以生成公钥,公钥可以生成比特币地址的,相反则不行,因为比特币是由一个不可逆的算法完成这个流程的。所以,我们可以放心的把钱包地址给别人看而不用担心自己财产的丢失。但如果你的私钥泄露,那别人就有可能复制一份跟你一摸一样的钱包,你的资产就有安全问题了。其实,加密货币保管只需要一个“私钥”,谁掌握了私钥,就掌握了你的钱包财产,所以你的私钥一定要保管好。
三. 你得先有个钱包,才叫入了区块链的门
不从技术和系统层面谈各类钱包风险,重点强调大家一定要保护好区块链的私钥。秘钥绝不能丢,也不要轻易告诉别人,因为它代表了钱包的所有权和对它的操作权,不同于银行卡的密码,忘记了还可以先冻结凭身份证去重置。在区块链的世界里,一旦你弄丢私人秘钥,钱包就永远也不再属于你了,没有中心机构可以追溯,也没有法律可以对你进行保护。
1. 万一钱包坏了,网站倒闭怎么办?
钱包是密钥的管理工具, 他只包含密钥而不是确切的某一个代币。钱包中包含成对的私钥和公钥。用户用私钥来签名交易, 从而证明该用户拥有交易的输出权;而输出的交易信息则存储在区块链中,所以钱包是在你自己管理的。
2. 钱包如何防盗?
防盗的实质是防止我们的私钥泄露,或被黑客盗取。而在防盗策略上,Keystore 和助记词(或者是明文私钥)的侧重点有所不同。由于 Keystore 是被加密过后的私钥,并且其内容都是加密过后的信息,采取抄写这种备份策略不是很科学。所以可以存储在自己的 U 盘里,尽量不要存储在线上或者云端,存储 Keystore 时要和密码分开存储,这样即使被黑客盗取 Keystore,也很难破解。
在存储助记词时,就需要更加谨慎一些。因为助记词毫无安全性可言, 一旦被第三方窃取,那么你的资产将面临巨大的威胁,所以建议采用物理介质备份,抄写在一张纸上,并且妥善保管;抄写时要注意准确性,也要注意长久保存,不要出现字迹看不清楚等问题。
**3. 钱包密码 (Keystore 密码) 忘记了怎么办? **
如果备份了助记词,使用助记词从新导入钱包,可以重置密码(重置密码后,记得重新备份 keystore);若没有备份助记词是无法重置密码 ,只能仔细回忆钱包创建时所设置的密码,因为区块链钱包是无法提供找回密码的服务。
**4. 导入助记词后, 发现生成的钱包地址和之前的地址不一样,是怎么回事? **
如果你导入助记词,发现生成的钱包地址是一个新的钱包地址(和之前预期的钱包地址不一致) 那么可能由于如下情况, 需要逐一排查:
首先需要验证一下,你之前备份你的助记词是否错误了。比如蚂蚁钱包(AntWallet)可以管理多个钱包地址,假设你有 A、B 两个钱包地址在蚂蚁钱包里,你想备份 A 钱包,结果却是记住了 B 钱包的助记词,那么就是你备份错误。
其次需要确定是不是你助记词抄写错误了, 如果抄写错误,也有极小的可能生成新的钱包地址,验证的方法是使用 MyEtherWallet,看看生成的钱包地址和蚂蚁钱包上的地址是否一致。
PS:所以在这里我们建议备份的时候,要双重备份,即 Keystore、助记词都要备份。并且在备份之后,要验证备份的是否正确,即将备份的助记词重新导入钱包,看看生成的钱包地址和备份的钱包地址是否一致。
5. 怎么防丢失?
丢失钱包基本有三种情况:
(1)用户在删除钱包时,没有备份钱包
我们建议用户在创建完钱包之后,立即备份钱包,采用双重备份和多次备份两种策略。双重备份是指 Keystore 备份和助记词备份,多次备份是指在备份完 Keystore 和助记词之后,要验证备份是否正确,反复验证,确认无误即可。
(2)用户忘记了 Keystore 密码
我们建议用户使用强度较高的密码加密 Keystore,这个密码最好是用户随机生成,不常用的密码。这样提高了 Keystore 的安全性,但是也对用户保管密码带来了巨大的挑战,我们建议用户使用 1password 或者 lastpass 等密码管理工具,妥善保管好自己的密码,以防遗忘。