ETH钱包助记词、私钥、Keystore创建原理

image

作者:TLeung
链接:https://www.jianshu.com/p/84c7dcf3098a

助记词

助记词拥有钱包的所有权,可以通过助记词随意转移该钱包下的资产而无需密码。助记词可以生成很多子钱包,目前大部分以太坊钱包做法是默认把助记词生成的第一个地址作为默认地址,实际助记词是可以生成很多地址。

下面是一个助记词工具网站,可以输入助记词查看所有生成的地址。

https://iancoleman.io/bip39/#english

BIP32

定义 Hierarchical Deterministic wallet (简称 “HD Wallet”中文为分层确定性钱包),是一个系统可以从单一个 seed 产生一树状结构储存多组 keypairs(私钥和公钥)。好处是可以方便的备份、转移到其他相容装置(因为都只需要 seed),以及分层的权限控制等。

BIP39

将 seed 用方便记忆和书写的单字表示。业界一般使用 12 、15、18、21个单字组成的单词,,中文称为助记词或助记码。

BIP44

基于 BIP32 的系统,赋予树状结构中的各层特殊的意义。让同一个 seed 可以支援多币种、多帐户等。

可以通过特定的路径解析不同币种钱包,

btc一般是 m/44'/0'/0'/0eth一般是 m/44'/60'/0'/0

附详细资料:

https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki

https://github.com/satoshilabs/slips/blob/master/slip-0044.md

以上是钱包生成几种方法的简单介绍,下面是创建钱包的一些业务流程

Keyshtore

Keystore不是私钥,常见于以太坊钱包,一般你创建以太坊钱包后,会让你备份Keystore, 它是一串代码,你可以自己保存为文本或者json格式,日后都可以用任何以太坊钱包打开它。Keystore的本质是加密后的私钥,Keystore必须配合你的钱包密码来使用,所以说,光备份了Keystore但忘记了钱包密码也是然并卵。

直接使用以太坊钱包,很少会直接看到自己的私钥,而是让你备份Keystore, 配合钱包密码来使用。即使黑客获取了你的Keystore, 还要破解钱包密码也还是有一定难度的,当然钱包密码也别设太简单。

Keystore可以理解为我们日常中的账号,而解密Keystore的密码是账号的密码。

私钥

私钥的生成方式是完全随机的,随机生成这样的字符串就会有16的64次方种可能。私钥

拥有对应地址钱包的所有权,包括可以随意利用私钥进行资产转移。私钥跟助记词的权限实际是一样的,但是私钥只能控制对应的公钥,助记词可以控制对应下的所有地址。

GAS

GAS 是什么?在什么场景下会用到GAS?

Gas 翻译成中文就是“燃气”,是以太坊世界的燃料,它决定了以太坊网络生态系统的正常运行。

一般在执行转账时需要消耗GAS

Gas 用来衡量执行某些动作需要多少“工作量”,这些“工作量”就是为了执行该动作支付给网络的费用额。通俗理解,Gas 是给矿工的佣金,并以 ETH 支付,无论是交易、执行智能合约并启动 DApps,还是支付数据存储费用,都需要用到 Gas。

Gas由两个部分组成: 限制(Gas limit)和价格(Gas Price)。Gas Limit 是用户愿意为执行某个操作或确认交易支付的最大Gas量(最少21,000)。Gas Price 是 Gwei 的数量,用户愿意花费于每个 Gas 单位的价钱。

当进行每笔交易时,发送人设定Gas Limit 和Gas Price,将 Gas Limit*Gas Price ,就得到了ETH交易佣金的成本。

现在,1Gwei≈0.00000002 ETH,所以佣金最少为0.00000002*21000=0.00042ETH,通常情况下,交易设置的Gas limt 为50000-100000个,总费用为 0.001 ETH - 0.002 ETH。

设置 Gas limint 需要考虑的问题:

不同的操作会产生不同的 Gas 成本。Gas 用完时,矿工将停止执行。如果有剩余 Gas,将立即退还给发起交易的人员或智能合约创建者。

但是,如果用户设置的限制值太低,那么ta的交易被认为是无效的,并且会因为“Gas不足”错误而被取消,并且其中用于计算的 Gas 不会退到账户。所以无论交易是否通过,发送者总需要向矿工支付计算费用。

以上是钱包的基本概念,下面是创建钱包的一些业务流程

image

第一,随机生成128到258位的随机数,我们这里叫做熵;

第二,熵经过一定处理方法,生成助记词;

第三,助记词经过密钥延伸函数PBKDF2,生成种子;

第四,种子经过HMAC-SHA512算法,生成母密钥;

第五,通过CKD(child key derivation)函数,母密钥生成众多子密钥。

第六,利用私钥加密生成Keyshtore

注意:这里有两个坑,助记词中分别可以设置为有密码与无密码,这里提及的密码是把密码传到助记词里,你会发现使用网页钱包https://www.myetherwallet.com/导入助记词输入密码,会生成一些新的地址,并无法查询到你在imtoken上的地址,目前主流钱包的助记词是无密码的,而设置的密码为Keyshtore密码与本地密码。所有助记词在产品设计中有密码与无密码之分,如果发现在其他钱包导入助记词输入密码后找不到原来的地址,请放心,不输入密码即可。

推荐阅读更多精彩内容