区块链与数字货币

数字货币钱包

2018-05-18  本文已影响0人  廖全磊LesterLiao

什么是数字货币钱包

从广义的角度讲,钱包就是一个应用程序,可以用来保存、接受、发送数字货币。可以用来签署交易。

从狭义的角度讲,钱包就是一个用于存储和管理用户密钥的系统。

钱包可以存储用户的私钥,而真正控制数字货币的却是用户私钥。

私钥的保存形式

私钥

通常我们见到的私钥是一个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位的数字地址。这个地址类似于外部账户的公钥。但是合约账户没有对应的私钥。操作合约账户的方式,只能通过合约代码本身(代码缺陷很可能导致合约账户中的资产丢失)。

上一篇 下一篇

猜你喜欢

热点阅读