透过比特币深入剖析区块链工作原理

2021-02-27 08:53丁怡心廖勇毅
现代计算机 2021年35期
关键词:哈希挖矿比特

丁怡心,廖勇毅

(广州民航职业技术学院航空港管理学院,广州 510800)

0 引言

2021年2月,比特币价格再创新高,突破5万美元每枚,比特币再次成为世界焦点。比特币的价值不在本文的讨论范围,但是它背后的区块链技术具有非凡的革新意义,值得深入研究。

区块链是一种数字化数据的存储方法,数据是以区块的形式出现,这些区块链接在一起,为其内部数据赋予了不可变性。当一个数据块被链接到了这条链上,其内部数据就再也无法更改了,里面的数据对任何人都是公开可见的。利用这项技术,可以用来记录我们能想到的几乎所有数据(例如,财产、合同、病历等),同时不存在被篡改的风险。比特币作为区块链技术的杰出代表作,对我们研究区块链技术有重要意义。

1 比特币介绍

2008年,中本聪[1]发表比特币白皮书《比特币:一种点对点式的电子现金系统》,2009年,他发布了首个比特币软件,从此比特币货币系统正式启动。比特币最重要的三个特征是:去中心化、不可篡改性及匿名性,这些特征保证比特币系统长期稳定运行。同时比特币系统规定以下内容:

(1)比特币的总量是2100万枚,任何人都不能修改,这是比特币稀缺性的一种保障。

(2)比特币伴随区块产生而产生。2100万枚比特币不是一次性产生的,而是伴随账本数据块的产生而产生,每10分钟会产生一个账本数据块,该账本数据块被称作区块,整个产生过程将用131年。

(3)每过21万个区块,比特币奖励减少一半。按照每10分钟产生1个区块,一天24小时则产生 24×6=144个区块,210000÷(144×365)≈4,也就是说每过4年比特币的奖励会减半。所以从2009年开始每个区块奖励50枚比特币;到2013年之后,每个区块奖励25枚比特币;2017年以后每区块奖励12.5枚比特币。

总结以上内容,有以下结论:①比特币总量2100万枚。②目前只剩下约300万枚可以挖采。③每过4年每枚比特币的挖采成本翻倍。因此在比特币得到认可的前提下,这些正是它价格不断升高的重要逻辑。

2 区块链工作原理

比特币背后的区块链技术是本文研究的重点,本节从区块链结构、不可篡改性、工作量证明、防止攻击及比特币交易5个内容分析比特币区块链工作原理及相关核心技术。

2.1 区块链结构

区块链是一种数字化数据的存储方法,比特币区块链上存储着比特币的交易数据。它是一个庞大的交易记录库,每一笔比特币交易记录都可追溯,这些交易记录库保存在比特币系统中的每个节点。目前比特币区块链中约有60万个区块,每个区块不超过1 MB。区块中的核心数据是交易记录,区块会按照时间顺序从第一笔交易开始记录,直到数据量达到1 MB为止,之后的交易会记录下一个区块中,直到数据量达到1 MB为止,以此类推。这些区块一个接着一个链接在一起,如图1所示。

图1 区块链结构

比特币系统中所有节点都保存着同样的区块链数据,每个节点都是平等的,没有类似银行的中心服务器,即去中心化。区块中的数据除了交易记录,还有区块头信息,用于维护整个区块链,关键字段说明如表1所示。

表1 区块头字段说明

2.2 不可篡改性

区块链体系中所有节点都保存着完整的区块链数据,区块链中的区块一旦形成则不可被篡改,比特币系统使用SHA-256哈希签名技术实现不可篡改性。

每个区块根据内部交易数据串生成一个签名以保证区块数据不可篡改,同时上一个区块的签名也包含在当前区块的数据串内,当前区块的签名也包含在下一个区块的数据串中,如图2所示。

图2 区块链数据串签名

通过这种链式的签名方式,当某个区块数据的任何改动都会导致后面所有区块的签名发生变化,为了维护比特币区块链的不可篡改性,其他用户会拒绝同步更改后的交易信息,依旧维持原有的交易记录。

一旦某交易已经被足够多的区块覆盖,这之前的支付交易就可以被丢弃以节省磁盘空间。为便于此而又不破坏区块的哈希值,交易将被哈希进默克尔树[9-11],只有默克尔根被纳入到区块的哈希值中。

默克尔树,就是对区块内的每笔交易进行多次双重哈希算法及两两一组拼接,形成默克尔根以保证区块链每笔交易的不可篡改性。例如某区块内有N笔交易,则默克尔根形成过程如下:

(1)对所有N笔交易分别进行哈希运算得到N个哈希值。

(2)对N个哈希值两两拼接组成N/2个结果。

(3)对N/2个结果分别进行哈希运算,并对运算结果再两两拼接组成N/4个结果。

(4)重复该过程直到剩下一个哈希值,这就是默克尔根。

图3 merkle根形成过程

通过这种方式,把区块内的交易信息都压缩成一个默克尔根,区块只需要保存区块头信息,区块头大小只有80 bytes,按照每10分钟产生一个区块,一年产生的数据量是:365×24×6×80 bytes=4.2 MB,极大地节省了节点的磁盘空间。

2.3 工作量证明

区块链中的区块一旦形成,区块中的数据是不能被更改或增加的,新的交易数据只能打包存放在新增的区块中。为了鼓励人们打包新的区块,比特币系统会给打包者一定数量的比特币作为奖励,这个竞争记账的过程就是所谓的“挖矿”,竞争者即所谓的“矿工”。

比特币系统用工作量证明(Proof of Work,简称POW)机制来实现竞争结果的判定。工作量证明的思想是:根据哈希算法的不可逆性,从特定哈希值推算出输入值是不可能的,唯一的办法就是穷举,通过不断尝试去寻找输入值。

比特币系统要求区块的哈希值开头必须由若干个0组成,比如第663721区块的哈希值要求以19个0开头,输入数据则由交易数据、父区块哈希值以及一个随机数组成,交易数据和父区块哈希值是固定的,只能通过不断尝试以寻找满足要求的随机数。

比特币区块中用Nonce字段保存找到的随机数。竞争者找到满足要求随机数后即可打包新区块,并广播到所有比特币节点,其它节点验证通过后将该区块接入原来的区块链,并继续新一轮的竞争。

图4 工作量证明

在极少数情况出会出现两个或以上的竞争者同时找到满足要求的随机数,例如A、B两位竞争者同时找到满足要求的随机数,他们都会把自己打包的新区块广播到其他节点中,比特币网络节点中有部分人先收到A的区块,另一部分人先收到B的区块,于是这些节点会分别维护着不同的链,根据中本聪共识机制(最长链为合法链),这两条链都是最长链,所以都是合法链,这时区块链就出现了分叉。矿工们分别在自己维护的链条上继续挖矿,如果新的一轮竞争中两个链条上的新区块又同时产生(基本不可能发生),则分叉继续合法存在,否则某一分叉先产生新区块,由于这时该链是唯一最长链条成为合法链,于是所有节点又聚集过来共同维护该链条,另外一条链因无人维护则形成孤块。

图5 区块链分叉

比特币系统为使平均出块时间基本维持在10分钟,会定期根据过往的出块时间调整挖矿难度,即调整区块哈希值开头0的个数。

2.4 防止攻击

比特币系统中如果出现恶意节点试图修改某区块的交易记录,对于该区块,恶意节点需要做的事情是:修改交易记录,并重新找到工作量证明随机数以生成该区块哈希值。这意味着在原来链条中出现了分叉,根据中本聪共识机制(最长链为合法链),所有其他节点都会维护原来最长的链条,该分叉只有恶意节点维护。于是恶意节点必须继续修改后面的区块直到它链条比原来的链条更长,这些修改才能得到认可。也就是说恶意节点的算力必须大于全网其它节点CPU算力的总和,它的修改才有可能成功,这在当前庞大的比特币网络是不可能实现的,并且随着比特网络的越来越壮大变得更不可能。

图6 恶意攻击

另外“挖矿”激励机制有助于鼓励节点保持诚实,当一个恶意节点有能力聚集巨大CPU算力时,他可能会发现遵守规则参与“挖矿”比破坏规则篡改区块带来更大的效益。

2.5 比特币交易

比特币系统中没有余额的的概念,它使用的是UTXO模型(Unspent Transaction Outputs,未使用过的交易输出),比特币钱包软件遍历与当前钱包地址相关的交易记录,用输入该地址的金额减去从该地址输出的金额得到的结果即UTXO,这就是钱包余额。

一笔交易若要生效必须满足两个条件:①这笔交易必须包含一个有效签名,来自它所花费的UTXO的拥有者。②被花费的UTXO的总金额必须大于等于该交易产生的UTXO总金额。

图7展示了与Roger相关的交易,在这过程中Roger从Jack账户获得6枚比特币,而Roger在一笔交易中要转账5枚给Tim,然后自己剩下1枚比特币。具体过程如下:

图7 比特币交易记录

(1)在交易001中,Roger从Jack账户中获得6枚比特币,这个交易中包含一个输入和一个输出,输出包含当前输出的索引、金额、锁定脚本和接受者的公钥。锁定脚本的作用是,锁定只有Roger才能使用这笔输出。要使用这个UTXO,就必须要证明自己是Roger。

(2)Roger要发送5枚比特币给Tim。提交这笔交易之前Roger首先要确认两件事:①自己有足够的“余额”去支付这笔交易。②证明自己是这些余额的拥有者。要计算用户的余额,就要遍历Roger的所有交易记录,这里,我们Roger就只有001一笔交易,即Roger当前的余额是6枚比特币,大于所要支出的5个比特币,所以交易可以进行。要证明自己是这6枚比特币的拥有者,需要解锁脚本(包含了Roger用私钥对上一笔交易输出的签名),使用Roger的公钥对Roger的私钥签名进行验证即可证明Roger为拥有者。

(3)创建交易002,该交易的输入引用了交易001中索引0的输出,同时创建2个输出,一个是给Tim的5个比特币,包含一个锁定脚本,该锁定脚本限定只有Tim才能使用;另一个是找零产生的输出,发送给Roger的1个比特币,包含一个锁定脚本,限定只有Roger本人才能使用。

(4)交易创建完成后,向比特币网络广播出去,比特币网络中的其他节点会验证该交易的有效性,当比特币网络确认这笔交易,且在下一次挖矿竞赛中将该交易打包进区块中并得到全网共识确认后,这笔交易就确认有效了。

通过这种设计,比特币系统中每一笔交易的来源都可以验证真实性和合法性,攻击者无法伪造交易,也不能冒用其他人的账号进行交易。同时,由于每一枚比特币都可被追溯,所以避免了双重支付的发生。此外,交易中的账户地址是由用户公钥变换而来,与身份信息无关,因此不能直接根据交易记录推测交易者的身份信息,从而实现匿名性。

3 结语

比特币诞生短短12年,价格屡创新高令世人瞩目,其背后的区块链技术受到广泛关注。抛开市场价值,区块链技术去中心化、不可篡改性及匿名性的特点为现代互连网技术提供了重要的参考意义。本文介绍了比特币,并从区块链结构、不可篡改性、工作量证明、防止攻击及比特币交易5个内容分析比特币区块链工作原理及相关核心技术,让大家对比特币及区块链有更直观的了解及认识。

猜你喜欢
哈希挖矿比特
疯狂的“挖矿”
矿工“杀红眼”!一切皆可挖矿
供电紧张,伊朗禁挖比特币4个月
哈希值处理 功能全面更易用
Windows哈希值处理不犯难
文件哈希值处理一条龙
《彭博》比特币有多贵?
比特币分裂
比特币一年涨135%重回5530元
巧用哈希数值传递文件