主页 > imtoken国内怎么下 > 分层确定性钱包

分层确定性钱包

imtoken国内怎么下 2023-04-20 05:50:45

2019年独角兽企业招聘Python工程师标准>>>

hot3.png

放一个我写的以太坊bip44的实现:

根据bip32协议,master key(master private key)是由一个种子值生成的,步骤如下:

BIP44中定义的标准密钥推导结构:

Master key / Purpose Code(44) / Coin Code / Account Index / Change Address(Boolean) / Child Index

主私钥

先生成一个512位的伪随机数,然后对这个伪随机数使用HMAC-SHA512哈希算法得到一个512位的值。 左边256位为主私钥,右边256位作为链码,用于密钥的推导。

派生过程

为了派生子私钥,主私钥、链码和索引被散列成一个新的512位值,然后这个值的左边是子私钥,右边是子链代码。

比特币钱包导出私钥_比特币私钥在哪_从比特币私钥恢复钱包

硬化派生

上述过程实际上是加固推导,即私钥参与的推导称为加固推导。

非强化推导

另一种推导是涉及公钥的推导。 这是过程的描述:

从私钥中可以得到公钥,然后将公钥、链码和索引散列成一个新的512位值,然后这个值的左边是子公钥,右边是子链码。

这种推导的好处是安全,无需私钥即可生成所需的n个地址。

路径上的小引号

这是 Hardened 导数的符号

BIP链接

比特币钱包导出私钥_比特币私钥在哪_从比特币私钥恢复钱包

BIP-0032:

本文档描述了分层确定性钱包(或“HD 钱包”):可以部分或全部与不同系统共享的钱包,每个系统都可以或不可以花费硬币。

BIP-0039:

该 BIP 描述了助记码或助记句——一组易于记忆的单词——用于生成确定性钱包的实现。

BIP-0044:

该 BIP 基于 BIP-0032(从现在开始为 BIP32)中描述的算法和 BIP-0043(从现在开始为 BIP43)中描述的目的方案,为确定性钱包定义了一个逻辑层次结构。

---------------------------------------------- --------------------------

分层确定性钱包

钱包是发送和接收令牌的客户端,就像我们使用邮箱来管理我们的电子邮件一样,我们需要一个客户端来管理我们的令牌。 钱包的本质是一种保管私钥的工具。 私钥是一长串数字和字母。 该字符串赋予您将数字货币发送给他人的权利。 也就是说比特币钱包导出私钥,无论谁知道你的私钥,都可以控制你的数字货币。 私钥还用于生成您的令牌地址——它就像一个电子邮件地址,如果您知道该地址,您只能将令牌发送给其他人。 然而,虽然代币地址是由私钥生成的,但无法通过查看数字货币地址来确定私钥是什么。 总而言之,钱包的核心功能就是私钥的创建、存储和使用。

从比特币私钥恢复钱包_比特币钱包导出私钥_比特币私钥在哪

钱包类型

不同的私钥生成方式也对应不同的钱包结构,通常可以分为非确定性钱包和确定性钱包。 最早的比特币客户端(中本聪客户端)是一个非确定性钱包,它是随机生成的私钥的集合。 客户端会预先生成100个随机私钥,每个私钥只使用一次。 一笔交易使用一个地址的概念是由中本聪提出的。 如果交易频繁,可能会用完私钥,然后会生成一批私钥,所以每次完成100笔交易后,一定要备份新的wallet.dat文件,否则可能会丢失资产。 这样的钱包很难管理和备份。 如果生成许多私钥,则必须保留所有私钥的副本。 这意味着必须定期备份钱包。 每个私钥都必须备份,否则一旦钱包无法访问,钱包将无法找回。

确定性钱包不需要为每次传输进行备份。 确定性钱包的私钥是通过对种子进行单向哈希运算生成的,种子是由随机数生成器生成的一串随机数。 在确定性钱包中,只要有这个种子,就可以找回所有的私钥。 只备份种子就相当于备份了你所有的钱包,所以这个种子也很重要,一定要备份到安全的地方。

什么是HD钱包

HD钱包是目前常用的确定性钱包。 说到HD钱包,大家可能首先想到的是硬件钱包(Hardware Wallet)。 其实这里的HD是Hierarchical Deterministic(分层确定性)的缩写。 所谓分层,就是一个大公司可以为每个子部门生成不同的私钥,子部门也可以管理下子部门的私钥。 每个部门都可以看到所有子部门的币,也可以在里面消费这个币。 也可以只把某个级别的公钥给会计,这样他就可以看到这个部门和子部门的收支记录,但是不能花里面的钱比特币钱包导出私钥,让财务管理更加方便的。

早在 BIP32 提案中就提出了层次决定论的概念。 根据比特币核心开发者 Gregory Maxwell 的原始描述和讨论,Pieter Wuille 于 2012 年 2 月 11 日编译并提交了 BIP32,直到 2016 年 6 月 15 日才被合并到比特币核心中。目前,几乎所有的钱包服务提供商都集成了协议。 BIP32是HD钱包的核心提案。 通过种子生成主私钥,进而衍生出大量的子私钥和地址。 但是种子是一长串随机数,不利于记录,所以我们用一种算法将种子转换成一串助记词(Mnemonic),方便记录。 这就是BIP39,扩展了HD钱包种子生成算法。 BIP43在BIP32树结构中增加了子索引标识purpose的扩展名m/purpose'/*。 BIP44在BIP43和BIP32的基础上增加了多种币种,通过HD钱包衍生出多个地址,可以同时管理主网和测试网的比特币。 BIP44提出了5层路径建议,如下:

m /purpose'/coin_type'/account'/change/address_index,

BIP44的规则让HD钱包非常强大。 用户只需要保存一个种子,就可以控制所有账户的所有币种和钱包。

Bitcoin HD 钱包是如何生成的?

比特币钱包导出私钥_比特币私钥在哪_从比特币私钥恢复钱包

11154529_Rhll.jpg

1.生成助记词(见BIP39)

2.使用PBKDF2将助记词转化为种子(参见BIP39)

3.种子用于使用HMAC-SHA512生成根私钥(参见BIP32)

4. 从这个根私钥,导出子私钥(见BIP32),其中节点布局由BIP44设置

可见BIP39生成助记词的过程非常重要。 大家一定很关心BIP39的安全性。 如果一个HD钱包的助记词是12个词,那么总共有2048个词的可能。 如何计算随机生成的助记词 所有的可能性都是一个排列问题,根据公式:n!/( n - r )!, 即2048!/(2048-12)! = 5.2715379713014884760003093175282 e+39。

我们可以打个比方,地球上的沙子数量大约是1后面跟18个零。 如果每秒可以生成一百万个助记词,那么一年可以生成1000000*60*60*24*365=3.1536e+13,遍历所有助记词大约需要1.6715937e+26年。 这个多少钱? 哪年?

以太坊目前的解决方案

以太坊在 EIP84 中讨论是否遵循 BIP32 和 BIP44。 社区中提出了许多有趣的意见。 比特币基于 UTXO,因此可以使用 HD 钱包(BIP32)为每笔交易分配一个新地址,以保护您的隐私。 但是,以太坊是基于账户的,每个账户都有一个地址,BIP是比特币的一个提案,而比特币的数据结构设计是围绕着变地址的思想进行的,BIP的一些提案可能不是适用于以太坊。 以太坊的模型不同于比特币 UTXO。 以太坊转账不能更改地址。 如果在以太坊上实现 UTXO,用户还必须签署两笔交易,将余额的一部分发送到一个地址,将余额的一部分发送到第二个地址——这会增加一倍的成本,而且第二笔交易可能不在同一个区块中,当然以太坊也可以通过智能合约的方式来实现。 另外,以太坊目前的官方钱包是KDF形式,也就是我们常说的Keystore形式。

比特币钱包导出私钥_比特币私钥在哪_从比特币私钥恢复钱包

在EIP85的讨论中,以太坊社区似乎默认采用了BIP32。 先说说BIP32的好处

1.使用时间长,社区审核通过

2.已经有多种编程语言的实现

3.使用多个硬件钱包

4. 一个钱包可以同时支持比特币和以太币

EIP85建议高清路径为:m/44'/60'/a'/0/n

这里a代表账号,n是第n个生成的地址,60在SLIP44提案中是临时的,因为BIP44只定义了0-31。

目前已知的以太坊客户端的具体实现:

最后

使用单一地址钱包,您的所有交易都将与单一地址相关联。 由于区块链中的所有交易记录都是公开的,任何人都可以看到每个地址的所有交易记录和账户余额。 HD Wallet 能够在发送和接收资金时生成新地址,从而大大提高了隐私性,使您的交易难以追踪。 当然,匿名是相对的,现在我们也有了隐私性更好的零知识证明算法。 HD钱包是一种生成不可重复使用地址的方法,记住一个种子可以访问所有地址的钱,而不需要为每个地址备份私钥。 当然,HD钱包不仅仅适用于比特币。 HD钱包可以让一个钱包同时管理多种资产成为可能。

工具