本文将深入剖析加密货币钱包的本质、运作机制,以及其如何依托椭圆曲线密码学技术来生成并守护公私钥对、推演种子短语,从而保障区块链交互的安全性。
作为管理链上账户、安全托管资产及签署交易以更新账本状态的关键工具,钱包在去中心化生态中扮演着核心角色。我们将深入探讨钱包的定义、构建流程,解析其如何利用椭圆曲线算法确立公私钥对的生成与安全保护机制,实现种子短语的推导,并确保每一次区块链交互都安全可靠。
一、钱包的本质究竟是什么?
钱包本质上是一个应用程序,它赋予用户查看自身区块链账户数据并进行交互的能力;借助这些账户,用户可以发起交易,执行诸如发送代币或与智能合约交互等操作。区块链网络中的每一个账户均由一对紧密关联的加密密钥构成。在区块链体系中,这类账户通常被定义为外部拥有账户(EOA),其结构包含公钥与私钥两部分:
- 公钥:即你的钱包地址。该信息可公开分享,任何人或智能合约均可通过此地址向你转账加密货币。
- 私钥:充当“签名密钥”,用于对消息或交易进行数字签名。掌握私钥即意味着完全掌控钱包内的所有资金。
这对密钥具备一个关键特性,称为陷门函数,具体表现为:
- 若已知私钥,推导对应的公钥将变得极为简便(由A推导至B)。

二、钱包的核心用途是什么?
钱包的主要职能是利用私钥对消息或交易进行签名,随后将其广播至区块链网络。
通过验证交易发送者的公钥能否从签名中提取出来,我们可以确认特定消息或交易是否获得了钱包持有人的授权。这一机制对于防止虚假或恶意交易被区块链接受至关重要。
举例而言,Jarrod可能试图提交一笔声称由Abril向其发送5个以太坊的交易,即便Abril从未同意此操作。然而,由于区块链会对每笔交易的签名进行验证,它会迅速驳回该交易,原因在于从签名中还原出的地址与交易声明的“发送者”(即Abril)并不匹配。
以太坊等区块链平台采用ECDSA(椭圆曲线数字签名算法)来校验从交易签名中提取的公钥是否与发起交易者的公钥一致。
三、钱包是如何创建的?
创建钱包的首要步骤是生成一对公私钥。不过,这对密钥必须满足特定规范,方能在区块链网络中正常运行。
- 私钥由64个十六进制字符组成(字符范围涵盖0到F)。
- 公钥则是基于椭圆曲线密码学(ECC)算法从私钥衍生而来。
- 随后,公钥经过分割、哈希运算及格式化处理,最终生成一个长度为42个字符的地址。
上述三步流程构成了区块链账户生成的核心逻辑。
接下来,我们将深入解析如何借助椭圆曲线和私钥推导出公钥。在此之前,我们先解答关于钱包可能存在的疑问,例如:
- 如何确保私钥 truly 是随机生成的?
- 倘若我与他人撞库获得相同的私钥该怎么办?
- 种子短语在此过程中扮演何种角色?
- 如何从一个种子短语衍生出多组密钥对?
四、何谓种子短语?
虽然可以直接生成随机的64位十六进制值,但出于用户体验考虑,私钥通常依据源自比特币的特定标准生成。这些标准允许用户记忆一组种子短语——由12至24个单词组成的序列,利用这组短语即可创建任意数量的新账户。
如此一来,用户只需牢记一组单词,便能访问所有账户,而每个账户都拥有独立的公私钥对。通过特定的密钥派生函数(KDF),可以从单一的种子短语衍生出无限数量的新私钥。
下文将详细介绍种子短语如何通过随机熵生成,以及如何从中派生出私钥,最后再探讨如何从私钥进一步推导公钥。
五、种子短语的运行机制
初次安装钱包应用时,系统通常会要求用户记录并妥善保管一个种子短语,通常由12或24个单词组成。此处可参考一份包含2048个英语单词的列表(我们稍后会详述为何选择此数量)。
什么是 BIP-39?
存储助记种子短语的概念于2013年通过BIP(比特币改进提案)提出,即BIP-39。该提案提供了一种标准化方案,用于生成随机熵并将其转化为易于人类记忆的单词组合。
种子短语的生成过程
首要任务是确保种子短语的随机性,以防他人意外访问我们的钱包及资金。
为此,需使用CSPRNG(密码学安全伪随机数生成器)生成随机数,这一过程可在浏览器环境中完成:
此随机数被称为熵。熵用于构建构成种子短语的单词集合。以本例为例,128位的熵对应12个单词,但也可采用其他长度配置,例如:
- 15 个字:对应 160 位
- 18 个字:对应 192 位
- 21 个字:对应 224 位
- 24 个字:对应 256 位
那么,我们该如何利用这些比特位来生成种子短语呢?比特位与单词之间有何关联?首先,需为熵计算校验和,并将其附加至128位熵之后;该校验和为熵值的4位哈希结果,旨在保障数据完整性。因此,现在我们有128位熵加上4位校验和,合计132位。接着,将这132位转换为二进制形式,具体而言,将其划分为多个11位的区块。
现在我们得到了一组12个二进制数值,每个数值均为11位长。提示:既然有12个数字,我们的种子短语也将包含12个单词!
回顾前文,我们的单词列表包含2048个词条。选择2048是因为它等于2的11次方,这意味着仅用11位二进制数即可表示2048种不同的组合。
接下来,只需将这些二进制数值映射为单词列表中的对应单词。具体做法是将二进制数作为索引来查找单词。换言之,若二进制数为10,我们将选取列表中的第9个单词(因为索引从0开始计数),例如:
- 000000111(二进制值为7)对应列表中的第8个单词,即“abstract”! 😉
- 11111111111(二进制值为2047)则是列表中的最后一个单词(第2048个),即“zoo”。
此过程将重复12次,每次处理一个11位的数字,最终形成包含12个单词的种子短语。

通过生成随机熵值,将其切割为二进制块,并利用这些二进制值作为索引检索单词列表,我们最终获得了一个随机的种子短语。
有人能猜到我的种子短语吗?
你可能会质疑:“如果仅有2048个可选单词,难道不会有人破解我的种子短语吗?”理论上可行,但实际上……概率极低。究竟有多难?
设想一下,如果我们跳过随机生成128位的步骤,转而手动挑选12个单词。每次选择时,我们都需在2048个选项中做出抉择。
因此,他人若想猜对这12个单词的顺序,必须在2048个选项中连续12次全部猜中,单次猜测成功的概率为1/2048。此时你或许会觉得:“这听起来似乎不难……”是吗?*让我们深入分析:
- 第一个词: 2048 种可能性
- 第二个词: 2048 种可能性
- 依此类推,直至第12个词: 2048 种可能性
这相当于2048连乘12次,即2048的12次方。这是一个天文数字,约为5 septillion(5×10^36),或者说是5 quadrillion billions。这个数字超出了我们的直观想象,但我们可以尝试估算……
假设你现在开始暴力破解,使用一台每秒可尝试1万亿个种子短语的超级计算机。这台机器将需要159万亿年才能猜中一个种子短语。换句话说,大约是宇宙当前年龄的11,000倍。
24个单词的种子短语是否比12个更安全?
部分钱包支持128位(12个单词)的配置,但现代钱包通常建议用户记忆24个单词的种子短语!这同样代表了极其庞大的搜索空间。

六、如何从种子短语生成私钥
现在我们拥有了一个由12个单词组成的种子短语,它是如何转化为账户私钥的呢?这需要将种子短语转换为一个可用于生成钱包的二进制种子。该过程包含以下步骤:
- 用户可选择提供一个额外的密码(口令)。
- 调用名为PBKDF2(基于密码的密钥派生函数)的算法,其输入包括:种子短语、字符串“mnemonic”以及可选的用户密码。
这个被称为密钥派生函数的过程,会利用另一个算法HMAC-SHA512作为伪随机函数,输出一个64字节的哈希值,称为二进制种子。

生成的64字节哈希值可用于创建账户,其逻辑遵循其他比特币标准,特别是BIP-32以及可选的BIP-32扩展标准BIP-44。
什么是 BIP-32?
BIP-32引入了分层确定性(HD)钱包的概念,允许从一个种子衍生出多个钱包,且这些钱包还能继续衍生更多子钱包,从而形成一种“树状”层级结构。

什么是 BIP-44?
BIP-44提供了一种标准化方法,通过实施特定的派生路径,从二进制种子构建钱包结构的层次,其格式为:m / purpose’ / coin_type’ / account’ / change / address_index:
- purpose:标识所使用的BIP标准;对于BIP-44,其值为44’。
- coin_type:指定加密货币类型;例如,0’代表比特币,60’代表以太坊。
- account:用于区分不同的用户账户。
- change:指示地址类型:0表示接收地址,1表示找零地址。
- address_index:为同一账户和找零类型下的每个地址提供唯一索引。
尽管并非所有钱包都采用BIP-44,但它仍是标准化的从二进制种子派生账户的主流方法。
如何从二进制种子生成私钥?
如前所述,私钥由64个十六进制字符组成,即32字节。而我们刚才通过PBKDF2过程生成了一个64字节的二进制种子。那么,如何利用这64字节的哈希值来创建私钥呢?
首先,将哈希值均分为两部分,每部分32字节:
- 第一部分是主私钥。这是二进制种子的直接1对1映射(由你的种子短语生成),并与钱包主体关联。主私钥可用于生成子私钥。
- 第二部分为链代码。链代码的作用是确保:即使某个子密钥泄露,主密钥依然保持安全。子密钥可以被一致地生成,且每个子密钥都是唯一的。
现在我们已经了解了私钥的结构、其随机生成方式,以及如何从种子短语派生出多组密钥。接下来,让我们看看如何从私钥进一步派生出公钥。
七、公私钥的工作原理
借助椭圆曲线密码学(ECC),我们可以根据给定的私钥计算出对应的公钥。虽然存在多种椭圆曲线,但比特币和以太坊均使用名为secp256k1的曲线。
该曲线的规范定义了一个基点G,作为生成曲线上其他点的起始点。从这个起点出发,我们以特定方式在曲线上“移动”若干次(具体次数由私钥决定)。当停止这一过程时,最终到达的点即为公钥。
我们在曲线上“移动”的方式称为标量乘法。在椭圆曲线语境下,标量是指用来缩放曲线上某一点的数字。我们将基点G与标量数字结合,通过“拉伸”该点来获取曲线上的新点。
应用于基点的标量数字即是我们的私钥;简而言之,我们从基点G开始,通过标量乘法将其与私钥相乘,从而得出公钥。

实际上,由于该曲线是在素数域ℤp上定义的,其表现形式更像是一堆分散的点……但仍保持椭圆曲线的数学特性。
在这个标量乘法过程结束时(即在曲线上“跳跃”<私钥>次),我们将到达曲线上的一个新点,这就是我们的公钥。你可以大致这样想象这个过程:

公钥在区块链上的作用?
公钥顾名思义,可以公开分享给任何人。其主要用途包括:
- 查看在区块链上提交交易的用户身份
- 接收来自其他钱包的资金,例如以太币(ETH)
- 验证某个私钥是否签署了特定消息
总结
钱包是基于椭圆曲线密码学的区块链不可或缺的一部分,使用户能够从其账户提交交易并签署消息。
不过,一些区块链(如Abstract)也支持一种称为智能合约账户的新型钱包,这种钱包提供了更多功能,并增强了安全性、恢复机制等。
到此这篇关于什么是加密货币钱包?全面了解其创建过程和加密原理的文章就介绍到这了,更多相关加密货币钱包详细介绍内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!