知识库详情
知识库

以“词条释义”的形式对比特币区块链技术中经常涉及的术语及基本概念进行专业化的阐释和解读。

比特币地址技术
返回上级
BSV区块链编辑 2022-04-14 18:25 350

比特币地址是用160位哈希表示的ECDSA公私钥对中的公钥。使用公钥密码学,用户可以使用私钥对数据进行“签名”,而任何知道对应公钥的人都可以验证这个签名是否有效。

对于ECDSA密钥对的私钥,使用相应的公钥密码学方法,用户可以使用他们的私钥数据进行“签名”。任何知道公钥的人都可以验证这个签名是否有效,因为与生成数字签名的私钥相对应的公钥是唯一的。

强烈建议收款的用户每次都生成一个新地址,每个新地址都会对应一个新的密钥对(HD钱包使用的是确定性密钥对)。公钥及其关联的私钥(或在HD钱包里生成它们所需的密钥种子)存储在钱包数据文件中,这就是用户唯一需要备份的文件。

当向特定Bitcoin SV地址“发送”交易时,收款钱包需要知道生成该地址的私钥。这意味着,当比特币被发送到某地址的时候,如果收方使用的是非HD钱包,且这个钱包创建该地址后还没有再次进行备份,那么一旦收款方当前使用的钱包应用故障或设备丢失,那么发送到该地址的比特币会因为之前钱包没有及时备份,而永远丢失无汉找回。相反地,对于所有地址都是由单个密钥种子生成的HD钱包来说,这种问题就不会出现,因为在被用于接收比特币之前,地址都已经在被添加在一个地址密钥池中了。不过请记住,如果你“完全”丢失钱包(忘记密钥或助记词),那么你在这个钱包里所有比特币都将丢失并且永远无法恢复。

Bitcoin SV对用户创建或使用的地址数量没有限制,用户不仅可以实现每一笔交易使用一个新地址,并且从安全层面,我们还强烈建议用户这样做。比特币系统里并不存在“主地址”的概念;有时,在钱包界面看到的“比特币地址”并没有特别重要的意义,只是为了让你在使用钱包时更便捷的快速提取一个地址,钱包也会适时自动变更这个位置的地址 。

在比特币地址中包含校验和值(checksum value)是为了消除或大幅降低将比特币发送到一个错误地址的可能性。但是请注意,一个地址可能格式正确(格式、校验和等有效)但没有人实际拥有它(或所有者丢失了他们的wallet.dat、私钥),从而导致被发送到这个正确地址的比特币依然永远地丢失了。

前缀、公钥的160位哈希和校验和数据一起组成了一串字符,并使用了一个自定义方案(Base58Check编码方案)转换为一串字母和数字,这就是我们常用的地址。在Base58Check方案下,地址可以包含除数字0、小写字母l、大写字母O和I以外的所有数字字母字符。Bitcoin SV地址总是以前缀1开头。测试网地址通常以m或n开头。主网地址的长度为25-34个字符,测试网地址的长度可以是26-34个字符。大多数地址的长度为33或34个字符。

地址碰撞(几乎不可能发生)

鉴于Bitcoin SV地址基本上是一串随机数,尽管概率极小,但两个人独立生成同一个地址依然是有可能的,这相当于它们各自ECDSA公钥的160位哈希产生了相同的输出值。我们管这种现象叫作地址碰撞。如果发生了这种情况,尽管这两个地址是使用不同的私钥创建出来的,但是这两个地址的所有者都可以花费发送到该地址的钱。不过,这并不意味着其中一方能花掉另一方钱包里的所有资金。

由于地址的随机空间非常大,所以概率上说,地球在接下来的5秒内被摧毁的可能性,比未来的1000年里发生一次地址碰撞的可能性还要大。

如何创建地址

虽然理论上用户可以手动创建Bitcoin SV地址,但正确的或推荐的创建地址的方法是使用经过良好测试的、开源且被同行审阅过的钱包软件。在过去,手动处理密钥通常会导致资金损失。考虑到比特币系统与中心化系统不同,比特币丢失后是无法从系统中挂失找回的。

以下列示了由ECDSA私钥生成 Bitcoin SV地址的步骤:

0 – 获取ECDSA 私钥

18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725

1 – 取与之对应的公钥(33字节,1个字节0x02(y坐标为偶数),32个字节对​​应X坐标)

0250863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352

2 – 对公钥执行SHA-256哈希运算

0b7c28c9b7290c98d7438e70b3d3f7c848fbd7d1dc194ff83f4f7cc9b1378e98

3 – 对SHA-256的结果执行RIPEMD-160哈希运算

 f54a5851e9372b87810a8e60cdd2e7cfd80b6e31

4 – 在RIPEMD-160哈希值的前面添加版本号字节(主网络为0x00)

00f54a5851e9372b87810a8e60cdd2e7cfd80b6e31

(请注意,以下步骤是Base58Check编码,它有多个可用的库选项来实现它)
5 – 对扩展的RIPEMD-160结果执行SHA-256哈希

ad3c854da227c7e99c4abfad4ea41d71311160df2e415e713318c70d67c6b41c

6 – 对之前的SHA-256哈希结果再执行一次SHA-256哈希

c7f18fe8fcbed6396741e58ad259b5cb16b7fd7f041904147ba1dcffabf747fd

7 – 取第二个SHA-256哈希值的前 4 个字节。这是地址校验和

c7f18fe8

8 – 将从第7阶段中获得的4个校验和字节添加到第4阶段的扩展RIPEMD-160哈希值的末尾。这是25字节的二进制比特币地址

00f54a5851e9372b87810a8e60cdd2e7cfd80b6e31c7f18fe8

9 – 使用Base58Check编码,将结果从字节字符串转换为base58字符串。这是最常用的比特币地址格式

1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs

其它参考资料

应用
应用层协议
在比特币上进行开发
比特币地址
元网协议
区块链浏览器
确定性钱包
比特币地址技术
Base58Check编码
私钥
助记词
钱包导入格式(WIF)
纸钱包
脑钱包