区块链数据保密查询的不经意传输协议

2022-10-16 12:26刘新胡翔瑜徐刚陈秀波
计算机工程 2022年10期
关键词:哈希密文加密

刘新,胡翔瑜,徐刚,陈秀波

(1.内蒙古科技大学 信息工程学院,内蒙古 包头 014010;2.北方工业大学 信息学院,北京 100144;3.北京邮电大学网络与交换技术国家重点实验室,北京 100876)

0 概述

随着区块链技术的快速发展,人们对于区块链隐私保护问题越来越重视,如何在区块链上存储数据并保护数据隐私成为热点研究方向[1-2]。现有研究主要集中于实现区块链交易双方身份和交易内容的隐私保护[3-5],用户将数据存储在区块链上,在便于交易和计算的同时还需解决数据管理和存储空间问题。文献[6]提出一种基于区块链和代理重加密的数据共享方案,利用区块链中的处理节点作为代理服务器并加密数据,在确保数据安全的同时可抵抗合谋攻击。文献[7]设计一种链上-链下共同存储方式,将存储者的数据访问地址以加密的形式存储在链上,将用户的大量数据存储在链下,若查询者需要访问该用户数据,则需要被授予存储者访问令牌,并交予第三方获得真正的地址,显然该系统存在第三方泄漏数据地址和查询者信息的风险。针对数据共享时存在数据泄漏的情况,文献[8]提出一种可问责的数据共享方案(ADS),该方案利用不经意传输(Oblivious Transfer,OT)和零知识证明,将接收方的私钥隐藏在共享数据中,若接收方泄漏共享数据,则发送方可以对其进行问责,从而获取接收方的私钥,但该方案存在发送方可能篡改数据的问题。文献[9]建立一种基于链上-链下相结合的日志安全存储与检索模型,利用区块链分布式存储技术,保证了数据的机密性和完整性,并通过链上索引的方式进行数据检索,然而该方案没有解决用户在检索与传输数据时导致个人信息泄漏的问题。文献[10]提出一种将医疗数据存储在区块链上的方案,并对数据共享、存储、访问和计算进行隐私保护方面的评估和分析,同时构建一个模块化的混合隐私保护框架,该框架基于保护患者的隐私信息来管理不同类型的医疗数据,对电子病例、消费者基因数据等信息进行保密,但攻击者可以通过收集用户共享、传输的医疗数据推测出用户的隐私敏感信息。

在区块链数据存储和数据查询过程中,当查询者获取数据时,全网每个节点均有可能获取查询者的敏感信息,因此对于查询者的隐私保护显得尤为重要。文献[11]提出一种公平的大数据交换方案(FAPS),采用RSA 算法与AES 算法相结合的方式进行不经意传输,保护了交易双方的数据隐私,且不需要可信第三方参与传输,但该方案存在交易一方恶意篡改数据的情况。文献[12]设计一种隐私保护下的区块链关键词搜索方案,使得数据提供者无法了解查询者搜索内容的相关信息,同时利用了区块链可验证数据的性质,使得恶意方无法篡改数据。在该方案中,数据存储者在区块链上加密存储数据,各个节点相互验证后按顺序将数据存储在区块链上,导致了区块链存储量大、节点计算复杂、传输效率低下及节点之间验证存在延迟等问题。文献[13]提出一种基于不经意传输和区块链的隐私保护数据传输方案,并将其应用于智能医疗中,保护了医生和病人的数据隐私,同时采用代理重加密技术实现密文之间的转换,但依然存在海量数据分布式存储在区块链上导致的存储量大、资源浪费等问题。

本文采用链上-链下数据存储方式,引入代理重加密机制[14-15],将存储者加密后的数据采用MapReduce 进行归类后分布式存储在链下数据存储层,并将存储者发送的索引信息存储在链上的块身中,使得查询者能根据索引信息找到需要的数据,不论是存储者本身还是其他用户均无法随意篡改数据。查询者和存储者利用椭圆曲线加密算法[16-18]进行不经意传输,使得所有用户均无法获取查询者数据信息,同时存储者的私钥和原始数据也不会被泄漏。

1 基础知识

1.1 不经意传输协议

不经意传输协议[19]是密码学的基本工具,在安全多方计算中具有广泛应用[20]。该协议保证接收方获取发送方的某个数据后,发送方不知道接收方获取了具体哪个数据,同时接收方无法获取发送方的其他数据[21-22],目前研究最多的是协议[23-25],其中,n为发送方的所有数据个数,k为接收方获取的数据个数。

1.2 Merkle 树数据结构

Merkle 树数据结构[26-27]主要用来快速归纳和校验数据的完整性,将数据分组进行哈希运算,向上不断递归运算产生新的哈希节点,最终只剩下一个Merkle 树根哈希值,如图1 所示,其中H(m)表示对数据m取哈希值。Merkle 树具有不可篡改、可验证、高效率等特点,运用在区块链中极大地提高了区块链运行效率和可扩展性。

图1 Merkle 树数据结构Fig.1 Merkle tree data structure

1.3 区块链存储框架

由于数据在区块链上进行同步时会占用大量空间,因此本文根据链上-链下相结合的存储思想,设计链上存储索引信息、链下存储原始数据的存储框架,释放了区块链上的大量存储空间。将区块链分为网络层和数据存储层,链上的网络层全网公示,用于查询者选择区块链数据,链下的数据存储层存储大量的加密信息,如图2 所示。

图2 区块链存储框架Fig.2 Blockchain storage framework

在图2 中,索引信息由存储者生成,其中包括数据标题、密文哈希值等,存储者将密文发送至重加密节点存放在链下数据存储层,将索引信息发送至全节点存放在链上网络层的块身中形成索引信息列表。该框架中有轻节点、全节点、重加密节点3 类,其中:轻节点负责记录区块链的块头以及促进区块链的运转;全节点负责记录整个链上的信息,包含块头和块身,为查询者提供块身中的索引信息;重加密节点负责保存链下数据存储层的大量数据,而且诚实的重加密节点数量大于全部重加密节点数量的1/2,即可保证数据不可被篡改。

1.4 基于MapReduce 的区块链数据存储模型

MapReduce 是一种编程模型,用于大规模数据集的并行运算,从而提高计算效率。重加密节点收到发布的新区块后就进行一次MapReduce 运算,将新区块中所有存储者的数据按照存储者用户名进行分类,存储在数据存储层,以便在完成不经意传输时节省筛选存储者数据的时间。基于MapReduce 的区块链数据存储框架如图3 所示。

图3 基于MapReduce 的区块链数据存储框架Fig.3 MapReduce-based blockchain data storage framework

在MapReduce 执行过程中,重加密节点在产生各个分节点的同时进行并行运算,首先在Map 阶段将数据进行切割,然后在Shuffle 阶段进行分组和排序,接着在Reduce 阶段进行归约,最后重加密节点将所有的数据按照存储者用户名分类存储在数据存储层中。重加密节点通过分布式存储的方式将数据备份在各个分节点处,分节点将密文取哈希后与链上索引信息中的密文哈希值进行对比验证,保证了数据的可用性和完整性。

2 区块链数据保密查询的OT 协议

本文设计的区块链数据保密查询的不经意传输协议分为数据存储和不经意传输两部分。在数据存储部分:重加密节点将存储者加密后的数据采用MapReduce 进行归类后,分布式存储在链下数据存储层,确保了数据的完整性;全节点将存储者发送的索引信息存储在链上的块身中,使得查询者能根据索引信息找到需要的数据,不论是存储者本身还是各个节点,均无法随意篡改数据,确保了数据的可靠性和可验证性。在不经意传输部分,查询者和存储者通过重加密节点进行不经意传输协议后,所有节点和存储者无法得知查询者获取了哪个数据,同时存储者的私钥和原始数据也不会被泄漏。

在区块链中,诚实的重加密节点数量大于全部重加密节点数量的1/2,即可保证协议能够顺利执行。此外,在区块链上存储的原始数据均视为正确数据,不考虑输入数据为错误的情况。

2.1 链上-链下数据存储

链上网络层中的每个区块分为块头和块身,块头由轻节点进行分布式存储,上一区块头的哈希值记录在本块头中,防止数据被篡改,块头中还记录了随机数、Merkle 树根哈希值、时间戳等信息。索引信息存放在块身中形成索引信息列表,按照从左到右的顺序排列,由全节点进行记录,使得查询者根据块身中的索引信息列表找到所需的数据。区块链网络层中的数据存储框架如图4 所示。

图4 区块链网络层中的数据存储框架Fig.4 Data storage framework in the blockchain network layer

存储者利用椭圆曲线加密算法对上传的信息进行加密得到密文和标识符,再用SHA256 哈希函数将密文转为哈希值,同时为该密文选取标题和序号。存储者将密文发送至重加密节点存储在数据存储层中,再将自己的用户名和该密文的序号、标题、标识符、密文哈希值组成一个索引信息发送至全节点。序号表示执行不经意传输协议时索引信息的发送顺序,标题为查询者提供信息类别,标识符用于加密查询者公钥,密文哈希值用于数据不经意传输完成后的验证。全节点将所有索引信息公开存储在链上块身中形成索引信息列表,同时用SHA256 哈希函数依次将每一条索引信息转化为哈希值,用Merkle 树数据结构的方式形成一个根哈希值存储在块头中。

2.2 不经意传输过程

重加密节点通过对密文进行二次加密,使得存储者不需要提供私钥,查询者仅利用自己的私钥就能完成对二次加密后的密文进行解密,交互过程具体如下:

1)查询者确定获取数据的序号后,利用索引信息中的标识符加密自己的公钥发送给存储者。

2)存储者将自己的私钥与查询者发送的加密数据进行结合,产生重加密密钥,并将重加密密钥发送给重加密节点。

3)重加密节点在数据存储层中收到存储者上传的密文,利用重加密密钥依次对其进行二次加密,然后依次发送给查询者。

4)查询者按序号找到重加密节点发送的二次加密密文,利用自己的私钥进行解密获取存储者的原始数据。

区块链不经意传输过程如图5 所示。

图5 区块链不经意传输过程Fig.5 Process of blockchain oblivious transfer

2.3 不经意传输协议构建与安全性证明

2.3.1 协议构建

假设Alice 为数据存储者,Bob 为查询者,Bob 想要获取Alice 存储在区块链上的某个数据,但不想让全网和Alice 知道自己获取了哪个数据。协议分为数据存储阶段和不经意传输阶段,Alice 在区块链正常运行下执行数据存储阶段,Bob 在需要获取区块链上的数据时执行不经意传输阶段。在整个协议过程中,均采用椭圆曲线加密系统进行加解密。协议中的符号含义如表1 所示,其中i∈(1,2,…,n)。

表1 协议中的符号含义Table 1 The meaning of symbols in the protocols

假设用户Alice拥有原始数据m1,m2,…,mn,公钥pA和私钥sA,随机数ri。Bob 拥有公钥pB和私钥sB。Alice 利用私钥和随机数将数据存储到区块链中,Bob 需要查询数据时发起申请,在通过身份验证后,开始与Alice 进行交互,协议算法伪代码如算法1所示。

算法1区块链保密数据查询的不经意传输算法

区块链保密数据查询的不经意传输协议包括数据加密和数据保密查询两个阶段,具体如下:

1)数据加密阶段:Alice 选择sA作为私钥,通过椭圆曲线加密算法生成公钥pA=sA·G,将原始数据编码成椭圆曲线上的点后进行公钥加密得到密文Ci,每加密一个原始数据时Alice 需要选择一个随机数ri,同时利用这个随机数生成一个标识符C′i,加密过程如下:

2)数据保密查询阶段:(1)Bob 选择随机数sB作为私钥,产生公钥pB=sB·G,利用索引信息中的标识符和序号x计算X=C′i+pB,然后将X发送给Alice;(2)Alice计算K=sA·X得到重加密密钥,并将K发送给重加密节点;(3)重加密节点在链下存储层中找到Alice 所有的密文Ci,利用重加密密钥K依次计算Wi=K-Ci,并将Wi返回给Bob;(4)Bob 通过序号找到对应的Wx(即i取x),利用私钥sB和Alice 的公钥pA计算Mx=sB·pA-Wx,并得到Alice 原始数据。至此协议结束。

2.3.2 正确性分析

正确性分析步骤具体如下:

1)假设在数据保密查询阶段中第4 步解密结果是正确的,Bob对Wx进行如下解密过程:

2)Bob 无法解密Alice 的其他数据,假设Bob 选择第y个二次加密密文Wy进行解密,由于y≠x,因此ry≠rx,解密过程如下:

4)Alice 和重加密节点无法知道Bob 获取了哪个数据,在第2 步中,Alice 收到Bob 发送的加密数据X后,可利用标识符依次计算Pi=X-解密得到Bob的公钥,但得到n个数据时却不知道哪个是Bob 的公钥,每个数据都有1/n的概率是Bob 的公钥,因此Alice 得到的数据均不可区分,具有很好的隐私性。

2.3.3 威胁模型分析

本文提出的区块链数据保密查询的不经意传输协议具有识别恶意节点的功能,根据安全性假设,通过以下2 种情况进行分析:

情况1若重加密节点篡改链下存储层的数据,查询者则无法获取正确结果。

查询者获取数据后可利用区块链的公开性来验证得到的数据是否正确,首先利用存储者的公钥加密原始数据后获取哈希值,然后与链上索引信息中的密文哈希值进行对比,若相等则说明验证成功,该重加密节点是诚实的;若不相等,则查询者可向区块链申请,让存储者将重加密密钥发送给另一位新的重加密节点,若新的重加密节点返回的二次加密密文能让查询者通过验证,则表明之前的重加密节点私自篡改了数据,并将其视为恶意节点。

情况2若存储者发送错误的重加密密钥给重加密节点,查询者则无法获取正确结果。

当诚实的重加密节点数量大于1/2 时,若查询者在多次验证失败向区块链发起申请后(即存储者多次发送重加密密钥给新的重加密节点后),验证新重加密节点返回的数据均失败,则表明存储者提供了错误的重加密密钥,并将其视为恶意节点。

在识别出恶意节点后,采用基于声誉信任机制[28]或基于激励机制[29]的管理方法来抵制恶意节点。P2P 网络中最重要的特征之一就是需要节点积极参与,对提供正确数据的节点进行奖励,对恶意节点进行惩罚,节点通过不断赚取声誉来获取信任,从而获得更多的奖励。

2.3.4 安全性证明

本文使用模拟范例方法证明协议的安全性[30],构造两个模拟器S1与S2代替参与双方执行协议,如果能证明协议中任意一方无法获取其他参与者的信息,或者获取的数据是不可区分的,即可证明该协议是安全的。

定义1(安全性[30])对于协议π和函数f(x,y),如果存在概率多项式时间算法使得式(4)、式(5)成立,则认为π保密计算了f,表明π具有较高的安全性。

构造模拟器S1和S2分别代表Alice 和Bob,通过模拟范例模拟Alice 和Bob 的执行过程,从而证明协议的安全性。在证明过程中,假设攻击者会对重加密节点进行攻击,从而获取重加密节点的信息,因此在中会加入重加密节点的数据并证明其不可区分。由于S1在执行时希望推导出S2的公钥,因此在收到加密数据X后,会试图计算出px′=X-与px进行对比,S2执行时希望获取S1的其他数据M。

定理1区块链保密数据查询的不经意传输协议是安全的。

证明

3 性能分析

3.1 存储空间分析

本文采用的区块链数据存储结构分为链上网络层和链下存储层,分别对其计算效率和存储空间进行分析。假设存储者用户数为t,每个用户上传了n个长度为l的数据,椭圆曲线采用secp256k1 曲线。

在链下存储层中,存储者利用椭圆曲线加密算法加密数据得到密文和标识符,计算效率为2nt次椭圆曲线乘法运算。在存储空间方面,重加密节点分布式存储所有存储者的密文,每个密文大小为512 bit,则重加密节点需要的存储空间大小为512ntbit。

在链上网络层中,全节点共收集nt个索引信息,将其递归运算得到Merkle 树根哈希值,计算效率为2nt-1 次SHA256 哈希运算。在存储空间方面,每个索引信息标识符为512 bit,密文哈希值为256 bit,用户名、序号、标题共计256 bit,则每一个块身索引信息列表大小为1 024ntbit。块头中轻节点仅存储Merkle 树根哈希值和前一区块哈希值,共512 bit,因此块头存储大小可忽略不计。

3.2 计算效率分析

将本文提出的不经意传输协议与文献[11,13]和文献[21-24]协议从以下2 个方面进行计算效率对比,对比结果如表2 所示:

表2 计算效率对比Table 2 Comparison of computational efficiency

1)计算复杂度。计算复杂度是评价协议的重要因素,对比协议在传输过程中采用加减法运算、异或运算、哈希运算、模指数运算、椭圆曲线上的加法和乘法运算等,比较耗时的为模指数运算和椭圆曲线上的乘法运算,其中,r=[l/L],l为明文的比特长度,L为映射到群G后元素的最长明文比特长度,n表示发送方的所有数据数量,k表示接收方获取的数据数量。文献[11]在初始化阶段需要2n次模指数运算,在不经意传输阶段需要2kn+2k次模指数运算,共计(2k+2)n+2k次模指数运算;文献[13]在准备和注册阶段需要n+4 次模指数运算,在不经意传输阶段需要2n+k+4 次模指数运算,共计3n+k+6 次模指数运算。文献[21]由于每个接收方单独获取信息,因此发送方需要重新计算对称密钥,共计kn+k+2 次模指数运算;文献[22]将大部分指数运算外包至2 个云服务器从而降低发送方和接收方的运算效率,共计2.5n+2k+3 次模指数运算;文献[23]仅需要一个云服务器,共计3.25n+k+1 次模指数运算;文献[24]利用椭圆曲线加密算法进行不经意传输,其中方案1 所设计的协议需要rn+n+3k+1 次乘法运算,方案2 通过增加接收方运算量的方式,从而减少整个协议的计算复杂度,依然需要rn+3k次乘法运算,其中r表示消息明文长度/映射到群G后最长明文长度。本文协议(一次接收k个数据)在数据存储阶段需要2 次椭圆曲线乘法运算,在不经意传输阶段发送方加密密文需要2n次椭圆曲线乘法运算,计算重加密密钥需要k次椭圆曲线乘法运算,接收方解密时需要k次椭圆曲线乘法运算,共计2n+2k+2 次椭圆曲线乘法运算。

2)通信复杂度。通信复杂度通常用交互的轮数来衡量。文献[11]协议需要3 轮交互,文献[13]协议需要3 轮交互,文献[21]协议需要2 轮交互,文献[22-23]协议均需要3 轮交互,文献[24]方案1 需要3 轮交互,方案2 需要2 轮交互。在本文协议中,存储者与查询者只需要2 轮交互。

通过表2 可得出:在计算复杂度上,由于椭圆曲线上的乘法运算优于模指数运算,本文协议相比文献[11,13]和文献[21-23]在计算效率上有所提升,当明文长度l大于2L时,相比文献[24]中的2 种方案,本文协议计算效率较高;在通信复杂度上,本文协议相比文献[11,13]、文献[22-23]和文献[24]中的方案1 少1 轮,与文献[21]和文献[24]中的方案2的通信交互轮数相同。

4 实际应用结果

应用1目前,医疗大数据隐私保护方案能对患者的原始数据进行保密,但并没有保护查询者的隐私,当查询者在访问数据库后,管理员通过获取查询者的访问记录,可推测出查询者患有某种疾病。在区块链中,所有的节点均有可能得知查询者获取的数据信息,导致了泄漏查询者的个人隐私。如图6所示,利用本文设计的区块链保密查询的不经意传输协议,不仅能加密区块链数据库中的其他数据,而且能保护查询者的个人隐私。

图6 本文协议在医疗领域中的应用Fig.6 Application of the proposed protocol in the medical field

应用2在大数据背景下,网上浏览信息或网购时的访问记录也可能暴露个人隐私。例如,网站下载的视频、交易商品的数据、查阅的资料等,即使这些数据的地址加密后存储在区块链上,当访问者在获取这些数据的下载地址后,通过分析访问者下载的数据,即可推断出其生活轨迹、个人喜好等。如图7 所示,利用本文设计的区块链保密查询的不经意传输协议,能有效地保护访问者的个人隐私。

图7 本文协议在大数据领域中的应用Fig.7 Application of the proposed protocol in the big data field

5 结束语

目前,防止隐私数据泄漏已成为区块链隐私保护的研究热点。对于数据的隐私保护不局限于原始数据本身,查询者的访问信息也需要加密,不经意传输协议为解决这类问题提供了思路。本文采用区块链链上-链下存储思想,引入代理重加密机制,设计区块链数据保密查询的不经意传输协议,保护了用户和查询者的隐私。分析结果表明,该协议计算效率高,占用存储空间少,保证了数据的完整性、可靠性和可验证性,同时能有效识别恶意节点,阻止敌手恶意行为。下一步将在区块链链上-链下数据存储模型下引入重加密节点,并结合零知识证明和同态加密等技术,设计能够抵抗恶意敌手攻击的隐私保护协议,在保护区块链用户隐私的前提下实现更高效安全的数据存储与传输。

猜你喜欢
哈希密文加密
一种支持动态更新的可排名密文搜索方案
基于特征选择的局部敏感哈希位选择算法
基于模糊数学的通信网络密文信息差错恢复
哈希值处理 功能全面更易用
支持多跳的多策略属性基全同态短密文加密方案
文件哈希值处理一条龙
保护数据按需创建多种加密磁盘
密钥共享下跨用户密文数据去重挖掘方法*
电力安全防护加密装置
加密与解密