基于区块链的敏感数据安全共享方案
2022-04-11冯政鑫
冯政鑫 唐 寅 韩 磊 吴 锡 彭 静
1(成都信息工程大学计算机学院 成都 610225)2(北京计算机技术及应用研究所 北京 100854)(www.fengzhengxin@foxmail.com)
由于数字化信息具有高度的可变性,区块链技术的不可篡改、可追溯等优势在医疗数据、教育记录、科研成果等敏感数据(涉及到隐私、成果等需要加密保护的数据)的共享应用中得以体现,由此产生了众多以区块链技术为基础的数据安全共享方案[1-8].这些方案保护了敏感数据的使用安全,但同时也存在一些缺陷:缺乏可靠的用户行为存证、授权信息的发送得不到监管和记录、解决方案没有普适性等.为进一步发掘敏感数据的潜在价值,推动敏感数据共享应用,重要的是打消用户“不愿共享”的顾虑,因此,需要规范敏感数据的共享流程,并对数据的操作行为进行永久留痕,达到“分享后防止抵赖,泄露后有源可查”的整体效果.现有的基于区块链的数据共享方案难以满足以上需求,需要针对敏感数据的特点进一步开展研究.
1 研究背景及意义
1.1 相关工作
2008年,比特币[9]的提出为解决不信任环境下的数字货币支付问题提供了解决方案.区块链技术是比特币的底层技术,狭义地讲,区块链是一种以区块为最小单位,通过密码学按照时间顺序链接而成的数据结构[10],自身的组织结构赋予了其难以被伪造和篡改的能力[11].从数据管理的角度,区块链可被视为一个由众多节点共同维护且不可篡改的分布式账本,利用共识协议确保数据的一致性.随着区块链3.0时代的到来,区块链已被广泛应用到供应链、物流、教育、智慧医疗等领域[12],成为继人工智能、大数据、物联网等前沿技术后又一项对未来信息化发展产生重大影响的战略新兴技术.正引领新一轮的技术产业变革.
区块链技术由于其自身的“可追溯”“难篡改”“弱中心”等特点,可在一定程度上保证数据安全[13].在敏感数据共享方面,Li等人[3]通过将原始教育记录数据以密文形式存储在链下服务器中,将数据哈希值存储在链上,链下数据通过哈希值定期锚定的方式实现教育记录的安全存储,并利用智能合约技术管理数据的分享过程.谭海波等人[4]将档案文件加密存储到星际文件系统(interplanetary file system, IPFS)[14]中,然后将档案馆的数字身份和档案的摘要信息存储在联盟链上,并定期同步区块快照信息到以太坊[15]上,实现外部用户及数字档案馆间档案数据的验证与共享.牛淑芬等人[5]提出一种基于区块链的电子病历数据共享方案,医生将电子病历密文的哈希、关键字索引等数据上传到医院私有链,医院服务器从中提取信息,上传至由多家医院共同维护的联盟链,患者通过联盟链发起搜索,联盟链节点通过医院服务器获取数据返回给用户.张磊等人[6]通过将区块链与云存储、基于属性和关键词加密等技术相结合,将访问控制策略存储于云服务器中,提出了病人可控(由病人自主定义访问策略)、云链协同的病历数据共享方案.为促进电子证照资源的跨地区共享,王浩亮等人[7]利用以太坊平台建立了分布式多账本,将电子证照信息存储到以太坊上,使得发证方与用证方能够通过区块链、数据加密等技术共享电子证照.赵剑等人[8]提出了一种面向医疗隐私保护的双区块链模型,将用户信息与交易记录分开并将交易链数据单独处理,在保障医疗数据隐私性的同时提高了数据的访问效率.
1.2 问题分析
区块链无法有效存储非事务性数据[16],且庞大的数据量会导致区块链膨胀问题(the problem of blockchain bloat)[17],故以上方案大都采用将原始数据离链存储,将元数据上链,然后利用加密技术或访问控制策略管理数据共享流程的方法.这样做能够以区块链为底层设施,快速建立敏感数据共享环境,但还应考虑以下几个问题:
1) 数据申请、分享等关键行为的可靠存证问题.以上方案中引入区块链的主要目的是实现数据主体的保护和验证,但对于敏感数据而言,用户客体对数据操作行为的留痕依然重要,没有可靠的行为记录不利于对敏感数据的使用进行统计和追溯.
2) 数据授权信息的安全传达问题.实际数据以密文形式存储,在分享数据时,需要将解密密钥单独发送给数据接收方,发送过程得不到可靠的监管和记录,同时还存在信息泄露的风险.
3) 解决方案的普适性问题.当前解决方案大多针对具体应用场景下特定格式的敏感数据,当有关条件变化后,难以不改动方案而直接将其迁移到新的场景中.
4) 区块链节点和存储节点的合理部署问题.将数据存储平台与区块链平台部署在不同的物理设备可以在一定程度上保证数据的访问和存储安全,但同时也会增加资源的消耗以及部署和维护的难度.
解决以上问题既能进一步完善区块链技术在敏感数据共享应用中的解决途径,又有望促进传统敏感数据存储和分享方式的转型,发掘敏感数据的潜在价值,以满足日益增长的数据共享需求.
2 基于区块链的敏感数据安全共享方案
2.1 总体方案
本文提出的基于区块链的敏感数据安全共享方案由联盟区块链、密码运算单元、私有IPFS集群、系统服务、联盟成员、应用系统以及用户7部分构成,如图1所示.IPFS是一个内容寻址的对等分布式文件系统,该方案利用IPFS私有集群提供数据存储服务,离链存储加密数据.联盟区块链主要由物理节点和运行在其上的基础平台软件构成,对外提供区块链基础服务和智能合约服务,实现节点认证、数据共识、数据上链及查询等功能.密码运算单元横向与区块链节点协同工作,为节点提供签名、验签等密码服务,纵向为应用系统提供对称加解密、非对称加解密、哈希运算等密码服务,可根据应用场景和运算速率需求采取硬件或软件实现方式.系统服务以RESTful API的形式为应用系统提供接口调用,实现敏感数据安全存储、验证、分享、流转追溯等功能,合法注册的用户通过应用系统访问相应的功能与服务.
图1 总体解决方案原理图
本文方案基本数据流如图2所示.通过系统服务可以查看、上传、分享、请求及获取敏感数据,原始文件(文档、图像、音频、视频等)经对称加密后存储在私有IPFS集群,数据摘要和加密后的存储地址(content-ID, CID)等信息经过处理后作为敏感数据交易信息被打包到区块中并追加至联盟区块链,保障敏感数据存储安全,支撑敏感数据共享与验证等业务;同时,数据申请、数据授权、数据分享以及数据获取等用户行为信息作为行为交易信息也被打包到区块中并存储到链上,保障敏感数据流通安全,支撑敏感数据流转追溯等业务.
图2 基本数据流图
2.2 方法设计
2.2.1 敏感数据的添加与保护
敏感数据的添加与保护为实现敏感数据共享提供基础环境.用户提交待分享的敏感数据,通过密码服务计算原始文件File的哈希值,并利用随机对称密钥edk〈keya,iva〉对File加密,然后通过数据存储服务将原始文件密文(Fct)存储在私有IPFS集群中,IPFS返回该数据的存储地址CIDFC.将有关信息打包成敏感数据对象(JsonSD,敏感数据属性的JSON组织形式,具体结构如表1所示),并采用同样的方法对JsonSD进行加密和存储.
表1 敏感数据对象(JsonSD)结构表
对于IPFS返回的敏感数据对象密文的存储地址CIDJSDct以及加密时采用的对称密钥edk〈keyb,ivb〉,本文利用非对称加密方法对其进行保护,加密所用密钥为用户的数据操作公钥(PKuser),它在用户注册时与有关信息一起存储在区块链中,可利用智能合约通过存储时的交易哈希(TxHashuser)查出.最后利用区块链服务将PKuser加密后的数据、敏感数据标题、敏感数据标识(Flagsd,标识该条交易为敏感数据信息)等信息发送到智能合约,经过共识打包成块并追加到联盟链.方法详情见算法1:
算法1.敏感数据存储.
输入:敏感数据标题Title、敏感数据原始文件File、用户上链交易哈希TxHashuser;
输出:敏感数据上链结果标识saveFlag(成功为TRUE,失败为FALSE).
① ProcedureSaveSD(Title,File,TxHashuser)
②Hash(File)→HF;
③ 随机生成2个对称密钥→
edk〈keya,iva〉,edk〈keyb,ivb〉;
④Symmetryencrypt(File,〈keya,iva〉)→Fct;
⑤ 将Fct添加到私有IPFS集群→CIDFC;
⑥ 将Title,HF,CIDFC,〈keya,iva〉打包到
JSON文件中→JsonSD;
⑦Symmetryencrypt(JsonSD,〈keyb,ivb〉)→
JsonSDct;
⑧ 将JsonSDct添加到私有IPFS集群→
CIDJSDct;
⑨ 根据TxHashuser查询出用户信息上链后的交易信息→Txuser;
⑩ 从Txuser中获取PKuser;
ECIDJSDct;
〈keyb,ivb〉ct;
该方法适用于文档、图片、音频、视频等各类敏感数据的安全存储和上链.通过链下存储可以在一定程度上解决非事务性数据无法上链的弊端,建立起链上数据与链下数据的唯一联系;通过数据上链可以有效防止敏感数据被篡改,保障数据的一致性.另外,该方法中采用的对称与非对称的混合加密策略使得链上并未公开展示敏感数据的核心信息,较大程度地保护了数据的隐私,由于用户的数据操作私钥(SKuser)由用户自己保管,所以敏感数据所有者可根据自己的意愿控制敏感数据的知悉范围,这对于敏感数据的保护也具有重要意义.
2.2.2 敏感数据分享与获取
有敏感数据的添加与保护方法提供基础支撑,用户便可通过链上数据得知当前已添加的所有敏感数据信息,然后根据需求选择数据进行分享或请求.对于主动分享的情况,数据所有者需确定待分享的敏感数据,并提供加密敏感数据对象地址密文(ECIDJSDct)的解密密钥SKuser,通过密码服务进行非对称解密运算,验证SKuser的有效性,若对ECIDJSDct解密成功,数据所有者即可将该敏感数据分享给任意合法用户.解密ECIDJSDct成功后,再对其他信息进行解密,并用接收用户的数据操作公钥对明文重新加密,加密结果被打包到交易详情TxDetails中,与Flagaction(标识该条交易为数据分享交易信息,不同数值代表不同的行为类型)、TxHashsd、PKreciever一起作为行为交易,经共识后存储于区块链中,具体过程见算法2.对于数据请求的情况,用户需提供所申请数据的交易信息TxHashsd与自己的数据操作公钥PKuser,由智能合约服务将以上信息与对应的Flagaction打包,共识后上链.数据所有者根据链上信息知悉该用户的有关申请,再根据自身意愿将该敏感数据授权给申请者,授权过程与分享基本一致,Flagaction会更改为授权行为对应的数值.接收者获取到对应的链上信息后,利用自己的数据操作私钥SKreciever对ECIDJSDct_r与〈keyb,ivb〉ct_r进行解密,然后即可利用解密后的信息访问私有IPFS集群中存储的该敏感数据的所有版本.同时,对称解密服务调用成功后,接收者的数据获取行为也会记录到链上.
算法2.敏感数据分享.
输入:待分享敏感数据上链交易哈希TxHashsd、数据操作私钥SKuser、接收用户上链交易哈希TxHashreciever;
输出:敏感数据分享结果标识shareFlag(成功为TRUE,失败为FALSE).
① ProcedureShareSD(TxHashsd,SKuser,
TxHashreciever);
② 根据TxHashsd查询出敏感数据上链后的交易信息→Txsd;
③ 根据TxHashreciever查询出用户信息上链后的交易信息→Txreciever;
④ 从Txsd中获取Title,ECIDJSDct,〈keyb,ivb〉ct;
⑤ if (Asymmetrydecrypt(SKuser,ECIDJSDct)
→CIDJSDct);
⑥Asymmetrydecrypt(SKuser,〈keyb,ivb〉ct)
→〈keyb,ivb〉;
⑦ 从Txreciever中获取PKreciever;
⑧Asymmetryencrypt(PKreciever,CIDJSDct)
→ECIDJSDct_r;
⑨Asymmetryencrypt(PKreciever,〈keyb,
ivb〉)→〈keyb,ivb〉ct_r;
⑩ end if
TxDetails;
TxDetails存储到联盟区块链上→
shareFlag;
通过以上敏感数据分享与获取方法,可以实现敏感数据的链上授权,用户无需再借助其他渠道将授权信息单独发送给接收者,在一定程度上保障了敏感数据的授权安全,防止授权信息外泄;同时,数据分享和数据获取的行为在区块链上得到了永久留痕,所有区块链节点都是该数据的记录者,所有可访问链上数据的用户均是该行为的见证者,使得该记录难以被篡改,从而防止用户不承认发生过数据申请或分享等行为,为敏感数据的使用追溯提供支撑.
3 系统设计与实现
3.1 敏感数据共享系统设计
在本文方案中系统服务为应用系统提供接口调用,用户通过应用系统访问相应的功能.在实现中也需要一个桥梁连接用户与数据,并使得各类服务协同运行,从而提供以上敏感数据添加、分享、申请、获取等复杂功能.由此本文设计并实现了一种敏感数据共享系统.整体采用层次化、组件化的设计模式,集成了区块链服务、智能合约服务、存储服务、密码服务的调用方式,并开发了用户服务、管理服务等系统基础服务,使系统能够正常运转,系统架构如图3所示.系统数据层中区块信息、交易信息均从区块链账本中定时同步而来,将交易信息根据Flagsd,Flagaction等属性提取处理后形成敏感数据信息与用户行为信息,在应用前端提供给用户.用户信息、角色信息、节点信息为维持系统安全运转的必要信息,这些数据均存储在关系型数据库中,便于系统检索和复杂查询.
图3 敏感数据共享系统架构图
区块链服务与智能合约服务由基于Java的国产开源联盟区块链底层技术平台JulongChain[18]提供,节点共识采用fabric-Kafka协议,智能合约运行在Docker[19]容器中,通过RPC协议与节点交互.搭建联盟链前需先参照相应合约规范[20]编写敏感数据上链与查询智能合约,链搭建过程中首先部署1个Consenter节点和多个node节点,然后利用Consenter节点创建群组,并通过将所有节点加入该群组的方式构建联盟链网络.
存储服务由私有IPFS集群提供,IPFS分为公有集群和私有集群.公有IPFS集群面向全网,任意IPFS节点均可加入到该网络中,私有IPFS集群仅限于团体或组织内部使用,具有相同共享密钥的节点才可以参与到该集群中[21].实现过程中IPFS采用go-ipfs v0.9.1版本,在每个node节点上同时安装该版本软件,然后为所有IPFS节点配置一致的共享密钥并更改引导节点为私有节点,以此构建私有IPFS集群.
密码运算单元采用软件实现方式,通过java.security,javax.crypto等工具实现RSA[22],AES[23],SHA256[24]密码算法,支持长度为1 024 B,2 048 B的随机密钥对以及生成长度为128 B,256 B的随机对称密钥,为系统提供密码服务支持.
3.2 系统部署
AES与RSA的混合加密策略能够多层次地保护敏感数据的存储安全,关键数据在区块链中均以密文形式存储,既使用户获取了区块数据,也无法仅凭其中的信息获取到存储集群中的实际数据,这为区块链技术平台与数据存储平台的联合部署创造了有利条件.实际部署时,本文将联盟链基础平台、密码运算单元(签名、验签、非对称加解密、数据哈希)、IPFS部署在同一个物理节点上,即一体节点;将敏感数据共享系统、密码运算单元(对称加解密、文件哈希)部署在应用服务节点中,如图4所示:
图4 系统部署原理图
应用服务节点同时作为敏感数据原始文件的中转站,在上传敏感数据时,完成文件的加密处理后将原始文件删除,待IPFS将密文存储成功后,应用服务节点中的密文数据也被删除;在获取敏感数据时,完成文件的解密处理后将密文数据删除,待用户将明文数据下载到本地后,应用服务节点中的明文数据也会被删除,应用服务节点中不存储任何原始文件数据.
4 系统分析
4.1 安全性分析
在安全性方面,由于本文方案采用了链下存储方法,少量数据存储在链上,原始文件存储在链下,故主要存在链上链下数据的一致性、链下数据的完整性等问题.当数据完整存储在链上时,通过节点共识、分布式账本等技术即可保证数据的一致性.当部分数据存储在链下之后,该部分数据的准确性与完整性则需要通过链上数据进行校验.
1) 链上链下数据一致性分析:IPFS为内容寻址的文件系统,每个文件对应唯一的CID.用户在获取到CIDJSDct与〈keyb,ivb〉后,若能从私有IPFS集群中获取到JsonSDct,并能利用密钥〈keyb,ivb〉成功对其解密,方法如式(1)所示:
Symmetrydecrypt(JsonSDct,〈keyb,ivb〉)→
JsonSD,
(1)
则说明有唯一的链下数据与链上数据一一对应,链上链下数据一致;否则,表明该敏感数据在存储过程中遭到了篡改.
2) 链下数据完整性分析:通过以上方式,用户能够获取到解密后的敏感数据对象JsonSD,然后通过JsonSD中的原始文件密文存储地址CIDFC和原始文件解密密钥〈keya,iva〉,以同样的方式从IPFS集群中获取原始文件密文并解密得到原始文件File,最后计算其哈希值,方法如式(2)所示:
Hash(File)→HF_v,
(2)
并将得到的待验证的哈希值HF_v与敏感数据对象中的原始文件哈希值(HF)进行比对,若一致,则证明链下数据正确且完整.若不一致,则表明该敏感数据在添加过程中遭到了篡改.
由以上分析可知,本文方案具备完整的数据校验机制,能够对链上链下数据的一致性以及链下数据的完整性进行判断,及时发现数据添加过程和存储过程中可能存在的非法行为.
4.2 功能分析
本文提出的总体方案、敏感数据添加、分享等方法可用于文档、图片、音频、视频等各类敏感数据的安全存储、上链及共享,方案普适性强.与其他敏感数据共享方案相比,本文方案将与数据操作有关的用户行为均进行了上链存证,对加密的授权信息通过链上同步的方式进行传送,实现过程中采用将区块链平台与数据存储平台进行联合部署的模式,具有防抵赖、安全可靠、节约资源等优点.采用联盟链的技术方案,虽然经济成本较低,但也牺牲了一定的可拓展性.不同方案的功能对比如表2所示:
表2 不同方案对比
4.3 性能分析
敏感数据的添加与分享算法中均涉及到多个环节,为验证方法的实用性,本文对敏感数据的添加过程进行了性能测试.测试环境中共部署32个一体节点与1个应用服务节点,其配置详见表3,RSA与AES密钥长度分别设置为1 024 B与128 B,性能测试结果如图5所示.
图5 敏感数据添加性能测试结果
表3 实验节点配置
随着敏感数据原始文件大小的增加,添加敏感数据的用时大致呈线性增加趋势.其中,敏感数据原始文件的SHA256哈希值计算、敏感数据原始文件与敏感数据对象的AES加密、原始文件密文与敏感数据对象密文存入IPFS等环节的用时增加较为明显,智能合约执行与其他环节(JsonSD生成、RSA加密等、fabric-Kafka共识过程等)用时较为稳定,时间成本在可控范围之内.另外,SHA256与AES环节时间消耗占比在70%左右,密码运算的效率对方法整体性能影响较大,在实际应用中可根据场景灵活选取不同的密码运算实现方式,调控方案的整体性能以满足不同的应用需求.
5 结 论
为解决敏感数据共享过程中的有关问题,本文提出了一种基于区块链的敏感数据安全共享方案,设计了总体解决方案、敏感数据添加与分享算法,进行了系统设计与实现,并对方案的安全性、功能、性能进行了评估.结果表明本文方案能够实现多场景各类型敏感数据的安全共享,保障敏感数据的存储、访问及授权安全,满足敏感数据的共享需求.