1.3区块链核心技术

澳门新葡亰手机版 7

哈希函数是区块链技术不可或缺的一部分,可用于多种用途。
它是一种数学函数,它接受任何给定长度的输入并产生固定长度的输出。
输出通常称为哈希值,(哈希)摘要或哈希。有很多哈希函数,就像多个在线的“计算器”。
计算器允许您同时使用不同种类的算法对您喜欢的任何输入进行哈希运算。
输入的大小可以从单个数字到整个文件,但输出的大小将始终相同。加密哈希函数必须满足以下一组标准才能在区块链中使用:单向性

比特币作为第一个广为人知的数字货币,因其实现了完全匿名的交易,而后被不希望别人知道他做了某种交易的人广泛使用。比特币的火爆让技术社区开始注意到比特币底层的一项技术–区块链:这项基于密码学和分布式P2P的技术被认为是第二次互联网革命,我们可以把比特币看做是基于区块链技术而开发的一款虚拟货币。随着区块链技术的成熟,现如今已经诞生了更多区块链技术平台以及基于它的应用。本文将结合现如今流行的区块链技术(比特币、以太坊、hyperledger/fabric)来谈谈密码学在区块链中的应用。

本文摘自《2017年区块链行业年度特别报告》,允许转载、引用,但必须向本人申请。转载、引用时必须注明来源于“区块宝研究院行业分析师曹先亮,笔名:东方教主”。

  • 必须很容易计算给定输入的输出,但不可能计算给定输出的输入。
    当我们在本章后面讨论加密货币挖掘时,这将是一个不可或缺的部分。伪随机 –
    输入的变化将在输出中产生不可预见的变化。
    如果输入“2”的散列值是“4”,则输入“3”的散列最好不是6。抗冲突 –
    找到哈希函数的两个输入导致相同的输出应该很难(不能读取)。确定性 –
    相同的输入总是需要产生相同的输出。目前最常用的哈希算法是SHA-256。
    SHA是Secure Hash
    Algorithm的首字母缩写。该数字表示以比特为单位的输出长度,例如SHA系列中有四种不同的输出长度:224,256,384或512位。与区块链技术相关的另一种算法是RIPEMD系列。
    RIPEMD160经常用于许多加密货币中,因为您可能已经猜到产生160位的输出。哈希值在加密货币和区块链中用于多种用途。最显着的用途是将块链接在一起,从而创建区块链。我们将哈希值称为数据指纹,因为它具有抗冲突性。如果您要将文件发送给其他人,则可以在发送文件之前对文件进行哈希处理时包含哈希摘要。收件人可以在收到文件后计算文件的哈希值,并将其与您提供的哈希值进行比较,以便检查文件的完整性。输入的每组数据可以通过它生成的唯一哈希轻松识别。找到哈希函数的两个输入几乎是不可能的,这会导致相同的输出(导致冲突)。地球上的所有超级计算机需要数千年的时间才能产生冲突。这是因为没有办法“计算”冲突。找到一个的唯一方法是通过蛮力方法,在那里你尝试不同的输入,直到你偶然发生冲突。总结哈希函数是区块链技术的第一个基石。文件的哈希就像指纹。通过比较它们的哈希值很容易检测两个文件是否相同。哈希将“区块”连结在一起。如果不包含前一个块的哈希,则无法更改过去的数据。如果您尝试更改数据,引用或链接将不可行。

这里不打算给密码学下一个定义,因为我们生活中实在接触了太多的密码学。比如银行卡密码、加密的网络通信、接头暗号等。现代密码学是建立在复杂的数学理论之上,数学家发现的一系列数学定理保证了密码算法的可靠性。不过这篇文章并不会出现晦涩难懂的数学公式,所以放心的读下去吧。密码学需要解决的问题主要体现在三个方面:数据机密性、数据完整性、以及认证。一个密码学算法通常只能保证某一两个方面,因此实际应用中通常是多个密码算法组合使用以满足我们的需求。

这是笔者工作过程中产出的第三份区块链行业研究报告,也是2017年的年终大报告。一定程度上反映了笔者在2017年下半年以来,在区块链行业研究方面的研究成果。

澳门新葡亰手机版 ,生活中,“指纹”常用来表明一个特定人的身份。比如刑侦中通过比对犯罪嫌疑人在案发现场留下的指纹信息来确定凶手是否就是犯罪嫌疑人。计算机科学中我们也需要对比两条数据是否一致,但如果两条数据非常大时,一个比特一个比特的比较毫无疑问效率是非常低的。这时我们可以使用单向散列函数先将数据散列运算得到指定长度的字节数然后再通过比对这些散列值来确定数据是否一致。一个可靠的单向散列函数必须具备以下特性:

区块链除了构建了强大的区块链基础架构以保证区块链系统的灵活性和稳定性之外,为保证存储于区块链中的信息的安全与完整,还使用了一些强大的密码学核心技术。

  • 输入任意长度数据必须输出固定长度的散列值。
  • 能够快速计算出散列值(实际场景不允许这个操作花费过多时间)。
  • 输入数据有细小差别也要导致散列值差别很大。
  • 具备单向性(无法根据散列值反推出原始数据)。

区块及区块链的定义和构造中使用了包含哈希算法(哈希函数)、非对称加密算法(公钥密码算法)和共识算法(共识机制)在内的多种核心技术。

常见的单向散列函数包括MD4/MD5、SHA-1/SHA-256/SHA-384/SHA-512、RIPEMD/RIPEMD-160、以及以Keccak算法作为标准的SHA-3系列函数。其中MD4/MD5、SHA-1、RIPEMD已经存在攻破的算法,不推荐在极其敏感环境下使用。

区块链技术采用非对称加密算法对交易进行签名,使得交易不能被伪造;利用哈希算法保证交易数据不能被轻易篡改;借助分布式系统各节点的共识算法形成强大的算力来抵御破坏者的攻击。

Keccak算法在2012年经过长达5年的选拔最终成为SHA-3标准,更多关于Keccak算法细节可以浏览这里。

1.3.1哈希函数

举个简单的例子,如果我们要比较file1 和 file2
文件内容是否一致,怎么办呢?

哈希函数,也称为哈希算法。哈希函数是一种密码学算法。在区块链中的作用是:为信息加密,用于为原始信息添加“密码语言”。

澳门新葡亰手机版 1Figure1

哈希函数是一类数学函数,可以在有限合理的时间内,将任意长度的消息压缩为固定长度的二进制串,其输出值称为哈希值,也称为散列值。哈希函数在现代密码学中扮演着重要的角色,常用于实现数据完整性和实体认证,同时,也构成多种密码体制和协议的安全保障。

如上图所示,假如我们使用SHA-256作为我们的散列函数,则伪代码如下:

在比特币系统中使用了两个密码学哈希函数,一个是SHA256,另一个是RIPEMD160。SHA256算法的一个主要用途是完成PoW(工作量证明)计算,RIPEMD160则主要用于生成比特币地址。

func equal(file1, file2): hash1 = sha256 hash2 = sha256 return hash1 == hash2

哈希函数的三个性质:

可以看到,我们没有直接去比较两个文件内容是否一致,而是通过比较两个文件的散列值来确定文件内容是否一致(使用了输入数据有细小差别也要导致散列值差别很大这一特性)。那么区块链中又有哪些地方使用了单向散列函数呢?在区块链中,一系列的交易被矿工打包到区块中,然后所有区块相连(这里指当前区块的preHash指向上一个区块)便形成了区块链。此基础上结合密码算法分布式共识算法,便实现了区块链去中心化这一关键特性。

① 碰撞阻力

  • 单向散列函数作用于区块的连接

碰撞是与哈希函数相关的重要概念,体现着哈希函数的安全性。所谓碰撞是指两个不同的消息在同一个哈希函数作用下,具有相同的哈希值。哈希函数的安全性是指在现有的计算资源(包括时间、空间、资金等)下,找到一个碰撞是不可行的。

澳门新葡亰手机版 2Figure2

举例:如果无法找到两个值,x和y,x≠y,而H(x)=H(y),则称哈希函数H具有碰撞阻力。

上图展示了区块链(包括比特币、以太坊和Fabric)中是如何将区块连接起来的。其中preHash指的是上一个区块的哈希值(通常使用的是SHA-256算法计算得来)。在需要遍历验证所有区块时,便是通过preHash值索引到上一个区块直至创始区块。同时,在上图中还有一个值得关注的成员:MRH(Merkle Root Hash)即默克尔树根节点哈希值。在区块链的每个Block中都存放了一定数量被矿工打包的交易,区块链的交易记录是不容篡改的。而检测区块中的交易是否被篡改便是根据默克尔树根哈希的值前后是否一致来判断。区块链中的默克尔树结构如下:

哈希函数的碰撞阻力是指寻找两个能够产生碰撞的消息在计算上是不可行的。值得注意的是:找到两个碰撞的消息在计算上不可行,并不意味着不存在两个碰撞的消息。由于哈希函数把大空间上的消息压缩到小空间上,碰撞肯定存在。通过简单的计数论证,是可以证明碰撞的确存在的。

澳门新葡亰手机版 3Figure3

哈希函数的输入空间包含所有长度的任意字符串,但输出空间则只包含特定固定长度的字符串。因为输入空间比输出空间大(输入空间是无限的,而输出空间是有限的),一定会有输入字符串映射到相同的输出字符串,也就是说,碰撞是存在的。

通过上图可以看到这是一颗典型的二叉树。区块中的每笔交易的哈希值(通过单向散列函数计算得到)两两结合计算出新的哈希值,重复这个过程直到计算出根节点。根节点存放的哈希值被打包到了区块中,当需要验证区块中的一笔交易是否被篡改过时,比如上图中的交易1,只需重新计算交易1的哈希值,然后连同交易2的哈希值最终计算出一个新的根哈希,比较原来的根哈希和新的根哈希是否相等便可以验证交易1是否被篡改过。这里我们只验证了交易1,相当于对于一个大块数据我们可以只针对其中的一部分进行验证。默克尔树的这个特性被广泛用于P2P资源下载完整性校验中。

打个比方:输入100个值,经哈希函数H之后,输出仅80个值。因为输出的数量小于输入的数量,我们可以确定,某个输出肯定对应多个输入。

单向散列函数在区块链中的应用不仅于此。其他很多地方都使用到了单向散列函数,比如:

也就是说存在x≠y,而H(x)=H(y),存在碰撞;但在计算上,找不出来x和y这两个值,所以称哈希函数H具有碰撞阻力。

  • 比特币和以太坊的Pow机制。矿工不断计算给定数据的散列值(之所以这样描述是因为比特币和fabric是计算当前区块头的散列值而以太坊是随机抽取一定数量先前的区块计算散列值),当散列值满足给定的难度策略(difficulty
    policy)时,便由矿工打包成生成一个新的区块并广播到全网节点。
  • 比特币的账户地址。比特币的账户地址为账户签名和执行交易的私钥所对应的公钥,经过SHA-256和RIPEMD160散列,然后再通过Base58Check编码转换成易于阅读的格式得来。
  • 伪随机数生成。在生成用户私钥和公钥过程中也需要使用单向散列函数生成随机数。详细细节可以参考这里

哈希函数的碰撞阻力特性常被用来进行完整性验证。完整性是信息安全的3个基本要素之一,是指传输、存储信息的过程中,信息不被未授权的篡改或篡改后能被及时发现。如果原消息在传输过程中被篡改,那么运行哈希函数后得到的新哈希值就会和原来的哈希值不一样,这样就很容易发现消息在传输过程中完整性受损。

使用单向散列函数的地方还有很多,这里不再一一赘述。

在区块链中,某个区块的头部信息中会存储着前一个区块的信息的哈希值,如果能拿到前一个区块的信息,任何用户都可以比对计算出来的哈希值和存储的哈希值,来检测前一个区块信息的完整性。

密码学在区块链中的运用计划写三篇文章。除去这篇,剩下两篇关于

SHA256是一个主要被比特币世界采用,并且效果还很不错的哈希函数,而且SHA256还获得了安全哈希算法的美名。但是,我们必须谨记,在理论上来讲,世界上是没有哈希函数具有坚不可摧的碰撞阻力的。我们实践中使用的安全哈希算法(SHA256),仅仅是人们经过不懈努力之后,暂未成功找到碰撞的函数。

  • 对称加密和非对称加密
  • 签名和证书

如果有一天,我们最终找到了SHA256哈希函数的碰撞,那么,就如之前的MD5哈希函数一样,在找到MD5哈希函数的碰撞之后,该函数在实践应用中被逐渐淘汰。

正在加工中!

② 原像不可逆

  • 精通比特币,Andreas•M•Antonopoulos 。版权2015
    Andreas•M•Antonopoulos, 978-1-449-37404-4.
  • 图解密码学,结城浩。人民邮电出版社,版权2015结城浩,ISBN:9787115373625.
  • 以太坊白皮书,.

原像不可逆,通俗地说,是指知道输入值x,很容易通过哈希函数H计算出哈希值H(x);但是知道哈希值H(x),却不能通过哈希函数H计算出原来的输入值x。

版权所有,转载请注明出处。

为什么哈希函数会具有这个特性?因为x的取值来自一个非常广泛的集合(输入空间是无限的)。

原像不可逆的应用是承诺方案(Commitment
Scheme),承诺方案被认为是密码学领域中一类重要的密码学基本模型,承诺具有隐藏性和约束性。

承诺模型可以看做一个密封信件的数字等价体。如果Tom想承诺某个信息m,则他可以把m放进一个密封的信封内,无论什么时候他想公开这个信息,则只需要打开信封。这个过程要求数字信件能够隐藏信息,即承诺的隐藏性,同时Tom也不能改变m;而通过承诺的打开,任何人都能验证他所得到的m其实就是Tom最初承诺的信息m,即承诺的约束性。

利用哈希函数的碰撞阻力和原像不可逆两个特性,承诺的隐藏性和约束性均能成立:

隐藏性——如果仅仅知道承诺函数的输出,就如同只看到信封并不能得到信中的内容;

约束性——这就确保了Tom一旦承诺信封内的内容,就不能再改变主意。

③ 谜题友好

通俗地说,难题友好性指的是没有便捷的方法去产生一满足特殊要求的哈希值。也就是说,如果有人想通过锁定哈希函数来产生一些特殊的输出y,而部分输入值以随机方式选定,则很难找到另外一个值,使得其哈希值正好等于y。

哈希函数的难题友好特性,构成了基于工作量证明的共识算法的基础。例如,给定字符串“blockchain”,并在这个字符串后面连接一个整数值串x,对连接后的字符串进行SHA256哈希运算,要求得到的哈希结果(以十六进制的形式表示)以若干个0开头的。按照这个规则,由x=1出发,递增x的值,我们需要经过2688次哈希计算才能找到前3位均为0的哈希值,而要找到前6位均为0的哈希值,则需进行620969次哈希计算。也就是说,没有更便捷的方法来产生一个满足要求的哈希结果。这样通过哈希运算得出的符合特定要求的哈希值,可以作为共识算法中的工作量证明。

正是因为哈希函数具备这三个核心性质,使得哈希函数具备“保证交易数据不能被轻易篡改”的功能。

1.3.2非对称加密算法

非对称加密算法,也叫公钥密码算法。非对称加密算法也是密码学算法,在区块链中的作用是:为交易加密,用于对交易发起、确认、签名、验证。

公钥密码算法是现代密码学发展过程中的一个里程碑。这类密码学算法需要两个密钥:公开密钥和私有密钥。因为加密和解密使用的是两个不同的密钥,另外,私钥可以推导公钥,而公钥不能倒推私钥,所以这种算法也叫做非对称加密算法。

(1)非对称加密算法的特点

加密和解密使用的是两个不同的密钥;公钥是全网可见的,私钥只有信息拥有者才知道;私钥可以推导公钥,公钥不能倒推私钥。

(2)非对称加密算法的用途

非对称加密算法主要有两个用途:一是在发送信息过程中使用公钥加密私钥解密,二是在数字签名过程中使用私钥签名(加密)公钥验证(解密)。

发送信息过程

公钥加密:发送方A用接收方B的公钥对信息加密,并将该加密后的信息传输到区块链网络。

私钥解密:接收方B用其独有的私钥对信息解密,从而确保信息获得传递的同时还保证信息的真实性。

澳门新葡亰手机版 4

图表5:非对称加密解密过程

数字签名过程

私钥签名:信息发布者用私钥对交易进行签名。用户发起交易时,用私钥对交易信息签名(加密),表明对交易具有所有权,并对真实性负责。

公钥验证签名:矿工用公钥对信息发布者的签名进行验证。矿工收到信息后,用公钥对签名进行验证(解密),若验证通过,则说明:第一,该信息是由特定的私钥的拥有者“签名”的;第二,该信息在签名后没有被改变过。那么,该信息可予以记录到区块链。

在比特币系统中,生成比特币地址的流程中也会用到公钥和私钥。

(3)生成比特币地址流程

①比特币系统随机产生一个随机数为私钥;

②私钥通过Secp256k1椭圆曲线算法生成公钥;

③公钥通过双哈希运算+Base58处理生成比特币地址。

澳门新葡亰手机版 5

图表6:生成比特币地址流程

私钥生成公钥过程所使用的Secp256K1椭圆曲线算法是一种单向加密函数,公钥生成比特币地址的过程中所使用的也是单向加密哈希函数。基于这些数学函数的密码学,使得生成数字密钥和不可伪造的数字签名成为可能。

(4)非对称加密算法的种类

非对称加密算法主要有以下几种:

澳门新葡亰手机版 6

图表7:非对称加密算法种类

非对称加密算法在区块链中的使用,具有重大意义。区块链系统中,所有权验证机制的基础是非对称加密算法。从信任的角度来看,区块链实际上是用数学方法解决信任问题。在区块链系统中,所有的规则事先都以算法程序的形式表述出来,人们完全不需要知道交易的对手是“君子”还是“小人”,更不需要求助于中心化的第三方机构来进行交易的信用背书,区块链通过严谨的数学算法就可以建立互信。区块链技术的背后,实质上是算法在为人们创造信用,达成共识背书。

1.3.3共识机制

共识机制,也称为共识算法。在区块链中,共识机制更多的是体现为:一种确保记账一致性的措施、机制。

利用区块链构造基于互联网的分布式账本,需要解决的首要问题是如何实现不同账本节点上的账本数据的一致性和正确性。这就需要借鉴已有的在分布式系统中实现状态共识的算法,确定网络中选择记账节点的机制,以及如何保障账本数据在全网中形成正确、一致的共识。

区块链中常用的共识机制主要有以下几类:

①PoW:工作量证明机制

简单地说,PoW(Proof of
Work)就是一份确认工作端做过一定量工作的证明。PoW机制的主要特征是计算的不对称性。工作端需要做一定难度的工作得出一个结果,验证方却很容易通过结果来检查工作端是不是做了相应的工作。

PoW机制的用例:比特币。

②PoS:权益证明机制

PoS(Proof of
Stake)机制在创始区块内写明了股权分配比例,之后通过转让、交易的方式,逐渐分散到用户手里,并通过“利息”的方式新增货币,实现对节点的奖励。PoS机制使用一个确定性算法以随机选择一个持币者来产生下一个区块,该算法中账户余额决定了节点被选中的概率。

简单地说,就是一个根据用户持有代币的数量和时间(币龄),发放利息的一个制度。类似于股票或者银行存款,如果用户想要获得更多的代币,那么就要打开客户端,让它保持在线,这样就能通过“利息”来获益,同时保证网络的安全。

PoS机制的用例:未来币。

③PoW+PoS:PoW发行新币,PoS维护网络安全

PoW+PoS结合的机制是指,采用工作量证明机制PoW发行新币,采用权益证明机制PoS维护网络安全。

这种共识机制最早是于2012年8月,由一个化名Sunny
King的极客推出Peercoin时采用。

该机制中,区块被分为两种形式:PoW区块及PoS区块。在这种新型区块链体系中,区块持有人可以消耗他的币龄获得利息,同时获得为网络产生一个区块和用PoS造币的优先权。

在PoW+PoS机制下,只要是持币人,不论持币的数量是多少,都可以挖到数据块,而不用采用任何的矿池导致算力集中;同时,由于多采用币龄生成区块,而不是算力,所以降低了资源消耗,解决了单纯PoW机制在维护网络安全方面的先天不足。

PoW+PoS机制的用例:Peercoin。

④DPoS:授权股权证明机制

PoS面临的挑战是如何通过及时而高效的方法达成共识。为了达到这个目标,每个持币节点可以将其投票权授予一名代表。获票数最多的前100位代表,按既定时间表轮流产生区块。每名代表分配到一个时间段来生产区块,所有的代表将收到等同于一个平均水平的区块所含交易费1%作为报酬。如果一个平均水平的区块含有100股作为交易费,则1名代表将获得1股作为报酬,这样可以大大提高共识效率,这就是DPoS(Delegated
Proof of Stake)的核心思想。

这100位代表可以理解为100个“矿池”,这100个“矿池”之间的权利是完全相等的。如果这些代表提供的算力不稳定、计算机宕机、或者试图利用手中的权利作恶,那么,那些手里握着代币的用户可以通过投票的方式随时更换这些代表,后备代表则可以代替他们。

DPoS机制的用例:比特股。

⑤其他分布式一致性算法

除了以上详列的PoW、PoS、PoW+PoS、DPoS等共识机制外,还有一些分布式一致性算法,比如:PBFT、Paxos和Raft等。

这类分布式一致性算法常用于联盟链、私有链。而这些分布式一致性算法又分为解决拜占庭将军问题的拜占庭容错算法(PBFT)和非解决拜占庭问题的分布式一致性算法(Paxos、Raft)。

澳门新葡亰手机版 7

图表8:共识机制汇总

这些共识机制各有优劣。例如PoW共识机制在安全性和公平性上比较有优势,也依靠其先发优势已经形成成熟的挖矿产业链,但也因为其对能源的消耗而饱受诟病。而PoS和DPoS等则更为环保和高效,但在安全性和公平性方面比不上PoW机制。

在设计了共识机制的区块链网络中,每个节点只有保持诚实记账,才能获得网络中的奖励。本质上,共识的达成,是基于人类的趋利避害的本能。一般而言,各种共识机制并没有严格意义上的优劣之分,只是分别适用于不同的环境。