什么是数字货币钱包
从广义的角度讲,钱包就是一个应用程序,可以用来保存、接受、发送数字货币。可以用来签署交易。
从狭义的角度讲,钱包就是一个用于存储和管理用户密钥的系统。
钱包可以存储用户的私钥,而真正控制数字货币的却是用户私钥。
私钥的保存形式
私钥
通常我们见到的私钥是一个64位的16进制数据
例如:0x1fe8b535adbc2640b03e7310e1ff94316b6a4c9a8c9294a872526f01893180d1
这是一个256位的二进制数据。
keystore
keystore是私钥的一种加密形式。简单点儿说就是 keystore =私钥 + 密码。
以太坊的keystor的格式如下:
{
"address": "734c590690b99e0deee3787cad1b1a0958be89d2",
"crypto": {
"cipher": "aes-128-ctr",
"ciphertext": "b32cd4f8e5da640d73932d56c75a4efd6696cfafdbfb262bc94e8e01fda6ad87",
"cipherparams": {
"iv": "0b9cd5b3ad049b7200d9feb041f2aa78"
},
"kdf": "scrypt",
"kdfparams": {
"dklen": 32,
"n": 262144,
"p": 1,
"r": 8,
"salt": "b23ba81017d3062f3a6fe66c96f81bcd1af8291f5909d3f27cf431f80a8c73b5"
},
"mac": "c17395e8c7566054f904013763d9cdc57cbd5dd3c4705800b6bb1b9da6236198"
},
"id": "58701b58-a564-4dea-87fd-a3de6b6f5dfa",
"version": 3
}
助记词
助记词是私钥的一种便记形式,通过12个助记词按照一定的算法,便可以还原出私钥。简单说就是:
助记词=私钥。
助记词格式如下:
wolf juice proud gown wool unfair wall cliff insect more detail hub
钱包分类
非确定性钱包
通过随机算法生成的一个随机秘钥。秘钥丢失将无法找回,与秘钥绑定的资产也将无法支配。所以,非确定性秘钥必须备份。备份也建议采用如上keystore的形式进行保存。keystore比起直接保存私钥会更安全(前提是必须记住密码)。
确定性钱包(HD钱包)
确定性钱包就是通过一个seed(主私钥)派生出一系列私钥。我们只需要备份主私钥,其它私钥均可以通过主私钥进行恢复。
私钥生成如图所示:
通过图示很容易发现,私钥派生的时候有层级关系。对于这个层级关系我们引入一个概念“HD衍生路径”。
比如:m/44’/0’/0 表示,通过seed生成的Master Key 然后生成第一级取第45个私钥生成第二级取第1个私钥生成第三级取第1个私钥,最后的到的私钥就是这个路径对应的私钥(注意index 从 0 开始)。
seed(主私钥)也可以转换成助记词进行更方便记忆。
钱包中私钥与公钥关系
每个私钥通过椭圆加密算法均可以得到一个私钥。私钥可以生成公钥,但是公钥不能反推出私钥。通过私钥加密的数据公钥可以解开。通过公钥加密的数据也只能私钥才能解开。
所有的数字货币均与公钥绑定。我们可以通过私钥签名的方式去交易数字货币(签名后对应公钥能解开则可以证明其身份)。
在HD钱包中,主私钥对应一个主公钥。派生出来的私钥均有对应的公钥。
以太坊账户
外部账户
就是以上生成一个公私钥对。公钥绑定数据,私钥通过签名的方式去操作数据。
合约账户
发布智能合约,也会生成一个256位的数字地址。这个地址类似于外部账户的公钥。但是合约账户没有对应的私钥。操作合约账户的方式,只能通过合约代码本身(代码缺陷很可能导致合约账户中的资产丢失)。