密码学在区块链领域中的应用
导言
近年来,区块链成为全球互联网领域越来越重要的概念,在金融互联网领域尤其突出。2016年4月,中国分布式总账基础协议联盟在北京成立。2016年12月,国务院印发《“十三五”国家信息化规划》(国发[2016]73号),区块链技术首次被列入了《国家信息化规划》。2017年初,中国人民银行推动的基于区块链的数字票据交易平台测试成功。几乎同时,南非 FirstRand Bank 根据世界上各大央行及其区块链研究进程发布了《密码学银行的到来》(The Advent of Crypto Banking),该报告认为区块链技术能够创造货币政策的新纪元。韩国央行设想了韩国央行结算系统利用区块链技术的情况,提出了具体的执行计划。美联储主席 Janet Yellen 说,区块链对全球金融系统具有潜在影响,是“重要的技术”。区块链技术的发展及其广阔的应用前景,已经引起世界范围内的广泛关注和高度重视。
根据区块链的性质和开放程度的不同,区块链分为公有链、私有链和联盟链。对所有人开放的是公有链,针对单独个人和实体的是私有链,介于两者之间的是联盟链。公有链是最早的区块链,也是目前应用最广泛的区块链,各大比特币系列的虚拟数字货币均基于公有链。公有链是一种全新的分布式基础架构与计算范式,利用有序的链式数据结构存储数据,利用共识算法更新数据,利用密码学技术保障数据安全。公有链是一种分布式账本构造技术,可以在去中心化的系统中构建不可篡改、不可伪造的分布式账本,按照共识机制集体维护一个可靠数据库,并确保系统中各个节点所拥有账本的动态一致性。
在区块链中,任何相互不信任的节点都可以通过发送与验证交易、点对点通信、数字加密等方式达成信任共识而不需要中心化的信用机构。最近越来越多以区块链技术为基础的项目逐渐落地,如基于以太坊、超级账本 Hyperledger平台的智能合约与去中心化应用平台等,这使得人们越来越重视区块链中的安全技术。区块链利用密码学技术、时间戳和共识算法,来保障各节点数据库中信息一致性,使交易记录能即时验证、透明可追溯、不可否认以及难以篡改。
1 区块链基础架构
一般而言,区块链基础架构包含数据层、网络层、共识层、激励层、合约层和应用层。
各层的功能和构件的作用如下:
数据层:该层封装了底层数据区块的链式结构,以及公钥密码技术、时间戳、Merkle树以及哈希函数,这是整个区块链技术中最底层的数据结构。区块链将这些技术结合在一起,构成了安全可靠的新型存储模式。
网络层:该层采用了 P2P网络、传播机制和验证机制。P2P技术使得区块链具有自动组网功能,传播机制和验证机制明确了消息传播协议和数据验证方法,具体协议和方法取决于实际应用场景。通过传播机制和验证机制,区块链中每个节点均可参与数据校验和记账。
共识层:该层是区块链系统中的核心技术,该层采用的共识协议包括:工作量证明 PoW(Proof of Work)、权益证明PoS(Proof of Stake)、股份授权证明DPoS(Delegated Proof of Stake)等。
激励层:为了鼓励更多节点参与到区块链运作,该层采用经济激励机制,设计了相应的激励发行机制和分配方法。同时,惩罚不遵守规则的节点,使得整个系统朝着良性循环的方向发展。
合约层:该层封装了各类脚本代码、算法机制和智能合约,使得区块链具有可编程属性。比特币具有脚本编写功能,以太坊具有更强的编程功能。通过算法机制和编程,用户能够实现具有各种功能的智能合约。智能合约通常被认为是一个自动担保账户,例如,当特定的条件满足时,程序就会自动执行,完成相应的功能。
应用层:该层封装了区块链的各种实际应用需求和实现案例,例如,可编程货币、可编程金融、可编程社会等。
2 哈希函数和 Merkle树
哈希函数(Hash function)能够把任意长度的输入(又叫做函数前像)映射成固定长度的输出,即散列值。哈希函数是现代密码学的基本构件之一,最初被用于数字签名。为了实现对长文件的数字签名,先对消息进行哈希函数运算,然后对消息的哈希值进行签名而不是对原始消息进行签名。哈希函数具有单向性、抗碰撞性等特点,还可用于承诺方案设计、流媒体认证、公平交易、电子拍卖等领域。2005年,我国密码学家王小云等给出了包括 MD4、MD5、HAVAL-128、RIPEMD等 哈希函数的碰撞, 其中找到 MD4 和 RIPEMD 碰撞的复杂度分别低于 28和218。
在区块链中,哈希函数主要用于数据完整性、数据加密、共识计算的工作量证明、区块之间链接等。区块链采用了双 SHA256、RIPEMD160 等哈希函数,SHA256 主要用于加密交易形成区块,RIPEMD160 则用于生成比特币的 地址。我们着重分析 SHA256算法。区块链系统中的双 SHA256 函数是将不同长度的消息经过两次 SHA256计算处理,输出256位二进制字符串统一存储。因为哈希函数具有单向性,即对于给定的消息摘要h,找到消息 M使得 h=H(M)在计算上是不可行的。同时,哈希函数还具有抗碰撞性的特点,即找到两个不同的消息 M和M'使得H(M)=H(M')在计算上是不可行的。这种特性被用来确保区块链中信息的完整性,在存储、传输的过程中,使得信息不会被篡改,以及篡改后能及时发现。另外,哈希函数在区块链的另外一个应用是作为区块间相连的哈希指针,如图2所示。
区块链可以看作一类使用哈希指针的链表,链表链接一系列的区块,每个区块包含数据以及指向前一个区块的指针。区块链中,前一个区块的指针有包含区块的哈希值,因此,每个区块不但链接前一个区块的位置,也提供一个哈希值去验证这个区块所包含的数据的完整性。
在区块链中, Merkle树也被广泛应用。Merkle树类似于数据结构中的树形结构,主要为二叉树与多叉树,在节点中保存信息的哈希值。在区块链的数据区块中数据结构主要为二叉 Merkle树,每个交易记录对应于一个哈希值,并对应于 Merkle树的叶子节点,两个叶子节点再次两两配对哈希计算,通过递归的方式直到最后一个哈希值作为 Merkle树根存入区块体。如图2所示,叶子节点 hash0、hash1分别存储交易0、交易1的哈希值,非叶子节点 hash01存储其子节点的哈希值,根节点通过计算其子节点的值得到。在区块链中,用户通过区块头得到Merkle树根和别的节点所提供的中间哈希值来验证某个交易是否存在于区块中。另外, Merkle 树支持简单支付验证协议 SPV(Simplified Payment Verifica-tion)。中本聪在比特币的白皮书中指出,节点无需下载完整交易区块也可以完成确认。例如,在比特币系统中,节点只需要保存区块头信息,即可进行交易验证,即沿 Merkle 树的叶子节点上溯至 Merkle根哈希处,然后根据根部哈希与计算交易记录所得的哈希值来快速确认交易的存在性和完整性。这将极大地降低比特币运行所需的带宽和验证时间,提高了共识的效率。利用 Merkle树, Maxwell提出了交易所负债的密码学证明,该方案被 Wilcox进行了归纳总结。
3 公钥密码学、数字签名和数字货币交易
公钥密码学,又叫非对称密码学,是使用一对公钥和私钥的密码学,与只用一个密钥的对称密码学相对应。公钥密码学包括公钥加密算法和数字签名算法。公钥基础设施 PKI(Public Key Infrastructure)是提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证书。一个机构通过采用PKI框架管理密钥和证书可以建立一个安全的网络环境。除了PKI框架下的公钥密码学,还有身份基公钥密码学,即用户身份作为其公钥,其私钥由PKG(Private Key Generation)产生;无证书公钥密码学,是在传统的基于 PKI的公钥密码体制和基于身份的公钥密码体制的基础上提出的一种新的公钥密码体制。无证书公钥密码体制不但解决了传统的基于PKI 的公钥密码体制中庞杂的证书管理问题,而且解决了基于身份的公钥密码体制中的密钥托管问题; 基于证书公钥密码体制,该体制是 Gentry 于2003年在欧密会提出的,克服了基于身份公钥密码体制和传统基于 PKI公钥密码体制的缺陷。区块链所用的公钥密码技术不同于上述4种,由于区块链完全无可信中心,不存在 PKI、PKG等可信第三方。在区块链上,私钥由用户自己选取,并产生相应的公钥,该公钥对应记录在区块的地址上。一般而言,不同记录对应不同的公钥/私钥对。用户使用公钥对消息进行加密,只有对应的私钥才能解密。同时,私钥可用于对自己的交易信息进行数字签名,而别的用户可利用对应公钥对消息的签名进行验证。
数字签名,签名者对消息进行处理,生成别人无法伪造的一段数字串,这段数字串同时也是对消息的签名者发送消息真实性的一个有效证明。利用数字签名技术,能够确保消息传输的完整性、发送者的身份认证,防止交易中的抵赖发生。在比特币系统中,主要使用了 secp256k1椭圆曲线密码算法与Base58密码算法。比特币钱包的私钥,用于证明比特币的拥有者。拥有者必须使用私钥给交易消息签名,以证明消息的发布者是相应比特币地址的所有者。如果没有私钥,用户就不能给消息签名。比特币公钥用于生成用户的比特币地址,其生成过程如下:比特币的公钥是由上一步生成的私钥通过secp256k1椭圆曲线算法生成 65字节的随机数,再经过 SHA265 、RIPEMD160算法生成20字节长度的消息摘要作为比特币地址的主体信息,再在前面加上版本号信息,在末尾添加4个字节的地址校验码,地址校验码通过对摘要结果进行两次 SHA256 运算得到,取哈希值的前四位产生,最后把版本信息、主体信息和地址校验码放在一块通过 Base58 转换为易识别的字符串作为地址。私钥在区块链系统中最为重要,一旦丢失,即代表这对应公钥地址的财产也一并丢失。通过利用数字签名,区块链系统交易保证了消息的完整性与不可抵赖性。
在数字货币交易中,需要进行数字货币的转移。以一种简单的比特币交易为例,只有一个付费方A和一个接收方 B,并且付费方的数字资产只存在一条记录 AddrA中,收费方也只将该资产存储在一条记录AddrB中。通过比特币交易,A将其比特币从AddrA 转移到AddrB。避免双重支付是数字货币能够流通的基本安全要求。利用区块链技术的冗余存储特点,总账本分布式存储在多个客户中,一定程度上解决了比特币双重花费问题。Karame等系统地研究了比特币双重支付问题,分析了比特币快速支付面临的安全威胁,改进了比特币方案,提出了双重支付问题的安全解决方法,并定义了比特币交易中的审计和隐私保护。2016年, Gervais 等引入了一种新的量化架构来分析共识模式的安全性和其他性能,并设计了对双重支付和挖矿中自私矿工的最优攻击策略。 近年来,国内科研人员也开展了对数字货币安全交易相关问题的研究。2015年,北京航空航天大学伍前红教授团队利用部分盲门限签名,提出了比特币协同交易模型,设计了具体协议。2016年,西安电子科技大学陈晓峰教授团队研究了基于雾的外包计算,并提出了基于比特币的公平支付协议。福建师范大学黄欣怡教授等设计了比特币匿名交易方案,通过消除交易双方关联性实现交易方匿名性。北京科技大学朱岩教授团队提出了利用 IIS(Interactive Incontestable Sig-nature)签名方案,解决比特币交易确认问题。利用指定验证者数字签名技术,王化群等提出了指定验证者比特币资产证明的模型和具体方案设计,并进行了原型实现和安全性、效率分析。
4 零知识证明、零币和隐私保护的资产证明
1989年, Goldwasser等提出了零知识证明(Ze-ro-Knowledge Proof)。 通过利用零知识证明,证明者能够在不向验证者泄露任何有用信息的条件下,使验证者相信某个论断是正确的,零知识证明实质上是一种两方或多方协议。大量事实证明,零知识证明在区块链中非常有用。为了理解零知识证明,我们借鉴了 Goldreich 提出的形式化定义:对于语言L,令<P,V>是其交互证明系统。如果对于每个概率多项式时间交互机 V⁺,都存在一个概率多项式时间算法 M”,使得下面两个总体是计算不可区分的,我们就说<P,V>是计算零知识的:
{<P,V*>(x)}x∈L (即对于输入x,p和V*交互后的输出);
{M*(x)}x∈L (即对于输入x,M°的输出),机器M*叫做P和V*交互的模拟器。
2013年,利用零知识证明协议, Miers等基于区块链和比特币提出了零币( (zerocoin)。 零币是比特币的密码学扩展,实现了完全匿名的数字货币交易。但是, Miers等的方案仍然泄露 支付方的目的地和金额,不满足隐私保护的需求。2014年, Ben-Sas-son构造了具有强隐私保护的基于总帐的零币改进版(zerocash), 我们统一也称为零币。该新型零币利用了零知识简洁非交互论证 zkSNARK (zero-knowledge Succinc t Non-interactive arguments)。通俗地讲,比如A有一笔财产,在A不向B展示这笔财产的情况下,使得 B相信“A有这笔财产”的这一事实。我们通过一个例子来阐述在零币中是如何运用零知识证明来进行交易的,网络中记账节点称作矿工。假设 A要向B发送一个零币,首先是 A 与 B都有一张支票,这张支票代表着 A 与 B 拥有一个零币,A的支票存在于全网中,当A向B转账成功后,B的支票也会进行全网广播。为了隐藏交易的信息,要对 A、B的支票加密,只有使用各自的私钥才能解密。因为这笔资产只能存在一份,矿工(即记账节点)还存在一份“作废列表”,在 A向B转账时,A 需要在全网广播自己的支票代号,矿工将A的支票代号记录在“作废列表”中,在作废列表记录 A的支票代号时,假设代号已存在,则这笔资产已经失效,转账失败;若代号不存在,则该资产是有效的。在A 向B转账成功后,B的支票也会进行全网广播,矿工在支票列表中记录下B的支票代号,即A的支票失效,B的支票生效,完成交易。在整个过程中,消息包括支票代号都是加密处理的,所以矿工并不知道转账的发送方、接收方以及交易金额,从而保证了用户的隐私与匿名。2013年,基于 zkSNARK,Danezis等提出了另一种新型零币方案,该改进方案减少了零币的证明长度。
当区块链应用于金融领域时,资产证明是必须解决的关键问题。在基于区块链网络交易的资产证明中,零知识证明是重要的密码学工具。2014年,Wilcox研究了比特币储蓄证明模型和方法。2015年,在不泄露策略信息的条件下, Decker等提出了比特币交易的证明其偿付能力的方案。几乎同时,针对比特币交易所的偿付能力, Dagher等提出了保护客户隐私的比特币交易的偿付能力证明模型。利用零知识证明、匿名集合选取技术和 Ped-ersen 承诺,设计出一个高效安全的资产证明方案。
5 区块链中需要的其他密码学技术
在基于区块链的网络交易中,支付协议是核心技术,不可追踪性、不可关联性和交易内容保密是支付协议重要的安全和隐私保护需求。虽然比特币设计之初就考虑了交易匿名性,但是一些研究表明比特币交易并不能保证客户匿名性。2016年,Heilman 等利用盲签名和智能合约,研究了比特币交易中链上和链下交易的匿名问题。基于不可信第三方发放匿名凭证,利用盲签名和智能合约分别实现了比特币交易中的匿名性和公平性。 数字货币包含多种不同类型,如比特币、火币、莱特币、CryptoNote、Mixcoin、Zerocash等。在比特币类型的数字货币中,每个区块的交易记录包含了发送方地址和接收方地址。这样,在比特币类型的数字货币中,严格的匿名性并不存在。针对这个问题,2014年, Saxena等提出了混合签名(Composite Signature)模型。利用混合签名技术,区块中的交易记录实现了交易双方的不可关联性,提高了交易的匿名性。在 Mixcoin中,增加了违法审计机制,能够更加灵活 地实现 Mixcoin的匿名性。利用环签名和一次公钥/私钥对,CryptoNote实现了交易不可追踪性和多笔交易的不可关联性。
6 结束语
随着区块链迅速发展,数据安全和隐私保护问题遇到了挑战,而密码学是解决该问题的关键技术。在数字货币领域,如比特币、零币、门罗币等,区块链的应用已经 比较成熟。区块链在其他领域的应用、相关研究才刚刚开始。在物联网领域,可通过区块链技术进行密钥管理;在医疗健康网络领域,可通过区块链进行安全存储等。随着政府机构的介入,对联盟链的需求越来越强烈。通过利用联盟链,政府机构承担监管责任。但是,在联盟链中,如何在用户隐私保护与政府监管之间达到有效平衡?由于区块链交易效率比较低,如何进行复杂的超大规模交易?等等。区块链是一种新型的网络技术,期待更多的研究人员和企业加入,为区块链安全地、快速地发展做出贡献。