主页 > imtoken苹果版最新版 > 比特币区块链(三) | 比特币地址

比特币区块链(三) | 比特币地址

imtoken苹果版最新版 2023-01-17 17:42:56

通过这篇文章,你会知道比特币地址的形式是什么,比特币地址的生成过程,以及比特币地址的种类和种类。

全文结构如下:

全文结构1.简介

比特币地址是一串数字和字母,可以与任何想给你比特币的人共享。从公钥生成的比特币地址以数字“1”开头。这是一个比特币地址的例子:

1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy

在介绍比特币的时候,我们可以用支票来类比。在现实生活中,支票是银行存款人向银行开具的票据,要求在见票时无条件向收款人或持票人支付一定金额。也就是说,只要银行看到支票,就会无条件地将钱转到支票对应的账户地址。支票形式如下:

银行转账支票

在支票中,收款人可能是银行账户,也可能是公司、机构,甚至是另一张现金支票。支票不指定特定帐户,而是使用抽象名称作为收款人,这使其成为一种相当灵活的支付工具。

与此类似,比特币地址使用类似的抽象。在比特币交易中,比特币地址通常作为接收方出现。如果将比特币交易比作支票,那么比特币地址就是收款人。

2.数字指纹

在比特币交易的支付过程中,接收者的公钥由其数字指纹表示,称为比特币地址。就像支票上收款人的姓名(即“收款人”)。通常,比特币地址由公钥生成并对应于公钥。然而,并不是所有的比特币地址都是用公钥生成的;它们还可以表示其他支付对象,例如脚本,这将在后面讨论。那么,既然比特币地址是由接收者的公钥通过数字指纹来表示的,那么什么是数字指纹呢?

数字指纹是指利用数字水印技术将不同的符号识别码——指纹嵌入数字媒体中,然后将嵌入指纹的数字媒体分发给用户,与用户和一定的时间相关。有关购买过程的信息。数字指纹的基本原理是利用单向哈希函数对发送的信息进行计算,生成一系列固定长度的数字摘要。数字指纹不是一种加密机制比特币私钥格式,但可以用来判断数据是否被篡改,从而保证信息的完整性不被破坏。

3.地址生成过程

比特币地址是从公钥生成的。简单来说就是通过公钥Hash运算对地址进行两次处理,然后通过最后的Base58Check编码来实现。具体流程如下图所示:

比特币地址生成过程

介绍SHA256,首先是SHA-2。 SHA-2的全称是Secure Hash Algorithm 2(英文:Secure Hash Algorithm2),是一种密码散列函数算法标准。SHA-2分为六种不同的算法标准,包括SHA -224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。所以,SHA256是一个加密哈希功能。

RIPEMD(RACE 原始完整性检查消息摘要)是一种加密散列函数。 RIPEMD-160 是原始 RIPEMD 的改进 160 位版本,是 RIPEMD 系列中最常见的版本。 RIPEMD-160 专为学术界使用而设计。没有任何专利限制使得 RIPEMD-160 成为比特币网络选择它的原因之一。

综上所述,比特币的地址是由公钥通过单向哈希算法SHA256计算出来的,再经过RIPEMD160哈希计算,最后通过Base58Check编码得到。综上所述,来源于公钥,两次Hash一次,编码一次。

4.地址的解码和编码机制

为了更简洁方便地表示长串数字,使用更少的符号,许多计算机系统使用大于十进制的数字和字母表示。例如,传统的十进制计数系统使用 0-9 的十位数字,而十六进制系统使用额外的六个字母 A-F。同样的,它的十六进制表示会比它的十进制表示短。

Base58 是一种基于文本的二进制编码格式,用于比特币和其他加密货币。这种编码格式不仅实现了数据压缩,保持了易读性,还具有错误诊断功能。 Base58 使用大小写字母和 10 个数字,但丢弃了一些在特定字体中容易读错和混淆的字符。具体来说,Base58不包含数字0、大写字母O、小写字母L、大写字母I,以及“+”和“/”两个字符。简而言之,Base58由不包括(0, O, l, I)的大小写字母和数字组成。比特币的Base58字母表

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

Base58Check 是比特币中常用的一种 Base58 编码格式,它是一种错误检测,目的是增加对打印和转录错误的安全性。该编码算法在编码数据的末尾添加了一个四字节的校验和,用于检测和避免转录和输入中的错误。

为了将数据转换成Base58Check格式,我们需要在数据中添加一个叫做“版本字节”的前缀,用来标识编码数据的类型。例如,比特币地址以 0 为前缀(十六进制为 0x00)),而私钥以 128 前缀编码(十六进制为 0x80)。下表列出了我们来看看常用版本的前缀。

Base58Check 编码常用前缀

明白为什么要加前缀,接下来我们看一下Base58Check编码过程。

Base58Check编码过程

第一步:添加前缀
   添加前缀是为了将数据(数字)转换成Base58Check格式。
第二步:两次哈希
   我们要计算“双哈希”校验和,这也就意味着要对之前的结果(前缀和数据)运行两次哈希算法:
   checksum = SHA256(SHA256(prefix+data))
第三步:添加校验码
     在产生的长32个字节的哈希值(两次哈希运算)中,我们只取前4个字节。
     这4个字节就作为检验错误的代码或者校验和。校验码会添加到数据之后。
第四步:使用Base-58编码

在比特币中,大部分需要展示给用户的数据都使用Base58Check编码,可以实现数据压缩、易读和错误检查。此外,Base58Check 编码中的版本前缀用于创建易于识别的格式,在 Base58 中编码的有效载荷在 Base58Check 的开头包含显式属性。这些属性使用户可以轻松识别正在编码的数据类型以及如何使用它们。可谓居家旅行必备的编码方式!

5.地址类型

1.P2PKH 传统比特币地址

P2PKH(Pay-to-Public-Key),如我们所知,传统比特币地址以数字 1 开头,由公钥衍生而来,而公钥由私钥衍生而来。虽然任何人都可以将比特币发送到以 1 开头的地址,但比特币只能在消费前通过对应的私钥签名和公钥哈希值发送。

2.P2SH地址

P2SH(pay-to-Script Hash),是一个以 1 开头的数字 3 比特币地址。它们将比特币交易的受益人指定为散列的脚本,而不是公钥的所有者。与将资金发送到传统的 1 个比特币地址的 P2PKH 交易不同,将资金发送到 3 个地址需要的不仅仅是公钥哈希和私钥签名作为所有权证明。这些要求是在创建地址时在脚本中指定的,所有对地址的输入都会被这些要求阻止。

3. M-N 多签地址

M-N(Multiple Signatures),多重签名地址是目前最常见的P2SH功能实现。顾名思义,底层脚本需要多个签名用于证明所有权,然后才能使用资金。比特币多重签名功能设计为需要总共N个密钥中的M个签名,称为M-N多重签名比特币私钥格式,其中M小于或等于N。

4.比特币虚荣地址

虚名地址是包含人类可读信息硬币地址的有效位。例如,1LoveBPzzD72PUXLzCkYAtGFYmK5vYNR33 包含 Base-58 字母 love。需要生成虚地址并针对数十亿个候选私钥进行测试,直到私钥可以生成具有所需模式的比特币地址。该方法必须设计为随机选择私钥,生成公钥,然后生成比特币地址。一旦找到所需模式的虚地址,就可以拥有该虚地址的私钥,以与任何其他地址相同的方式使用比特币。

参考文献

精通比特币,第二版,第 4 章 - 密钥和地址