区块链(数字)钱包揭秘
这篇文章会解答你的如下疑惑:
- 什么是区块链钱包
- 什么是热钱包
- 什么是冷钱包
什么是区块链钱包
区块链(数字)钱包是一种管理数字货币的工具,其中包含了私钥
、公钥
、钱包地址
、助记词
、密码
、Keystore
等等概念,生成一个数字钱包就会包含这整套数据,这些数据之间是紧密关联且一一对应的。
flowchart LR; A[数字钱包]--随机生成-->B[私钥] B--椭圆曲线相乘算法-->C[公钥] B<--映射-->E[助记词] B<--解密/加密-->F[Keystore] C--哈希算法-->D[钱包地址]
私钥和公钥
私钥是区块链钱包中最重要的数据,生成了私钥就生成了整个钱包。
上一段文字中提到的所有数据都是通过私钥来生成的,所以拥有一个数字钱包的本质就是拥有私钥。掌握私钥的人才是数字货币的持有者,在去中心化的框架下私钥一旦丢失永远无法找回,里面的资产也随之消失在“以太”中。
私钥和公钥是一个密钥对,这两个数据是成对存在的,公钥是由私钥经算法得到的,并且这个操作不可逆。
类比非对称加密(或者叫公开密钥加密
)的原理,在区块链中公钥一般用来解密数据以验证数字签名,私钥一般是本方用来加密(签名)数据;公钥是可以公开的,私钥是需要绝对保密的。
在区块链钱包中私钥主要有两个用途:
- 通过私钥计算得出钱包其他所有部分数据,比如钱包地址等等
- 给他人转账时要对交易区块进行签名,用私钥签名了的区块,任何人可以用对应的公钥去验证这个签名是否是你的
钱包地址
钱包地址相当于你的银行卡号,是公开用来收钱和转账用的。每个数字钱包管理一种货币,每种数字货币由于其钱包的生成算法不同,其钱包地址的开头不尽相同,比如:
- 1开头的地址,是BTC的传统地址或者叫原始地址。其中包含了创世地址,比如
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
就属于中本聪本人。 - 3开头的地址,是BTC用P2SH脚本生成钱包的地址,目前普遍使用的BTC钱包地址。
- 0x开头的地址,是ETH的钱包地址。
- cosmos开头的地址,是ATOM的钱包地址。
钱包地址由公钥通过哈希计算得出。
助记词
由于私钥过于重要,对私钥的保存是一个非常复杂的过程。
大家公认最重要的一点就是你的私钥不能存储在任何电子设备上,最好记在纸上,甚至大脑里。但是,由于私钥是哈希算法生成的64位字符串,没有任何规律和意义极其难以记忆,甚至第一次抄到纸上都会有很多人抄错,便有了助记词的出现。
助记词是根据映射算法,从助记词词库中的2048个词语中挑出12个词语代替私钥用来辅助记忆。由于这些都是熟悉常用的词语,写错的概率会大大降低而且有了背诵的可能。
助记词和私钥可以互相转换,也并不会影响私钥的安全性,因为这种助记词的组合有${2048}^{12}\approx5.44\times10^{39}$种。
密码和Keystore
常见于ETH钱包中,Keystore文件是由用户设定的密码对私钥加密后得到,所以Keystore加密码就等于私钥。
数字钱包软件在生成私钥后展示给用户,不会存储私钥。原因上面已经提到了,私钥存储在电子设备上是极其危险的。但是在进行转账交易的时候要用到私钥,所以有些区块链钱包会存储一份经密码加密后的私钥在设备中,存储的这个文件就是Keystore。
这个密码是用户设置的,在进行转账交易的时候,可以不用输入私钥或者助记词。只需要输入密码,软件会将存储的Keystore进行解密获得私钥用来完成交易。
这样做既有好处也有坏处。
好处是用户无需输入私钥或者助记词而是用密码代替,在电子设备环境中,任何输入操作都可能成为监听的目标,况且直接输入的私钥和助记词是没有任何保护的,只要被监听盗取且无法修改,你将永远失去你的财产。
坏处是Keystore和密码以及加密算法都是钱包软件实现和保存的,如果钱包软件有问题,或者其所处的系统有问题,就可以把私钥拿到并收集走。
什么是热钱包
数字钱包的底层技术是区块链,区块链是基于一个去中心化的网络,数字钱包的交易就是在区块链上添加区块,这一系列的操作都离不开计算机网络。
数字钱包存储在电子设备上,如果这个电子设备连接了网络或者在钱包存储期间曾经连接过网络,这个钱包就叫热钱包。
什么是冷钱包
冷钱包就是将数字货币进行离线储存的钱包,是不联网的数字钱包。这里的不联网包含从生成该钱包开始到以后永远的任何时间点该电子设备都不能联网。
冷钱包面临网络黑客攻击的防御力非常高,从物理上切断了网络黑客攻击的可能性。还记得上面提到Keystore存储在管理软件中的问题吗?冷钱包由于完全离线,就能完全不用关心它软件的安全性问题。
冷钱包的可行性分析
为什么冷钱包的生成不用联网?为什么冷钱包不用联网也能使用?
要想解答这个问题需要涉及一点区块链的技术原理:
数字货币的交易是区块链技术实现,整个区块链系统中只记录一件事情:交易,并不会维护所谓的银行账户系统。
举个例子,我(钱包地址0x10001
)给张三转账1ETH
,他告诉我他的钱包地址(钱包地址0x123456
)。我的操作本质就是给他的钱包地址转账,转账成功后在区块链上会增加一条记录。形如:
0x10001
->0x123456
1ETH
至于0x123456
是谁?这个地址存不存在?区块链系统不关心,我也不关心(因为是张三告诉我的地址,我也转了钱,这笔交易有记录),只有张三自己会关心
到这里重要的理论依据来了:数字钱包的存在与否只有钱包的拥有者关心,其他方都不关心。那么可以这么说,这个钱包有没有被生成,用什么方式来生成,在什么环境下生成,在哪生成其实整个系统都不关心。
结合上面我对冷钱包的解释,可以看出冷钱包完全符合区块链钱包的定义,所以具有离线属性的冷钱包是可行的区块链钱包。