区块链网站|NFTS 比特币地址 《精通比特币》第四章“钥匙、地址、钱包”核心原则解读

《精通比特币》第四章“钥匙、地址、钱包”核心原则解读

广告位

《精通比特币》第四章“密钥、地址、钱包”核心原理解读

通过本章的学习,你可以熟悉钱包的原理以及私钥、公钥、比特币地址和钱包的关系。本章可以为产品和技术人员在设计和开发数字钱包时提供参考。

阅读时长:约15分钟

4.1私钥、公钥、地址和钱包之间的关系

钱包:钱包是私钥的容器。钱包只包含私钥,不包含比特币。Wallet定义了一组生成、管理和签署私钥的规则。

私钥:用于签署交易。钱包由随机熵源生成,或者钱包可以导入已有的私钥。

公钥:由私钥通过特定的椭圆曲线函数生成。公钥可以从私钥推导出来,但是从公钥计算出私钥是很困难的。

比特币地址:由公钥通过单向双哈希函数生成,以Base58check编码呈现。比特币地址以数字1开头。

了解了以上四个概念的关系后,下面详细讲解私钥、公钥、地址的生成原理以及钱包的分类。

4.2私钥的生成原则

私钥只是一个随机选择的数字,是一个二进制的256位数字。数据的随机性来自于密码学中安全的随机数生成器,即从一堆随机源数据中取出一串随机字节,通过SHA算法转换成256位二进制数,然后验证所选随机数是否在1到n-1之间(其中N为常数,略小于2 ^ 256)。如果计算结果小于n-1,则随机数合适;否则,需要重新选择随机数,直到选择的随机数满足验证条件。

当然,不同的钱包可能会选择不同的随机数。

私钥的表示基于

私钥的常见表达形式有十六进制、WIF格式和WIF压缩格式。

十六进制格式的私钥是将原来的256位二进制数据转换成64位十六进制数据。

WIF(Wallet Import Format,钱包导入格式),即钱包导入格式,是指钱包导入新钱包时用来标识私钥的格式,所以当钱包导出私钥时,会生成该格式的私钥。WIF格式的私钥从5开始,代表这种格式的私钥需要生成未压缩格式的公钥。

WIF压缩,即钱包导入压缩格式。这个私钥的格式是以K或l开头的,将私钥导入钱包后,意味着钱包会使用这个格式的私钥生成压缩的公钥,从而正确解析比特币地址。

4.3公钥的生成原则

通过椭圆曲线函数可以计算出公钥,这是一个不可逆的过程:k=k * g .其中k是私钥,g是椭圆曲线上定义的初始不变点,k是公钥。

比特币的椭圆曲线方程:y 2=x 3 7。这条曲线定义在素数阶P的有限域上,可以想象为在一个巨大的网格上定义了一系列复杂的散乱点。公钥的计算使用椭圆曲线的加法和乘法规则:k * g=g g … g (k次),椭圆曲线上有两个点要相加,相加的点之和等于椭圆曲线在另一个点相交然后在X轴上的反射点。那么G的值G就相当于与从g点相切后的曲线的交点,及其在X轴上的反射点2G,如下图所示:

一张图片的椭圆曲线加同点,图片来自网络。

公钥K定义为反射点的坐标K=(x,y)。

公钥的表示基于

公钥是根据椭圆曲线计算的坐标(x,y)。知道了x的值,就可以根据函数求出y的对应值。如果X和Y同时用256位二进制存储,占用的空间会翻倍,存储空间浪费。因此,公钥的表示格式分为未压缩格式和压缩格式。

未压缩公钥是指用X和y的值拼接生成的公钥,未压缩公钥以前缀04开头。

压缩的公钥意味着生成的公钥只包含x的值。压缩的公钥以前缀02或03开始。如上面添加椭圆曲线的点的图示所示,相同的横坐标X可以对应于两个Y值。因为Y只在有限域内为正,所以这里的两个Y值分别对应奇数和偶数。前缀02开头表示Y是偶数,前缀03开头表示Y是奇数。

私钥生成压缩公钥时,私钥后面会拼接01,表示私钥来自较新的钱包,只能用来生成压缩公钥。对于私钥本身,它是在不改变原始值的情况下被压缩的。这样做的目的是给导入私钥的钱包一个信号:是使用压缩的公钥和比特币地址扫描区块链,还是使用未压缩的公钥和比特币地址。

4.4比特币地址

比特币地址在对公钥进行双重哈希得到公钥哈希后,以base 58校验码的形式显示。比特币地址以1开头。

Base64编码是一种将任何长的输入字符串转换成特定长度的数字和字母的表示方法。其编码字符使用26个小写字母、26个大写字母、10个数字和两个符号和/.Base58编码摒弃了一些容易被误读和混淆的字符,不包含数字0、小写o、大写o、小写I、大写I和/或两个字符。Base58校验码采用Base58码,增加了校验功能。

最终的比特币地址由版本前缀、公钥哈希和校验码组成。版本前缀用于标识编码后获得的比特币地址。比如采用Base58check编码时,比特币地址前缀为0,私钥编码前缀为128;公钥hash,即通过SHA256和RIPEMD计算原始公钥得到的20字节值;通过两次SHA256,在前缀与公钥拼接和散列之后,取计算值的前4个字节来获得校验码。

比特币地址生成原理如下图所示:

图2比特币地址的生成原理

使用Base58check编码格式时,编码软件会计算原始数据的校验码,并与结果数据中的校验码进行比较。如果两者不匹配,说明有错误,所以这个地址无效。

4.5比特币钱包的分类

钱包是管理私钥的容器。比特币钱包分为非确定性钱包(随机钱包)和确定性钱包(种子钱包)。

非确定性钱包:N个私钥由钱包事先随机生成。一旦使用了每个私钥,就需要单独备份。当有足够多的密钥时,很难管理、备份和导入到新的钱包中,所以这个钱包不方便使用,正在被确定性钱包取代。

确定性钱包:又称种子钱包,顾名思义,通过一个种子就可以推出所有的密钥。所以在备份密钥或者导入新钱包的时候,只需要备份种子密钥,剩下的密钥就可以按照既定的规则计算了。常见的确定性钱包包括助记码词汇和层次的确定性钱包。

记忆词汇

助记词汇是确定性钱包的随机数,用英语单词序列的种子来表示。单词的顺序就是钱包的备份,也就是对应的一组私钥。助记词可以让用户更容易复制钱包。与随机数相比,它们容易被正确读取和复制。

创建助记符和种子的过程如下:

1.创建一个128到256位的随机序列;

2.用SHA256散列随机顺序,取前几位作为校验和。所选的随机数有不同的位数,校验和中的字符数也不同。

3.在随机序列后拼接校验和。

4.将拼接后的值按顺序分成11个不同的集合,用这些集合对应一个预定义的2048字词典。

5.取出相应的单词,依次生成一个12到24个单词的助记码。

分级确定性钱包(HD钱包)

分层确定性钱包是从单个种子生成主密钥,然后以树形结构从主密钥派生出子密钥,子密钥也可以通过规则派生出子密钥。以此类推,一个种子可以派生出无限个子密钥,只需要备份种子就可以备份钱包中的所有密钥。

从种子中导出主密钥的过程:

如上图所示,随机数生成种子后,通过单向哈希函数输出一个512位的值,其中左256位作为主密钥,右256位作为主链码。

从父私钥派生子私钥的过程:

如上图所示,当父私钥派生子私钥时,首先由父私钥生成父公钥,然后通过单向哈希函数计算父公钥、父链码和索引号,输出一个512位的值,左边256位对应子密钥,右边256位对应子链码。其中索引号用于识别对应于子私钥的位置。

4.6总结

通过本章的学习,我们可以熟悉私钥、公钥和比特币地址背后的原理,同时了解钱包的本质和管理私钥的方式。本章可以为产品和技术人员在设计和开发数字钱包时提供参考。

本文首发于公众号“蒂娜说”。

广告位
本文来自网络,不代表区块链网站|NFTS立场,转载请注明出处:https://www.qklwz.com/btb/qianbao/13348.html

作者: 八仙渡海口

上一篇
下一篇

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部