摘要:
区块链是近年来出现了一项分布式共识技术,基于区块链共识协议结合智能合约技术可实现去中心化的数据共享。隐私保护是数据共享中的关键特性,原生区块链没有解决隐私保护问题。利用数字摘要匹配算法提出了一种数据共享协议,该协议通过数字摘要空间的信息匹配,可在保护数据隐私的情况下实现数据的受控共享。基于协议的运行逻辑,分析了协议执行的正确性,参与双方可实现数据交换共享。针对数据共享中的面临的安全威胁,给出了安全性分析。
内容目录
1 预备知识
1.1 区块链及其安全特性
1.2 智能合约
2 协议设计
2.1 身份注册与管理
2.2 区块链数据访问接口
2.3 隐私数据共享协议
3 协议安全性分析
3.1 正确性
3.2 安全性
区块链技术是以比特币为代表的加密数字货币系统中的底层技术。由于区块链具有去中心化、公开透明等特点,受到了研究者的广泛关注。其主要解决了在没有引入可信第三方的基础上,相互不信任的节点之间达成共识的问题。抽象来看,区块链可以看作是一个无中心化的可信第三方,进而消除了中心化可信第三方的不可靠性。借助区块链这种虚拟的可信第三方,参与者可以实现双方数据的共享访问。尤其在开放性的网络环境中,基于区块链的数据共享能够消除用户对可信中心节点的依赖。
在比特币之后,又出现了多种改进的区块链协议f需要强调的是,区块链技术本身并不提供隐私保护功能。虽然在比特币系统中,通过随机账户的引入,可以在一定程度上保护用户的身份信息,但是区块链上所有的交易数据本身依然是明文保存于交换的。
在后续的加密数字货币中引入了更强的隐私保护功能也但是为了保护区块链上一般数据的私密性,需要采用更多的密码技术。在特定的场景下,如金融企业双方需要共享用户的违约等信用信息又不愿意泄露自己的用户信息情况下,隐私保护的数据共享尤为重要。近年来,利用区块链在不同行业实现数据共享的应用也广泛得到研究。
本文基于区块链技术设计了一套新的数据共享协议。在满足多方数据共享的前提下,避免对非授权者泄露数据提供者拥有的数据信息与隐私,数据请求者也只能正确获取在其权限范围内的数据。
01
预备知识
1.1 区块链及其安全特性
区块链由区块+链构成。以比特币为例,所有交易信息在数字签名后存储在区块上,每个节点在本地维护一份账本副本。区块链通过数字签名等密码学知识实现数据的防篡改、防抵赖等安全保护,解决了拜占庭将军问题四与双花问题。Juan等人于2015年证明了区块链理论的安全性。区块链作为一种新型的分布式多方记账系统,正逐渐由单纯记录数字货币的交易信息发展至承载产权、合约等价值存储,并在各大金融机构的努力下衍生出了联盟链与私有链。
区块链所能提供的安全性特性包括:
(1)一致性:在分布式环境中,所有的参与节点都能够得到一致的数据结果。(2)存活性:即便有恶意节点存在,区块链仍然能持续不断地记录新的数据。(3)公平性:因为有诚实节点的存在,所有用户的信息都能得到记录和存储。
但是区块链协议并不能提供数据的隐私保护,区块链中所承载的数据所有参与节点均能接收,因此在需要隐私保护的场景应叠加其他密码技术。
1.2 智能合约
20多年前著名密码学专家Nick Szabo提出智能合约这一概念。智能合约用计算机编程语言来实现传统合约,它通过代码来制定合约,执行协议实现合约双方的权利与义务。智能合约可以较好的控制价值的存储与管理,与状态机相似,通过定义多种状态与规则,制定合约被触发时所需的条件与相应响应逻辑自动完成交易流程。
然而,在区块链技术出现以前,智能合约一直未能落地,因为执行智能合约需要靠可信的第三方来监督合约不被篡改并被双方可靠执行,但传统计算机程序无法保障这一点。将智能合约代码与状态通过共识存放在区块链上,保障了代码执行、资产转移过程的安全性以及存储记录的永久性。智能合约提高了自动化交易水平,降低了交易成本,同时也保障了交易的安全性。基于区块链的智能合约可以在金融等领域提供更多的应用场景,这其实相当于基于区块链的安全多方计算。
02
协议设计
为了简化讨论,假设数据共享参与者为A、B两方。数据提供者为A,数据请求者为B。数据提供者负责存储数据索引与提供真实数据,并对数据共享请求作权限校验;数据请求者向数据提供者请求读取数据的权限。
应用场景为,当B知道数据的索引信息,则A向B提供该索引信息的数据查询服务,当B不知道数据的索引信息,则B不能获取A的任何数据信息。该场景适合于当A、B有共同的客户注册信息时(如用户名、身份证号等),双方可共享信用数据。而一方不能主动查询另一方的用户信息。
2.1 身份注册与管理
本协议中,参与者的身份由公钥密码基础设施(PKI)加以保护,注册中心CA向外提供注册与身份校验服务。区块链的共识节点在加入共识前先进行注册,并由CA签发包含其公钥的证书,通过CA校验身份后才可加入共识网络环境。普通参与者采用同样的机制获得公钥证书,并参与后续的数据共享协议。
2.2 区块链数据访问接口
区块链作为一种数字化的、安全的总账账簿,具有防篡改的特性。用于共享交换的数据存放在区块链上,协议定义三类与区块链进行交互的接口,分别为Tdata与Taccess与Tdeploy。
Tdeploy:每个应用为了提供特定的服务与功能都需要在上次部署智能合约,所以本系统在进行数据共享时需要通过deploy命令部署智能合约,即链码Chaincode 。
Tdata:存储数据协议。当系统希望区块链通过BuildBlock构建区块存储数据时,首先将数据打包成交易,并将列作为关键信息写入交易,签名后进行广播,Peer收到交易后传递给共识插件进行全网共识。
Taccess:查找数据协议。以V作为关键信息遍历区块链中的区块,找到其中所有的Transactions信息。再遍历Transactions以key为索引找到对应的交易,校验其智能合约ID和操作类型,并验证其完整性后得到内部payLoad数据。
2.3 隐私数据共享协议
假设数据提供者为A节点,数据请求者为B节点。CA节点启动并进行预注册后,协议的具体流程如图1所示。
图1 隐私数据共享协议流程图
协议执行流程为:
(1)A用户计算数据索引,该数据索引可根据不同的数据类型变化,例如,金融企业可以通过用户名及身份证号来作为数据索引。A将数据索引通过哈希算法计算哈希值Hash(index)。以该哈希值作为Key,{userld,peerld}打包成一对参数作为data通过Tdata协议进行存储,存储的数据类型为STORE_JNDEX,同时将数据索引与真正数据之间的映射关系存储在本地数据库中。
(2)B用户通过数据索引查询数据,对该索引同样计算哈希Hash(index),通过Taccess协议在区块链中找到对应的完整数据拥有者,查找类型为STORE_INDEX。
(3)B节点将数据索引与自己的身份信息做Hash计算摘要后,通过区块链底层P2P网络作为请求信息单播给提供者A。同时将之前的哈希值一同发送。可通过参数设置是否需要TLS/SSL安全信道进行传输。这一步的目的是通知数据提供者本节点具有获取共享数据的权限,是数据的合法使用者。
(4)A节点接受请求,对B的身份信息与数据索引的正确性进行校验。校验通过后,通过数据索引从本地数据库中找到真正数据,并为B请求的数据随机生成对称密钥Key。使用B的公钥通过
加密后,利用Tdata协议将加密后的对称密钥存储在区块链上,存储类型为STORE_KEY。同时将使用
即对称加密后的数据也通过Tdata协议存放在区块链上,存储类型为STORE_DATA。
(5)B节点以hash(index+id)作为key通过Taccess获取加密后的对称密钥后,使用私钥
解密,并使用key对从区块链上获取的完整数据进行对称解密即可完成数据共享过程。
03
协议安全性分析
本节我们将对前一小节设计的协议进行简单的正确性与安全性的分析,并在协议中引入仲裁机制,当数据提供者与请求者在数据共享的过程中发生争议时提供相应的解决方案。依旧假设数据提供者为A,数据请求者为B,真实数据用出表示,数据索引用index表示。
3.1 正确性
在本系统中,每个真实数据都会拥有一个对应的数据索引。节点之间预先沟通或通过某种手段对这个映射关系达成一致。只有获取提供正确的数据索引才有权利共享数据提供者拥有的真实数据。
(1)根据协议,A的本地数据库中会存储data与index之间的映射关系。A对index进行哈希计算,并将计算结果hash(index)与自己的身份信息存储在链上,那么若B通过某种途径获取
;则它计算
后,如果index与index'相同,则hash(index)等于
,即B可以成功在链上找到对应的区块,并获取A的身份信息。
(2)B将hash(index')+id(B)+hash(index+id(B))发送给A后,A计算本地是否有对应的索引,并通过计算hash(index+id(B))是否与B传过来的一致来检测B身份标识的有效性。若索引存在并且身份检查通过,则说明需要向B提供真实数据。A在本地生成随机对称密钥后,使用B的公钥对对称密钥初进行加密,并将
放在区块上,由于B拥有index,则它在本地计算hash(index+id(B)),即可在区块链上找到对应的区块。B使用自己的私钥即可成功解密获取对称密钥key。
(3)A在本地生成对称密钥key后,从本地数据库中根据index查询到真正的数据,并将data使用加密,将
放在区块上。同样,B可以在区块链上根据hash(index+id(B))找到对应的区块,由于B之前已经获取了对称密钥key,那它就使用key进行解密,成功拿到需要的最终数据。
根据以上三步看到整个过程具有可行性与正确性,在双方均配合的情况下,拥有数据索引的数据请求者可以成功从数据提供者中获取数据。
3.2 安全性
现在分析协议的安全性,假设系统中存在攻击者C,C可能已经经过CA的授权,并且通过登录成为了网络中合法的成员。C试图在没有获取索引的前提下,根据区块链上的已有信息或者通过窃听节点之间的通信流来尝试得到真实数据。首先分析本协议如何抵抗被动攻击:
(1)C无法获知A拥有的数据索引信息。区块链中存储了hash(index+id(A)),该类信息为数据索引的散列值。对于该类信息,因为本节开始已分析了SHA-256算法的单向性与抗强碰撞的能力,C是无法根据已有信息反推得到index,C需要耗费大量资源去随机找到一个
使得
等于hash(index),可知C没有能力得到关于index的任何信息。
(2)C无法得到与B有关的对称密钥key的任何信息。根据设计的协议,链上存储了
,该类信息存储之后对真实数据加密的对称密钥。因为本系统底层有可信PKI基础设施的支撑,并且节点或用户在生成私钥后一直保存在本地从未对外公开或传递过。因此C无法获得B的私钥,即他无法通过解密得到对称密钥key的任何信息。
(3)无法获得真实数据。A将真实数据以
的形式存储在链上,即真实数据已经被对称密钥key加密。在(2)中我们有了C无法获得对称密钥key的前提,因此C无法对其进行解密,即它无法得到真实数据的任何消息。
C还可以通过监听网络信息进行主动攻击,可能存在两种主动攻击方式。第一通过模拟B的身份信息来假装自己是B,诱骗A认为自己拥有数据索引,有权利获取真实数据;第二种情况是尝试将获取的身份信息由B改成C。但下面将证明这两点依旧是不可行的。
对于第一点,虽然通过模拟B,A会受骗并把加密后的对称密钥和真实数据存放在区块链上,但由于C没有B对应的私钥,因此它依旧无法进行解密。而为了实现第二点,即使C可以将id(B)改为id(C),但C同时需要构造hash(index'+id(C)),即它需要重新计算{index+id(C)}的散列值。前面分析过,C无法根据hash(index)得到index,即它无法计算得到hash(index'+id(C))。因此,C通过嗅探网络上的数据包进行主动攻击仍然 无法得到关于真实数据的任何信息。
同时,节点B在于A的通信过程中,也只能获取它拥有的index对应的真实数据data,无法获得A拥有的其他数据的任何信息。
04
结 语
本文针对用户间数据共享的场景,基于区块链以及智能合约技术给出了一种隐私保护的数据共享协议。该协议可以允许用户实现具有共同索引的数据交换共享,避免单方面的数据流动。同时协议过程由数据的拥有者主动授权,并且协议执行过程可实现公平仲裁。
引用本文:郭乃网,倪玮栋.基于区块链的隐私保护数据共享[J].通信技术,2019,52(08):1982-1986.