Skip to content

Commit 8825b53

Browse files
committed
finish crypto chapter
1 parent 3cdaa76 commit 8825b53

File tree

9 files changed

+176
-28
lines changed

9 files changed

+176
-28
lines changed

docs/blockchain/bitcoin-basics/networking/_category_.json

Lines changed: 0 additions & 8 deletions
This file was deleted.

docs/blockchain/bitcoin-basics/networking/magic-bytes.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

docs/blockchain/bitcoin-basics/networking/node.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/cryptocraphy/base58.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,83 @@ sidebar_position: 8
33
---
44

55
# Base58编码
6+
7+
介绍Base58,一种用户友好的数据编码方式。
8+
9+
```text
10+
alphanumeric = 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
11+
base58 = 123456789ABCDEFGH JKLMN PQRSTUVWXYZabcdefghijk mnopqrstuvwxyz
12+
```
13+
14+
## 1. 什么是Base58
15+
16+
Base58是一种用于表示大整数的编码方案,主要用于减少字符混淆和提高可读性。它从Base64编码衍生而来,但去除了容易混淆的字符,如数字0(零)和字母O、大写字母I和小写字母l等。Base58特别适用于比特币和其他加密货币中,因为它们需要在安全性和可读性之间取得平衡。
17+
18+
## 2. Base58的编码过程
19+
20+
Base58的编码过程如下:
21+
22+
1. **选择字符集**:Base58使用的字符集包括:`123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz`
23+
2. **数据准备**:将要编码的数据(通常是一个大整数)转换为字节数组。
24+
3. **转换步骤**
25+
- 将字节数组视为一个大整数。
26+
- 反复对大整数进行58取模运算,将得到的余数转换为Base58字符集中的对应字符。
27+
- 将商继续进行58取模运算,直到商为零。
28+
4. **处理前导零**:在编码结果中,保留原始字节数组中前导零对应的Base58字符`1`
29+
5. **组合结果**:将所有Base58字符组合成最终的编码字符串。
30+
31+
### 编码示例
32+
33+
假设我们要将整数`100`编码为Base58格式:
34+
35+
1. **数据准备**:整数`100`转换为字节数组为`[100]`
36+
2. **转换步骤**
37+
- 初始值为100,取模58得到余数42,对应Base58字符集中的字符`j`
38+
- 商为100 // 58 = 1,继续取模58得到余数1,对应Base58字符集中的字符`2`
39+
- 最终商为0,转换结束。
40+
3. **处理前导零**:无前导零。
41+
4. **组合结果**:将所有Base58字符组合,得到结果为`2j`
42+
43+
## 3. Base58的优势
44+
45+
Base58相对于其他编码方案(如Base64)具有以下优势:
46+
47+
1. **减少字符混淆**:去除了容易混淆的字符,如`0``O``I``l`,提高了可读性和用户体验。
48+
2. **提高输入准确性**:用户在手动输入或抄录Base58编码的数据时,错误概率较低。
49+
3. **紧凑性**:相比于十六进制表示,Base58编码更为紧凑,减少了编码字符串的长度。
50+
4. **跨平台兼容**:Base58编码结果仅包含数字和大小写字母,适用于各种平台和系统,避免了字符集不兼容的问题。
51+
52+
## 4. Base58在比特币中的应用
53+
54+
Base58在比特币及其相关应用中得到了广泛使用,主要体现在以下几个领域:
55+
56+
### 4.1 比特币地址
57+
58+
比特币地址使用Base58Check编码,确保地址的可读性和完整性。Base58Check编码在Base58编码的基础上,增加了一个校验和,用于验证地址的有效性,防止输入错误。
59+
60+
生成比特币地址的过程如下:
61+
62+
1. **生成公钥哈希**:通过SHA-256和RIPEMD-160哈希算法生成公钥哈希。
63+
2. **添加版本前缀**:在公钥哈希前添加版本前缀(如主网前缀为`0x00`)。
64+
3. **计算校验和**:对上述数据进行双重SHA-256哈希运算,取前4个字节作为校验和。
65+
4. **组合数据**:将前缀、公钥哈希和校验和组合成完整数据。
66+
5. **Base58编码**:将完整数据进行Base58编码,生成最终的比特币地址。
67+
68+
### 4.2 私钥的WIF格式
69+
70+
比特币私钥的WIF(Wallet Import Format)格式也使用Base58Check编码,以确保私钥的可读性和完整性。
71+
72+
生成WIF私钥的过程如下:
73+
74+
1. **添加版本前缀**:在私钥前添加版本前缀(如主网前缀为`0x80`)。
75+
2. **计算校验和**:对上述数据进行双重SHA-256哈希运算,取前4个字节作为校验和。
76+
3. **组合数据**:将前缀、私钥和校验和组合成完整数据。
77+
4. **Base58编码**:将完整数据进行Base58编码,生成WIF格式的私钥。
78+
79+
### 4.3 交易ID和区块ID
80+
81+
比特币交易和区块的唯一标识符(TxID和BlockID)在展示给用户时,通常也会使用Base58编码,以确保其易于读取和输入。
82+
83+
## 总结
84+
85+
Base58是一种用于表示大整数的编码方案,具有减少字符混淆、提高输入准确性、紧凑性和跨平台兼容等优势。它在比特币生态系统中得到了广泛应用,包括比特币地址、私钥的WIF格式以及交易和区块的唯一标识符。了解Base58的编码过程和应用场景,有助于更好地理解和使用比特币及其他加密货币。

i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/cryptocraphy/hd-wallet-seed.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,99 @@ sidebar_position: 9
33
---
44

55
# HD钱包和种子
6+
7+
介绍分层确定性钱包(HD Wallet)和种子(Seed)。
8+
9+
详细技术细节请参考[BIP-32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)
10+
11+
![img.png](/img/bitcoin-hd.png)
12+
13+
## 1.分层确定性钱包(HD钱包)
14+
15+
分层确定性钱包(Hierarchical Deterministic Wallet,简称HD钱包)是由Bitcoin Improvement Proposal
16+
32(BIP-32)提出的一种钱包结构。HD钱包通过一个种子(seed)生成所有的私钥和公钥,使得用户只需备份一次即可管理多个地址,并且具有良好的扩展性和安全性。
17+
18+
## 2. 关键概念
19+
20+
### 2.1 种子(Seed)
21+
22+
种子是HD钱包的核心,它是一个随机生成的初始值,用于生成钱包中的所有密钥对。种子通常是通过用户输入的随机熵和钱包软件生成的随机数混合生成的。
23+
24+
### 2.2 助记词(Mnemonic)
25+
26+
助记词是将种子转换为一组易于记忆的单词序列。这种方式不仅方便用户备份和恢复钱包,还能减少记错或丢失种子的风险。助记词通常由12、15、18、21或24个单词组成,这些单词从一个标准化的词表中选取。
27+
28+
生成助记词的步骤如下:
29+
30+
1. **生成随机熵**:生成随机数。
31+
2. **计算校验和**:对随机数进行SHA-256哈希,并取前若干位作为校验和。
32+
3. **组合数据**:将随机数与校验和组合。
33+
4. **分割数据**:将组合后的数据分成每组11位的二进制块。
34+
5. **映射词表**:将每组11位二进制块映射到标准化词表中的单词。
35+
36+
### 2.3 根密钥(Master Key)
37+
38+
根密钥是由种子生成的第一个密钥对,包括根私钥(master private key)和根公钥(master public key)。根密钥是HD钱包的起点,从根密钥可以衍生出所有的子密钥。
39+
40+
### 2.4 子密钥(Child Key)
41+
42+
子密钥是从根密钥或其他子密钥衍生出的密钥。HD钱包使用分层结构,可以从一个根密钥衍生出多个子密钥,每个子密钥可以进一步衍生出更多的子密钥。子密钥的衍生过程是确定性的,即相同的种子总是生成相同的密钥序列。
43+
44+
### 2.5 扩展公钥(xpub)和扩展私钥(xpriv)
45+
46+
扩展公钥(xpub)和扩展私钥(xpriv)是包含了更多信息的公钥和私钥,用于支持HD钱包的分层结构。
47+
48+
- **xpub**:扩展公钥包含了公钥、链码和衍生路径信息,可以生成子公钥而不需要知道私钥。
49+
- **xpriv**:扩展私钥包含了私钥、链码和衍生路径信息,可以生成子私钥和子公钥。
50+
51+
### 2.6 衍生路径(Derivation Path)
52+
53+
衍生路径是一个字符串,表示从根密钥到特定子密钥的路径。它通常采用斜杠分隔的数字表示法,如`m/44'/0'/0'/0/0`
54+
。每个数字表示一个级别的子密钥,其中`'`表示硬化衍生(hardened derivation),不带`'`的数字表示非硬化衍生。
55+
56+
- **m**:表示根密钥。
57+
- **44'**:表示遵循BIP-44标准。
58+
- **0'**:表示币种(0代表比特币)。
59+
- **0'**:表示账户。
60+
- **0**:表示接收地址。
61+
- **0**:表示地址索引。
62+
63+
## 3. HD钱包的工作原理
64+
65+
HD钱包的工作原理基于以下几个步骤:
66+
67+
1. **生成种子**:用户提供随机熵,钱包软件生成种子。
68+
2. **生成根密钥**:通过种子生成根私钥和根公钥。
69+
3. **生成子密钥**:使用根密钥和链码生成子密钥,可以进一步生成更多子密钥。
70+
4. **管理密钥和地址**:通过扩展公钥和扩展私钥,可以生成和管理大量地址。
71+
72+
## 4. HD钱包的优势
73+
74+
HD钱包相对于传统钱包具有以下优势:
75+
76+
1. **简化备份**:用户只需备份一次种子或助记词,即可恢复所有密钥和地址。
77+
2. **良好的扩展性**:HD钱包可以生成无限多的子密钥和地址,适应不同应用场景。
78+
3. **增强安全性**:由于扩展公钥不包含私钥信息,可以在不暴露私钥的情况下生成子公钥。
79+
4. **标准化**:HD钱包遵循BIP-32、BIP-39和BIP-44等标准,确保兼容性和互操作性。
80+
81+
## 5. 应用实例
82+
83+
### 5.1 生成一个HD钱包
84+
85+
1. **生成助记词**
86+
:通过随机熵生成12个助记词,如:`abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about`
87+
2. **生成种子**:通过助记词生成种子。
88+
3. **生成根密钥**:通过种子生成根私钥和根公钥。
89+
4. **生成子密钥**:使用根密钥和链码生成子密钥,如路径`m/44'/0'/0'/0/0`
90+
91+
### 5.2 恢复钱包
92+
93+
1. **输入助记词**:用户输入备份的助记词。
94+
2. **生成种子**:通过助记词恢复种子。
95+
3. **生成根密钥**:通过种子恢复根私钥和根公钥。
96+
4. **生成子密钥**:通过根密钥和衍生路径恢复子密钥和地址。
97+
98+
## 总结
99+
100+
分层确定性钱包(HD钱包)通过种子、助记词、根密钥和子密钥的结构化生成和管理,实现了简单备份、扩展性强和安全性高的特点。扩展公钥(xpub)和扩展私钥(xpriv)以及衍生路径(Derivation
101+
Path)使得HD钱包在比特币及其他加密货币领域得到了广泛应用。了解HD钱包的原理和关键概念,有助于更好地管理和使用加密货币资产。

i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/networking/magic-bytes.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/networking/node.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

static/img/bitcoin-hd.png

42.5 KB
Loading

0 commit comments

Comments
 (0)