主页 > imtoken钱包下载安卓最新版本 > 比特币地址、密钥和钱包之间的关系

比特币地址、密钥和钱包之间的关系

比特币的地址、密钥,钱包之间的关系

全球视野,独特见解

本文的主要内容包括:比特币地址、比特币密钥用法、比特币钱包,以及三者之间的关系。

钥匙

私钥

比特币上下文中的私钥是一个允许使用比特币的秘密数字。每个比特币钱包都包含一个或多个私钥,这些私钥保存在钱包文件中。私钥在数学上与为钱包生成的所有比特币地址相关。-wiki

私钥只是一个随机选择的数字。对比特币地址中所有资金的控制取决于相应私钥的所有权和控制权。在比特币交易中比特币钱包加密后钱不见了,私钥用于生成支付比特币所需的签名,以证明资金的所有权。私钥必须时刻保密,因为一旦泄露给第三方,相当于保护私钥的比特币也被交出。私钥也必须备份,以防不慎丢失,因为私钥一旦丢失,就很难找回,它所保护的比特币将永远丢失。

比特币私钥只是一个数字。你可以用硬币、铅笔和纸随机生成你的私钥:掷硬币 256 次,用纸和笔记录正反面并转换为 0 和 1,随机 256 位二进制数可作为比特币钱包的私钥。该私钥可以进一步生成公钥。

生成密钥的第一步也是最重要的一步是找到足够安全的熵源,即随机源。生成比特币私钥本质上与“选择 1 到 2256 之间的数字”相同。只要选择的结果不可预测或不可重复,选择数字的确切方法并不重要。比特币软件使用操作系统底层的随机数生成器来生成 256 位的熵(随机性)。通常,操作系统随机数生成器由人为的随机源初始化,可能通过摇动鼠标几秒钟等。对于真正的偏执狂,使用掷骰子方法并用铅笔和纸记录下来。

比特币私钥空间的大小是 2^256,这是一个非常大的数字。十进制大约是 10^77,而可见宇宙估计只有 1080 个原子。

比特币等加密货币矿机销售_比特币钱包_比特币钱包加密后钱不见了

以 Base58 校验和编码格式显示私钥。这种私钥格式称为钱包导入格式(WIF,Wallet Import Format)。

公钥

非对称密钥通常由一对密码组成,一个是私钥,另一个是公钥。公钥就像银行帐号,私钥就像控制账户或支票签名的 PIN 码。比特币用户很少直接看到数字密钥。通常,它们存储在钱包文件中并由比特币钱包软件管理。

公钥是用私钥生成的,根据选择的算法(RSA、DSA、EIGamal等)不同,生成的方法也不同。比特币使用的是椭圆曲线算法。公钥可以通过椭圆曲线算法从私钥计算出来,这是一个不可逆的过程:K = k * G。其中 k 是私钥,G 是称为生成点的常数点,K 是生成的公钥。逆运算,被称为“离散对数分解”——知道公钥K来找到私钥k——是非常困难的,就像尝试k的所有可能值一样,即蛮力。

椭圆曲线加密是一种基于离散对数问题的非对称(或公钥)加密方法,可以用椭圆曲线上的点相加或相乘来表示。

下面我们举个例子,就是我们高中最常见的椭圆曲线

假设我们设置p=17,也就是找出x=17,y=17范围内满足上式的所有值。当然这些值会在曲线上下降一段时间。

上面的这些点其实就是构成了一个群GROUP,群一定的特征,这里就不深究了,但是提一点,在群中也具有一定运算,也具有加法乘法等,但是和我们平时认知的加减乘除有所区别。

比特币钱包_比特币等加密货币矿机销售_比特币钱包加密后钱不见了

以上几点其实就构成了一个群GROUP,而且群具有一定的特性,这里不做讨论,但要提一下群内还有一定的运算,还有加法和乘法等,但是都是一样的正如我们通常知道的加法和减法一样,乘法和除法是不同的。

这部分是知识。有兴趣的读者可以私信我。因为太学术了,我就到此为止。

我们举个乘法的例子,下面是整数点的乘法,我们的目标是求生成点G的倍数kG。也就是G相加k次。在椭圆曲线中,点的相加相当于从那个点画一条切线,找到另一个与曲线相交的点,然后映射到x轴。

如果我们已经知道G和k,可以很轻易的计算出 kG,但是如果知道了KG却很难反推算出k和G,其实这里的k就是私钥,kG就是公钥,私钥可以推算出公钥,但是公钥计算理论上不能推算出私钥。

如果我们已经知道G和k,我们可以很容易地计算出kG,但是如果我们知道KG,就很难推断出k和G。其实这里的k就是私钥,kG就是公钥,私钥可以计算公钥。但是,公钥计算理论上不能推导出私钥。

注意:很多人会感到困惑。根据上面的理论,我们计算出来的公钥是一个点,但是我们平时看到的公钥是一串数字。实际上,公钥是 X 后跟 Y。

比如如下(现实中为了安全,值往往很大,前缀04代表未压缩格式的公钥)

x = F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A

比特币钱包_比特币等加密货币矿机销售_比特币钱包加密后钱不见了

y = 07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB

那么公钥是:K = x + y

地址

在比特币交易的支付部分,收款人的公钥由他的数字指纹表示,即比特币地址,就像支票上的支付对象(“收款人”)的名称一样。通常,比特币地址由公钥生成并对应于公钥。地址与公钥的关系,如下图

javascript的代码实现如下:上图中我提及了Base58Check算法,而在算法实现中我用的却是base58encode,这两者之间有什么差别? 下文将揭晓答案。

javascript的代码实现如下: 上图中我提到了Base58Check算法,但是我在算法实现中使用了base58encode。两者有什么区别?答案将在下文揭晓。

比特币的地址、密钥,钱包之间的关系

从 Base64 编码到 Base58

比特币等加密货币矿机销售_比特币钱包加密后钱不见了_比特币钱包

为了更简洁和方便地表示一长串数字,许多计算机系统使用大于十进制的数字和字母表示。例如,传统的十进制计数系统使用十位数字 0-9,而十六进制系统使用额外的 AF 六个字母。对于相同的数字,其十六进制表示将比其十进制表示短。更进一步,Base64 使用 26 个小写字母、26 个大写字母、10 个数字和两个符号(例如“+”和“/”)在电子邮件等基于文本的媒体中传输二进制数据。Base64 通常用于对电子邮件中的附件进行编码。Base58 是一种基于文本的二进制编码格式,用于比特币和其他加密货币。这种编码格式不仅实现了数据压缩并保持了易读性,还具有错误诊断功能。Base58 是 Base64 编码格式的子集,同样使用大小写字母和 10 位数字比特币钱包加密后钱不见了,但丢弃了一些在某些字体中容易读错和混淆的字符。具体来说,Base58中不包含0(数字0)、O(大写字母o)、l(小写字母L)、I(大写字母i)以及Base64中的“+”和“/”两个字符。简而言之,Base58 由大小写字母和数字组成,不包括 (0, O, l, I)。

比特币的 Base58 字母表

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

从 Base58 编码到 Base58Check

Base58Check 是比特币中常用的一种 Base58 编码格式,它添加了错误校验码来检查数据转录中的错误。校验和为 4 个字节长,添加在要编码的数据之后。校验和来自要编码的数据的哈希值,因此可用于检测和避免转录和输入中的错误。使用Base58check编码格式时,编码软件会计算原始数据的校验码,并与结果数据中的校验码进行比较。如果两者不匹配,说明有错误,则Base58Check格式的数据无效。例如,错误的比特币地址不会被钱包视为有效地址,否则这样的错误可能会导致资金损失。

为了使用 Base58Check 编码格式对数据(数字)进行编码,首先我们需要在数据中添加一个名为“版本字节”的前缀,用于指定需要编码的数据类型。例如,比特币地址的前缀为 0(十六进制的 0x00)),而在对私钥编码时为 128(十六进制的 0x80)。前缀的常见版本。

比特币的地址、密钥,钱包之间的关系

钱包

比特币等加密货币矿机销售_比特币钱包_比特币钱包加密后钱不见了

比特币的所有权是通过数字密钥、比特币地址和数字签名建立的。数字密钥实际上并不存储在网络中,而是由用户生成并存储在称为钱包的文件或简单数据库中。存储在用户钱包中的数字密钥完全独立于比特币协议,可以由用户的钱包软件生成和管理,无需区块链或网络连接。

钱包是私钥的容器,通常实现为有序文件或简单数据库。制作私钥的另一种方法是确定性密钥生成。这里可以使用原始私钥通过单向哈希函数生成每个新的私钥,并将新生成的密钥按顺序串联起来。只要可以重新创建序列,只需要第一个私钥(称为种子,主私钥)即可生成它们。

比特币钱包只包含私钥,不包含比特币。每个用户都有一个包含多个私钥的钱包。钱包包含一对私钥和公钥。用户使用这些私钥签署交易,证明他们拥有交易的输出(即其中的比特币)。比特币以交易输出(通常表示为 vout 或 txout)的形式存储在区块链上。

非确定性钱包

钱包只是随机生成的私钥集合。这种类型的钱包称为零类型非确定性钱包。例如,Bitcoin Core 客户端预先生成 100 个随机私钥,从一开始就生成足够多的私钥,并且每个密钥只使用一次。这种类型的钱包的昵称是“Just a Bunch Of Keys”或简称 JBOK。这种钱包现在正被确定性钱包所取代,因为它们难以管理、备份和导入。随机密钥的缺点是,如果您生成大量密钥,则必须保留所有密钥的副本。这意味着钱包必须经常备份。每个密钥都必须备份,否则如果钱包无法访问,钱包控制的资金就会丢失。这种情况直接与避免地址重复使用的原则相冲突——每个比特币地址只能进行一次交易。地址重用通过关联多个交易和交易对手地址来减少隐私。Type 0 非确定性钱包不是钱包的好选择,特别是如果你不想重复使用地址来创建太多私钥并保留它们。虽然比特币核心客户端包括 0 型钱包,但比特币核心开发人员不想鼓励每个人都使用它。下图表示一个包含一组结构松散的随机密钥的非确定性钱包。不想重复使用地址来创建过多的私钥并保留它们。虽然比特币核心客户端包括 0 型钱包,但比特币核心开发人员不想鼓励每个人都使用它。下图表示一个包含一组结构松散的随机密钥的非确定性钱包。不想重复使用地址来创建过多的私钥并保留它们。虽然比特币核心客户端包括 0 型钱包,但比特币核心开发人员不想鼓励每个人都使用它。下图表示一个包含一组结构松散的随机密钥的非确定性钱包。

比特币的地址、密钥,钱包之间的关系

确定性钱包

下面是一个确定性钱包的例子: 助记词钱包

助记词表是表示(编码)随机数的英文单词序列,用作识别钱包的种子。单词序列足以重新创建种子,并从种子中重新创建钱包和所有私钥。当钱包首次创建时,运行带有助记符的确定性钱包的钱包应用程序将向用户呈现 12 到 24 个单词的序列。词序是钱包的备份。它还可用于恢复和重新创建应用程序相同或兼容钱包的密钥。助记码使用户更容易复制钱包,因为与随机数序列相比,它们更容易被正确读取和复制。

总结

本文介绍了比特币地址、比特币密钥原理、比特币钱包,以及三者之间的关系。