CN112966294A - 一种单轮交互的链表oram访问方法 - Google Patents

一种单轮交互的链表oram访问方法 Download PDF

Info

Publication number
CN112966294A
CN112966294A CN202110054402.XA CN202110054402A CN112966294A CN 112966294 A CN112966294 A CN 112966294A CN 202110054402 A CN202110054402 A CN 202110054402A CN 112966294 A CN112966294 A CN 112966294A
Authority
CN
China
Prior art keywords
tree
node
data
linked list
leaf
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202110054402.XA
Other languages
English (en)
Other versions
CN112966294B (zh
Inventor
吴志强
蔡竹斌
李文军
王进
郑少莹
唐小勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Changsha University of Science and Technology
Original Assignee
Changsha University of Science and Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Changsha University of Science and Technology filed Critical Changsha University of Science and Technology
Priority to CN202211096138.7A priority Critical patent/CN116842005A/zh
Priority to CN202110054402.XA priority patent/CN112966294B/zh
Publication of CN112966294A publication Critical patent/CN112966294A/zh
Application granted granted Critical
Publication of CN112966294B publication Critical patent/CN112966294B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种生成链表树的方法,其中:所述链表树LL‑tree是加密的满二叉树,所述方法包括生成链表树的各个链表树节点LL‑tree node,所述链表树节点包括头部head和尾部tail,如下:
Figure DDA0002900121440000011

Description

一种单轮交互的链表ORAM访问方法
技术领域
本发明属于信息安全领域,尤其涉及一种单轮交互的链表ORAM 访问方法,可以应用于安全云存储系统以及安全计算领域。
背景技术
为了无限廉价计算和存储资源,很多公司和用户都将他们的 私有数据外包给云。如果直接将用户数据以明文形式存储在云服 务器,不可信云服务提供商或者其他攻击者可以直接获取用户隐 私信息。为了保证用户隐私数据不被恶意窃取,传统的手段是对 数据内容进行加密,通过上传、下载密文数据来使用个人隐私文 档。数据隐私包括数据内容隐私和数据查询隐私。在大数据与云 计算等应用场景中,事实上,仅通过对数据内容的加密只能保护 数据的内容隐私,并不能保护数据的查询隐私。数据查询隐私主 要指的是搜索模式和访问模式,也就是指相同关键词的提交频率 和相同地址的访问频率。现有解决方案一般采用不经意随机访问 机(Oblivious Random Access Machine,ORAM)技术,对数据在 每次访问时的存储位置,进行重新洗牌和重新加密,来实现对外 包数据不经意读和写操作。
ORAM是隐私保护领域中保护访问模式的一种重要手段,其 目的在于隐藏对真实数据块的访问,使得攻击者不能区分每一次 访问是真实的还是随机的。现有ORAM方案仍然面临较多挑战, 例如用户和云之间高度交互、用户端存储过大、通信带宽较大以 及高昂的计算开销。比如Path ORAM及其后续方案,要么用户与 云的交互次数复杂度为O(logN)(其中N为总的元素个数),要 么存在大客户端地址映射表。许多ORAM方案以本地存储地址映射表为代价来实现单轮不经意访问,当寻址空间很大时,这些方 法对于资源有限的客户端来说是不可扩展的,这与ORAM的设计 初衷并不一致。TWORAM是实现了小客户端存储和单轮交互的 ORAM协议,但它依赖于大量混淆电路,这在现实中是性能上的 瓶颈。
为此本发明提供了一种单轮交互的链表ORAM访问方法,其 具有以下优势和技术效果:1)实现了公有云上的单轮密文数据 读写访问,用户只需要发送请求并接收响应即可得到数据或者更 新数据;2)本地存储几乎为零;3)构造简单且容易实现;4) 可在不牺牲较多效率的前提下将大量本地数组转换为云存储的 数组,并提供强隐私保护的快速数据读写服务。
发明内容
为实现本发明之目的,采用以下技术方案予以实现:
一种生成链表树的方法,其中:所述链表树LL-tree是加密 的满二叉树,所述方法包括生成链表树的各个链表树节点 LL-tree node,所述链表树节点包括头部head和尾部tail,如下:
Figure BDA0002900121420000031
其中头部head包括m和emaps,尾部tail包括M和chunks, emaps和chunks是分别由z项组成的复合结构;M、m、emaps和 chunks的定义分别如下:M表示节点掩码,节点掩码是由用户 生成的一个随机值,是私密信息,不对云公开;m表示密文掩码, 是存储在链表树节点头部的一个加密值,由节点的节点掩码和其 父节点的节点掩码执行异或运算得到,密文掩码对云公开; chunks包含z个chunk,其中chunk是指一个数据块,chunk存储 了四个元素(a,data0,data1,leaf),即一个地址a、两个相邻的数 据data0,data1和一个叶标识符leaf,叶标识符leaf用于表示节 点属于哪一条叶子到树根的路径;emaps包含z个加密映射表emap,其中每个emap存放两组键值对信息(k1,v1,k2,v2),用于 保存加密后的值。
所述的方法,其中包括对emap执行的读取和写入操作,具 体读操作和写操作过程如下:
Figure BDA0002900121420000032
写操作EMap.write(K,V)有两个步骤:第一步,将K分为Kl和Kh两个部分(Kl,Kh);第二步,假设Kh和V位数相同,执行异 或运算得到的结果用EMap[Kl]表示,并将Kl和EMap[Kl]分别写 入到(K,V)中;读操作V←EMap.read(K)同样包含两个步骤: 第一步,将K分为Kl和Kh两个部分(Kl,Kh);第二步,根据Kl找 到EMap[Kl],将其与Kh再次执行异或运算解密得到V的值。
所述的方法,其中包括地址转换:将一个地址a转换成一组 较小的地址的编码方式,实现地址转换的公式如下所示:
Figure BDA0002900121420000041
其中ai为一个整数,bi是ai+1除2后的余数,是一个二进制数, (ai,bi)被称为块地址;地址a表示为第L+1个地址aL+1,通过aL+1计算出第L组aL和bL的值,根据上述公式依次计算出全部的ai和 bi的值,经过所有计算后地址a转换成一个包含L对元素的集合 {(a1,b1),(a2,b2),…,(aL,bL)},其中每个(ai,bi)表示第i组块地址。
所述的方法,其中包括生成用户掩码:假定根节点和孩子节 点一样仍然是具有父节点的,使用用户掩码来模拟表示根节点的 父节点的掩码,用Mi表示第i棵树的用户掩码,在用户端存储一 个全局变量Counter,用于记录在LL-ORAM执行读或写操作的总 次数,设K为用户的密钥,G为一个伪随机函数,那么第i棵树 的用户掩码Mi等于GK(i||Counter)。
所述的方法,其中包括生成用户令牌:用户令牌是指用户试 图获取A[a]数据,经过计算生成的一组一次性密钥,假设a为一 个数组地址,第i棵树的用户令牌用ti表示,
Figure BDA0002900121420000051
所述的方法,其中包括生成块密钥:块密钥是用来对数据块 进行加密的密钥,假设i为第i棵树,(ai,bi)表示一个块地址,当 前块存储在一个节点掩码为M的树节点中,则块密钥是
Figure BDA0002900121420000052
一种生成随机链表的方法,所述随机链表是根据如上之一的 方法所生成的链表树生成的,所述生成随机链表的方法包括生成 加密链表和生成同胞链表,随机链表是一次数据访问过程中需要 读取并重构的全部加密的树节点,包括L条叶子到树根的路径 x1-to-root,x2-to-root,…,xL-to-root,及前L-1条路 径中树节点的兄弟节点,表示为
Figure BDA0002900121420000053
其中EL和SL的 定义分别如下:加密链表是指一棵LL-tree二叉树中的叶子节点 到根节点路径上的所有节点组成的一个链表,路径上的树节点都 是加密的,第i棵树Ti的树叶x到树根的加密链表用ELi x表示,即 叶子节点x到树根节点路径上节点的集合;同胞链表是由和加密 链表中每个节点具有相同父节点的兄弟节点组成的一个链表,如 果x是一个树叶值,i为第i棵树,用
Figure BDA0002900121420000054
表示
Figure BDA0002900121420000055
的同胞链表, 即
Figure BDA0002900121420000056
中节点的兄弟节点的集合。
一种初始化链表树的方法,所述链表树是根据如上之一的方 法生成的,其特征在于:
对于一组数据A[.],假设其中共有N=2L个数据块,用户将 N个数据块随机存储在数据树TL的树节点中,树节点的一个 chunk可以存储两个地址相邻的数据块,用另外一棵相邻的较小 的树TL-1存储这些随机节点对应的叶子位置,在TL-1中,存储了 2L-1个数据块,它们的值分别是TL的2L-1个叶子位置,它的全部 叶子位置保存在TL-2中,依此类推,直到最后一棵树T1,它只包 含一个树节点,T1-TL-1称为位置树。
所述的方法,其中:在位置树中,假设一个chunk为 (a′,data0,data1,leaf),那么(a′,0)表示当前chunk第一个块地址, (a′,1)表示当前chunk第二个块地址,data0存储了下一棵树的块 地址(2a′,0)、(2a′,1)对应的叶子位置,data1存储了下一棵树的 块地址(2a′+1,0)、(2a′+1,1)对应的叶子位置,leaf为当前块 对应的叶子位置;在数据树中,data0和data1存储的是最终需要 返回给用户的数据;
假设全部数据块(ai,bi)都已经采用上述方式存储,明文数值 都已经存储在T1,T2,…,TL的每一个chunk中,对于第i棵树中未加 密的链表树节点d,假设d中的chunk中已经存储了数据块信息, 采用如下的方式加密这个树节点:
步骤一,对树节点的头部加密,用户为树中的节点生成一个 随机值作为节点掩码,将节点掩码M和父节点掩码Mf异或得到 该节点的密文掩码d.head.m,为节点中所有的数据块生成对应的 块密钥,根据链表树编号i,块地址(ai,bi)和当前的节点掩码M, 给定一个伪随机函数F和用户密钥K,通过
Figure RE-GDA0003034625190000071
运 算得到块密钥,采用公式(7)
Figure RE-GDA0003034625190000072
将data0和data1写入 加密映射表中;
步骤二,对树节点的尾部加密,用户将节点掩码存入节点尾 部,并使用随机对称加密算法对尾部tail加密,用户保留私钥, 最后输出加密后的节点。
一种访问链表树的方法,所述链表树是如上之一的方法生成 且初始化的,所述访问链表树的方法包括读操作和写操作:
1)创建一次性令牌
用户将输入的地址通过地址编码方法转换成一组块地址,假 设i表示第i棵树,Mi为第i棵树用户掩码,对每一个块地址 (ai,bi),计算
Figure BDA0002900121420000073
得到L-1棵位置树的所有令牌 (t1,t2,…,tL-1);
2)在链表树上搜索
在链表树上搜索递归表示为:xi+1=Compute(Ti,ti),其中xi+1为第i+1棵树的叶子位置,Ti为第i棵树,ti为用户发送的第i棵 树的令牌,其中Compute算法流程具体描述如下:
步骤A、访问第一层树节点,如果当前节点为d,那么用户 使用d.head.m异或ti,得到一个变量t,如果当前节点包含了(ai,bi)数据块,那么t就是一个正确的块密钥,就能在emaps中 解密一个数据块并得到下一棵树的访问叶子xi+1,算法成功结束; 否则,继续搜索下一层节点;
步骤B、假设d为第二层的树节点,用户使用d.head.m异或 上一步骤A获得的t;如果当前节点包含了(ai,bi)数据块,那么t 就是一个正确的块密钥,就能在emaps中解密一个数据块并得到 下一棵树的访问叶子xi+1,算法成功结束;否则,继续搜索下一 层节点;
步骤C、依次访问,最终得到叶子xi+1
3)读数据
用户得到一条RLL后,采用两个步骤读写数据:
步骤A、用户创建L个临时缓冲区,用于存储一条RLL,用户 将全部的chunk解密后写入对应的临时缓冲区;
步骤B、用户为所有解密过的chunk重新分配L个随机叶标识 符,其中第i棵树的chunk(a′,data0,data1,leaf)的叶子的标识符, 被写入到第i-1棵树的chunk(a′/2,data*0,data*1,leaf*)中, 的data*0或者data*1中,如果a′为偶数,写入data*0中,a′为奇 数,写入data*1中;
4)重建RLL
将L个缓冲区中的chunk数据洗牌后生成重新调整chunk的位 置,然后对每一个树节点,采用上述提及的节点初始化加密算法加密 树节点,并得到一条新的RLL,将新的RLL被打包到下一次读请求中; 在下一次新的读写请求时候,用户将新的查询令牌连同历史的被缓冲 的RLL一并发送到云服务器,然后首先由云服务器执行历史的节点覆 盖更新操作,再执行新的查询操作。
附图说明
附图1为EL和SL一个实例的逻辑表示图;
附图2为树节点加密流程图;
附图3为LL-ORAM逻辑表示图;
附图4为单轮访问的流程图;
附图5为计算下一棵树叶子的流程图;
附图6为在一棵LL-tree上搜索的实例表示图。
具体实施方式
下面结合附图1-6对本发明的具体实施方式进行详细说明。
单轮交互的链表ORAM访问方法包括:一、生成链表树,生成随 机链表;二、初始化LL-ORAM;三、LL-ORAM上单轮访问方式执行读、 写操作。
一、生成链表树,根据链表树生成随机链表
生成链表树包括生成链表树(Linked-list Tree,简称 LL-tree)的各个链表树节点,所述链表树是一种加密的满二叉 树:对于层数大于1的链表树来说,除最后一层无任何子节点外, 每一层上的所有链表树节点都有两个子节点。
链表树节点:链表树节点是由头部head和尾部tail两部分组 成的复合结构,其各部分详细组成如下所示:
Figure BDA0002900121420000101
其中头部head由m和emaps两部分组成,尾部tail由M和 chunks两部分组成,emaps和chunks是分别由z项(z一般大于 等于2,小于10)组成的复合结构,组成部分M、m、emaps和chunks的定义分别如下:
M表示节点掩码。节点掩码是由用户生成的一个随机值, 不对云公开,只能在查询中被使用一次,每次当节点被访问后都 会被重新随机生成。节点掩码保存在节点的尾部。如果d是一个 树的节点,d.tail表示树节点的尾部,那么用d.tail.M表示树节点 d的节点掩码。因节点的尾部d.tail始终采用标准的随机化对称 加密算法加密,因此节点掩码是私密信息。
m表示密文掩码(Encrypted Mask,简称EMask),它是存储 在链表树节点头部的加密值,由节点的节点掩码和其父节点的节 点掩码执行异或运算得到,密文掩码保存在节点的头部。如果d 是一个树节点,d.head表示一个树节点的头部,那么用d.head.m 表示此节点的密文掩码。即任意节点d的密文掩码d.head.m是经 过
Figure BDA0002900121420000111
运算得到的,其中Mf为该节点的父节点掩码。 密文掩码m直接暴露在云中,是云服务器的计算参数。
chunks(数据块组)包含z个chunk,其中chunk是指一个 数据块。chunk存储了四个元素(a,data0,data1,leaf),即一个地 址、两个相邻的数据和一个叶标识符。地址a表示数据data0的 地址;a+1表示相邻数据data1的地址。在LL-tree中,任意的 一个chunk,为了方便查找,它都被标记为它当前属于哪一条叶 子到树根的路径,这里的叶子数值用leaf表示,并存储在chunk 里面。因为数据被随机打乱位置存储,如果想访问一个chunk, 必须一次性地读取leaf到树根的整条路径,才能找到当前chunk 的存储位置。
emaps(映射表单元组)包含z个emap(映射表单元),其 中每个emap存放两组键值对信息(k1,v1,k2,v2),用于保存加密后 的值。emap表示一个加密映射表(Encrypted Map,简称EMap), 加密映射表是指一种哈希表,它支持两种操作:读取和写入,用 EMap.write(K,V)和V←EMap.read(K)分别表示,其中K和V是 固定大小的值。EMap的具体读操作和写操作过程如下:
Figure BDA0002900121420000112
写操作EMap.write(K,V)有两个步骤:第一步,将K分为Kl和Kh两个部分(Kl,Kh);第二步,假设Kh和V位数相同,执行异或运 算得到的结果用EMap[Kl]表示,并将Kl和EMap[Kl]分别写入到 (K,V)中。读操作V←EMap.read(K)同样包含两个步骤:第一 步,将K分为Kl和Kh两个部分(Kl,Kh);第二步,根据Kl找到 EMap[Kl],将其与Kh再次执行异或运算解密得到V的值。
随机链表(Randomized linked list,简称RLL):随机链表 是一次数据访问过程中需要读取并重构的全部树节点,它由一组 加密的树节点构成,也就是由L条叶子到树根的路径 x1-to-ro,x2-to-root,…,xL-to-root,及前L-1条路 径中树节点的兄弟节点构成,并表示为
Figure BDA0002900121420000121
其中EL和SL的 定义分别如下:
加密链表(Encrypted Linked list,简称EL):加密链表是 指一棵LL-tree二叉树中的叶子节点到根节点路径上的所有节 点组成的一个链表,即上述描述的链表树结构中的一部分。路径 上的树节点都是加密的,第i棵树Ti的树叶x到树根的加密链表 用
Figure BDA0002900121420000122
表示,即叶子节点x到树根节点路径上节点的集合。
同胞链表(Sibling Encrypted Linked list,简称SL):同 胞链表是由和加密链表中每个节点具有相同父节点的兄弟节点 组成的一个链表。如果x是一个树叶值,i为第i棵树,用
Figure BDA0002900121420000123
表 示
Figure BDA0002900121420000124
的同胞链表,即
Figure BDA0002900121420000125
中节点的兄弟节点的集合。
图1为EL和SL的一个实例的逻辑表示,T4表示第4棵 LL-tree,图中叶到根的四个节点{dA,dB,dC,dD}即组成第四棵树 的EL,剩余用虚线框表示的三个节点{dE,dF,dG}组成第四棵树 的SL。
根据随机链表的构成,用户需要的数据都保存在随机链表之 中,用户可以通过下载随机链表从而获得最终查询到的数据。高 度不同的每一棵树的任何叶到根路径上的节点数目都是固定的, 因此每一棵树的随机链表的长度是一个固定值。由于根节点没有 兄弟节点,随机链表中前L-1棵树的包括EL和SL在内的所有节 点数目为
Figure BDA0002900121420000131
随机链表的长度固定不变,它一共包含
Figure BDA0002900121420000132
个树节点。
下面分别介绍地址转换、用户掩码、块密钥、用户令牌和临 时缓冲区的概念。
地址转换/块地址:地址转换是指将一个地址a转换成一组 较小的地址的编码方式。实现地址转换的公式如下所示:
Figure BDA0002900121420000133
其中ai为一个整数,bi是ai+1除2后的余数,是一个二进制数。 (ai,bi)被称为块地址。地址a表示为第L+1个地址aL+1,通过aL+1可以计算出第L组aL和bL的值,然后就可以根据上述公式依次 计算出全部的ai和bi的值。经过所有计算后地址a转换成一个包 含L对元素的集合{(a1,b1),(a2,b2),…,(aL,bL)},其中每个(ai,bi)表 示第i组块地址。块地址和逻辑地址的关系为:假设一个块地址 为(y,b),那么它的逻辑地址为2y+b。对于高度为
Figure BDA0002900121420000134
的任意一棵链表树,假设每一个树节点都拥有2z个块,那么一共最多拥 有
Figure BDA0002900121420000143
个块地址(或者说逻辑地址)。
用户掩码:用户掩码是指由用户计算生成的一个加密的随机 值,用于表示每一棵树的根节点的父节点掩码。由于树形结构中 树根节点不存在父节点,因此可假定根节点和孩子节点一样仍然 是具有父节点的,使用用户掩码来模拟表示根节点的父节点的掩 码,用Mi表示第i棵树的用户掩码。本发明在用户端存储一个全 局变量Counter用于记录在LL-ORAM执行读或写操作的总次数。 假设K为用户的密钥,G为一个伪随机函数,那么第i棵树的用 户掩码Mi等于GK(i||Counter)。因Counter每一次都不同,于是 用户掩码具有随机性。
用户令牌:假设a为一个数组地址,用户令牌是指用户试图 获取A[a]数据,经过计算生成的一组一次性密钥。用户令牌只能 被使用一次,它用于计算并解密得到一组叶子位置{x1,x2,…,xL}, 从而计算并得到一条RLL。第i棵树的用户令牌用ti表示,它等于
Figure BDA0002900121420000141
块密钥(Block Key):块密钥是指一种用来对数据块进行加 密的密钥。假设i为第i棵树,(ai,bi)表示一个块地址,当前块的 节点掩码为M,那么块密钥是
Figure BDA0002900121420000142
计算得到的块 密钥用来对chunk中的数据块进行加密,由于在EL中,每次访 问后,节点掩码都被重新随机唯一生成,对于任何链表树、任何 树节点、任何数据块,块密钥都是唯一的。因数据块的数量太多, 用户并不能将全部的块密钥存储在本地,但用户可以通过用户令 牌和链表树间接计算出块密钥。
临时缓冲区:缓冲区是指一种用于保存和“洗牌”检索到的 数据块的存储结构。本发明中临时缓冲区Stash使用以下哈希表 数据结构。
Figure BDA0002900121420000151
其中data0和data1是任意数据,leaf表示一个叶标识符,指示叶 到根的路径中包含该块。可以通过地址a′和二进制数b访问缓冲区中 的每个sblock块,访问到的块用(datab,leaf)表示。b为零,表示选择 data0,否则选择data1
二、初始化LL-ORAM
初始化LL-ORAM分为两个阶段:第一个阶段,将数值填充到 每一个chunk中;第二个阶段,加密每一个节点。
第一阶段:对于一组数据A[.],简单起见,假设其中共有 N=2L个数据块,用户将N个数据块随机存储在数据树TL的树节 点中。因树节点的一个chunk可以存储两个地址相邻的数据块, 且数据存储地址已经被打乱,因此可以用另外一棵相对小一点的 树TL-1存储这些随机节点对应的叶子位置。在TL-1中,存储了2L-1个数据块,它们的值分别是TL的2L-1个叶子位置。由于TL-1的数 据块存储地址也已经被打散,它的全部叶子位置也只能保存在 TL-2中。依此类推,直到最后一棵树T1,它只包含一个树节点。T1 -TL-1称为位置树。
更具体来说,在位置树Ti中,假设一个chunk为(a′,data0,data1,leaf),那么(a′,0)表示当前chunk节点第一个块 地址,(a′,1)表示当前chunk节点第二个块地址,data0存储了下 一棵树Ti+1的块地址(2a′,0)和(2a′,1)对应的叶子位置(注:存储 的值不等于块地址),data1存储了下一棵树的块地址(2a′+1,0)、 (2a′+1,1)对应的叶子位置(注:存储值的也不是块地址),leaf 为当前块对应的叶子位置。在数据树中,data0和data1含义与位 置树不同,它们存储的是最终需要返回给用户的数据。
举例说明。对于一个数据A[10],其逻辑地址为10,块地址 为(5,0),它被随机分配了一个叶子位置,假设值为8;此位 置信息8被存储到前一棵相对小点的树里面,因为5对应(2,1) 块地址,信息8被放置在块地址为(2,1),对应的是data1区域 部分;以此类推,将(2,1)的块地址对应的叶子位置存储到前 面的小树里面,存储的块地址是(1,0)对应的是data0区域部 分,这棵树只有一个节点。依据以上步骤,将全部的数组数据都 按照上述规则存储。
第二阶段:假设所有的chunk数值都已经按照上述方式填 充,对于第i棵树中未加密的链表树节点d,本发明采用如下的 方式加密d,如图2所示,它包含如下步骤。
步骤一,对树节点的头部加密。用户为树中的节点生成一个 随机值作为节点掩码M,将节点掩码M和父节点掩码Mf异或 得到该节点的密文掩码d.head.m,使用以下的BlockKey算法为节 点中所有的数据块生成对应的块密钥,根据链表树编号i,块地 址(ai,bi)和当前的节点掩码M,给定一个伪随机函数F和用户密 钥K,通过
Figure BDA0002900121420000171
运算得到块密钥。由于每个chunk中 包含两个地址相邻的数据,因此每个chunk会生成两个对应的块 密钥,分别使用两个块密钥作为键,采用公式(7),将data0和data1写入加密映射表中。由于data0和data1被不同块密钥加密,因此 从写入的哈希表地址无法推断出块密钥和数值。
步骤二,对树节点的尾部加密。用户将节点掩码存入节点尾 部,并使用随机对称加密算法对尾部tail加密,用户保留私钥, 最后输出加密后的节点。
注意事项:1)云始终无法解密节点尾部tail,节点尾部不 对云公开,只提供给用户使用。2)云只有获得了对应的块密钥 才能解密拥有相应数据块的节点头部;3)因为根节点没有父节 点,但可以假设根节点的父节点掩码为相应树的用户掩码。加密 后链表树节点的头部head提供给云进行计算,云可以使用用户 发送的令牌解密所需节点头部中的emaps从而获取emaps中的 值;4)根据用户的令牌,如果云得到了一个emaps中的值,那 么它是用于访问下一棵树的叶子位置。
初始化完成后的LL-ORAM逻辑结构如图3所示。它包括一组 链表树,用(T1,T2,…,TL)表示,每一个Ti表示一棵高度为i且包含 (2i-1)个链表树节点的满二叉树。第L棵链表树TL称为数据树, 在每个树节点中以随机顺序存储数据,前L-1棵链表树为位置 树,用于存储数据位置信息。其中,xi是第i棵树的叶标识符, 第i棵树的输入xi是第(i-1)棵树的计算输出结果,{x1,x2,…,xL} 是一次ORAM访问得到的一组叶子位置。Stash为临时缓冲区。
三、LL-ORAM上的单轮数据访问。
对于一个数组地址a,用户为了读取逻辑数据A[a]或者写入 A[a]数据,在LL-ORAM上单轮读写如图4所示,它包括四个步骤: 创建一次性令牌、在LL-ORAM上搜索得到RLL、读写数据、重建 RLL。
1)创建一次性令牌
用户将输入的地址通过上述地址编码方法转换成一组块地 址。假设i表示第i棵树,Mi为第i棵树用户掩码,对每一个块地 址(ai,bi),计算
Figure BDA0002900121420000181
得到L-1棵位置树的所有令牌 (t1,t2,…,tL-1)。
2)在LL-ORAM上搜索
在LL-tree上搜索可以递归表示为:xi+1=Compute(Ti,ti), 其中xi+1为第i+1棵树的叶子位置,Ti为第i棵树,ti为用户发送 的第i棵树的令牌,其中Compute算法流程如图5所示,具体描 述如下,它最坏情况下遍历xi到树根的i个树节点。
步骤A、访问第一层树节点。如果当前节点为d,那么用户 使用d.head.m异或ti,得到一个变量t,如果当前节点包含了 (ai,bi)数据块,那么t就是一个正确的块密钥,就能在emaps中 解密一个数据块并得到下一棵树的访问叶子xi+1,算法成功结束; 否则,继续搜索下一层节点。
步骤B、假设d为第二层的树节点,用户使用d.head.m异或 上一步骤A获得的t;如果当前节点包含了(ai,bi)数据块,那么t 就是一个正确的块密钥,就能在emaps中解密一个数据块并得到 下一棵树的访问叶子xi+1,算法成功结束;否则,继续搜索下一 层节点。
步骤C、依次访问,最终得到叶子xi+1
注意事项:A)经过上述步骤,算法最终遍历所有的链表树 得到一条包含有用户数据的RLL。
Figure BDA0002900121420000191
其中的每条同胞 链表SL虽然没有被访问和解密,但是重建每一条EL需要依赖于 SL中的掩码数据,于是需要将相应的SL一并下载。B)因数据 块事先已经存储在相应树根到树叶的路径中,所以云始终可以得到正确的计算结果。
图6描述了一个在一棵LL-tree上搜索的例子。T4为第4棵 LL-tree,M4表示用户掩码,链表包含四个节点{dA,dB,dC,dD}, 其对应的节点掩码为{MA,MB,MC,MD},每个节点的密文掩码分 别由节点掩码和其父节点掩码执行异或运算得到,根节点的密文 掩码是由根节点掩码和用户掩码M4异或得到的。用户令牌t4通 过
Figure RE-GDA0003034625190000192
计算得到,用户将令牌发送给云,云从根 节点dA开始执行以下计算,将令牌t4与节点dA的密文掩码 dA.head.m执行异或操作,由于节点dA的密文掩码
Figure RE-GDA0003034625190000193
因此计算化简为
Figure RE-GDA0003034625190000201
Figure RE-GDA0003034625190000202
最终计算结果为
Figure RE-GDA0003034625190000203
这实际上是节点dA的一 个块密钥,可以用于搜索块地址(ai,bi)处的数据,i=4。dA中没 有包含要访问的块地址,于是云继续搜索dB,计算
Figure RE-GDA0003034625190000204
由于dB中也没有对应的地址,同 样也没有从dB中获得任何结果。接着搜索dC,计算
Figure RE-GDA0003034625190000205
Figure RE-GDA0003034625190000206
最终计算结果为
Figure RE-GDA0003034625190000207
NodeKeyC实 际上是节点dC的一个块密钥,用节点dC的块密钥读取dC的加密 映射的值,它其实就是用于访问下一棵树的叶子位置,它的值等 于事先保存在节点尾部chunk中的数据
Figure RE-GDA0003034625190000208
3)读写数据
用户得到一条RLL后,采用两个步骤读写数据。
步骤A、用户创建L个临时缓冲区,用于存储一条RLL,每一 棵树的节点都被分别放置到对应的缓冲区中。因tail部分可以被 解密,用户将全部的chunk解密后写入对应的临时缓冲区。如果 用户需要读取A[a]数据,那么只需要从数据树的临时缓冲区读取 A[a]即可。因为地址a对应的全部块地址都已经在临时缓冲区 中,用户可以根据块地址(aL,bL)读取数据。如果用户需要写入 A[a]数据data*,那么它将数据data*写入对应的临时缓冲区的chunk中即可。
步骤B、用户为所有解密过的chunk重新分配L个随机叶标识 符。其中第i棵树的chunk(a′,data0,data1,leaf)的叶子的标识符, 被写入到第i-1棵树的chunk(a′/2,data*0,data*1,leaf*)中,的 data*0或者data*1中。如果a′为偶数,写入data*0中,a′为奇数, 写入data*1中。
4)重建RLL
本处采用已经公开的Path ORAM洗牌算法,将L个缓冲区中 的chunk数据洗牌后生成重新调整chunk的位置。然后对每一个 树节点,采用上述提及的节点初始化加密算法加密树节点,并得 到一条新的RLL。
注意事项:A)即使一个未访问的chunk被移动了存储位置, 那么洗牌后它仍然需要满足叶子到树根的路径肯定包含当前 chunk。B)尽可能将数据写入树的底部,以避免树根存储空间 溢出;C)除了树根之外,其他的每个节点都存储了Z个chunk, 一般来说Z大于等于2,小于6。树根节点的大小是固定的,一 般来说,树根节点的Z大于等于6,小于10;D)所有缓冲区中 的数据都将被全部重新加密并上传到原来的路径中,形成了一条 重新加密的RLL;E)用户最终将全部缓冲区清空。F)因SL的 掩码没有被使用,所以SL的掩码没有被重新生成,但是SL节点 头部和尾部都已经被树节点加密算法重新加密。
为了访问能够在单轮的请求与响应中一次性完成,新的RLL被打 包到下一次读写请求中。在下一次新的读写请求时候,用户将新的查 询令牌连同历史的被缓冲的RLL一并发送到云,然后首先由云执行历 史的节点覆盖更新操作,再执行新的查询操作。任意的数据读写访问, 都是重复执行上述步骤。于是,LL-ORAM可以在单轮中实现对隐私保 护的数据的快速读写。

Claims (5)

1.一种生成链表树的方法,其特征在于:所述链表树LL-tree是加密的满二叉树,所述方法包括生成链表树的各个链表树节点LL-tree node,所述链表树节点包括头部head和尾部tail,如下:
Figure FDA0002900121410000011
其中头部head包括m和emaps,尾部tail包括M和chunks,emaps和chunks是分别由z项组成的复合结构;M、m、emaps和chunks的定义分别如下:M表示节点掩码,节点掩码是由用户生成的一个随机值,是私密信息,不对云公开;m表示密文掩码,是存储在链表树节点头部的一个加密值,由节点的节点掩码和其父节点的节点掩码执行异或运算得到,密文掩码对云公开;chunks包含z个chunk,其中chunk是指一个数据块,chunk存储了四个元素(a,data0,data1,leaf),即一个地址a、两个相邻的数据data0,data1和一个叶标识符leaf,叶标识符leaf用于表示节点属于哪一条叶子到树根的路径;emaps包含z个加密映射表emap,其中每个emap存放两组键值对信息(k1,v1,k2,v2),用于保存加密后的值。
2.根据权利要求1所述的方法,其特征在于包括对emap执行的读取和写入操作,具体读操作和写操作过程如下:
Figure FDA0002900121410000021
写操作EMap.write(K,V)有两个步骤:第一步,将K分为Kl和Kh两个部分(Kl,Kh);第二步,假设Kh和V位数相同,执行异或运算得到的结果用EMap[Kl]表示,并将Kl和EMap[Kl]分别写入到(K,V)中;读操作V←EMap.read(K)同样包含两个步骤:第一步,将K分为Kl和Kh两个部分(Kl,Kh);第二步,根据Kl找到EMap[Kl],将其与Kh再次执行异或运算解密得到V的值。
3.一种生成随机链表的方法,且特征在于所述随机链表是根据权利要求1-2之一的方法所生成的链表树生成的,所述生成随机链表的方法包括生成加密链表和生成同胞链表,随机链表是一次数据访问过程中需要读取并重构的全部加密的树节点,包括L条叶子到树根的路径x1-to-root,x2-to-root,…,xL-to-root,及前L-1条路径中树节点的兄弟节点,表示为
Figure RE-FDA0003034625180000022
其中EL和SL的定义分别如下:加密链表是指一棵LL-tree二叉树中的叶子节点到根节点路径上的所有节点组成的一个链表,路径上的树节点都是加密的,第i棵树Ti的树叶x到树根的加密链表用
Figure RE-FDA0003034625180000023
表示,即叶子节点x到树根节点路径上节点的集合;同胞链表是由和加密链表中每个节点具有相同父节点的兄弟节点组成的一个链表,如果x是一个树叶值,i为第i棵树,用
Figure RE-FDA0003034625180000031
表示
Figure RE-FDA0003034625180000032
的同胞链表,即
Figure RE-FDA0003034625180000033
中节点的兄弟节点的集合。
4.一种初始化链表树的方法,所述链表树是根据权利要求1-2之一的方法生成的,其特征在于:
对于一组数据A[.],假设其中共有N=2L个数据块,用户将N个数据块随机存储在数据树TL的树节点中,树节点的一个chunk可以存储两个地址相邻的数据块,用另外一棵相邻的较小的树TL-1存储这些随机节点对应的叶子位置,在TL-1中,存储了2L-1个数据块,它们的值分别是TL的2L-1个叶子位置,它的全部叶子位置保存在TL-2中,依此类推,直到最后一棵树T1,它只包含一个树节点,T1-TL-1称为位置树。
5.一种访问链表树的方法,所述链表树是根据权利要求1-2之一的方法生成且经由权利要求4所述的方法初始化的,所述访问链表树的方法包括读操作和写操作:
1)创建一次性令牌;
2)在链表树上搜索;
3)读数据;
4)重建RLL。
CN202110054402.XA 2021-01-15 2021-01-15 一种单轮交互的链表oram访问方法 Active CN112966294B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202211096138.7A CN116842005A (zh) 2021-01-15 2021-01-15 一种生成链表树的方法
CN202110054402.XA CN112966294B (zh) 2021-01-15 2021-01-15 一种单轮交互的链表oram访问方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110054402.XA CN112966294B (zh) 2021-01-15 2021-01-15 一种单轮交互的链表oram访问方法

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202211096138.7A Division CN116842005A (zh) 2021-01-15 2021-01-15 一种生成链表树的方法

Publications (2)

Publication Number Publication Date
CN112966294A true CN112966294A (zh) 2021-06-15
CN112966294B CN112966294B (zh) 2022-09-09

Family

ID=76271284

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202211096138.7A Pending CN116842005A (zh) 2021-01-15 2021-01-15 一种生成链表树的方法
CN202110054402.XA Active CN112966294B (zh) 2021-01-15 2021-01-15 一种单轮交互的链表oram访问方法

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202211096138.7A Pending CN116842005A (zh) 2021-01-15 2021-01-15 一种生成链表树的方法

Country Status (1)

Country Link
CN (2) CN116842005A (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090077123A1 (en) * 2007-09-14 2009-03-19 Gibson Becky J Method for managing keyboard navigation within a tree control structure user interface component via a linked list
CN104657447A (zh) * 2015-02-05 2015-05-27 上海达梦数据库有限公司 面向数据库管理系统的计划树优化方法和装置
CN105589814A (zh) * 2015-12-17 2016-05-18 北京大学 针对Path ORAM的叉型访问方法
CN110287262A (zh) * 2019-06-28 2019-09-27 中国科学技术大学 有效保护用户隐私的比特币交易查询方法
CN111130757A (zh) * 2019-12-31 2020-05-08 华中科技大学 一种基于区块链的多云cp-abe访问控制方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090077123A1 (en) * 2007-09-14 2009-03-19 Gibson Becky J Method for managing keyboard navigation within a tree control structure user interface component via a linked list
CN104657447A (zh) * 2015-02-05 2015-05-27 上海达梦数据库有限公司 面向数据库管理系统的计划树优化方法和装置
CN105589814A (zh) * 2015-12-17 2016-05-18 北京大学 针对Path ORAM的叉型访问方法
CN110287262A (zh) * 2019-06-28 2019-09-27 中国科学技术大学 有效保护用户隐私的比特币交易查询方法
CN111130757A (zh) * 2019-12-31 2020-05-08 华中科技大学 一种基于区块链的多云cp-abe访问控制方法

Also Published As

Publication number Publication date
CN116842005A (zh) 2023-10-03
CN112966294B (zh) 2022-09-09

Similar Documents

Publication Publication Date Title
CN110337649B (zh) 用于搜索模式未察觉的动态对称可搜索加密的方法和系统
Cash et al. Dynamic proofs of retrievability via oblivious RAM
Gordon et al. Secure two-party computation in sublinear (amortized) time
US7346160B2 (en) Randomization-based encryption apparatus and method
Mayberry et al. Efficient private file retrieval by combining ORAM and PIR
Chen et al. Onion ring ORAM: efficient constant bandwidth oblivious RAM from (leveled) TFHE
CA3078558A1 (en) A system and method for quantum-safe authentication, encryption and decryption of information
CN104780161A (zh) 一种云存储中支持多用户的可搜索加密方法
CN113221155B (zh) 一种多层级与多等级加密的云储存系统
Garg et al. TWORAM: round-optimal oblivious RAM with applications to searchable encryption
CN107315539B (zh) 一种数据存储方法以及数据提取方法
CN106888213B (zh) 云密文访问控制方法及系统
Hoang et al. A multi-server oram framework with constant client bandwidth blowup
Hoang et al. A multi-server oblivious dynamic searchable encryption framework
CN112966294B (zh) 一种单轮交互的链表oram访问方法
CN116389137A (zh) 一种基于网络信息安全的数据加密方法及系统
KR101133988B1 (ko) 해쉬 트리 기반의 스트림 암호화 및 복호화 방법과 암호 파일 시스템
CN114430321A (zh) 基于dfa自适应安全的黑盒可追踪密钥属性加密方法及装置
JP4789536B2 (ja) データ分割装置、データ分割方法およびコンピュータプログラム
EP3959841B1 (en) Compression and oblivious expansion of rlwe ciphertexts
CN114039990A (zh) 不经意访问存储系统
CN113722366A (zh) 一种基于不经意密文倒排索引的安全数据检索方法
Moataz et al. Constant Communication ORAM without Encryption.
Liang et al. A Framework of Private Set Intersection Protocols.
CN115102733B (zh) 一种高效打包的图像加密检索方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant