主页 > imtoken钱包靓号地址软件 > 【比特币钱包开发1】开发比特币钱包时必须了解的概念

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

imtoken钱包靓号地址软件 2023-10-02 05:11:02

作者:ChainDesk 李旭,ChainDesk 区块链行业分析师,ChainDesk 区块链工程师

ChainDesk 官网:

课程目标

本章是关于理解在比特币钱包开发中非常重要的概念。

了解钱包、账户、地址、公钥、私钥、密码、助记词

了解什么是高清钱包

了解 BIP 协议常见版本的作用

了解Base58在比特币账户中的重要性

一、钱包应用

1.钱包

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

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

2.帐号

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

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

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

3.地址

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

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

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

该地址标记了一个可以向他人披露并被他人用来向您转账的帐号。

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

4.公钥

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

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

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

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

5.私钥

私钥由64位十六进制字符组成,如:0xE4356E49C88C8B7AB370AF7D5C0C54F0261AAA006F6BDE09CD4745CF54E0115A,

私钥必须妥善保管,不得泄露或泄露。拥有私钥就等于拥有了账号的使用权。

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

6.密码

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

7.助记符

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

助记符是私钥的另一种表示形式。

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

8.总结

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

二、高清钱包

这个HD钱包不是Hardware Wallet硬件钱包,这里的HD是分层的

Deterministic的缩写,意思是分层确定性,所以HD钱包的全称是比特币分为确定性钱包。比特币中的钱包是非确定性钱包,BIP32是HD钱包的标准定义,种子推导生成多个私钥。

1.BIP

BIP 是一种协议,它是比特币

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+/

[if !supportLists]·[endif]1

2.Base58 编码

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

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

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

Base58 字符集:

ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz123456789

[if !supportLists]·[endif]1

3.Base58Check

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

首先给数据添加一个版本前缀,用于标识编码后的数据类型。例如,比特币地址以 0 为前缀(十六进制为 0x00).

连续对数据进行两次SHA256哈希算法校验

= SHA256(SHA256(前缀+数据))。

在生成的长度为32字节的哈希值(两次哈希云计算)中,前4字节作为校验和,与第一步生成的数据相加。

将数据编码为 Base58

Base58Check的编码过程如下图。

Base58Check的作用:

既然有Base58编码,0和O,1和l和I就不会再看错了,大整数也转成可读字符串。为什么我们需要 Base58Check?

假设你在程序中输入了一个Base58编码的地址,虽然你没有弄错0和O,1和l和I,但是万一你不小心打错了字符,或者少写一个怎么样特点?你可能会说,没什么大不了的,就是打错字了,不是很常见吗,不能再打一遍吗?但是比特币助记词是什么,当用户向比特币地址转账时,如果输入错误,对方将无法收到资金。更重要的是,资金被发送到一个不存在的比特币地址,因此这些资金永远不会被使用。可以交易,这意味着比特币丢失了。

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

校验和来源于待编码数据的哈希值,因此可用于检测和避免转录和输入中的错误。

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

其实,在比特币交易中,会检查比特币地址是否合法。如果通过Base58Check的比特币地址被比特币钱包程序判断为无效,当然会阻止交易进行,避免资金损失。 .

ChainDesk 是一种学习方式

chaindesk.cn,第一个基于区块链的多阶段脑图分割模型学习社区

独创专业体系,高效是我们的代名词,学你想学,想你所想

欢迎加入区块链部落2群,群聊号:263270946

在这里,找到你的朋友,一起学习和成长