从助记词到以太坊地址——钱包创建全解析
发布于 2025-05-26 20:27:09(微信公众号导出记录)。
本文来自公众号后台的“导出文章内容”功能。博客正文由导出长图进行本地 OCR 转写,并保留原始排版图用于逐段核对。
原文链接:查看原文
OCR 转写有效文字约 9207 字;代码、流程图和版式以文末原始排版图为准。
正文(本地 OCR 转写)
最终可用地址的完整密码学流程。其核心在于一系列标准化协议(如BIP-39,BIP。 32,BIP-44)和密码学算法的应用。 bips https://github.com/bitcoin/bips/blob/master/bip -8039/ 核心环节包括: 与助记词生成(BIP-39) .助记词到种子(BIP-39,PBKDF2) .种子到主密钥对(BIP-32) .密钥派生路径与特定私钥(BIP-32,BIP-44) .私钥到公钥(ECC-secp256k1) .公钥到地址(Keccak-256) 核心概念定义 为确保理解一致性,首先定义关键术语:
- (Entropy)
一串具有足够长度的随机二进制数据,是所有后续密钥生成的起点。其质量(随机
性)直接影响钱包的安全性。通常由密码学安全伪随机数生成器(CSPRNG)产生。
- 助记词(Mnemonic Phrase)
一组有序的人类可读单词,是简的一种便于记录和恢复的表示形式。BIP-39标准定
义了其生成规则和词库。
- 种子(Seed)
从助记词(及可选的密码短语)通过密钥派生函数(如PBKDF2)生成的固定长度 (通常512位)的二进制数据。是派生所有后续密钥的根。
- 私钥(Private Key)
一个保密的、随机生成的数字(通常256位)。持有者拥有对应地址上资产的控制
权。其保密性是资产安全的根本。
- 公钥(Public Key)
通过椭圆曲线加密算法从私钥单向计算得出。可公开,用于验证签名和派生地址。
- 地址(Address)
通常由公钥派生出的唯一标识符,用于接收加密资产。以太坊地址是一个160位的十
六进制字符串。
- BIP (Bitcoin Improvement Proposal)
比特币社区提出的技术规范文档,许多标准被广泛应用于多种加密货币。 BIP-39 规范助记词的生成及到种子的转换方法。 BIP-32 定义分层确定性钱包(HDWallet)的结构,允许从单一种子派生出树状结构的 密钥层级。 BIP-44 在BIP-32基础上,为多币种、多账户钱包定义了标准的派生路径结构。
- 分层确定性钱包(HD Wallet-Hierarchical Deterministic Wallet)
一种能从单个主种子确定性地派生出大量密钥对的钱包结构。密钥以树状结构组织,
便于管理和备份。
- 椭圆曲线加密(ECC-Elliptic Curve Cryptography)
基于橘圆曲线数学的公钥加密方法。核心在于从私钥计算公钥容易,反之则计算上不 可行。以太坊和比特币使用secp256k1 椭圆曲线。
- Keccak-256
以太坊中使用的密码学哈希函数(SHA-3标准的前身版本),用于从公钥生成地址 等。 ”详细步黑解析:从焰到地址 步骤θ:初始与助记词的生成(依据BIP-39) 此阶段的目标是从高质量的随机源生成人类可读的助记词。 .生成初始熵(Initial Entropy) 。由CSPRNG产生一串特定长度的随机二进制位。 。简长度(ENT)通常为128至256位,且为32的倍数(例如:128,160,192, 224,256位)。 。简长度决定助记词数量:128位->12个助记词;256位痛->24个助记词。 步骤8:加载 BIP-39 词库 def load wordlist(filepath"english.txt): print(r*---步景:加载BIP-39 词库--) print(f尝试从“(fitepath)加载词库..") 6 with opentfilepath. *r", encoding-utf-s") as f: words = [line.stript) for line in f if line.strip(1] print(f成功加载[len(words)] 个单词。“) 1f len(vords)2048: print(词库包含2848个单词符合BIP-39标准。“) return words clsc: print(f销词应因包含2048个单国口实际加期了(1en[Mords)] 个。“) “english.txt”文件正纳且完情。“ xccept FileNotFoundError: print(f谢误:提不到词库文件(fAlepath)}s) print”请请保“ongl1sh,txt文件与此解本在同一日录下。“} return None ept Exception as e: print(f加载词库时发生错误:[e}) return None
[入]:离费生点[ENTRPY_LENH BIS)位[(ENTROPY_LENOTH_BYTES]字节)的题机痛“) rint(f" 特出 (base) wxreX7ce:/oumloads/BIPLEAR$ pythn Interactive bip39.py 调库包含2848个单词,符合BIP-39标准。 BIP-39助记词生成步驿演示(128位情-12个单词) 步辑1:生成初始焙 【输入]:贯要生成128位(16字节)的随机。 输出培(二进制):8119111891188 011111918919111111111111119 61801010110111010101010801110101010110111011810100011111891061 【验证】纳的位数:128 :计算校验和(Checksum) 。128位煸(ENT=128)->校验和长度(CS)=4位。 。为实现错误检测(例如抄写错误),需对初始滴进行SHA-256哈希运算。 。取该哈希结果的前CS位作为校验和。CS-ENT/32。 ...-梦2:计算校验和(Checksu) s26 hhtsstr-t bsnh6 hhdt 步罪2:计算校验和- [人填(进制:01100110110660011110110106010010111010110111101011600 011100100101011011101010101000111010101011011101101010001111100101 9930cf61ba8 SH-256哈希结果(二进制,前一部分):011011111111111111191 11198110186
818919101...
计算过程:校验和长度消长度(12位)/32=4位。 计算过程:取SHA-256哈希结果的前4位作为校验和。 [输出]权验和(二进制):8811 :合并简与校验和 。128位+4位校验和=132位序列。 。将计算出的校验和附加到初始焕的末尾,形成一个新的二进制序列。 制序列。 付 3: dired bits str = antrepy bsts str + checkum bits str prlstl1* orintit* orinslf. :c omum公余号iajero ter_te_contimell 步骤3:附加校验和到滴 (:011001110110060000111011010001001011101011011101011600
二进制):01100111001100
COOTTOTOTTTTOTTOTOTTTOTOOTOOOTOTTOTTTTOO [输入]境 【入】校验和【二进制】:0011 [输入】校验和 【验任】合并后的总位数:132(应为132) 映射到助记词单词 。264位序列/11位/段=24段->24个助记词。 。将合并后的二进制序列分割成多个11位的小段。 。BIP-39提供了一个包含2048个单词的官方词库。由于$2^{11}=2048$,每
一个11位的二进制段都唯一对应词库中的一个单词。
。按11位段的顺序,从词库中查找对应单词,组合成助记词短语。
6811 步骤4:将序列分刮成11位的小段 校验和(进制:01001110011000000001110110100010010111919110111 输入】填 B111081501010110111010191010891111910101101110110101000111110018018811 计算过程:将上过二进制序列分割成每段11位的小段。 [输出]分副后的小段(共12段): 01100111001 3: 11110110100 61681611181 5: 01101111018 18818101181 7: 8: 10: 10100001111 11: [验证】单询数量:12(内为12] 按Enter键起续下一步... 步解5:持每个11位小段映时到单词 计算过程:将每个11位二进制小段转换为十进创整数,作为词库的索引。 射结果 1:01180111891十进制引:825 'walk" 1972 系引: > entry' 01101111010 5: 1564 011108 6: 116 16010101101 单词: 'noble* 1197 sten* 9841 20111010101 单词: 01101116118 1295 单词:“mystery 段12:10010010011->
十进制案引:1171>
[输出)最终生成的助记词(12个单词); hsrnlesten deyter
- 助记词安全性
词库大小(2848)和单词数量(12-24)确保了巨大的组合空间(如 s2048~{12}\approx2~{132}s),使得暴力破解在计算上不可行。 步骤1:从助记词到种子(依据BIP-39&PBKDF2) 此阶段将助记词转换为固定长度的二进制种子,作为密钥派生的根。 步骤1:从助记词到种子(BIP-39,PBKDF2) [第入] 2848(BIP-30推荐) 输入] d十六讲市:64字节):9x4ed8d4b17698dde01f559f5287b5d 4721725 18876 测试向量对内的种子是:8x5b56c417303faa3fcba7e57400e120a0ca6358a9095526afd3604b6 41797cb85439) 按 Enter健继续下一步...
- 输入(Input)
1.助记词短语(UTF-8NFKD标准化编码)。
2.可选的密码短语(Passphrase/Salt Extension)(UTF-8 NFKD标准化
编码)。
- 过程(Process):PBKDF2 (Password-Based Key Derivation Function
。内部哈希函数 : HMAC-SHA512。 。选代次数 :BIP-39推荐2048次。多次选代增加计算成本,抵抗暴力破解。 。盐(Salt) :由字符串“mnemonic”与用户提供的密码短语(若为空,则密码短语视为空 串)串联构成。 。密钥派生 :以助记词为“密码”,上述盐值为“盐”,执行PBKDF2运算。
- 输出(Output)
。一个512位(64字节)的二进制种子(Seed)。
- 密码短语的作用
。密码短语为助记词提供额外安全层。即使助记词泄露,没有正确的密码短语也无法 生成正确的种子。 恢复时必须使用完全相同的密码短语:任何差异都会导致生成不同的种子。 此阶段从512位种子生成HD钱包层级结构的根节点:主私钥和主链码。 步挥2:从种子到主私仍和主链码(DIP-32) [输入1种子(Seed 十六进制]:x4erd8d4b17698ddeaa1f1559f152f87b5d472f725ca86d34 1bd9276f1b61197e21dd5a391f9f5ed7340ff4d4513aab9cce44f9497a5e7ed85fd818876b6eb402e [输入]DIP-32客钥常量:bDitcoin seed [镇出]主私钥[Master PrivateKcy十六进制,32字节】:6x2f93ce519f4f763167e2345 0bd667567bf7aa8a31b9763ea4c6a57401d370583 测试向量对应的主私钥是:8x8c7454c78740b2f58096a68899f0137247[7808a28988a879214 478fdeaf1zb) 试向量对应的主链码定:0x879c85418c415031e9d0e1a2504c3798b8916f12813167352702f 3a938f7e92c) 搜Enter提频下一步..
- 输入(Input)
。512位种子(Seed)。
- 过程(Process):HHAC-SHA512
。使用HMAC-SHA512算法处理种子。 。密钥(Key) :固定的字节串“Bitcoin seed”(即使为其他币种生成密钥,此初始步骤通常 遵循该规范)。
- 数据(Data)
:输入的512位种子。 。HMAC-SHA512输出一个512位的哈希值($I$)。
- 输出(Output)
。主私钥(Master Private Key,$km$):SI$ 的左256位(32字节)。 。主链码(Master Chain Code,$cm$) SI$的右256位(32字节)。链码用于子密钥派生时引入确定性随机性。 步墨3:派生以太坊专用私钥(依据BIP-32&BIP-44) 此阶段根据BIP-44定义的派生路径,从主节点派生出特定于以太坊账户的私钥。 步辑3:派生以太坊专用私钥[BIP-32/BIP-44] [输入] 主私书: Bx2f93c8519f4f763167c23458bd667567bf7aa8a31b9763ca4c6a57481d37858 [输入1 主链码 :: Bx9523ed4388df2d528989bf11h6a85abe8d4b239778eBef69b87ed666bab19ad [输入1以太坊源生路径:m/44′/68/8/8/8 解释: BIP-32定叉了如何从父密钥流生子密钥。BIP-44在此基础上规定了标准路径结构: :代委主节点(Moster) (haed):代表DIP-44搜药。表示增强派生。 (hardned):代表账户案引(通常从开第 .0. (al:代表用造:8表示外包[按收联基]。 {nomaL]:代表用途,表示外部道【接收地址]。 ‘日 (nomali:代表地址索引(该账户下的第o个地址)。 增强诉生[Hardered Derivatien,indicated by: dex) 普通派生INomal Derivation): 可以使用交公销、父链码和案引号派生子公钥和子镇码。 计算方式:AC SHS12(Kcy-ParenthainCode,Data-ParentublicKeyBytes|| Index) 由于完是坐现即P-32源生(特别是多个增蛋派生步程)代码较为复杂且易出错, 通幸依预于经过产格测试的客码学库。 在本次演示中,我们将直接使用测试向量中预先计算好的,对应上述路径的专用私钥。 [概念输出]对内路径m/44/60/0°/0/0的以太坊专用私钥(来自测试向量1: 按Enter误维族下一..
- 输入(Input)
。父密钥的私钥(Parent Private Key)或公钥(Parent Public Key, 仅用于普通派生子公钥)。 。父密钥的链码(Parent Chain Code)。 。目标子密钥的索引(Index)。
- 派生路径(Derivation Path)for Ethereum
BIP-44标准路径格式:n/purpose′/coin_type'/ account’/ change /address_index以太坊第一个账户的第一个地址的典型路 径:m/44*/60*/0*/8/0 o II :主节点。 purpose′(44′) 表示增强派生。 :表明遵循BIP-44。 o coin_type′ (69′) :以太坊的币种代码为60。增强派生。 account′(8′) :账户索引,从0开始。增强派生。 o change (θ) :外部链(0)或找零链(1)。以太坊通常只用8。普通派生, o address_index (8) :地址索引,从0开始。普通派生。
- 派生过程(CKD-Child Key Derivation)
:逐级应用BIP-32子密钥派生函数。 o输入数据:ser1al1ze[parent_publ1c_key)l| 1ndex I = HMAC-SHA512(Key= parent_chain_code,Data= data) 子私: (parse 256(I L)+ parent_private key) mod n 。子链码:I_R 。可以从父公钥和父链码派生出子公 钥: ch1ld_publ1c_key = po1nt(parse_256(I_L))+ parent_publ1c_ke y。 o输入数据:6xo6l|parent_private_key 11index I = HMAC-SHA512(Key= parent_chain_code,Data= data) 。子私钥:(parse_256(I_L)+ parent_private_key) mod n (n为曲线的阶) 。子链码:I_R 。无法从父公钥派生子公银。安全性更高。 。普通派生(Normal Derivation)(索引值 S<2^{31}$): ,输出(output) 。路径m/44/66/0′/0/0对应的256位以太坊专用私钥。 步骤4:从私销到公销(ECC-secp256k1) 此阶段通过椭圆曲线点乘运算从私钥生成公钥。 步骤4:从以太坊专用私钥到公钥[ECC5ccp256k1]7 输人]以太坊专用私钥(自测试向量):8X245412038577C19F8BB4384D7274D235676A554A 8C8F98A32641198F28849838 解释: 这一步使用圆曲线加密算法(ECC)中的5FEp256k1自找。 这个运受单向的从私销计算公销很容品,但风公销反推私在计算上不可行。
一个格回曲线上的点(X,Y1对于以太功,通常使用木压请公街
结果是 即64字节,由x全标【32字节】和y生标(32学节】置接串联面成[去除了8x84前级] 由于ECC运算实现复杂,我们同样使用测试向量中对应的公钥。 [最念输由]对应的未压站公钥[来自利试向量,64字节,无8x84前]: D4A5491839862990905E7BAC7001135996E0907E01E0D20FA77314008317A657E1838605906069A5 87543018039048063875956883204936475223787 按Enter候滋续下一步..
- 输入(Input)
。256位专用私钥($ks)。
- 过程(Process):椭国曲线乘法(secp256k1)
。以太坊使用secp256k1椭圆曲线。 。私钥$k$是一个256位整数。 o secp256k1 有一个标准的生成点$G$。 。公钥$K$计算公式:$K=k\cdot G$(点乘运算)。 。结果 $K$ 是椭圆曲线上的一个点 $(×,y)s。
- 输出(output)
。未压缩格式 8x0411X(32 bytes)11Y(32 bytes) (总65字节)。 压缩格式θx921|X(32bytes) (若Y为偶数)或θx0311×(32bytes)(若Y为奇数)(总33字节)。 。公钥 $K=(x,y)$。 。后续生成以太坊地址时,使用未压缩公钥的X和Y坐标(除去8x04前缀的64字 节)。
- ECC安全基础
从私钥$k$和生成点SGS计算公钥$K$容易:但从$K$和$G$反推$k$ (ECDLP问题)在计算上不可行。 步骤5:从公钥到以太坊地址 此阶段将公钥转换为最终的以太坊地址。 步辑5:从公钥到以太坊地址 8787 解1:
1.特64字节的公钥(不含6x84前题)进行Kccak-256哈希运算。
Keccak-256,它导最终的SHA-3标准路有不同:但在Python 3.6+的 注意:以太坊使用 hashlib.sha3256 中行为一致
2.Keccak-256哈系的结果足一个32字节(256位)的值。
4.通常以能开头,并以4个十六进制字符表示。
计算过程: Keccak-256哈带(公钥)(十六进制,32字节):Bxc54alc294877833898f81acZce712c9f c86b350b5a541464f2877bb64ct26d7 [输出]计算得到的以太坊地址(十六进制,20字节】:0x2ce712c9fc86b356b5a541464f2877 (测试向量对皮的以太坊地址定:0xfe19211f04483931319f313712168957065b7697) [输出1计算得到的以太坊地址(EIP-55校验和格式):电x2ce712e9Fe86D356b5A541464F287 7Bb64Cf26d7 演示结束。按 Enter键 退出。
- 输入(Input)
。未压缩公钥的X和Y坐标串联起来的64字节数据(即X11Y)。
- 过程(Process):Keccak-256 哈希及截取
1.取64字节公钥数据。
2.对其应用Keccak-256哈希算法。
3.Keccak-256输出256位(32字节)的哈希值。
4.取此32字节哈希值的后20字节(160位)。
- 输出(output)
。该20字节(160位)数据即为以太坊地址。
- 格式化
。地址通常表示为40个字符的十六进制字符串,前缀为0x。 oEIP-55校验和地址 :一种大小写混合的地址表示法,通过对地址自身哈希来决定字母大小写,提供校 验和功能,防止输入错误。底层的20字节值不变。 安全性考量概要
- 助记词保密性
:助记词是恢复所有密钥的根源,其泄露等同于资产控制权丧失。物理备份(如手写 在纸上、金属板雕刻)并安全离线存储是推荐做法。避免任何形式的数字存储。
- 密码短语(Passphrase)
:若使用,其重要性等同于助记词。遗忘或输错密码短语将导致无法访问钱包。
- 私钥的绝对控制权
:私钥是资产的最终凭证。钱包软件负责管理私钥,一般不直接暴露给用户。
- 地址的公开性
:以太坊地址可安全分享用于接收资金,不会泄露私钥或助记词。
- 钱包软件的可信度
:应从官方渠道获取,优先选择开源、经过审计、社区声誉良好的钱包软件。
- 防范钓鱼与恶意软件
:对任何索取助记词或私钥的请求保持高度警惕。 结论 从随机熵到最终以太坊地址的生成,是一个涉及BIP-39、PBKDF2、BIP-32、BIP-
44、椭圆曲线加密(secp256k1)和Keccak-256哈希等多个密码学组件和标准的精
密过程。每一步都依赖于成熟的密码学原理,特别是单向函数和陷门函数的特性,确保 了从公开信息推导私密信息的计算不可行性,为数字资产安全提供了基础。 NOTE·目录三 <上一篇 下一篇> 走遍西班牙第一册-第十单元《Ymaniana, EDAPCB布线中的寻路智慧:深入探索Lee算 qué?》Ambito2详细笔记 法的可视化之旅
原始排版图

