共读《精通比特币》bitcoin

共读《精通比特币》第11天——第4章比特币地址

2018-08-08  本文已影响37人  且听风吟闲翻书

写文,以及做任何事情的时候,都一定要仔细你的怯懦,不要在字里行间自己否定自自己。

郎咸平曾经说过:比特币白给我都不要。
也有人说:比特币底层技术——区块链是最伟大的发明,堪比互联网。
到底比特币是什么?如何判断?难道我们能做的就是人云亦云?
如何能有自己的独立判断?

一起来《精通比特币》!

今天,我们共读《精通比特币》一书的 第4章 密钥、地址、钱包的第二节,让我们一起走向数字货币新旅程。每天早上10:24发文,欢迎关注支持,一起加油!

照搬的信念,无法抵御波动的冲击,只有行动铸就的思想体系,并在行进中不断修正,才能让我们不断变得更好。——Scalers《投资赚钱就是信念变现》

《精通比特币》一书,英文原名为Mastering Bitcoin ,国内译做《精通比特币》。

本书中英文电子版链接如下,点击蓝色字可跳转阅读:

  1. 英文原版,Chapter04 Keys, Addresses

2.中文版PDF链接

  1. 知笔墨中文版,第4章 密钥、地址、钱包

今天,我们开始《第4章 密钥、地址、钱包 》4.2 比特币地址的学习。

4.2 比特币地址

比特币地址,是一个字符串,由数字和字母组成。

比特币地址,相当于我们在比特币交易行为中的“比特银行”账号。

比特币地址,是由公钥经过单向的哈希函数生成的。

如果把比特币交易比作一张支票的支付,比特币地址,就是我们要填写的收款人账号。

比特币地址以数字“1”开头,下面是一个比特币地址的例子:

1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy

比特币地址,由公钥经过加密哈希算法得到。哈希算法是一种单向函数,接收任意长度的输入,产生指纹摘要。
加密哈希函数,在比特币中被广泛使用:比特币地址、脚本地址以及在挖矿中的工作量证明算法。
由公钥生成比特币地址时,使用的算法是Secure Hash Algorithm (SHA)和the RACE Integrity Primitives Evaluation Message Digest (RIPEMD),特别是SHA256和RIPEMD160。

通常用户见到的比特币地址,是经过“Base58Check”编码的,这种编码使用了58个字符和校验码,提高了可读性、避免歧义,并有效防止了在地址转录和输入中产生的错误。

4.2.1 Base58和Base58Check编码

Base58是一种基于文本的二进制编码格式,用在比特币和其它的加密货币中。这种编码格式不仅实现了数据压缩,保持了易读性,还具有错误诊断功能。

Base64使用了26个小写字母、26个大写字母、10个数字以及两个符号(例如“+”和“/”),用于在电子邮件这样的基于文本的媒介中传输二进制数据。Base64通常用于编码邮件中的附件。

Base58,是Base64编码格式的子集,同样使用大小写字母和10个数字,但舍弃了一些容易错读和在特定字体中容易混淆的字符。

tips: 为了更简洁地表示长串数字,计算机系统通常会使用以数字和字母组成 的表示法。

我们熟悉的十进制,使用0-9十个数字,而十六进制系统,使用了0-9十个数字,再加上 A-F 六个字母,一个同样的数字,十六进制表示就会比十进制表示更短。

例:

255这个十进制数,用16进制就表示为ff

1024这个十进制数,用16进制就表示为400

比特币地址产生的完整过程如下:

私钥——公钥(椭圆曲线上某个点)——两次哈希的地址——最终产生Base58Check格式的比特币地址

Base58Check编码的过程:

在比特币中,大多数需要向用户展示的数据都使用Base58Check编码,可以实现数据压缩,易读而且有错误检验。

校验码的存在,让系统对一个错误比特币地址进行检测,错误比特币地址就不会被钱包认为是有效的地址,从而避免资金进入网络黑洞,造成资金的丢失。

例4-2的C++代码完整详细的展示了从私钥到Base58Check编码后的比特币地址的步骤,偏重区块链编程的学习者,请自行查阅原文。http://zhibimo.com/read/wang-miao/mastering-bitcoin/Chapter04.html

4.2.2 密钥的格式

公钥和私钥的都可以有多种编码格式

私钥的格式

私钥,可以以许多不同的格式表示,都对应于相同的256位的数字。

以下是三种格式的私钥,同样的私钥,不同的格式,这些不同的编码格式主要是用来方便人们无误地使用和识别密钥。

Hex :1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD

WIF:    5J3mBbAH58CpQ3Y5RNJpUKPE62SQ5tfcvU2JpbnkeyhfsYB1Jcn

WIF-compressed:
KxFC1jmwwCoACiCAWZ3eXa96mBM6tb3TYzGmf6YwgdGWZgawvrtJ

公钥的格式

公钥,也可以用多种不同格式来表示,分为非压缩格式或压缩格式公钥这两种形式。

公钥是在椭圆曲线上的一个点,由一对坐标(x,y)组成。
公钥,通常表示为前缀04紧接着两个256比特的数字。
其中一个256比特数字是公钥的x坐标,另一个256比特数字是y坐标。

未压缩格式公钥使用04作为前缀,而压缩格式公钥是以02或03作为前缀。

引入压缩格式公钥是为了减少比特币交易的字节数,从而可以节省那些运行区块链数据库的节点磁盘空间。
压缩格式公钥,可以让我们只存储公钥的x坐标,略去y坐标,从而将公钥的大小和存储空间减少了256比特。
每个交易所需要的字节数减少了近一半,随着时间推移,就大大节省了很多数据传输和存储。

注意:一个私钥可以生成两种不同格式的公钥——压缩格式和非压缩格式,而这两种格式的公钥可以生成两个不同的比特币地址。但是,这两个不同的比特币地址的私钥是一样的。

除了压缩格式公钥外,我们还会听见压缩格式私钥这个名词,但是:

“压缩格式私钥”是一个不当用词!私钥不是压缩的。WIF压缩格式的私钥只是用来表明他们只能被生成压缩的公钥和对应的比特币地址。相反地,“WIF压缩”编码的私钥还多出一个字节,因为这种私钥多了后缀“01”。该后缀是用来区分“非压缩格式”私钥和“压缩格式”私钥。


第四章第二节到此结束,明天我们开始《4.3 用Python实现密钥和比特币地址》的学习。

今天就到这里吧,明天我们继续,祝大家夏天快乐!

276/365
20180808首发简书


第四章整体结构:

第四章

参考文献:

1、 知笔墨中文版,第4章 密钥、地址、钱包

2、爱莉莎:【区块链科普——课表放这里】

3、比特币白皮书原版:Bitcoin: A Peer-to-Peer Electronic Cash System

4、比特币白皮书——巴比特网站中译版

5、Scalers:《比特币白皮书解析 | 从零开始区块链》

上一篇 下一篇

猜你喜欢

热点阅读