主页 > imtoken官网下载2.0 > 比特币钱包及密钥管理知识

比特币钱包及密钥管理知识

imtoken官网下载2.0 2023-10-12 05:12:34

基础知识

这部分主要介绍开发钱包前需要了解的几个知识点。

比特币私钥、公钥和地址的关系

比特币使用椭圆曲线密码学作为公钥和私钥的核心算法(使用的椭圆曲线是Secp256k1),私钥本质上是一个很大的随机数,它被保密存储,用于签署交易以证明UTXO的所有权,公钥是椭圆曲线上一点的坐标,是根据私钥和它所在的曲线计算出来的,这个计算是不可逆的,也就是没有计算方法从公钥计算私钥,通常这里的私钥是32Byte,公钥是33Byte(压缩公钥格式),比特币地址本质上就是公钥的hash结果;这里使用的hash就是sha256 +成熟md160.,也就是常说的双重hash,或者hash 160.地址通常表示为hash结果的Base58Check编码。

比特币钱包及其功能到底是什么?

比特币钱包是存储和使用比特币的工具。定义简单明了。只是每个人都很复杂。

比特币钱包是电脑或手机客户端。安装完成后,客户端会自动生成用户的比特币钱包文件,存储用户的比特币。信息,包括支付地址和私钥。这个钱包文件就是用户的钱包。例如,如果您从 OKCoin 购买比特币,您可以将比特币转移到您自己的付款地址。网络确认后,比特币将存储在用户的钱包中。

简而言之,比特币钱包有两个基本功能:一是安全存储比特币私钥,二是发送和接收比特币。

实施钱包密钥管理的几个标准

现阶段,对于钱包的发展,有几个事实上的标准需要遵循和执行,而市面上现有的钱包都是执行这些标准的。一个标准

BIP-0032:分层确定性钱包(HD Wallet)规范;

BIP-0039:私钥与助记码转换规范;

BIP-0043:多用途高清钱包规范;

BIP-0044:多账户多币种高清钱包规范;

这些规范基本上所有现有的钱包都会实现,其中BIP-0032、BIP-0038、BIP-0039是相互独立的,处于不同的钱包实现过程中; BIP-0043是在BIP-0032规范的基础上制定的,BIP-0044在BIP-0043的基础上制定了更详细的规范; BIP-0044与BIP-0 045、BIP-0047、BIP-0049等规格同类型;

3. BIP-0032

比特币建议的同一个地址使用一次。相比普通的私钥->公钥->地址关系,钱包需要维护多个地址,所以钱包可以做两个方向。一是存储多个独立的私钥。这对应多个地址,是一个非确定性的钱包;另一种思路是,一个种子(Seed)可以扩展生成多个私钥,每个私钥都有自己对应的公钥和地址,具有确定性。钱包; BIP-0032 指定了具有层的确定性钱包规范。

使用非确定性钱包有两个缺点。每个地址对应一个私钥,需要备份的私钥很多。丢失其中一个私钥也将丢失那部分比特币;使用过程中不断产生,需要时时备份。

HD钱包的种子本质上是一个随机数,或者说是其他规范生成的数字,最常见的是通过BIP-0039的助记词生成;

一、种子 由HMAC-SHA512(Key=”Bitcoin seed”, Data=Seed)哈希函数生成一个64Byte的主密钥(Key是某个字符串“Bitcoin seed”),主密钥分为两个32Byte的部分,左边作为主私钥,右边作为派生子密钥,称为链码。左侧的主私钥可以计算出公钥,从而计算出正常使用的地址;主密钥和链码,结合子密钥索引(索引为4Byte序列号),通过HMAC-SHA512推导出子密钥,主要分为三种:

(1).父级私钥->子级私钥

这里还是使用HMAC-SHA512哈希函数,父级的ChainCode作为哈希函数的key,父级私钥计算出来的公钥(33Byte)和索引作为父级的Data哈希函数。哈希函数还生成一个 64Byte 的子密钥,该子密钥也分为 32Byte 的两部分。右边的ChainCode用于从子链中衍生出自己的子链;对父私钥进行数字添加,得到子私钥;这里,子私钥有一条椭圆曲线,并检查总和是否为零;如果验证通过,则为有效的子私钥,如果不合法,则跳过当前私钥。索引。

(2).父公钥->子公钥

这里的HMAC-SHA512的计算和(1)中一样,只是这里父公钥直接参与计算,而不是来自私钥;同样的hash函数分为两部分,右边的ChainCode,左边的32Byte通过椭圆曲线计算公钥,父公钥通过椭圆曲线的点坐标相加得到子公钥;

所以在使用中,在不安全的环境中,需要的孩子的公钥只能通过父母的公钥和链码来导出。不需要参与私钥;这里要明白一点,得到的子公钥在使用中需要私钥解密,通过(1)中相同的索引,计算得到的子私钥和这里计算的子级公钥是一样的公私钥对;因为这里的椭圆曲线是一个交换群,满足交换律和结合律,而椭圆曲线中的私钥计算公钥是一个乘法(PubKey = PrevKey * P,P为特定椭圆曲线上的常数),所以这里满足ParentPrevKey * P + LeftBy tes * P = (ParentPrevKey + LeftBytes) * P,其中LeftBytes * P是左边32Byte的椭圆曲线计算出来的公钥;

(3).父私钥–>子公钥

父私钥有两种方式获取子公钥。一种方式是先通过(1),导出子私钥,再计算子公钥。另一种方式是先计算父公钥,再通过(< @2);

增强派生

父级公钥和链码统称为扩展公钥。在不安全的环境中一个比特币对应一个密钥吗,子公钥是派生出来的,但是一旦子私钥泄露一个比特币对应一个密钥吗,扩展公钥中的链码就可以派生出它所有的子私钥。另外,子私钥和父链码存在推断父私钥的风险,因此引入了增强派生的概念。

增强派生只能从父私钥派生出子私钥得到子公钥,而不能进行如上(2),具体派生过程和(HMAC-SHA512 1) 中略有不同,与 (1) 中的父私钥计算得到的公钥(33Byte)不同,增强导数为0x00,使得1Byte 拼出私钥和索引为Data,其他推导步骤相同。增强推导不会将父链码暴露在不安全的环境中,因此比普通推导更安全。

子键的索引号和路径表示

索引的取值范围是2^32,其中前2^31表示正态推导,通常表示为索引号;在序列号后添加撇号以表示增强的导数。比如0x80000000就是一阶增强导数的序号,通常表示为0',在钱包里有i'=2^31+i这样的关系。

Sub 键的路径由索引除以/表示;前缀分为m和M,m代表派生的子私钥,M代表派生的子公钥。例如,m/5/4'/0代表子私钥m/5/4'是第0个普通派生私钥,m/5/4'是第4个增强派生子私钥私钥m/5,m/5是第5个普通主私钥派生的子私钥。

文章转载:eos柚子币-EOS币价格,今日EOS币实时行情走势EOS实时行情资讯站