王秀利, 江晓舟, 李 洋
(中央财经大学 信息学院,北京 100081)
对企业而言,数据越来越有价值,甚至已经上升到战略核心地位.企业关注的重点也从如何利用数据转向如何保护数据.传统的集中式存储存在许多安全隐患,若防火墙被攻克或数据泄露,将导致大范围数据丢失,而且也不利于企业内部多层级的访问控制需求和监督管理.区块链以数据难伪造、难篡改和可追溯引起了学术界和产业界的广泛关注[1],成为解决上述问题的关键技术.以比特币等数字货币为代表的区块链 1.0[2]解决了去中心化等问题,但仍存在不足之处:(1) 交易完全透明且等待时间过长;(2) 在设计之初,有部分功能以规避监管为目的,并不适用于企业内部与行业内部;(3) 账户加密通常使用传统的非对称加密方式,在加密货币一对一的交易场景下可以提供很高的安全性,但对于企业内部场景,不便于灵活地访问控制,也不便于密钥的管理与保存.因此,传统区块链并不适合直接应用于企业.
对行业而言,同行业中的各个企业往往有合作与竞争的双重关系——既需要各个企业数据共享来完成整个行业版图的绘制,又需要保护好自己企业的数据.另外,各行业通常都有国家部门进行监管,如何在保证有效监管的同时又保护好各自的数据,成为了亟待解决的问题.
为解决上述问题,本文结合现实场景,分为企业内部与企业之间两部分,利用属性基加密(attribute-based encryption,简称ABE)对区块链进行改进,提出一种新的企业内部访问控制与企业之间数据安全共享模型.
区块链是利用加密链式区块结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用智能合约来编程和操作数据的一种去中心化基础架构与分布式计算范式[3].比特币、莱特币是典型的公有链,所有节点中立、开放,并不适用于企业内部与行业内部.同时,由于所有节点都参与投票,交易的确认和区块的形成速度都非常慢.以比特币为例,每分钟确认7笔交易,每10分钟生成一个区块[4](为了确保安全,通常需要等待6个区块生成,即 1小时完成交易确认),这在很多行业内是无法接受的.与公有链对应的是许可链,即只有被许可的节点才能参与投票、记账,其所有节点都在企业或行业内部,数量相对较少,因此响应速度较快.私有链、联盟链都属于许可链.
区块链通常使用单链结构,将账目、合约、交易等信息全部放在一条链上,所有参与计算的节点都在该链上投票以保证一致性.而这既没有保护隐私,又因大量冗余数据造成响应迟缓,平行区块链[5]应运而生.文献[6,7]提出了双链结构,所有参与的机构分享元数据及协议,但不分享数据.所有参与的机构都可以与其他机构交易,而保证隐私性.以此设计出两类区块链:(1) 仅存储账户信息和交易后的信息,但不执行交易的账户区块链;(2) 仅存储对交易有用的信息并且执行相关交易的交易区块链.这极大地提高了整个区块链的运行效率,同时,将账户自身变动与交易信息变动相分离,增加数据管理的灵活性.其所使用的双链结构主要用于金融领域,交易依然是一对一进行,未对原有非对称密码体制进行改动.
将区块链应用于数据共享,业内已有实践.如 Enigma[8,9]是一个分散的计算平台,拥有隐私性与可拓展性等特点.通过安全多方计算,其数据查询以分布式方式计算,任何一个节点都不能完整地访问数据.通过脱链存储技术,将区块链与分布式散列表[10]相关联,在区块链上仅保存数据存放的地址.MedRec框架[11]将智能合约与访问控制相结合进行自动化的权限管理,实现了对不同组织的分布式医疗数据的整合和权限管理.
非对称加密[12]是保证众多加密货币安全交易的基础之一,它包含2个密钥,即公钥和私钥.系统先以某种密钥生成算法(如SHA256 Hash算法[13]、Base58转换),将输入经过计算得出私钥(一串固定长度的字符串),然后采用另一个算法(如 Secp256k1椭圆曲线算法[14])分解私钥生成公钥,此过程是不可逆的.非对称加密在区块链中有两种用途:(1) 数据加密,用信息接收者的公钥对发送的信息进行加密,接收者以自己的私钥解密;(2) 数字签名,信息发送者以自己的密钥对信息哈希值加密(签名),接收者以发送者公钥解密后与原文哈希进行比对,用以确认此信息确实由发送者发送,达到不可伪造和不可抵赖目的.
区块链使用的椭圆曲线非对称加密机制虽然可以提供很高的安全性,但其密钥不可更改,且每个账户都要有单独的密钥.另外,加密货币只限于两个账户之间的交易,因此不存在权限管理问题.而在企业内部,这种加密方式难以满足大量员工对数据的多层级访问控制.
ABE[15-17]以属性为公钥,将密文、私钥与属性相关联,能更加灵活地表示访问控制策略.ABE有以下优点:(1) 加密时只需要根据成员属性加密消息,而不需要关心群体中成员的数量和身份,降低了数据加密开销,也保护了成员隐私;(2) 只有符合密文属性要求的群体成员才能解密消息,不符合属性要求的成员无法解密,从而保证了数据安全;(3) 用户密钥与随机多项式或随机数相关,不同用户的密钥无法联合,防止了用户的串谋攻击;(4) 支持基于属性的灵活访问控制策略,可以实现属性的与、或、非等门限操作.因此,ABE在细粒度访问控制、隐私保护等方面具有良好的应用前景.
使用树状图表示访问控制策略,以T表示.树中叶结点表示属性,非叶结点表示与、或等逻辑门限.设U={A1,A2,…,An}是系统中的属性集合,leaves(T)表示T中所有叶结点集合.设numv为v的子结点数,kv(1≤kv≤numv)为v的门限值,以att(v)表示与结点v有关的属性.给定一个属性集U和访问控制策略树Tv,如下定义函数F(U,Tv).
· 若v是叶结点,当且仅当att(v)∈U时,F(U,Tv)=1;
· 在其他情况下,F(U,Tv)=0.
哈希算法是一个函数,将任意长度的数据作为输入,都将被映射为固定长度的字符串.同时,它也是一个单向函数,由输入可以轻易地算出数据的哈希值,却无法由哈希值逆向推出原数据.
Merkle树[18]是基于哈希算法的树型数据结构,每个非叶结点都是其叶结点的哈希值.将数据进行分组哈希,并将生成的新哈希值插入到树中,如此递归,直到只剩最后一个根哈希值.相较于对所有数据打包进行哈希计算而言,这极大减少了工作量.以图1为例,当加密文件3出现改动时,需要更新哈希值,若不使用Merkle树,则要把所有4个文件重新哈希;而使用Merkle树,则只需重新计算哈希值3和6,便可以得到新的根哈希值.
本模型分为5层:存储层、区块链服务层、API层、链上代码(智能合约)层、应用层,其架构如图2所示.
· 存储层:为快速生成检索区块,采用链下存储方式,即链上只存储数据地址,原数据经过对称加密后存储在底层数据库,由企业维护.存储层设在企业内部,其存储结构可以使数据拥有者在将数据存入时决定数据的访问控制策略;
· 区块链服务层:分为企业链(company blockchain,简称CBC)和行业链(industry blockchain,简称IBC).其中,CBC记录企业内部的数据存储地址与变化情况,由企业内部节点共同维护,确保不同节点状态一致,提供基于属性的访问控制服务;IBC记录行业内部企业之间的数据交换与调用,数据的请求与共享都将记录在IBC上以便查询和监管;
· API层:接口用于数据的查询、区块广播、发送等;
· 链上代码层:提供智能合约服务.主要功能是提供属性基访问控制,即在CBC与IBC上提供自定义的访问控制策略,只有满足特定属性(或级别)的账户才能读取(或写入)数据;
· 应用层:提供各种应用程序,如监管系统、查询系统等.
无论企业内部还是行业内部,都是弱信用环境.因此本模型基于联盟链,即只有被许可的节点才能进行读写操作.同时摒弃了公有链常用的 POW,POS等共识机制,而是使用信用制,当发现节点有违规写入垃圾信息或其他作恶行为,则直接将其剔除出整个系统,收回其权限.
整个行业区块链系统由3种节点维护,分别为企业节点、行业节点与边缘节点,节点之间关系如图3所示.各自职能如下.
(1) 企业节点:用于维护企业链.当新数据达到阈值后,企业节点将数据经过对称加密后存放至底层数据库,并将其存放地址和密钥及Merkle树一同放到链上用于查询与验证;
(2) 行业节点:用于维护行业链而非企业内部数据,由行业协会或行业内所有企业共同维护,用于确认行业内各企业之间的数据交互(数据交集查询).行业节点仅维护行业链而不属于任何企业链.其主要功能是便于监管机构或行业协会对行业链进行监管;
(3) 边缘节点:同时加入企业内部区块链网络与行业区块链网络,用于连接企业链与行业链,进行数据传递.企业链与行业链使用同一套属性基加密算法,将授权中心 CA部署在边缘节点可以提高资源利用率.当某企业在行业链上发出数据共享请求时,其他企业边缘节点上的智能合约自动验证其访问权限,并进行交集操作.
整个系统包括企业链与行业链两部分,是平行区块链结构:企业链负责存储具体数据的位置索引,行业链负责记录企业之间的数据交集操作.具体如下.
(1) 企业区块链:确保企业内部数据的安全与可追溯.
当缓存区中的数据达到阈值,企业内部节点将其加密后传输至底层数据库中,同时将数据的输入时间戳、区块长度及前一个区块的哈希值作为区块头,根据访问控制树将数据位置索引、明文形式的访问控制策略和数据Merkle根加密后打包成块,存储至区块体中,其后上传至企业链上.其数据存储结构如图4所示.
(2) 行业区块链:将行业内各企业置于监管之下,并可通过多方计算将所有企业的数据进行统一分析.
与企业链中的准备工作相同,每个企业在将数据位置索引上传至企业链时,将行业内其他企业的属性也纳入访问控制树中,一个典型的属性基加密策略树如图 5所示.其左支代表对企业的属性要求,右支代表企业中有权限部门的账户要求.只有特定企业中的特定部门才能进行解密.数据请求者在提出数据交集请求时,需将所请求数据与含有自己属性的令牌一同发布至行业区块链上.所有企业的边缘节点都将验证其是否有访问本企业数据的权限,只有通过权限验证,边缘节点才会自动对所请求的数据进行交集操作,并返回给请求企业.由于属性基访问控制策略的存在,全行业链节点都将记录这一过程,但只有交易双方可见交易的细节.另外,对于需要监管者查看所有数据的行业,可直接将监管者属性列入访问控制树左支,即可使其拥有访问权限.
数据存储方面,本模型使用了密文存储与脱链存储来保证数据的安全.
(1) 密文存储:由于系统主要功能是保护企业内部重要数据,通常是用户隐私数据、财务数据等,因此底层存储应采用密文存储.而直接使用非对称加密会导致密钥管理混乱,同时对于大量底层数据而言效率不高.因此,选用对称加密方式对底层数据进行加密;
(2) 脱链存储:由于区块链处理速度较慢,不适宜将所有数据直接存储在链上,因此使用脱链存储.通过建立分布式散列表,区块链存储对数据的引用,而非数据本身.数据在存储时进行加密,并编辑数据访问控制策略.Merkle树保证了数据即使没有存在链上,也不能被篡改,且在部分数据变动后可以较小代价更新Merkle根.
该方案由企业链与行业链两个相互隔离又可通过边缘节点相互通信的双链系统组成,其中:企业链用于加密存储企业内部数据的地址,行业链则用于记录行业内部企业之间的数据请求.具体步骤如下.
3.2.1 企业内部访问控制
(1) 初始化:根据安全参数lλ,由授权中心CA执行产生主私钥mk和公共参数pp;
(2) 身份注册:企业内各部门向系统提出注册申请,获取其真实身份信息对应的标识UID及属性集合SU;
(3) 密钥分发:按照密钥分发算法KeyGen(mk,SU),CA根据注册者属性集U∈SU,计算其属性私钥、属性参数,并由此计算出使用者的私钥SK,将其通过安全信道发送给使用者保存;
(4) 加密数据:数据上传者根据访问者的属性对数据制定访问控制策略树StrGen(SU)→Tcom,随机生成对称加密密钥rs,数据经过对称加密计算后放入底层数据库.对称加密算法可以表示为
(5) 数据上传:企业节点根据访问控制策略树对数据索引地址add、对称加密密钥rs进行加密,并将其广播至区块链.同时,节点生成该数据索引id与链上数据的映射,将其放入底层数据库(不与经对称加密后的数据一同存放):
(6) 访问密文:访问者根据数据索引id在链上查得该数据的地址与对称加密密钥.若该访问者没有权限访问此数据,则无法得到密钥rs,无法对索引地址进行解密,也就无法访问原数据;若该访问者属性满足访问控制策略树,则其可以解密得到地址add与密钥rs,可以至底层数据库访问该数据:
3.2.2 行业内部访问控制
(1) 前4步与企业内部数据访问控制相同,但在对数据加密时,其访问控制策略树不仅考虑企业内部账户,还加入行业内其他可进行交集操作的企业属性SU′,StrGen(SU′)→Tind;
(2) 令牌生成:每个企业生成一个token令牌,包含该企业的权限与属性信息;
(3) 加密请求:请求数据的企业将需要与其他企业进行交集操作的数据D(d1,d2,d3,…,dn)用访问控制树Tind进行加密,使其仅满足被请求企业的属性:
(4) 发送交集操作请求:请求数据企业将加密后的数据与自己的令牌一同发送至行业区块链上,所有企业都可以看到并记录这一消息,并由令牌中的信息判定其来源,但只有符合密文中所包含的访问控制树的企业节点可以解密此消息:
(5) 交集操作:由于边缘节点既是企业链的节点,又是行业链的节点,被请求方的边缘节点在完成解密后,可以自动在其内部企业链上检索该数据是否开放给请求方.若接收到的令牌可以满足交集数据的访问控制树,则边缘节点自动将数据进行交集操作,并通过安全信道返回给请求方:
(6) 上传区块链确认:当请求方完成交集操作后,全局广播一条包含此令牌的数据,表明已完成交集操作,其他企业确认后将此行为记录在行业区块链上.
以A,B,C这3家处于同一个行业链中的企业为例.A为数据请求方,B和C为数据共享方.其中,B在企业链的访问控制树中将本年度1月~3月数据设为对A可操作,而C只共享了一月数据给A.A试图请求B,C的1月、2月数据用作交集操作,则将自己1月、2月数据经过Enc(D(JanA,FebA))得到cphA,此密文所含访问控制树仅B,C可解密.将cphA连同tokenA发送至区块链.B和C都将接收到此信息,但边缘节点用tokenA尝试解密各自的1月、2月数据时,只有B能完成操作,则B的边缘节点将D(JanB,FebB)∩D(JanA,FebA)返回给A,C返回空.在B,C都完成上述操作后,A将自动向区块链广播一条消息表明已完成交集操作.
假设B在企业链的访问控制树中将数据d1,d2,d3设为对A可操作,而C只共享d1给A.A向B和C提出d1,d2,d3数据交集申请的具体算法如下.
算法.
1.B,C利用StrGen(SU)分别生成各自的TindB和TindC;
2.B,C分别使用随机生成的对称密码对数据加密:
3.B,C根据各自策略树对数据地址索引与对称密码加密:
4. 数据上链:
5.A向B,C发起交集请求,B的边缘节点将会进行如下操作:
对于C,由于A不满足C设定的交集访问权限,因此无法使用Dec算法解密数据,返回null.
6.A在完成上述操作后,将此操作上传至行业区块链IBC,使行业链上的其他企业都记录下这一操作过程:
表1从数据安全、企业间弱信用环境和数据存储等方面将本模型与传统区块链进行对比分析.
随着区块链的快速发展,越来越多的应用场景被开发出来,其在数据存储与共享方面的研究与实践也受到广泛关注.本文提出一种应用区块链的数据访问控制与共享模型,用属性基加密对现有区块链的加密方式、数据存储方式进行了改进,以满足数据在企业内部的访问控制以及企业之间数据共享的需求,达到了细粒度访问控制与安全共享的目的.其中,脱链存储、非对称加密与对称加密相结合的措施已可在Hyperledger Fabric[19]等平台上实现.
Table 1 Comparative analysis between the model and traditional blockchain表1 本模型与传统区块链对比分析