探一文读懂区块链和比特币最核心的技术

广角

18-04-0816:31

区块链技术调研

一.目的

调研密码学方法怎样支撑以 BitCoin为代表的区块链技术, 分析区域链如何实现去中心化、完整性、匿名性、可追溯性。

二.区块链简介

狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构, 并以密码学方式保证的不可篡改和不可伪造的分布式账本。广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。

三.区块链技术的密码学支持

(1)哈希函数

Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函。

一个优秀的 hash 算法,将能实现:

正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。

逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。

输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。

冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。

(2)公钥密码算法

在中本聪的比特币白皮书中曾经对电子货币进行了定义,其本质是一种数字签名,而每一位所有者通过对前一次交易和下一位拥有者的公钥签署一个随机散列的数字签名,并将这个签名附加在这枚电子货币的末尾,电子货币就发送给了下一位所有者。而收款人通过对签名进行检验,就能够验证该链条的所有者。在这个过程中,公钥用于验证一枚比特币的所有人,也是通过公钥来进行签名来确认比特币的所有权转移,具体实现如下图。

(3)时间戳服务器

上述的过程的问题在于,收款人将难以检验,之前的某位所有者,是否对这枚电子货币进行了双重支付。我们需要收款人有某种方法,能够确保之前的所有者没有对更早发生的交易实施签名。那么交易信息就应当被公开宣布,我们需要整个系统内的所有参与者,都有唯一公认的历史交易序列。收款人需要确保在交易期间绝大多数的节点都认同该交易是首次出现。本解决方案首先提出一个“时间戳服务器”。时间戳服务器通过对以区块形式存在的一组数据实施随机散列而加上时间戳,并将该随机散列进行广播,就像在新闻或世界性新闻组网络的发帖一样。显然,该时间戳能够证实特定数据必然于某特定时间是的确存在的,因为只有在该时刻存在了才能获取相应的随机散列值。每个时间戳应当将前一个时间戳纳入其随机散列值中,每一个随后的时间戳都对之前的一个时间戳进行增强,这样就形成了一个链条。

(4)哈希现金(Hashcash)

在上述过程中,我们只是将其进行了广播,对于一些别有用心的人,想要攻击并篡改区块的信息是很容易的,对此我们就需要引入哈希现金的机制,哈希现金又被称作工作量证明机制,它是亚当·贝克(Adam Back)在1997年发明的,用于抵抗邮件的拒绝服务攻击及垃圾邮件网关滥用。在比特币之前,哈希现金被用于垃圾邮件的过滤。在进行随机散列运算时,工作量证明机制引入了对某一个特定值的扫描工作,比方说 比特币中所应用的SHA-256 下,随机散列值以一个或多个 0 开始。那么随着 0 的数目的上升, 找到这个解所需要的工作量将呈指数增长,而对结果进行检验则仅需要一次随机散列运算。我们在区块中补增一个随机数,这个随机数要使得该给定区块的随机散列值出现了所需的那么多个 0。我们通过反复尝试来找到这个随机数,直到找到为止,这样我们就构建了一个工作量证明机制。只要该 CPU耗费的工作量能够满足该工作量证明机制,那么除非重新完成相当的工作量,该区块的信息就不可更改。由于之后的区块是链接在该区块之后的,所以想要更改该区块中的信息,就还需要重新完成之后所有区块的全部工作量。

(5)Merkle tree(默克尔树)

在最底层,我们把数据分成小的数据块,有相应地哈希和它对应。但是往上走,并不是直接去运算根哈希,而是把相邻的两个哈希合并成一个字符串,然后运算这个字符串的哈希,这样每两个哈希就结婚生子,得到了一个”子哈希“。如果最底层的哈希总数是单数,那到最后必然出现一个单身哈希,这种情况就直接对它进行哈希运算,所以也能得到它的子哈希。于是往上推,依然是一样的方式,可以得到数目更少的新一级哈希,最终必然形成一棵倒挂的树,到了树根的这个位置,这一代就剩下一个根哈希了,我们把它叫做 Merkle Root。

默克尔树在区块链中的应用主要是用于回收硬盘空间,这对比特币的发行与流通有着重大的意义,如果最近的交易已经被纳入了足够多的区块之中,那么就可以丢弃该交易之前的数据,以回收硬盘空间。为了同时确保不损害区块的随机散列值,交易信息被随机散列时,被构建成一种梅克尔树(Merkle tree)的形态,使得只有根被纳入了区块的随机散列值。通过将该树的分支拔除的方法,老区块就能被压缩。而内部的随机散列值是不必保存的。

四.区块链的去中心化(1)中心化与去中心化

节点与节点之间的影响,会通过网络而形成非线性因果关系。这种开放式、扁平化、平等性的系统现象或结构,我们称之为去中心化。

很多人以为去中心化是不要中心,事实恰恰相反。去中心化,不是不要中心,而是由节点来自由选择中心、自由决定中心。简单来说,中心化的意思,是中心决定节点。节点依赖中心,节点离开了中心就无法生存。而中心化,是节点决定中心,中心依赖节点,中心离开了节点就无法存在。在去中心化系统中,任何人都是一个节点,任何人也都可以成为一个中心。任何中心都不是永久的,而是阶段性的,任何中心对节点都不具有强制性。这就是中心化。

例如银行就是一个中心化系统,银行掌握所有用户帐目的信息和交易的历史记录(中心化);用户只掌握了自己的记录,无法知晓其他用户交易记录(交易非公开);如果掌握有所有的交易支付记录,可以倒推出帐户信息(中心化风险)。

而相反,在比特币中,不存在一个中心节点(去中心化);所有交易都是公开的(交易公开);但是所有的交易都是匿名的,因此即使有所有的交易信息,也无法推断出个人对应的帐户信息(安全性)。

(2)去中心化的意义

容错力:中心化一旦中心出现问题,其他节点就容易全线崩溃。而中心化的系统不太可能出现意外,因为它是依赖其他节点,而其他节点不可能一起出问题。

抗攻击力:去中心化的系统会让,被攻击成本更高,因为它缺少敏感的中心点,而中心点则更容易被低的成本攻击,原因就是大家应该都懂,攻击中心就可能完全崩溃,这也是越来越多投资者希望去中心化技术变得更加成熟。

防勾结串通:去中心化系统中的参与者难以牺牲其他参与者为代价,而密谋使自己获利。这也是用户欢喜的一点,数字资产交易所经常出现平台与庄家勾结割韭菜,如果是去中心化的交易所,那就大大降低了这种可能。事实上去中心化的交易所更加民主,用户会更加倾向于去中心化的交易所。

(3)比特币如何实现去中心化

如上述的一系列分析,比特币网络中并不存在一个绝对的中心,没有一个类似印钞厂或者银行的机构来发行和控制比特币,比特币的产生完全依赖于比特币网络中所有主机的消耗。而为了防止二次交易的产生,比特币系统采用了时间戳与哈希现金的方式对全网进行广播,这就使得所有的交易记录被公开,而由于其匿名的特点,所有其他人是无法推断出个人的交易记录的。

五.区块链的完整性与51%攻击

(1)区块链完整性原理:由于区块链是一种链状结构,而每一个区块的产生都依赖于上一个区块的信息,那么只要 CPU耗费的工作量能够满足该工作量证明机制,除非重新完成相当的工作量,该区块的信息就不可更改,所以想要更改该区块中的信息,就还需要重新完成之后所有区块的全部工作量。

(2)51%攻击:51%攻击是指掌握了比特币全网的51%算力之后,用这些算力来重新计算已经确认过的区块,使块链产生分叉并且获得利益的行为。

攻击者在发动攻击前有两个条件:

①掌握了比特币全网的51%算力

②手里持有大量比特币

攻击步骤如下:

①把比特币转到交易所或某个机构或个人,卖出所有比特币,并且收到钱、把钱提现到银行帐号(提现目的是为确保收益,也可不用提现)。这个时间越短越好,能大大节省攻击时间。

②用51%算力从还没向交易所转币的区块开始重新生成区块比如:向交易所转币的区块为第30万个区块,攻击者就在第29万9999个区块开始重新生成区块。

③因为攻击者有51%算力,而且假设他能在攻击过程中保证一直51%算力,所以他的攻击一定成功,也就是说他生成的攻击块链一定能追上原块链。

④当攻击块链的长度超过原块链2个区块,所有的客户端将丢弃原块链,接受攻击块链。至此,51%攻击成功。

(3)51%攻击悖论

“如果有一个贪婪的攻击者能够调集比所有诚实节点加起来还要多的CPU 计算力,那么他就面临一个选择:要么将其用于诚实工作产生新的电子货币,或者将其用于进行二次支付攻击。那么他就会发现,按照规则行事、诚实工作是更有利可图的。因为该等规则使得他能够拥有更多的电子货币,而不是破坏这个系统使得其自身财富的有效性受损。”这是中本聪在白皮书中写到的,也就是指攻击者的目标是为了获得更大的收益,然而当一个掌握了51%算力的攻击者用来攻击比特币网络所产生的收益,是远远比不上他用此算力来诚实的产生比特币所获得收益的。所以这就产生了一个悖论,使得攻击者失去攻击的动力。从而从另一个角度保证了其完整性。

六.区块链的匿名性

既然提到了匿名性,那就不得不提一下比特币钱包的概念。每个人的比特币账户实质上是一个地址,在你申请一个比特币账户时,系统会自动生成一对公钥与私钥并通过公钥来产生一个比特币地址。在传统的交易的过程中,我们通常会知晓对方的身份姓名等信息然后才给对方进行转账,而比特币系统中,我们转账的对象就是这个地址,但是我们并不知道对方具体身份是谁,除非是对方提前告知,所以从这个意义上来讲区块链从来都不是匿名的,而是非实名的,匿名是指每个人的身份是无法被人知道的,而非实名是指每个人在区块链上有一个和真实身份无关的虚拟身份,但是这个虚拟身份做的所有事情都是透明的。参照匿名论坛和非实名论坛的区别。

七.区块链的可追溯性

区块链是由“区块+链”构成。区块,是指存放已记录数据的文件,里面按时间先后顺序记录了已发生的所有价值交换活动。每个区块均由三部分构成:本区块的ID(本区块块大小、生成时间等所有信息)、所有交易单(每一笔交易的详细情况)与在其先后的区块ID(即前后区块中所有价值交换信息经过算法压缩后形成的一个字符串)。区块的生成时间由系统设定,通常平均每几分钟会生成一个区块。由于每个区块中都包括了前一个区块和后一个区块的ID,这种设计使得每个区块都能找到其前后节点,从而可以一直倒推至起始节点,形成一条完整的交易链条,即构成区块链。“区块”+“链”=完整历史:从第一个区块开始,到最新产生的区块为止,区块链上存储了系统全部的历史数据。“区块”+“链”=时间戳(time stamp):区块链让全网所有节点都在每一个区块上盖一个时间戳来记账,表示这个信息是这个时间写入的,形成了一个不可篡改、不可伪造的数据库。时间戳可以证明某人在某天确实做过某事,可以证明某项活动的最先创造者是谁。任何事情的“存在性”证明变得十分简单,区块链上的每一条交易数据,都可以通过链式结构追本溯源,一笔一笔进行验证。所以说在区块链上面所做的每一笔交易都是具有可追溯性的。而比特币并不是事实存在的实体货币,我们所说的可追溯,也不是追溯每个币去了哪儿,而只是关注每笔交易的输入和输出,这些信息都被记录在区块上,由此我们便可以对其进行追溯。如下图则是通过创世区块块所产生的50枚比特币去向所找到的比特币发明者中本聪的的比特币账户。其中Block#0表示创世区块即第一个区块。

这是这五十枚比特币的去向,左侧表示刚刚发现的比特币,右侧表示被发送到的账户即比特币地址。

这是中本聪的比特币账户,据了解,中本聪从未动过此账户,多出来的16枚比特币皆为一些爱好者出于敬意自发的转发给他的。

以下则是这一账户最近的转账记录,可以看到,仍有源源不断的粉丝来给这位神秘人物转发比特币。

八.总结

区块链技术的产生,对整个经济社会都有着深远的意义。一是学术意义,在无信任的环境下,在整个网络中的任意节点建立起共识机制,而无需担心数据被篡改。二是应用意义,分布式数据库通过横向扩展,提升了吞吐量和计算效率,也开启了大数据时代。区块链的意义在于,增加了一个分支,基于时间轴的分布式数据库。三是战略意义,基于创建信任的机器,促进价值的全球流动。但是仍有一部分不法分子将此技术应用于洗钱赌博等活动中,这就需要我们不断更新与发展,健全区块链的相关机制,才能将区块链技术应用于对人类有利的活动之中。

参考:

1.《Bitcoin: A Peer-to-Peer Electronic Cash System 》

2.https://blockchain.info/zh-cn

3.http://8btc.com/article-2008-1.html

4.https://www.csdn.net/

返回顶部