主页 > imtoken国内版下载 > 比特币地址、密钥、钱包之间的关系

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

imtoken国内版下载 2024-01-24 05:16:08

比特币的地址是什么_q币和比特币是货币吗_比特币收款地址是一次性的吗

点击上方“统一时代”订阅!

unitimes.io

比特币的地址是什么_q币和比特币是货币吗_比特币收款地址是一次性的吗

全球视野,独到见解

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

钥匙

私钥

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

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

比特币的地址是什么_比特币收款地址是一次性的吗_q币和比特币是货币吗

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

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

公钥

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

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

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

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

比特币的地址是什么_q币和比特币是货币吗_比特币收款地址是一次性的吗

或者

比特币收款地址是一次性的吗_比特币的地址是什么_q币和比特币是货币吗

比特币的地址是什么_q币和比特币是货币吗_比特币收款地址是一次性的吗

假设我们设p=17,也就是说,在x=17,y=17的范围内,找到所有满足上述公式的值。当然这些值都会落在曲线上。

q币和比特币是货币吗_比特币收款地址是一次性的吗_比特币的地址是什么

以上几点实际上构成了一组GROUP。 组有一定的特点,这里就不细说了,提一点,组中也有一定的运算,还有加法、乘法等,但又不同于加减法我们通常认识。 乘法和除法是不同的。

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

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

q币和比特币是货币吗_比特币收款地址是一次性的吗_比特币的地址是什么

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

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

比特币收款地址是一次性的吗_比特币的地址是什么_q币和比特币是货币吗

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

x = F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A

y = 07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB

那么公钥就是:K = x + y

地址

在比特币交易的支付环节中,收款人的公钥由其数字指纹表示,称为比特币地址,就像支票上支付对象(即“收款人”)的姓名一样。 一般来说,一个比特币地址是由一个公钥生成并对应一个公钥。地址和公钥的关系如下图所示

比特币的地址是什么_比特币收款地址是一次性的吗_q币和比特币是货币吗

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

比特币的地址是什么_q币和比特币是货币吗_比特币收款地址是一次性的吗

比特币收款地址是一次性的吗_q币和比特币是货币吗_比特币的地址是什么

从 Base64 编码到 Base58

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

比特币的 Base58 字母表

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

从Base58编码到Base58Check

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

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

比特币的地址是什么_q币和比特币是货币吗_比特币收款地址是一次性的吗

钱包

比特币的地址是什么_比特币收款地址是一次性的吗_q币和比特币是货币吗

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

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

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

非确定性钱包

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

比特币收款地址是一次性的吗_q币和比特币是货币吗_比特币的地址是什么

确定性钱包

这是一个确定性钱包的例子:Mnemonic Vocabulary Wallet

助记词表是一系列英文单词,表示(编码)用作确定性钱包对应的种子的随机数。 单词序列足以重新创建种子,并且从种子、钱包和所有私钥。 运行确定性钱包的钱包应用程序将在首次创建钱包时通过助记符向用户呈现 12 到 24 个单词的序列。 单词序列是钱包的备份。 它还可以用于为具有相同或兼容应用程序的钱包恢复和重新创建密钥。 助记码可以让用户更容易复制钱包,因为与随机数字序列相比,助记码更容易阅读和正确转录。

总结

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