主页 > imtoken支持bcc > 科普 | 比特币的私钥:转码与使用

科普 | 比特币的私钥:转码与使用

imtoken支持bcc 2023-01-16 21:12:05

任何关心比特币财产安全的人都应该尝试理解下图:

比特币扩展公钥_比特币分叉影响比特币总量_比特币bitcoin公钥

数字

如果你完全理解二进制、十进制和十六进制,你可以跳过这部分。

小数意味着每个数字有 10 种可能性(0、1、2、3、4、5、6、7、8 或 9)。 “6.15”这个数字有3位数字(顺便说一句,6.15这个数字有特殊的含义,即每个人都应该努力拥有6.15个比特币)。 第一个数字是“6”,第二个数字是“1”,第三个数字是“5”。 这三个数字可以是0、1、2、3、4、5、6、7、8、9中的任意一个。

在十进制中,当我们从“0”数到“9”(0、1、2、3、4、5、6、7、8、9)时,没有新的数字,我们将新的数字添加到留一个“1”(即每十比一),得到“10”,然后从“0”开始数——原来的“9”变成1,十位变成“1”,个位变成“ 0”。

二进制意味着每个数字只有两种可能性(“0”和“1”)。

在二进制中,我们从“0”开始计数,然后是“1”,然后是“10”! 你看见了吗? 如果您认为跨度很大比特币扩展公钥,那是因为您还没有想到小数点之外。

在十进制中,“10”是普通人的手指数——因为我们有10根手指,所以我们人类常用10为底数。

但是,在二进制中,“10”是一个人的拇指数。 想象一下用拇指数数:1、10、11、100、101、111、1000、1001……

如果这是您第一次学习二进制,用笔和纸自己做数学运算可能会有所帮助。 这就像第一次学习数数,而且不直观。

十六进制表示每个数字有 16 种可能(0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f)。 其中 a=10、b=11、c=12、d=13、e=14 和 f=15。

就像在扑克游戏中,Jack=11,Queen=12,King=13,Ace=14 或 1。一个字母可以代表一个数字,这就是关键。

每个数字的可能性越多,用于表示大数的数字就越少。 例如,十进制的 2047 在二进制中是 11111111111(11 位),在十六进制中是 7FF。

总结:

比特币分叉影响比特币总量_比特币bitcoin公钥_比特币扩展公钥

比特币bitcoin公钥_比特币分叉影响比特币总量_比特币扩展公钥

随机二进制数、校验和、私钥

私钥首先是一个二进制数,可以转换成其他形式。 但是,私钥本质上是二进制的,因为它旨在供计算机使用。 以下是二进制私钥的示例:


01000011111 10101110110 01001000001 01001101000 10000100011 10001011011 00100110111 11010000011 11001000001 10111110010 00010101000 00101110110 01100001101 11000010011 01101111001 11001010111 10011010000 01001110000 01000010010 00001110011 10011110101 11000110011 10101101110 00100111111

请注意,这个私钥由24组数字组成,每组11个数字,一共264个二进制数(24×11=264)。

虽然电脑看到的私钥是同一串数字,但是没有空格:


010000111111010111011001001000001010011010001000010001110001011011001001101111101000001111001000001101111100100001010100000101110110011000011011100001001101101111001110010101111001101000001001110000010000100100000111001110011110101110001100111010110111000100111111

这是一个很大的数字,用十进制表示为:

7,869,270,257,961,728,227,967,109,454,183,816,220,476,881,432,001,550,169,555,390,346,110,510,455,025,983

注意这两个数的值是一样的,唯一的区别就是小数点写的比较短。

综上所述,私钥的一部分是随机生成的,最后8位(称为校验和)是将前面的随机部分作为输入,通过公式计算出来的。 这是一种工程设计(通常被软件钱包识别):如果数据输入错误比特币扩展公钥,计算机会发现校验和与输入的数据不匹配,并警告用户。 钱包会提示“对不起,您的输入可能有误”。 当然,用户可以强制选择继续。 校验和不是比特币代码的一部分,而是为了用户安全而引入的。

换句话说......通过数学设计,在创建私钥时,以下随机部分......


01000011111 10101110110 01001000001 01001101000 10000100011 10001011011 00100110111 11010000011 11001000001 10111110010 00010101000 00101110110 01100001101 11000010011 01101111001 11001010111 10011010000 01001110000 01000010010 00001110011 10011110101 11000110011 10101101110 001

只会生成此校验和...

比特币分叉影响比特币总量_比特币扩展公钥_比特币bitcoin公钥

00111111

结合两者给出最终的私钥。 单击此处了解私钥的推导方式以及校验和的计算方式。 注意8位校验码加上最后的3位随机数正好是一组11位数字,和其他组一样(BIP39标准下,一个词需要11位数字来表达,详见下文) .

不同的随机二进制数会产生不同的校验和。 假设用户在钱包中输入私钥,并声称“这是我之前生成的私钥,请出示我的地址”,只要出现个位数错误,软件钱包就会发现并发出警告。

请原谅我有点冗长,但是了解这些背景知识真的很重要。

私钥转换

人类很难准确记录二进制私钥并将其输入到软件钱包中。 一旦出现错误,可能会导致比特币丢失。 校验和不能用于检查手写错误,只能在计算机中输入。

一种解决方案是将二进制数转换为十进制数,使私钥更短且更容易记住。

假设将一个二进制数分成11位为一组,则每组数最多可以表示2048个十进制数(可表示的十进制数范围为“0”到“2047”)。 “0”到“2047”转换成二进制就是“00000000000”到“11111111111”。

我们可以把这个私钥转换成24组十进制数,每组十进制数的范围是“0”到“2047”。 这更容易编写,但仍然容易出错。

BIP39 可以有效化解这种风险。 该协议建议比特币用户使用协议定义的单词列表,我猜这些单词是经过精心挑选的,以防止它们被误读为其他单词。

BIP 39 词表共包含 2048 个词,按字母顺序排列。 单击此处查看列表。 除英文版外,还有其他语言版本。 每个单词代表一个介于“0”和“2047”之间的数字。 这样私钥中的每一个十进制数都可以写成一个字。 数字和对应的单词之间有什么特殊的联系吗? 不是的,只是协议定义的,只要我们都使用这个协议,那么文字和数字就可以划等号了。

这时候种子词就派上用场了,你在软件钱包中输入助记词后,每个词都会被转换成11个二进制位,组合成一个264位的二进制数,这就是私钥(还记得吗?最后一个字包含校验和,因此不是随机的)。 使用 12 字助记符,私钥只有一半长,即 132 位。

不幸的是,原始的 BIP 39 词表存储在 GitHub 中,表示十进制范围“1”到“2048”,而不是“0”到“2047”。 这只是 Github 格式的问题,并非设计使然。

为了清楚地说明这个问题,我们举个例子。 假设一个私钥以11个“0”开头,比如“00000000000”,那么我们就需要用单词列表中的第一个单词来表示这个二进制数。 第一个字是“abandon”,意思是“00000000000”,但被标记为“1”。 这是不对的。 十进制数“1”转换成二进制是“00000000001”,这不是我们想要的。 但是由于格式问题,单词列表中所有单词的序号都比它们实际代表的十进制数字大“1”。

我们也可以通过抛硬币来生成二进制数。 计算机可以帮助我们得到斜体的最后8位数字:

010000111111010111011001001000001010011010001000010001110001011011001001101111101000001111001000001101111100100001010100000101110110011000011011100001001101101111001110010101111001101000001001110000010000100100000111001110011110101110001100111010110111000100111111

比特币bitcoin公钥_比特币扩展公钥_比特币分叉影响比特币总量

我们需要做的第一件事是将这个二进制数分成 11 个数字的组:


01000011111 10101110110 01001000001 01001101000 10000100011 10001011011 00100110111 11010000011 11001000001 10111110010 00010101000 00101110110 01100001101 11000010011 01101111001 11001010111 10011010000 01001110000 01000010010 00001110011 10011110101 11000110011 10101101110 00100111111

接下来,我们将每组数字转换成十进制数:

543, 1398, 577, 616, 1059, 1115, 311, 1667, 1601, 1522, 168, 374, 781, 1555, 889, 1623, 1232, 624, 530, 115, 1269, 1587, 1390,

然后,我们在单词列表中查询这些小数对应的单词:

比特币分叉影响比特币总量_比特币扩展公钥_比特币bitcoin公钥

考你:小数543对应哪个字? 干,鸭或哑巴?

上图摘自Github,所以本词表序号从“1”开始。 因此,每个序号减去“1”后就是每个字对应的实际十进制数。 因此,序号为544的单词dumb实际上代表的是“543”,也就是我们要找的单词。

第二个数字是1398,对应单词表中序号为1399的单词。

全部转换成文字后:

dumb put else escape love merge cheap spare
sight salad bench conduct giant second hundred
slab old evoke drastic attack pact shoe punch child

请注意,所有单词均按字母顺序排序,字母较早的单词编号较小,首字母较小的单词编号较大。 当您了解单词的排序方式时,这一点就会变得很明显。

扩展私钥

看下图:

比特币扩展公钥_比特币分叉影响比特币总量_比特币bitcoin公钥

比特币扩展公钥_比特币bitcoin公钥_比特币分叉影响比特币总量

扩展私钥是根据你我都不需要知道的数学公式,使用二进制私钥、密码和推导路径计算得出的。

请注意添加密码如何完全改变私钥的下游扩展。 修改派生路径也会更改下游数据。 不要小看你的软件钱包提供的默认推导路径,一定要记下来保存。 推导路径我会另写一篇文章详细说明。

扩展后的私钥最终用于生成一个钱包中的所有比特币地址,这些地址上的比特币可以被消费。 如上图所示,扩展私钥可以生成多个独立的私钥(不是扩展私钥,而是普通私钥),每个私钥会生成一个独立的公钥,每个公钥会生成一个地址。

扩展私钥也可以用来生成下面详细讨论的扩展公钥。

我们不能从单个独立私钥向后推导出扩展私钥。 这是我个人的理解,但我不是密码学专家,所以不敢肯定,但这么想也是情理之中。 但是,每一个独立的私钥都可能指向下一个独立的私钥,当然这个我也不确定。 因此,请务必不要向任何人透露您的任何私钥。

可以肯定的是,没有公钥会泄露其对应的私钥。 理解这一点很重要。

我在 上生成了一个测试钱包。 该站点是练习生成虚拟钱包的好地方(切勿使用此方法在具有 Internet 连接的计算机上生成真实钱包)。

扩展私钥如下所示:

比特币扩展公钥_比特币分叉影响比特币总量_比特币bitcoin公钥

请注意,上图显示了“帐户”扩展私钥。 我不知道为什么这个网站被标记成这样。

再看看这个扩展私钥的开头是“x”。 这意味着使用此私钥将生成以“1”开头的传统地址。 传统地址也称为 P2PKH(pay to public key hash)地址。

使用以“y”开头的私钥(或公钥)将生成以“3”开头的地址。 这些地址也称为 P2SH(Pay to script hash,支付给脚本哈希)地址。

使用以“z”开头的私钥将生成一个本地隔离见证/Bech32 地址。 这些地址以“bc1q”开头。

最后,以大写字母“X”、“Y”或“Z”开头的私钥生成多重签名钱包的地址。

扩展公钥

扩展公钥的用途不是很明显。 仔细看示意图底部可以看到,钱包软件使用扩展公钥生成的比特币地址与使用扩展私钥生成的比特币地址是一样的,而且地址顺序是一样的。 使用扩展公钥和扩展私钥生成的钱包看起来完全一样。 那么有什么区别呢?

比特币分叉影响比特币总量_比特币扩展公钥_比特币bitcoin公钥

使用扩展私钥生成的钱包能够进行支付。

不能使用使用公钥生成的钱包进行支付。 这种钱包通常被称为“观察”钱包。 你可以把这个钱包放在安全性较低的电脑上而不用担心丢失私钥,但它可以用来查看你的钱包余额,或者复制地址发送给他人。

但是您仍然应该注意保护您的扩展公钥。 一旦泄露,其他人可以通过访问您的扩展公钥查询您的钱包余额和所有地址。 从现在开始,他们可以像查看银行对帐单一样查看您的钱包余额。

保护您的财务隐私,同时也保护您的财务密钥(比特币私钥)。

注:扩展公钥如下图所示:

比特币扩展公钥_比特币bitcoin公钥_比特币分叉影响比特币总量

如上所示,公钥不是以“xprv”开头,而是以“xpub”开头,也可以以“ypub”、“zpub”、“Xpub”、“Ypub”、“Zpub”开头。 (大写字母指的是多重签名私钥。)

总结

我希望这篇文章能帮助您了解比特币的公钥和私钥,从而使您更容易理解比特币的工作原理。

如果您有任何问题,请联系我,或阅读我的教程。

看懂这篇文章,会让你更容易理解如何通过掷骰子生成助记词,生成多重签名钱包,以及PGP加密。

补充阅读

单击此处了解什么是衍生路径。

(结束)

(本文链接较多,可点击左下方“阅读原文”从EthFans网站获取)

原文链接: