1. 引言
在信息化时代,人们常常需要使用到类似出生证明、健康证明、财产契约和学术成绩单等的官方文件,此类数据由一些公认的可信机构发布,或在研究机构中贡献研究价值,例如购物记录、医疗数据等;或由所有者在与其他人或组织的交涉中使用,以证明某些陈述的真实性,例如健康证明、财产证明、学籍信息、征信数据等。这类数据往往包含有用户隐私信息,而用户习惯于将个人数据存储在半可信的云服务商中,若将数据明文存储在云上,用户无法控制云平台上对数据的使用,易于造成了个人隐私数据的泄露风险;若将数据密文存储在云上,数据加解密计算耗费巨大,难以实现高效共享。为了使这类数据能更好地在研究或特定场景下发挥其价值,加密数据云存储的访问控制是非常重要的,因此迫切需要一个既能有效保护用户隐私信息,又能高效实现数据共享的方案。
自2008年比特币概念被中本聪提出,经过十多年的发展,作为比特币底层技术的区块链也逐渐被学者探索其在数字货币领域外的应用。尤其在信息安全领域,区块链以其去中心化、公开透明、不可篡改等特性,获得诸多学者在解决隐私数据安全共享问题上的青睐。ZYSKIND [1] 等提出基于一个去中心化用户数据管理框架,但该系统要求数据所有者与数据访问者必须同时在线;Jemel [2] 等提出了一种具有时间维度的分布式访问控制模型,该方案结合区块链技术与CP-ABE算法来验证用户的访问权限,但该方案无法满足复杂的访问需求;Li [3] 等提出了基于区块链的分布式基于多授权CP-ABE和DMA-ABS的数据存储与共享系统,数据所有者可以安全地与多个满足策略的用户共享数据,不需要单独授予单独的权限,但数据所有者无法动态更改数据访问策略;SHU [4] 等基于多门限哈希函数构造了一种MCPS无证书聚合签名方案,实现基于区块链的医疗信息的安全存储和共享,具有较高的计算效率和存储效率,但方案中没有实现患者对医疗数据的自主控制权;Gao [5] 等提出了一种优化的基于区块链的策略隐藏方案OHP-CP-ABE,并使用乘法同态ElGamal密码系统来确保授权验证期间的属性隐私,保证了策略和属性隐私的同时实现可信访问,但双线性映射和指数运算的频繁运用使得加重算法计算开销;Niu [6] 等采用可搜索加密技术实现区块链上的安全搜索,利用区块链的不可否认性确保关键字和密文的安全性,验证算法保证了云上数据的完整性,但该方案的属性撤销由权威中心负责,用户对数据未能实现完全控制;文献 [7] 提出了基于以太坊平台的访问控制方案,方案设计了访问控制、判断和注册三大合约,访问者的属性判断、授权以及记录存档都由智能合约自动化完成。文献 [8] 实现了分布式物联网设备配置文件的管理,智能合约记录物联网设备的访问控制操作,配置文件和访问数据形成共识后上传到私有链中,私链的运用保证了较高的隐私性,但中心化程度也相对较高。
从上述分析来看,区块链技术应用于隐私数据保护领域方兴未艾,且大多数学者倾向于设计复杂的访问控制策略来实现对数据的保护,实际上,直接把隐私数据保护起来也许能更加简单、安全、有效地达到期望的效果。因此本文提出一种基于区块链的个人敏感数据安全存储及共享方法,利用区块链的特性搭建去中心化的访问控制平台,编写智能合约执行访问者属性自动判断,在此基础上,使用改进的国密算法SM2隐藏用户数据中的敏感信息,提高整体安全性和性能,融合的内容提取签名的思想实现了无需经过数据发布方的确认的情况下验证被提取后的数据的真实性。
2. 相关知识
2.1. 区块链
区块链 [9] 本质上是一个去中心化的分布式账本数据库,每个区块以按时间先后顺序链接,后产生的区块指向前一个区块,当前区块的区块头包含上一个区块的哈希值。当链中某个区块数据被篡改,则该区块的哈希值发生变化,在此区块的所有区块都会发生变化。一个完整的区块链系统由密码学,P2P网络和工作量证明等多种技术组成,P2P网络组成了区块链底层的分布式网络系统;时间戳、数字签名保证数据库的不可篡改和可追溯;拜占庭容错机制和共识算法保证节点间区块数据的一致性。
2.2. 智能合约
智能合约 [10] 的概念最早于1994年由尼克·萨博提出。由于当时缺少能够支持可编程合约的数字系统和技术,关于智能合约的工作理论迟迟没有推进。直到比特币的诞生,学者们认识到其底层技术区块链能为智能合约提供可信执行环境,智能合约自有了一个可支持的平台。智能合约是用户自定义的模块化的、可重用的、部署在区块链上的脚本,一旦满足预设条件,智能合约就可以在没有第三方介入的情况下自动执行。通过使用智能合约,可以实现可信的交易,并且这些交易是可追踪和不可逆的。
2.3. 内容截取签名
内容截取签名 [11] (Content- Extraction Signatures, CES)与传统标准数字签名不同之处在于,在多方参与的情景下,允许消息签名的持有者在不与消息原始签名者进行交互的情况下,提取原消息的一部分,并为这部分内容计算一个可公开验证的签名,签名验证者无需和原始签名者交互即可确认被截取后数据的真实性。
在内容截取签名中,消息M被看作是n个子消息段组成的集合,即
,定义子消息编号集合
,被提取的子消息集合记为
,
中的子消息的编号记作截取子集
,
。签名者设置内容截取访问结构
,满足
时截取方式合法,否则判定为非法截取。
2.4. SM2签名算法
SM2算法 [12] 是我国自主研发的一种基于椭圆曲线离散对数困难问题的公钥密码算法,包含了数字签名算法、密钥交换协议和公钥加密算法。其中,SM2签名算法相比于RSA签名算法,其密码复杂度高、处理速度快、机器性能消耗更小,可以很好地应用于本方案的敏感数据签名环节。SM2数字签名算法如下:
1) 密钥产生:输入一个有限域
上椭圆曲线参数集合,用产生随机数
,计算SM2椭圆曲线上基点G的d倍点,记为
,则P为公钥,d为私钥。
2) 签名:输入椭圆曲线参数、签名者私钥及消息M
①计算杂凑值
,
是签名者A长度为
的可辨别标识;
②计算M消息摘要
,M为待签名消息;
③产生随机数
,计算椭圆曲线点
;
④计算参数
,参数
;
⑤输出消息M的签名为
;
3) 签名验证:输入椭圆曲线参数、签名者公钥P、待验证消息
以及由签名者传递而来的
的签名
①计算
消息摘要
,计算
,若
,验证失败;
②计算椭圆曲线点
;
③若
,验证通过;否则签名无效。
3. 论基于区块链的个人敏感数据安全存储及共享方法
3.1. 方案构造
本文提出的方案如图1所示,该模型主要由数据生成者(Data Generator, DG)数据持有者(Data Owner, DO)、数据访问者(Data Visitors, DV)、云服务提供商(Cloud Service Provide, CSP)、和区块链共识网络组成。数据生成者是创建一类官方数据的可信机构,在本方案的签名过程中承担签名者角色;数据持有者拥有数据所属权,在某些场景下,可以通过数据生成者为其创建的数据证明自身某些资质或发挥其研究价值,但当该文件中包含有涉及其隐私信息时,数据持有者希望可以在不泄露隐私信息的前提下将数据共享给数据访问者;区块链模块作为系统的中心,负责用户处理请求,数据传递以及访问控制;数据请求者向系统请求数据访问权限,并在签名过程中承担验证者角色;云服务提供商提供数据存储服务,避免海量数据堆积在区块链上。

Figure 1. Diagram of the scheme overall structure
图1. 方案总体构造图
以下是本方案主要步骤的:
1) 初始化:
,输入安全参数λ,定义SM2椭圆曲线E,选取阿贝尔群,确定椭圆曲线的基点G,以及密码杂凑函数
,输出系统公开参数
。
2) 秘钥对生成:
,所有用户分别注册以太坊外部账户EOA并生成关联用户属性的SM2算法密钥对。
3) 数据预处理:DG生成数据M,DG定义M的内容截取访问结构CEAS,并将M划分为n个子消息,计算杂凑值
。
4) 全局签名:
,用DG的私钥生成消息M的全局签名
。
5) 消息传递:DG用DO的公钥加密消息M,将M秘文,哈希函数,加密方法,全局签名通过安全信道发送给DO。
5) 提取签名
,DO接收来自DG的消息M、全局签名
及CEAS;DO验证
的正确性,出于隐私保护需求对M提取一部分内容并生成提取签名
。
6) 数据上传:DO加密提取的消息
,并将
的密文
和签名
上传至云服务商,检索路径为url。
7) 设置合约:DO将
的密钥k的访问策略
写入验证合约,将k的密文
和路径url写入解密合约。
8) 访问数据:DV向区块链访问控制中心发起请求,验证合约检验其身份属性,若符合访问结构,则触发解密合约解密
并将k和url返回给DV。
9) 数据上链:主节点验证并收集访问池中的合法请求,并向所有共识节点广播。当超过51%的共识节点形成共识,DV的访问记录将被写入块中,新创建的区块接入到区块链。
10)
:DV解密从云端下载的
密文,验证消息
的签名
正确性。
3.2. 具体实施
1) 初始化
:输入安全参数λ,输出系统公共参数
。确定有限域
上非奇异SM2椭圆曲线
,其中p为大素数,在包含无穷远点和E的所有点中选取循环群
,n阶基点
,安全的哈希函数
。
2) 秘钥对生成
:用户注册以太坊外部账户,输入用户身份信息,根据用户属性attributes和SM2签名算法的秘钥生成规则产生用户密钥对。以签名者A的密钥对生成为例:随机选择整数
,计算A的SM2签名密钥对
,
为私钥,由A秘密保存,
为公钥。
3) 数据预处理
记签名者A长度为
比特的可辨别标识为
,记
为由整数
转换而成的两个字节。A创建数据M,并将M划分为j个子消息,记为
,子消息编号集合
。A对M设置内容截取访问结构
,编号被包含于CEAS的子消息都为必选消息,否则非法。
4) 生成签名
签名者A计算杂凑值
,
,签名者A用秘钥
生成M的全局签名
:
①A随机选取
,计算椭圆曲线点
,将
的数据类型转换为整数;
②对每个
的子消息
,计算
,其中T为长度固定的CEAS标记CEAS-Tags,在签名中随机选取;
③将
的数据类型转换为整型,计算
,
,若
则重新选取随机数k;
④计算
,
;
⑤将r、s的数据类型转换为字节串,消息M 的全局签名为
。
5) 消息传递
A使用数据持有者DO公钥Pko加密消息M,并将M密文、哈希函数、加密方法,全局签名通过安全信道发送给DO。
6) 提取签名
:DO用其私钥SKo解密出M明文,用A的公钥
验证M全局签名
的正确性,验证方法即SM2标准验签过程 [13] (参见《SM2椭圆曲线公钥密码算法》),根据需要针对消息M的提取一个可验证的签名:
DO设置截取子集
,
,截取消息
,截取签名
。
7) 数据上传
DO用对称算法加密截取数据
,对称算法秘钥为key,则
密文记为
,
及截取签名
上传到云存储平台,云平台返回路径为url。
8) 部署智能合约
DO将密钥key用基于密文策略的属性加密算法加密,key的访问策略
添加至验证合约,将key的密文
和路径url上传至解密合约。
9) 数据访问
数据访问者DV登录以太坊账户,向区块链中心请求对数据M的访问;区块链中心处理访问者请求并触发合约运行,验证合约调动DO添加的访问策略
与访问者DV的属性进行比对,一旦满足
,解密合约自动执行解密属性基加密算法并把k和url传递给DV。
10) 数据上链
区块链网络主节点像所有共识节点广播访问者DV的访问记录,达成共识后,DV的访问记录接入到新创建的区块区块链,形成访问日志AccLog。
11) 签名验证
访问者根据路径url获取存储在云端的密文
和截取签名
,用对称密钥k解密得到截取数据的明文
后,根据DO的公钥
验证截取签名的正确性。
,输入
明文、
、签名者A身份标识
、公钥
以及公共参数
;若输出为1,表示验证通过;若输出为0,算法终止,验证失败。验证算法过程见下:
①验
是否成立,若成立进行下一步,否则返回0;
②检验
、
是否成立,若成立进行下一步,否则返回0;
③对每个编号
的子消息,计算
,将
的数据类型转换为整数;
④将
、
转为整型,计算
,若
,进行下一步,否则返回0;
⑤计算椭圆曲线点
;
⑥将
的数据类型转换为整数,若
成立,则签名验证通过。
4. 方案分析
4.1. 正确性分析
本方案在密码算法层面主要用到的是改进的SM2数字签名算法,该算法的正确性体现在等式
的成立,只要确保该等式成立,即可保证被提取后的数据未经篡改,签名来源依然属于数据签名者A,且在验证过程中验证者无需与签名者交互。验证过程:
由签名过程
知
若签名来源确属于签名者A,则
,代入上式可得:
假设DO是诚实的,那么验证者收到截取签名
中的的
、
应与
、
相等,可得:
得出
;
因此
,
得出:
。
DV计算得到的消息摘要
,即证明消息
未经篡改。等式验证通过,方案正确。
4.2. 安全性分析
4.2.1. 隐私保护分析
首先,用户注册以太坊账户,鉴于区块链匿名性的特点,所有操作都是通过以太坊区块链上的地址发送的,该地址独立于用户的个人信息,不能将区块链上的数据和个人相关联,一定程度上降低了身份隐私泄露的风险。其次,数据持有者在符合签名者设置的内容截取访问结构前提下,对数据的使用拥有完全控制权,数据以密文形式存储在半可信云存储服务商CSP,CSP无法获得数据铭明文也即避免用户数据被滥用。同时的,为加密数据的对称秘钥设置的访问策略通过基于属性的加密算法保护起来,实现了一对多的细粒度访问控制,算法逻辑作为预设条款被写入智能合约,智能合约的执行原理有效降低未授权节点或恶意节点获得数据访问权限的可能性。
4.2.2. 数据安全分析
假设不诚实的DO试图在提取签名过程中改动任意子消息
,或打乱子消息顺序引起语义混乱,都会导致验证者在计算子消息摘要时
,使得等式
不成立,验证失败。
为避免数据被恶意提取导致丧失其基本价值,算法引入截取规则CEAS,编号属于CEAS的子消息都为必选消息,当
时截取方式合法。假设不诚实的DO试图在提取签名过程中非法截取签名,验证签名时首先检验出
不成立,验证失败。
在本方案数字签名算法中,未被提取的子消息对于验证者是不可见的,攻击者想要获取被隐藏的消息是不可行的。
假设不诚实的DO或恶意攻击者试图改动数据M后伪装成DG生成一份原始签名,但由于数据传递过程中,在只知DG公钥情况下,DO或恶意攻击者难以突破椭圆曲线离散对数难解性计算出DG密钥。
且DG的身份信息
早已聚合在所对应的杂凑值
中,不是用户A所对应的杂凑值,验证自然通不过。
4.3. 功能分析
下表1为本文方案与文献 [1] [2] [7] [14] 的功能分析对照,分析表明,要同时满足去中心化、访问控制 秘密隐藏、不可伪造与追踪溯源这五大性能是充满挑战性的。由表可知,所有的方案均实现了去中心化的访问控制,这也是区块链应用于数据安全共享领域的一大重要标准,文献 [1] [7] 在秘密隐藏和不可伪造性方面缺少具体描述;文献 [2] [14] 则未能实现秘密隐藏和访问记录追踪溯源,相比之下,本文方案在性能均衡上略有优势。

Table 1. Program functional analysis and comparison
表1. 方案功能性分析对比
5. 实验与结果分析
5.1. 实验环境
本文实验硬件环境为Intel (R) Core (TM) i5-8500 CPU @3.40 GHz,8 GB RAM;操作系统为64位Windows 10,使用在线版Remix IDE进行智能合约的开发和测试,智能合约部署在以太坊区块链上,编程语言为Java和Solidity;外部资源库为JPBC和web3.js,其中JPBC是常用于基于配对的密码学算法仿真的Java封装库,web3.js工具包包含了以太坊提供的一系列与区块链交互的Javascript对象和函数以及与智能合约交互的API。
5.2. 实验结果分析
在本文方案中,实现细粒度的访问控制采用的加密算法是基于密文的略的属性加密,ABE基于双线性对实现,双线性对操作成本昂贵,但本文中CP-ABE的加密对象是对称加密密钥而非数据明文,数据明文采用对称加密算法加密,这个方法大大减轻了加解密的开销。
同时的,在签名算法的选择上,采用了改进的国密SM2数字签名算法。SM2算法是基于椭圆曲线上点群离散对数难题的非对称加密算法,相比于RSA的安全性依赖于大整数的分解困难性,256位的SM2密码强度已经比2048位的RSA密码强度要高,且由于目前所知求解ECDLP的最好方法是指数级的,这使得我们选用SM2算法作数字签名时,所要求的密钥长度比RSA要短得多。
通过统计方案中所使用到的运算,对比本文提出的方案与文献 [15] [16] 中的方案的进行性能分析,如下表2所示,其中n表示消息被M划分成子消息的数目,m表示截取子集
中子消息的数目;par表示双线性对运算,exp表示幂运算,sca表示基于椭圆曲线密码编码的标量乘法运算,hash表示消息摘要函数运算。通过对比可知,方案 [15] 和 [16] 采用了相对耗时的幂运算和双线性对运算,本文采用的是基于椭圆曲线的标量乘法运算,在相同的安全级别上,在计算效率方面具有优势。

Table 2. Computational cost analysis
表2. 计算开销分析
6. 总结与展望
本文通过以太坊提供的平台,结合改造的SM2签名算法构造了一个基于区块链技术的个人敏感数据安全共享机制,本方案专注于用户数据的机密性、不可伪造性,实现了数据的隐私保护与安全共享的有效平衡。未来针对区块链平台确认交易的时间长,吞吐量不高而导致在部分云存储场景中制约整个系统效率的问题,考虑针对特定场景通过改进共识算法以缩短共识时间。