比特币区块链如何运作?

区块链源自比特币,不过在这之前,已有多项跨领域技术,皆是构成区块链的关键技术;而现在的区块链技术与应用,也已经远超过比特币区块链。要追溯区块链(Blockchain)是怎么来的,不外乎先想到比特币(Bitcoin),比特币是第一个采用区块链技术打造出的P2P电子货币系统应用,不过比特币区块链并非一项全新的技术,而是将跨领域过去数十年所累积的技术基础结合。

比特币区块链所实现的基于零信任基础、且真正去中心化的分散式系统,其实解决一个30多年前由Leslie Lamport等人所提出的拜占庭将军问题。

1982年Leslie Lamport把军中各地军队彼此取得共识、决定是否出兵的过程,延伸至运算领域,设法建立具容错性的分散式系统,即使部分节点失效仍可确保系统正常运行,可让多个基于零信任基础的节点达成共识,并确保资讯传递的一致性,而2008年出现的比特币区块链便解决了此问题。而比特币区块链中最关键的工作量证明机制,则是采用由Adam Back在1997年所发明Hashcash(杂凑现金),为一种工作量证明演算法(Proof of Work,POW),此演算法仰赖成本函数的不可逆特性,达到容易被验证,但很难被破解的特性,最早被应用于阻挡垃圾邮件。

在隐私安全方面的技术,可回溯到1982年David Chaum提出注重隐私的密码学网路支付系统,具有不可追踪的特性,成为比特币区块链在隐私安全面上的雏形,之后David Chaum也基于这个理论打造出不可追踪的密码学网路支付系统eCash,不过eCash并非去中心化系统。

在区块链中每笔交易,采用椭圆曲线数位签章演算法(Elliptic Curve Digital Signature Algorithm,ECDSA),可追溯回1985年Neal Koblitz和Victor Miller分别提出椭圆曲线密码学(Elliptic curve cryptography,ECC),首次将椭圆曲线用于密码学,建立公开金钥加密的演算法。相较于RSA演算法,采用ECC好处在于可以较短的金钥,达到相同的安全强度。到了1992年,由Scott Vanstone等人提出ECDSA。

运作过程

比特币网络从2009年1月开始至今,在没有专人维护的情况下已经平稳运行7年多,期间没有出现一次宕机。图4以Bob接收来自Alice的比特币的场景,详细描述了比特币区块链的工作方式,一并解释了涉及到的钱包和地址(Wallets and Addresses)、私钥和公钥(Private Key and Public Key)、加密哈希(Cryptographic Hashes)、随机数(Nonces)等概念。

比特币区块链如何运作?

 

钱包和地址:
1. Bob和Alice的电脑上都有比特币钱包。

2. 钱包是一种文件,可以让用户访问多个比特币地址。

3. 一个地址是一串由字母和数字组成的字符串。

4. 每一个地址都有自己的比特币余额。


新建一个地址:
5. Bob创建一个新的比特币地址,用于接收Alice的付款。


私钥和公钥:
6. 当Bob创建一个新地址时,他真正在做的是生成一个密钥对,由一个私钥和一个公钥组成。如果你使用私钥(只有你知道)对一个消息进行签名,它可以被对应的公钥(所有人都知道)所验证。Bob的新地址代表一个唯一的公钥,对应的私钥则保存在他的钱包里。公钥允许所有人来验证被私钥签名的消息的有效性。

7. 可以将地址看做银行账号,但工作方式稍有不同。比特币用户可以任意创建多个地址,并且被鼓励为每一个新的交易单独创建新地址,以增强隐私性。只要没有人知道哪些地址是Alice的,她的匿名就受到保护。

提交一个支付:

8. Alice告诉她的比特币客户端,她要向Bob的收款地址转账。

9. Alice的钱包里有她的每一个比特币地址的私钥。比特币客户端用Alice此次使用的付款地址的私钥,对她的这一交易申请进行签名。

10. 此时,网络上的任何人都可以使用公钥来验证,这个交易申请实际来自一个合法的账户所有者。
验证交易:
11. Gary、Garth和Glenn都是比特币矿工。

12. 他们的电脑将过去约10分钟内的交易打包成一个新的交易区块。

13. 矿工的电脑被设置用于计算加密哈希(Cryptographic Hash)函数。

14. 加密哈希函数将一个数据集转换成特定长度的包含字母和数字的字符串,称为哈希值。源数据的细微改变会彻底改变哈希值的结果。并且基本不可能预测初始的数据集将会产生的特定哈希值。
15. 为相同的数据创建不同的哈希值,比特币使用随机数来实现。随机数是在进行哈希计算之前,在数据中添加的随机数字。改变这个随机数会产生极不相同的哈希值。

16. 每一个新的哈希值包含关于此前所有比特币交易的信息。

17. 矿工的电脑基于前一个区块的哈希值、新交易区块和随机数,来计算新的哈希值。

18. 创建哈希在计算上微不足道,但比特币系统要求新的哈希值拥有特定格式——必须以特定数量的0作为开始。

19. 矿工无法预测哪个随机数会产生以要求的数量的0作为开始的哈希值,所以他们*用不同的随机数创建很多哈希,直到获得有效的那一个。

20. 每一个区块都包含一个名为coinbase的初始交易,这是给胜出矿工的50比特币的支付——在这个例子中是矿工Gary。Gray的钱包里生成了一个新地址,里面的余额是新挖到的比特币数量。

  • :只有在比特币发行的阶段1,每一个区块的coinbase支付给胜出矿工的新币是50个。从2009年1月3日创世区块诞生开始,新比特币的发行大约每4年减半,2012年11月28日,阶段2开始,每一个区块包含的新币减为25个,这是历史上第一次减半;预计今年7月11日,挖矿奖励会再次减半;直到第33次减半时,每一个区块从产生0.0021个新币直接减为0个,比特币的总量固定在将近2100万个。

交易验证:
21. 随着时间流逝,Alice向Bob的转账被埋在了其它更近期的交易下面。任何人要想修改历史交易的细节,就必须重做一遍Gary的工作,然后再重做所有下一级矿工的工作,因为所有的改变都需要一个完全不同的胜出随机数。这样的操作几乎不可能成功。

上一篇:XSS攻击(跨站脚本攻击)


下一篇:CF1592F Alice and Recoloring