一种基于区块链的物联网隐私数据保护方案
2022-01-27邵怀禹钱俊彦翟仲毅
邵怀禹,钱俊彦,翟仲毅
(桂林电子科技大学 计算机与信息安全学院,广西 桂林 541004)
物联网中的众多设备每时每刻都在产生大量数据,这些数据有很大一部分会涉及用户的隐私。然而,越来越密集和普遍地收集与处理在人们的私人生活中产生的数据,会引起严重的安全和隐私问题[1-2]。物联网的若干固有缺陷加剧了其安全性和隐私挑战,包括缺乏中央控制及设备资源的异构性等。如今,这些数据大部分存储在云数据中心,而互联网上的云存储大都依赖于作为受信任的第三方数据服务提供者来传输和存储数据。尽管这些系统在大多数情况下运行良好,但仍受制于传统中心化管理的固有弱点,因此云存储会受到各种安全威胁,包括中间人攻击、恶意软件及暴露私人消费者和公司敏感数据的攻击等[3]。此外,当前的云存储应用程序能够在数据存储上收取超出其核心成本的高额费用,而可供用户选择的物美价廉的数据服务提供商却很少,用户也无法参与这些数据的监管。
当第三方数据服务提供商出现技术故障时,可能导致数据泄露或不可用,存储在数据中心的数据文件极易被伪造,而且由于数据中心存储着海量数据,当部分数据被伪造或篡改后,很难被察觉,被篡改的数据混杂在正常数据中,对后续的学习研究产生不利影响。因此,亟需一种解决方案,在保护用户隐私免于泄露的情况下,安全高效地存储数据。
区块链作为去中心化的数据存储系统,有潜力解决有关用户隐私保护的问题。区块链[4]的核心是位于互联网上的系统参与者之间共享的分布式数字分类帐,该数字分类帐永远保存在互联网上,交易或事件经过验证并记录在分类帐中,为用户数据记录和共享信息提供了一种方法。在区块链网络中,选定的成员保留其分类帐的副本,且必须在接受新分类帐之前,通过共识过程集体验证所有新交易。区块链的匿名性和防篡改性使其在许多需要考虑隐私问题的领域得以应用[5-6]。
基于区块链存储物联网数据[7-8]会增加另一层安全保障,数据记录在去中心化的分类帐中,黑客几乎不可能篡改分类帐以覆盖现有的数据记录。区块链通过允许任何有权访问网络的人员跟踪过去发生的交易来提供透明性,这可为识别数据泄露时采取快速的补救措施提供一种可靠的方式。因此,由于区块链具有去中心化、匿名性和防篡改性,使其成为解决物联网隐私数据保护问题的潜在解决方案[9-10]。
鉴于此,针对物联网用户的身份认证,通过链上采用基于区块链公钥地址的身份认证和链下采用群签名[11]的身份认证方式,解决基于区块链应用场景下匿名和溯源的矛盾问题。针对数据存储问题,提出基于区块链的数据存储模型,利用IPFS[12]存储原数据,生成原数据的数据标识,进行数据的版权证明和完整性验证,通过设计的以太坊平台[13]的智能合约完成数据标识的上链和访问操作,通过唯一的数据标识为数据完整性提供保证。测试结果表明,该方案在保护用户隐私的前提下能够安全有效地存储数据。
1 基于区块链的物联网隐私数据保护方案
通过对物联网用户隐私数据保护问题的研究,总结出基于区块链的物联网隐私数据保护方案需要解决的物联网用户身份认证问题、物联网用户隐私数据的安全存储问题及物联网用户隐私数据的完整性验证问题3个技术难点,并利用区块链不可篡改、去中心化等特性,提出了一种基于区块链的物联网用户隐私数据保护方案。
1.1 基于区块链的用户身份认证
基于保护区块链用户隐私数据的相关研究[14-17],通过链上数字签名、链下群签名的方式进一步增强匿名性。物联网用户身份认证如图1所示。不同于其他密码学算法,群签名有独有的特点[18],群内的人可以以群组的名义对消息进行签名,群外的人可以通过群密钥验证签名的正确性,却无法知道签名者的真实身份,只有群管理者可以对签名者进行追溯。考虑到区块链的伪匿名性对用户隐私的保护所存在的缺陷,攻击者通过分析大量的交易数据可以追溯用户的真实身份,所以数据在存储之前通过群签名的方式进行处理,即便攻击者破解了区块链的伪匿名性,用户也可以在群签名的保护下隐藏真实身份。
图1 物联网用户身份认证
基于以太坊区块链的技术为物联网用户提供公私钥对,数据只有在有效的区块链签名和群签名的情形下才被认为是有效数据,如果有恶意用户随意发送消息到区块链来破坏系统稳定性,可以通过特定群管理者的私钥来追踪签名者并进行惩罚。由于区块链技术本身不具有可追溯性,无法有效惩治破坏系统稳定性的恶意用户,群签名的可追溯特性正好弥补了这一缺陷,为有效管理提供了保障。
1.2 基于区块链的数据标识
物联网用户的隐私数据通常数量巨大且难以组织管理。在利用IPFS以内容寻址、分片的方式存储原数据的前提下,为了高效、安全地组织管理,需要对数据的标识信息进行上链。数据标识就是用固定的标识代表数据,与存储在IPFS上的数据有一一对应关系,方便大量物联网用户数据的组织和管理,便于以后对数据的访问。
在智能合约的存储中定义了Data_id数据结构,智能合约通过solidity语言编写。数据标识中分别定义了字符串类型的Hash、字节类型的sig、字符串类型的Groupsig和Groupid以及无符号整型timestamp,分别表示存储在IPFS上原数据返回的哈希值(通过这个哈希值地址可从IPFS上返回完整的原数据)、以太坊上的椭圆曲线数字签名算法(ECDSA)产生的数字签名、群签名算法产生的群签名、不同群的标识和用来维护不可伪造性的时间戳。Data_id数据结构如下:
struct Data_id{
string Hash;
bytes sig;
string Groupsig;
string Groupid;
uint timestamp;
}
数字签名sig的计算式为
sig=sign(keccak256(Hash,timestamp),
privatekey),
(1)
其中:sign表示ECDSA;keccak256表示以太坊中使用的SHA-3哈希算法,产生256位哈希;privatekey为用户私钥。群签名Groupsig的计算式为
Groupsig=groupsig(Hash,groupprivatekey),
(2)
其中:groupsig表示群签名算法;groupprivatekey表示群成员私钥。
1.3 基于区块链的数据存储结构
以太坊区块链内进行的任何交易和计算的佣金都会被矿工收取,网络中的矿工对交易进行确认,并确定哪些交易能进入新区块,交易佣金以gas计算,并以Ether支付。gas是以太坊网络的“燃料”,用于进行交易,执行智能合约并启动DApps,支付数据存储费用。
根据以太坊的特性及部署合约、存储数据的需要,定义了如图2所示的数据存储模型,将交易类型定义为创建合约的交易、调用合约的交易2种,其各字段的定义如下。
图2 基于区块链的物联网隐私数据存储区块结构
1)账户公钥:发起创建合约交易或者调用合约交易的以太坊账户的公钥地址,证明发送者身份的唯一标识。
2)数字签名:以太坊中利用ECDSA产生的数字签名,用于验证交易的合法性。
3)合约地址:合约在成功部署后,被矿工确认写入区块链后产生的智能合约的地址,以太坊中的其他账户可以通过访问合约地址进行合约的调用。
4)交易哈希:交易在被写进区块之前,会产生用以标识交易的哈希,便于在以后追踪每个交易具体执行的操作。
5)gas上限:即gas limit,其值必须大于等于交易需要消耗的gas,多余的gas会原路退回到发送者的账户,若用户设置的gas limit太低,则交易会被取消,消耗的gas也不会退回。
6)gas单价:发送者愿意为gas付出的单价。
7)函数名:智能合约中定义的可供外部账户调用的函数,具体定义了可供调用的函数为set(·)和get(·),分别用于数据的存储和获取。
1.4 基于区块链的隐私数据完整性验证
1)物联网用户加入用户群,获取群成员私钥,将需要上传的数据上传至IPFS,并获取返回的数据内容地址(哈希值)。
2)物联网用户调用如式(2)所示的群签名算法和如式(1)所示的以太坊数字签名算法,分别计算群签名和椭圆曲线数字签名。
3)物联网用户调用智能合约中的set(·)函数,上传数据标识,判断智能合约验证数字签名是否由发送方本人签名。若签名正确,则将数据标识上链;若签名不正确,则返回上传数据之前的操作。
4)系统内其他用户调用智能合约中的get(·)函数,获取指定Groupid的用户数据。
5)根据获得的数据标识中的Groupid和Groupsig,调用群签名服务器,验证群签名的正确性。若验证正确,则进行下一步;若验证失败,则报告给相应的群管理员,对签名进行追踪,追踪上传错误信息的群签名者,并采取相应措施。
6)根据数据标识中的数据内容地址,从IPFS获取数据,本地验证数据的哈希正确性。若正确,则完整性的验证完成;若验证错误,则返回步骤5)中验证失败的下一步操作。
2 实验结果与评估
实验环境和配置如下:
1)运行在Intel®CoreTMi5-9400F CPU 下的Ubuntu 18.04.4 LTS 64位操作系统,内存为8 GiB;
2)运行在Intel®CoreTMi5-6300HQ CPU win10操作系统下VMware Workstation 14 Player 14.1.1中的Ubuntu 18.04.3 LTS 64位操作系统,内存为2 GiB;
3)在Ubuntu 18.04.4上通过Ganache模拟以太坊私有链运行场景,并运行IFPS本地节点;
4)Truffle框架用来编译和部署合约[19],通过MetaMask钱包连接指定的私有网络,实现交易签名和发送交易的确认;
5)通过React架构[20]设计实现Web界面,方便用户与区块链进行交互;
6)在Ubuntu 18.04.4上通过PBC Library实现并搭建群签名的服务器端,通过RPC调用实现群签名的各项功能,虚拟机上的Ubuntu 18.04.3系统用来远程调用群签名服务,测试服务器性能。
2.1 用户隐私数据存储阶段
启动本地IPFS节点,如图3所示,物联网用户通过Web界面选择上传IPFS的数据,上传成功后,获得返回的数据哈希值。上传原数据到IPFS的结果如图4所示。
图3 启动IPFS
图4 上传文件到IPFS
利用Truffle实现智能合约的编译和部署,合约部署成功后,返回合约的地址等信息,合约部署返回的具体信息如图5所示。从图5可看出,合约地址为0x05a2C96492be5e9b3C1fC032Fe56414b1afA51fB,后续通过访问此合约地址进行测试。
图5 部署智能合约
获得IPFS返回值后,调用如式(2)所示的Groupsig函数,对哈希值进行群签名,本地生成数据标识后,点击用户界面的上传数据标识按钮,调用如下智能合约函数:
set(Hash,sig,Groupsig,Groupid,timestamp)→1/0,
(3)
向以太坊发送交易,Web端调用MetaMask,对交易进行签名确认,签名在以太坊区块链验证成功后,数据写入区块链。图6为返回信息。从图6可看出,数据标识上传区块链成功。
图6 返回信息
通过Ganache可以验证交易是否成功。图7为交易详情截图。从图7可看出,区块298写入了一个由创建的账户地址‘0xB9D65d4941C2AC75E3467-0Ee7C0651f008Fc9E49’发送至之前部署的合约地址‘0x05a2C96492be5e9b3C1fC032Fe56414b1afA51fB’的交易,数据存储成功。
图7 交易详情
2.2 隐私数据完整验证阶段
用户通过Web界面可以获取之前上传的Groupid为shy的数据标识。调用智能合约函数:
get(Groupid)→(Hash,sig,Groupsig,Groupid,timestamp)/0,
(4)
若输入的Groupid错误,则获取失败,如图8所示;若输入的Groupid正确,则获取成功,如图9所示。其中:timestamp时间戳表示距离1970年1月1日的毫秒数;blockChainHash表示从区块链获取的哈希值。根据数据标识中的群签名,调用
图8 获取数据标识失败
图9 获取数据标识成
group_verify(Groupid, Groupsig,Hash)→1/0
(5)
进行验证,返回值为true,如图10所示。从图10可看出,返回的json数据中result的值正确,验证成功。
图10 群签名验证
根据blockChainHash,可以通过IPFS客户端获取原数据,如图11所示。从图11可看出,通过查看和下载数据哈希为‘QmSrppdso7r8WynfEZ5th9-ULzDtb8Ay7d6xECnFX35cHpZ’的数据,即可验证数据的完整性。
图11 IPFS数据检索
2.3 群签名服务时间消耗
在Ubuntu 18.04.4上部署了群签名的RPC服务,为系统用户提供群签名算法的函数调用,群签名服务的响应速度对系统性能有重要影响。通过分别在本地调用和远程Ubuntu 18.04.3虚拟机调用,测试各请求函数的响应时间。时间消耗对比如图12所示,每个函数的调用时间消耗都是30次调用的平均值。从图12可看出,远程虚拟机均比本地调用时间消耗多,时间消耗最多的是请求函数create_group,分别为0.309 3、0.228 9 s,其次为sig_verify、open_cert和group_sig函数,与群签名实际计算复杂度相符,总体时间消耗都在可接受范围内。
图12 群签名服务各函数时间消耗对比
3 结束语
针对物联网用户的身份认证问题,采用链上基于区块链公钥地址的身份认证和链下群签名的身份验证方式,解决了区块链中匿名和溯源的矛盾问题。提出了基于区块链的数据存储模型,利用IPFS存储原数据,生成原数据的数据标识,以进行数据的版权证明和完整性验证。设计了以太坊平台的智能合约,完成数据的上传、下载等操作,通过唯一的数据标识,为数据完整性提供了保证。仿真实验结果表明,该方案在保护用户隐私的前提下,能够安全有效地存储数据。后续将在智能合约的效率和存储容量及区块产生速度等方面作进一步研究。