首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

读懂比特币——史上最准的介绍

今天的文章特别干,没有一点水分~

比特币所使用的主要技术

1

利用SHA256算法和非对称加密算法制作数字签名

2

利用区块链中的区块存储比特币交易记录

3

利用工作量证明争夺记账权利

比特币特点

1

点对点加密数字货币

2

去中心化(比特币转账不依赖银行或其他金融机构)

3

总量不变(比特币网络内比特币的总量不超过2100万个)

4

降低国际交易成本

比特币的交易实际上是互联网的记账过程,通过哈希算法和非对称加密算法保证是记账者本人签名,基于区块链技术的分布式账本存储和维护交易记录。下面小编通过比特币所依赖的技术,详细介绍比特币的原理。

数字签名

如图1为比特币交易的工作过程,以A给B支付50个BTC为例说明:A将支付50个BTC的指令发出后,第一步,通过哈希(Hash)算法SHA256函数将指令转换为固定位数的字符串,我们称为哈希值1;第二步,通过加密算法将哈希值1转化为加密的哈希值;第三步,通过加密算法对加密的哈希值进行解密重新得到哈希值1;第四步,B将接受指令通过哈希算法SHA256转换为哈希值2;第五步,比较哈希值1和哈希值2是否相同,如相同则记账成功。那么,在整个记账过程中就会用到哈希算法和非对称加密算法制作数字签名,下面小编再详细介绍哈希算法和非对称加密算法,大家看完哈希算法和非对称加密算法后就理解上面所讲的数字签名过程了。

01

哈希算法

为了表征一个事物的唯一性,产生了哈希算法。哈希算法可以将任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值,也被称为哈希值。这种转换是一种压缩映射,也就是散列值的空间可以远小于输入的空间。在哈希算法中要用到哈希函数,目前已有的哈希函数包括MD2、MD4、MD5以及SHA,并且哈希函数有两个重要的特性:单向性位数固定性。下面我们用一幅图来表示哈希运算过程,例如,有一个字符串123,通过某一种哈希函数运算,变成了abcdef,即通过哈希运算将一个3位的字符串变成了一个6位的字符串;另一个字符串为abcd1234通过相同的哈希函数运算,变成了efghij,即通过哈希运算将一个8位的字符串变成了一个6位的字符串。在这个变换中,只能从前面的字符串变到后面的字符串,无法从后面的字符串变到前面的字符串。另外,不管前面的字符串多少位,经过哈希运算后都会变为相同位数的字符串。

在比特币记账中,采用的是SHA256函数,SHA256函数公认是最安全的哈希函数,目前还没有发现缺陷。SHA是Secure Hash Algorithm(安全哈希算法)的简称,256代表哈希运算后得到256位的二进制数,即由0和1组成的256位数字,如下图所示。那么对于SHA256函数,有2的256次方种组合,这个数有多大呢,小编用MATLAB算完为1.1579e+77。我们做一个对比大家就知道这个数有多大了,宇宙中原子的个数约为10^80,也就是1e+80个,SHA256的组合个数仅比宇宙中原子个数少3个0。大家可以想象一下这个数有多大,因此,目前的计算机还很难攻破SHA256。

02

非对称加密算法

非对称加密算法与对称加密算法对应,是密码学中常用的加密方式。首先我们来看对称加密算法,对称加密是指加密和解密均使用同一个秘钥,这个秘钥被称为私钥,常见的对称算法包括DES、AES、3DES等。举例来说明对称加密算法运算过程,如下图所示,A要给B传输一个信息,为了不让别人发现传输内容,A通过私钥k(key)将明文p(plaintext)加密成密文c(ciphertext),B再通过k将c解密成p。A想将123传给B,私钥是+1,通过加密后密文为234,B通过私钥对密文解密后得到明文123。C想要窃听A、B间的信息,可以通过长期观察密文计算得到私钥。因此,对称加密算法很容易被攻破,从而产生了非对称加密算法。

非对称加密算法是指加密和解密采用不同的秘钥,加密过程使用私钥,解密过程使用公钥。常见的非对称加密算法包括RSA和ECC算法。还是举例来说明非对称加密运算过程,如下图所示,A要给B传输一个信息,为了不让别人发现传输内容,A通过私钥k将明文p加密成密文c,B再通过公钥d将c解密成p。非对称加密算法有一个重要的特性是不可逆性,这也保证了其安全性。即从m→k→p→d→m是没问题的,但无法逆向从m→d→p→k→m。这主要得益于RSA原理的高明,因为要攻破私钥,需要对1024位二进制数进行质因数分解,目前的计算机还无法做到一一对比一个大数的质因数分解,但量子计算机是可以攻破的。因此,目前RSA算法仍是安全的。如想了解RSA算法的,请自己wikipedia或Google。

将哈希算法与非对称加密算法结合就实现了数字签名过程,哈希算法的单向性保证了封装原始数据的不可篡改性,非对称加密算法保证了数据的安全性。因此,二者结合就解决了数字签名的唯一性和不可篡改性。从比特币交易流程图中可以发现,签名时用到私钥,验证签名时用到的是公钥。验证签名时对比的是哈希值而非原始数据,也保证了原始账户的安全性。上面介绍的是比特币的单笔交易过程,那么如何知道A账户中是否有比特币,怎样存储转账记录和维护数据存储。中本聪采用了区块链技术,并让所有参与比特币挖矿和交易的计算机共同记录和维护交易记录,那么就会出现3个一致性方面的问题:如何进行所有计算机记录同步、如何防止记录被篡改、如何防止同一笔比特币收入被重复使用。比特币利用区块链来解决这3个一致性方面的问题。下面小编将介绍区块链。

区块链

区块链是由一个个区块按照时间顺序串联构成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本,其结构如下图所示。区块中存储的是经过验证和检查的交易记录。对于比特币所用的区块链,是单条最长的区块链被认可,其他分叉出的支链不被确认,即比特币的区块链的每个节点都存储着一个相同的区块链。下面重点介绍比特币的区块链结构,也就是常说的区块链1.0。

图中的第0个区块也被称为创世区块,是后面交易和挖矿的基础,因为后面的区块必须包含前面一个区块的所有信息,这样就必须要有一个初始区块。当新的交易记录生成,被放入新的区块,并且将新的区块添加到区块链中时,这个新的交易记录才得到比特币网络的确认。这些新的交易记录由矿工进行检查,新的区块由矿工生成,矿工负责检查这些交易记录的数字签名是否正确、是否与交易记录对应、交易记录是否被使用过等。检查无误后制作好新区块,并把新区块发送到网络上的各个节点,网络上各个节点再检查这个新区块是否满足要求,如满足就将其添加到区块链的末尾。由于网络上有很多矿工,那么就有可能生成许多新区块,为了保证区块链的唯一性,比特币采用工作量证明的方式来限制单位时间内生成的新区块数量。那么在限制单位时间内谁先找到这个新区块,所有的节点都会认可,并将其加到区块链末尾。矿工将新的交易记录放入新区块后还需要完成一个额外工作,这个额外的工作包括两步:第一,将新制作的区块所包含的内容,即前一个区块的SHA256函数值、这个新区块的基本信息和这个新区块所包含的所有交易记录,组成一个字符串;第二,在组成的字符串末尾添加一个随机数,组成新的字符串,将新字符串输入到SHA256函数中生成一个256位的二进制数,如果这个二进制数的前72位全是0,才算完成了这个额外工作。这个额外工作的工作量为是的前72位数全为零的概率为(1/2)^72,也就是计算机平均要计算(1/2)^72才能找到这个随机数使得SHA256函数生成的二进制数的前72位全是0。目前比特币的所有矿工加起来的算力平均10分钟会找到这个这个随机数,这也保证了新区块很难被同时生成,只有算力强找到的概率才会大,这个找随机数的过程也被称为挖矿。比特币网络会不断增加挖矿难度,也就是增加SHA256函数生成二进制数位数是0的个数。当网络上同时生成两个新区块时,就有可能发生区块链分叉,这个小编在这里不再赘述。

介绍完区块链,现在我们就可以回答上面提出的3个一致性问题:第一,如何进行同步,对于比特币,保留的都是最长的一条区块链,也就是主链,大家都以这条区块链为准。那么长时间没有联网或第一次安装比特币客户端,联网后都会自动向周围的网络节点请求自己没有的区块,检查无误后逐一添加到自己已存储的区块链末尾。第二,如何防止记录被篡改,由于比特币网络只认可最长的一条区块链,如果这条链中的某个交易记录被篡改的话,这个区块的SHA256函数值就会被改变,导致后面区块所包含的SHA256函数值与这个SHA256函数值不相同,从而导致这条区块链断裂,那么这条链就不再是比特币网络中最长的链,也就不符合比特币网络只认可最长一条区块链的要求。那么篡改者有没有可能篡改记录后自己制作区块并生成最长的区块链,理论上是可以的。即当篡改者的计算能力超过整个网络中其他节点的计算能力总和时,就可以自己制作区块生成最长的区块链,也被称为51%算力攻击。目前加入到比特币挖矿和交易中的计算机越来越多,这种控制51%算力攻击的可能性微乎其微。第三,如何防止同一笔比特币收入被重复使用,在比特币交易中,矿工如果发现有相同的交易记录产生时,只会将先发生的交易放到新区块中,只有被放入区块中的交易才会被认可,因此,同一笔交易记录在区块链中只可以使用一次,未被放入区块链中的交易也就不会被确认,也就交易不会成功。

小编通过比特币所依赖的技术,对比特币的工作原理进行了解释和说明,虽然有很多内容都是非常简单的介绍,但文章依然很长,希望大家能耐心看完!一定会对比特币的认识加深很多,对于数字资产的购买有很大的指导作用,避免买到空气币。

好了,小编今天就唠叨这么多,希望对大家有用,有任何问题欢迎大家拍砖!动动您的小指头,关注小编公众号,一定不让您失望!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180619G0P4QU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券