区块链的技术基础

区块链是一种“点对点”的数据传输和储存,它在最基础的数据层中,会用到哈希函数、密钥技术(主要是非对称加密)、Merkle树、时间戳、数字签名等技 术手段。在传输层中,会涉及P2P网络、传输机制、验证机制。在共识层面会运用到PoW、PoS等各种共识机制。传输层相对容易理解,共识层前面已经讲 过,因此在这里,我们仅介绍它在数据层所运用的相关技术。

哈希函数

哈希函数(Hash Function),也称为散列函数或杂凑函数。哈希函数是一个公开函数,可以将任意长度的消息M映射成为一个长度较短且长度固定的值H(M),称H(M)为哈希值、散列值、杂凑值或者消息摘要。

哈希函数满足三个特性:

(1)消息M的任何改变都会导致哈希值H(M)发生改变。

(2)在给定某个哈希函数H和哈希值H(M)的情况下,得出M在计算上是不可行的。

所谓的“在计算上不可行”,依据计算复杂度理论的说法,是指对于该运算不存在一个多项式时间算法,例如大数分解和离散对数问题。上述计算不可行是哈希函数安全性的基础。如果把一段消息比作一个人,这段消息的哈希值就是这个人的指纹,是这个人独一无二的特征。

作为区块链技术基础的哈希函数,还需要具有以下特征。

免碰撞

其实这个特点在理论上并不成立,比如,比特币使用的SHA256算法,会有2~256种输出,如果我们进行 2~256+1次输入,那么必然会产生一次碰撞;甚至从概率的角度看,进行2~130次输入就会有99%的可能发生一次碰撞。不过我们可以计算一下,假设 一台计算机以每秒10000次的速度进行哈希运算,要经过10~27年才能完成2~128次哈希。因此,发生碰撞的几率是极其小的。

隐匿性

也就是说,对于一个给定的输出结果H(M),想要逆推出输入M,在计算上是不可能的。以上特点是比特币的工作量证明系统可以正常运行的基石。

难度值(difficulty)是矿工们挖矿时的重要参考指标,它决定了矿工大约需要经过多少次哈希运算才能产生一个合法的区块。比特币的区块大约每10分钟生成一个,为了让新区块的产生基本保持这个速率,难度值必须根据全网算力的变化进行调整。

哈希函数通过调整难度值来确保每个区块挖出的时间都大约在10分钟,哈希函数计算的难度值对保证区块链系统的安全意义重 大。正如美国的几位计算机科学家在共同所著的书中所写的:“哈希密码是密码学中的瑞士军刀,它们在众多各具特色的应用中找到了一席之地,为了保证安全,不 同的应用会要求不同的哈希函数特点。事实已经证明,要确定一系列哈希函数以全面达成可证安全极度困难。”[1]

工作量证明需要有一个目标值。比特币工作量证明的目标值(target)的计算公式如下:

目标值=最大目标值/难度值

其中,最大目标值为一个恒定值:

0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

目标值的大小与难度值成反比。比特币工作量证明的达成就是矿工计算出来的区块哈希值必须小于目标值。

我们也可以简单理解成,比特币工作量证明的过程,就是通过不停地变换区块头(即尝试不同的随机值)作为输入进行SHA256哈希运算,找出一个特定格式哈希值的过程(即要求有一定数量的前导0)。而要求的前导0的个数越多,代表难度越大。

[1] 阿尔文德·纳拉亚南,约什·贝努,等. 区块链:技术驱动金融[M]. 林华,王勇,帅初,等译. 北京,中信出版社,2016.

密码学基础

区块链采用密码学的方法来保证已有数据不可能被篡改。

这个部分的两个核心要点是:①密码学哈希函数,②非对称加密。两个都是密码学的基础概念。

可以说,区块链的诞生得益于密码技术的发展,数字货币正是在密钥技术的发展过程中产生的。

我们来看看密码朋克们对密钥技术的探索过程。

1976年,Whitfield Diffie与Martin Hellman在开创性论文《密码学的新方向》(New Directions in Cryptography)中,提出公开钥匙密码学的概念。他们俩发明的Diffie-Hellman算法是一种秘钥交换方法,交换秘钥后还需要其他算法 来进行加密和解密。这个算法是今天互联网安全的基础。他俩的成就在于,告诉世人非对称加密以及公钥加密是可行的。

Hellman在20世纪70年代险些被美国军方关进监狱,要知道加密技术一直就是政府和军方的重要武器。密码科学家们 要么为军方和政府工作,要么就要面对来自政府的威胁。密码学和区块链的很大一部分这种去中心化的理念常常被认为是无政府主义和过度自由主义。中本聪至今还 匿名,聪明且谨慎啊。

1982年,大卫·乔姆提出不可追踪的密码学网络支付系统。他发明了乔姆盲签名,可以说他是密码货币的始祖,这个不可追 踪的密码学网络支付系统,就是今天比特币的老祖宗。1900年,大卫·乔姆成立了数字现金公司,并试验了一个数字化的货币系统,名字为Ecash,这应该 是世界上的第一种电子现金,当时风头很劲,包括微软、维萨等大公司都要收购Ecash。不过,中本聪对Ecash不屑一顾,认为它依然是传统的中心化系 统,必须依赖中心化的信用。大卫·乔姆的数字现金公司于1998年宣告破产。其失败的主要原因就是这个系统对个人之间的交易无法起到很好的支持作用,而银 行和商家也不愿意使用。

1985年莱斯利·兰伯特等人提出了拜占庭难题。这真是区块链、比特币最重要的核心问题,就是如何解决公开网络上的信任 问题。1982年,Leslie Lamport把军中各地军队彼此取得共识、决定是否出兵的过程,延伸至运算领域,设法建立具容错性的分布式系统,即使部分节点失效仍可确保系统正常运 行,可让多个基于零信任基础的节点达成共识,并确保资讯传递的一致性。

1992年,蒂莫西·梅成立了密码朋克[1] ,这个组织里有一大批跟区块链技术的发明息息相关的大人物,包括大卫·乔姆、Phil Zimmerman(PGP)、阿桑奇、亚当·贝克、戴伟(名字是中文,不知道人是不是华裔,他在圈子中地位尊崇)、哈尔·芬尼、Tim-Berners Lee爵士(万维网发明者)、John Perry Barlow(赛博自由主义政治活动家)、尼克·萨博(BitGold发明人,智能合约的发明人),等等。

在互联网刚刚兴起的时候,很多天才都打起了电子货币的主意,如Beenz和Flooz都是当年的电子货币,但是全都死翘翘了。正如中本聪所说:中心化的电子货币都是垃圾,必死无疑。若是还依赖中心机构的信用来发行电子货币,那么与网银有何区别?

另一个对区块链技术贡献很大的人就是亚当·贝克,他发明了哈希算法,其中用到了工作量证明系统。他的本意,是实现电子邮 件的可信。发送电子邮件之前,需要运算一个数学题,这样发送大量垃圾邮件就会成本巨大。这个思想,被哈尔·芬尼借鉴用来做可重复的工作量证明机制,随后, 又被中本聪用到比特币中,完美地解决了拜占庭难题。

哈伯和斯托尼塔在1997年提出一个用时间戳的方法保证数字文件安全的协议。这个技术用简单直白的话语来解释就是:用时间戳的方式记录文件创建的先后顺序,协议要求在文件创建后其时间戳不能改动,这就使文件被篡改的可能性为零。这个协议后来成为比特币区块链的原型。

1998年,另一名密码朋克戴伟提出了匿名的、分布式的电子加密货币系统——B-money。B-money的设计在很多关键的技术特质上与比特币非常相似,但是不能否认的是,B-money有些不切实际,其最大的现实困难在于货币的创造环节。

在B-money系统中,要求所有的账户持有者共同决定计算量的成本并就此达成一致意见。但计算技术发展是日新月异的, 而且有时并不公开,计算量的成本这类信息并不准确、及时,也难以获得,因而B-money很难成为现实。戴伟为此设计了复杂的奖惩机制以防止节点作弊,但 是并没有从根本上解决问题。戴伟的很多设计被中本聪所借鉴,二人有很多邮件交流。

2004年,哈尔·芬尼推出了自己的电子货币,在其中采用了可重复使用的工作量证明机制(RPoW)。同时,他也是第一笔比特币转账的接收者。

此外,区块链的诞生,还要感谢肖恩·范宁和肖恩·帕克对点对点网络技术的开发。关于点对点技术,即P2P协议,一个大家很熟悉的例子是我们所用的迅雷,我们的一切种子,都是一种点对点的传输。有了P2P协议,才有了后来的比特币。

[1] 密码朋克是1992年筹备成立的,但密码朋克这个术语于1993年在EricHughes 的A Cypherpunk’s Manifesto 中首次正式出现。

数字签名

什么是签名?很多人的第一反应是用笔签名。生活中我们经常需要用笔签名:借条要签名,合同要签名,去银行办理业务也要签 名。签下名字,就表示对这件事负责。人的笔迹是很个性的,几乎不可能复制,即便是专业模仿也可以通过技术鉴别出来,因此签名就具有唯一性的特点,并被法律 认可。

数字签名的原理跟用笔签名类似,用于确认身份。数字签名有两个作用,一是能确定消息确实是由发送方签名并发出来的,二是数字签名能确定消息的完整性。然而,在没有笔迹验证的情况下,数字签名如何保持唯一性和可验证性呢?

简单地讲,就是加密技术代替人的笔迹,数字签名涉及一个哈希函数、发送者的公钥、发送者的私钥。

其操作方法是:

在区块链系统中发送一条广播时,发送方用一个哈希函数从广播文本中生成摘要,然后用自己的私钥对摘要进行加密,加密后的 摘要将作为广播的数字签名和广播一起发送给接收方,接收方首先用与发送方一样的哈希函数从接收到的原始广播中计算出报文摘要,接着再用发送方的公钥来对广 播附加的数字签名进行解密。如果这两个摘要相同,那么接收方就能确认该数字签名是发送方的。

多重签名

比特币的匿名性,使交易处于不可信之中,最终导致用户不敢交易。有了签名功能,就有了确认双方信息的有效手段。那么,什么是多重签名呢?

多重签名,可以简单地理解为一个数字资产的多个签名。多重签名预示着数字资产可由多人支配和管理。多重签名,就表示动用这笔资金需要多个私钥签名,通常这笔资金或数字资产会保存在一个多重签名的地址或账号里。类似于生活中有一份文件需要多个部门签署才能生效一样。

多重签名是数字签名的升级,它让区块链相关技术应用到各行各业成为可能。

例如,电子商务、财产分割、资金监管等。例如,一对夫妻要储备一笔资金,供孩子上大学使用,在这之前谁都不能动,那么把签名模式改为2/2,不仅限制了夫妻双方,也给黑客攻击增加了难度。多重签名的设计,让各种业务去中心化充满无限可能。

Merkle树

Merkle树(默克尔树)被很多人称为哈希二叉树。Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值。非叶子节点是其对应子节点串联字符串的hash。[1]

在P2P网络中,Merkle树用来确保从其他节点接收的数据块没有损坏且没有被替换,甚至检查其他节点不会欺骗或者发 布虚假的块使用。在区块链网络中,Merkle树可以快速校验大规模数据的完整性。在区块链网络中,Merkle树的作用是:归纳一个区块中的所有交易信 息,最终生成这个区块所有交易信息的一个统一的哈希值。因此,区块中任何一笔交易信息的改变都会使得Merkle树发生改变。

人们之所以将它称为“哈希二叉树”,是因为构造它的所有节点都是哈希值。它具有以下特点:

(1)它是一种树状结构,可以是二叉树,也可以是多叉树。

(2)Merkle树的叶子节点上的value,是由你指定的,这主要看你的设计,如Merkle Hash Tree会将数据的hash值作为叶子节点的值。

(3)非叶子节点的value是根据它下面所有的叶子节点值,按照一定的算法计算而得出的。如Merkle Hash Tree的非叶子节点value的计算方法是将该节点的所有子节点进行组合,然后对组合结果进行hash计算所得出的hash value。[2]

比特币系统的区块链中,每个区块都有一个Merkle树,如图1所示。

可以看到merkle root哈希值存在于每一个区块的头部,通过这个root值连接着区块体,而区块体内包含着大量的交易。每个交易就相当于前面提到的数据块,交易本身都有自己的哈希值来唯一标识自己。[3]

区块链的技术基础_第1张图片

[1] https://en.wikipedia.org/wiki/Merkle_tree.

[2] http://blog.csdn.net/xtu_xiaoxin/article/details/8148237.

[3] http://blog.csdn.net/pony_maggie/article/details/74538902.

[4] http://blog.csdn.net/pony_maggie/article/details/74538902.

侧链技术

侧链是一种特殊的区块链。它使用一种叫作“SPV楔入”的技术实现与其他区块链之间的资产转移。

本质上来说,一个SPV证据是由一系列演示证据的模块头和建立在其中的一个模块的输出组成的。这就允许检测者检查一些委托输出的存在工作。这样的证据可能因为另一个以更多工作强调的链(不包括创建输出的模块)变得无效。

使用SPV证据去确定历史,假装相信最长的模块链也是最长的正确的模块链,是由比特币中所谓的SPV客户端决定的。只有当不诚实的勾结拥有了超过50%的分散权利时,才可能欺骗SPV客户端。[1]

侧链协议是可以让比特币安全地从比特币主链转移到其他区块链,又可以从其他区块链安全地返回比特币主链的一种协议。实质 上,侧链是一个类似于比特币的独立的、开放的分布式网络,它不是特指某个区块链,而是指遵守侧链协议的所有区块链,该名词是相对于比特币主链来说的。除比 特币主链外,所有现存的区块链,如以太坊、莱特币等区块链都属于侧链。

由于侧链是一个独立的、隔离的系统,侧链中出现的严重问题只会影响侧链本身,这极大地降低了比特币主链创新的风险和成本。

它的原理是通过“双向瞄定”机制实现主链货币(也就是比特币)价值向侧链系统转移,由主链货币提供信用背书可以产生和发行侧链货币。简单地讲,侧链技术就是由比特币做信用背书而创造出来的旁链,在这些链上发行的数字货币被称为“山寨币”。

[1] http://www.wanbizu.com/baike/201411133449.html,http://www.blockstream.com/sidechains.pdf.


来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=152

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();

你可能感兴趣的:(区块链的技术基础)