主页 > imtoken官方苹果下载 > 开发比特币钱包时必须了解的概念

开发比特币钱包时必须了解的概念

imtoken官方苹果下载 2023-01-17 11:05:28

本章内容是了解比特币钱包开发中非常重要的概念,了解钱包、账户、地址、公钥、私钥、密码、助记词

了解什么是高清钱包

p>

了解常见版本 BIP 协议的作用以及 Base58 在比特币账户中的重要性

一、钱包应用

1. 钱包

钱包不是账户,钱包是应用程序,主要用于管理账户、保管私钥、收发代币。

钱包里可以有多个账户,账户也可以导入不同的钱包。

2.帐户

每个帐户都由一对密钥组成:一个公钥和一个私钥。每个帐号对应一个地址。

账户由钱包管理,一个钱包可以包含多个账户。

账户、公钥、私钥和地址在以太坊中是一一对应的,但在一些区块链中,账户、公私钥对、地址不是一一对应的,比如如:EOS。

3.地址

地址的长度为 25 个字节。转成base58编码后为34或35个字符,如:1PFjZSK9GEGoGKt3aTDZU2o7kBC4W815pC。

Base58 是一种类似于 base64 的编码,但去除了视觉上令人困惑的字符,并在地址末尾添加了 4 字节的校验位。

由于公钥有两种形式比特币重要性,一个公钥对应两个地址,两个地址可以用同一个私钥签名。

地址上标有账号,可以透露给别人,让别人给你转账。

地址不是公钥,地址是公钥生成的,公钥是私钥生成的。这两个过程是不可逆的,即不能从地址计算出公钥,也不能从公钥计算出私钥。 .

4.公钥

公钥的压缩格式为33字节,未压缩的格式为65字节。即压缩格式为长度为66位的十六进制,未压缩格式为长度为130位的十六进制字符组成。压缩后的公钥以 0*02/0*03 开头。在比特币的早期,使用的是未压缩的公钥,现在大多数客户端默认使用压缩的公钥。

公钥对账户的交易进行加密。即用公钥对交易进行签名,再用私钥对交易进行验证。

公钥是通过secp256k1椭圆曲线加密算法计算出私钥对应的公钥得到的。

公钥、私钥、地址一一对应,唯一且不可修改。

5.私钥

私钥由长度为64位的十六进制字符组成,例如:0xE4356E49C88C8B7AB370AF7D5C0C54F0261AAA006F6BDE09CD4745CF54E0115A,

私钥必须妥善保管,不能泄露和泄露。拥有私钥就等于拥有账户使用权。

私钥可以从助记词中导出。

6.密码

密码不是私钥,可以修改或重置。在钱包应用中,创建账户时需要设置密码。此密码一般要求不少于 8 个字符。为了安全起见,最好设置一个更复杂的密码。

7.助记符

私钥是16进制字符,长度为64位,不利于记录比特币重要性,便于记忆,而且每个账户对应一个私钥,多个账户有多个私钥,不易管理,所以使用算法将一串随机数转换成12到24个易记单词的字符串,便于记录保存。因此,部分同学得出以下结论:

助记词是私钥的另一种表现形式。

有同学说助记符=私钥,这是不正确的。通过助记词可以获得多个关联的私钥,但是通过其中一个私钥是无法获得助记词的,所以助记词≠私钥。

8.总结

钱包应用程序用于管理多个帐户。私钥和地址也是一一对应的。私钥生成公钥,公钥生成地址,不可逆转。私钥是账户的核心,不能泄露。该地址可以公开用于转账。子账号的介绍会在后面讲解。

二、高清钱包

这个HD钱包不是Hardware Wallet硬件钱包,这里的HD是Hierarchical Deterministic的缩写,意思是层次确定性,所以HD钱包的全称是Bitcoin into a Deterministic wallet。比特币中的钱包是非确定性钱包,BIP32是HD钱包的标准定义,种子推导生成多个私钥。

1. BIP

BIP是protocol,是Bitcoin Improvement Proposals的缩写,意思是比特币的改进提案,用来提出比特币的新功能或改进措施。 BIP协议衍生了很多版本,主要是BIP32、BIP39、BIP44.

BIP32

BIP32是HD钱包的核心提案,通过种子生成主私钥,进而衍生出大量子私钥和地址。种子是一长串随机数。

BIP39

因为种子是一长串随机数,不利于记录,我们用算法把种子转换成12到24字的字符串,方便记录保存,这就是BIP39.扩展了HD钱包种子的生成算法。

BIP44

BIP44是对BIP32和BIP43的多币种补充,提出的层次结构非常全面,可以处理多币种、多账户,每个账户有数百万个地址。

BIP32路径中定义了以下5个级别:m/purpse'/coin_type'/account'/change/address_index

目的:在 BIP43 之后建议将常量设置为 44' 。表示根据 BIP44 规范使用此节点的子树。

Coin_type:硬币,代表一个主节点(种子),可用于无限数量的独立加密货币,如比特币、莱特币或名称币。此级别为每个硬币创建一个单独的子树,避免重复使用其他链上已经存在的地址。开发人员可以为他们的项目注册未使用的号码。币种列表

账户:账户,该级别可以将所有币种放在一个账户中,以设置独立的用户身份,从0开始依次递增。

变化:常数0用于外链,常数1用于内链,外链用于钱包,对外用于收付款。内部链用于钱包外不可见的地址,例如返回交易变更。

Address_index:地址索引,从索引0开始按升序编号。

BIP44的规则让HD钱包非常强大。用户只需要保存一个种子,就可以控制所有币种和所有账户的钱包。所以BIP39生成的助记词非常重要,一定要安全、妥当。如果留着,会不会裂开?如果一个HD钱包的助记词是12个单词,总共有2048个单词的可能性,那么随机生成的助记词所有的可能性大约是5e+39. 所以几乎不可能破解。

2.种子

种子可以衍生生成多个私钥,所以种子是钱包账户中最关键的数据,比私钥的级别更高,所以备份一个种子会备份所有关联的私钥. HD 钱包包含以树状结构派生的密钥,因此一个父密钥可以派生一系列子密钥,每个子密钥都可以派生一系列无限深度的子密钥。

开发比特币钱包不得不了解的概念

三、Base58 编码

1.Base64 编码

Base64是一种基于64个可打印字符来表示二进制数据的方式

Base64 使用 26 个小写字母、26 个大写字母、10 个数字和两个符号(如“+”和“/”),用于在电子邮件等基于文本的媒体中传输二进制数据。

Base64 通常用于对电子邮件中的附件进行编码。

Base64 字符集:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

2.Base58 编码

Base58是比特币中使用的一种基于文本的二进制编码格式,使用的一种独特的编码方式,主要用于生成比特币钱包地址。

相对于Base64.Base58不使用数字“0”、大写“O”、大写“I”和小写“l”,以及“+”和“/”符号。目的是去除混淆字符。

这种编码格式不仅实现了数据压缩,保持了易读性,还具有错误诊断功能。

Base58 字符集:ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz123456789

3.Base58Check

Base58Check 是比特币中常用的一种 Base58 编码格式,它添加了错误检查验证码来检查数据是否存在转录错误。在 Base58Check 中,在数据中添加了一个名为“版本字节”的前缀,用于指定需要编码的数据类型。

首先给数据添加一个版本前缀,这个前缀用来标识编码后的数据类型。比如比特币地址的前缀是0(十六进制是0*00).

对数据校验和执行两次连续的 SHA256 哈希 = SHA256(SHA256(prefix+data ))。

在生成的长度为32字节的hash值中(两次hash云计算),取前4个字节作为校验和,加到第一步的数据中,生成后的数据。

数据采用Base58编码

Base58Check的编码过程如下。

开发比特币钱包不得不了解的概念

Base58Check的作用:既然有Base58编码,0和O,1和l和I就不能再看错了,大整数可以转成可读字符串。为什么需要 Base58Check?

假设你在程序中输入了一个Base58编码的地址,虽然0和O,1和l和I都不会出错,但是万一你不小心输入了错误的字符,或者更少的时候会发生什么你再写一个字符?你可能会说,没什么大不了的,只是字符打错了,这不是很常见吗,你不能重新输入一下吗?

但是当用户给一个比特币地址转账时,如果输入错误,对方将收不到资金。更重要的是,资金被发送到一个根本不存在的比特币地址,因此资金永远不会被交易。换句话说,比特币丢失了。

校验和4字节长,加在待编码数据之后。

校验和来自要编码的数据。因此,它可用于检测和避免转录和输入中的错误。

当使用Base58check编码格式时,程序会计算原始数据的校验和,并与内置的校验和比较,如果不匹配,则说明发生了错误。

其实在比特币交易中,会检查比特币地址是否合法。钱包程序判断为无效,当然会阻止交易继续进行,从而避免资金损失。