不经意访问存储系统转让专利

申请号 : CN202111280763.2

文献号 : CN114039990B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 马丁范磊

申请人 : 上海交通大学

摘要 :

一种不经意访问存储系统,包括:可信代理服务器、存储云服务器和用户群,其中:作为存储系统的使用者的用户群通过给定的软件接口与可信代理服务器的序列器交互,存储有所有的数据的存储云服务器作为半诚实存储服务器,完成可信代理服务器指定的存取操作的同时窥探访问模式。本发明将洗牌带来的性能开销平均到每次访问中,不使用扩充一个访问为多个访问的思路,而是着重在时间维度进行假访问混淆,达到提高真正的客户请求响应速度的效果。

权利要求 :

1.一种不经意访问存储系统,其特征在于,包括:可信代理服务器、存储云服务器和用户群,其中:作为存储系统的使用者的用户群通过给定的软件接口与可信代理服务器的序列器交互,存储有所有的数据的存储云服务器作为半诚实存储服务器,完成可信代理服务器指定的存取操作的同时窥探访问模式;

所述的可信代理服务器内置序列器、位置映射表和访问模块,其中:序列器接受来自外部的用户读写访问请求,经序列化后逐个输出至访问模块;位置映射表中包含每一个数据块在完全二叉树中的路径和唯一对应的桶高度,访问模块包括缓冲池单元、假访问伪造单元和交互单元,其中:缓冲池单元缓冲部分数据,当序列器提供的读写请求所对应的数据块位于缓冲池中时,直接读/写缓冲池,而不需要经过进一步与存储云服务器的交互,缓冲池内部的替换算法包括LRU、LFU;交互单元将来自假访问伪造单元的数据加密存储至存储云服务器的指定位置,或者将存储云服务器对应位置的加密数据解密后输出至假访问伪造单元;假访问伪造单元根据假访问伪造算法伪造特定位置的假访问,将多级队列中的特定数据输出至交互模块写入存储云服务器或者利用交互模块仅仅对存储云服务器中特定的位置进行假访问;

所述的假访问是指:在序列器为空时,将根据假访问伪造算法伪造特定位置的假访问,将多级队列中的特定数据输出至交互模块写入存储云服务器,或者利用交互模块仅仅对存储云服务器中某些特定的位置做假访问;当序列器不为空时,假访问伪造单元将拿到序列器中的访问请求,直接通过交互模块对对应的位置发起访问,并且按照假访问伪造算法更新多级队列的状态;

所述的多级队列,由L=logN个缓存队列组成,其中:任意一个队列记为Qi,i=1,2,...,L,N为总存储空间的块个数;

所述的访问伪造算法,具体包括:

S21.访问发起触发:假访问伪造单元周期性地查询当序列器中有待发起的访问请求时,执行步骤S22,否则执行步骤S23;

S22.真实访问:假访问伪造单元会查询位置映射表,获取对应数据块所在的桶位置高度n,桶编号m,输出至交互模块,由交互模块发起读/写访问;然后进行数据洗牌算法的步骤S31;

S23.假访问伪造:假访问伪造单元会随机选择一个层高度n,1≤n≤L,然后在该层随机n‑1选取一个桶号m,1≤m≤2 ,对此随机桶经由交互模块发起读/写访问后执行步骤S33。

2.一种基于权利要求1所述系统的不经意访问方法,其特征在于,包括:单次访问混淆访问算法、系统初始化算法、访问伪造算法和数据洗牌算法,其中:所述的数据洗牌算法,具体包括:

S31.真数据洗牌算法:当多级队列最上层队列Q0不满,则执行步骤S32,否则执行步骤S34;

S32.数据块上升:将此次访问的数据块放在Q0末尾且修改位置映射表中原数据块编号对应的层为0,桶标为空,当Qn中存在数据块,则执行步骤S33;

S33.出队写回:从Qn中拿出一个或者多个数据块,填补在当前访问的这个原数据块,并且更新对应数据块在位置映射表中记录的桶编号并执行步骤S34;

S34.数据块下沉:对于同一个桶中非此次访问的其他的真实数据块,将其移出并且下沉到下层队列Qn+1中,同时更新位置映射表中对应数据块的位置。

3.根据权利要求2所述的不经意访问方法,其特征是,所述的单次访问混淆访问算法将交互模块发起的与存储云服务器的单次访问(读或写)替换为一次读和一次写,且交互的数据内容均为抵抗选择明文攻击的对称加密后的结果,即当原访问请求是读访问时,写回的数据明文为原明文,而当原访问是写访问时,写回的数据为新数据,具体包括:S01.交互模块读取指定的位置桶,并且进行对称解密;

S02.当为读请求,则将数据交还给用户侧,并且将数据重新加密输出至交互模块,并执行步骤S04;否则执行步骤S03;

S03.当为写请求,则把要写入的数据加密输出至交互模块。

4.根据权利要求2所述的不经意访问方法,其特征是,所述的系统初始化算法,具体包括:

S11.初始化可信代理服务器和存储云服务器:将存储云服务器的中的存储组织成完全二叉树的形式,每一个二叉树节点又称为一个桶,每一个桶包括Z个数据块;整个树高为L=logN,每一个块能够存储B个字节后执行步骤S12;

S12.在可信代理服务器端初始化一个位置映射表,记录原数据地址空间中每一个数据块将会被映射到位于云端二叉树的叶子结点路径和具体的桶高度,当某一个数据块被映射到一个已经满的桶时,重新随机选取一个桶,直到选到一个不满的桶;被映射的原数据块,经过抗选择明文攻击的对称加密算法加密后,存储在存储云服务器对应位置上;

S13.填补剩余的空位置:对云端二叉树中的仍然存在空的桶或者是桶中空的未插入数据的位置,伪造随机数据串放入到对应的位置。

5.根据权利要求2或4所述的不经意访问方法,其特征是,所述的系统初始化算法,具体包括:所述的映射,每一条记录是以此随机生成。

6.根据权利要求2或4所述的不经意访问方法,其特征是,所述的系统初始化算法,具体包括:所述的可信代理服务器提供的,或者说用户群可见的原数据地址空间小于存储云服务器上的整个二叉树容量大小。

说明书 :

不经意访问存储系统

技术领域

[0001] 本发明涉及的是一种信息安全领域的技术,具体是一种不经意访问(Oblivious Random Access)存储系统。

背景技术

[0002] 不经意访问机(Oblivious Random Access Machine)是通过在访问远程存储系统时,客户端不断地对访问的数据进行位置置换混洗和内容重新加密,进而达到对服务端隐藏访问模式目的一种密码学原语。现有的不经意访问算法,在基本原理上,都是把某一个访问,另外附上若干个假的访问,通过同时发起这若干个访问,达到混淆实际访问地址的目的。但是这类算法有一个通病,就是对单次访问的响应时间较长,可以设想,本来网络传输某一个块数据所需要的延时,将被延长到总数据量的对数级别。
[0003] 现有的异步网络环境或不可信网络环境下的多用户ORAM访问技术在访问目标数据块时一般采用该数据块从根节点到叶子结点的一整条路径,往往导致了单次访问延迟及其造成的带宽膨胀较大。

发明内容

[0004] 本发明针对现有不经意访问机算法的单次访问响应延迟过大问题,提出一种不经意访问存储系统,将洗牌带来的性能开销平均到每次访问中,不使用扩充一个访问为多个访问的思路,而是着重在时间维度进行假访问混淆,达到提高真正的客户请求响应速度的效果。
[0005] 本发明是通过以下技术方案实现的:
[0006] 本发明涉及一种不经意访问存储系统,包括:可信代理服务器、存储云服务器和用户群,其中:作为存储系统的使用者的用户群通过给定的软件接口与可信代理服务器的序列器交互,存储有所有的数据的存储云服务器作为半诚实存储服务器,完成可信代理服务器指定的存取操作的同时窥探访问模式。
[0007] 所述的可信代理服务器内置序列器、位置映射表和访问模块,其中:序列器接受来自外部的用户读写访问请求,经序列化后逐个输出至访问模块;位置映射表中包含每一个数据块在完全二叉树中的路径和唯一对应的桶高度,访问模块包括缓冲池单元、假访问伪造单元和交互单元,其中:缓冲池单元缓冲部分数据,当序列器提供的读写请求所对应的数据块位于缓冲池中时,直接读/写缓冲池,而不需要经过进一步与存储云服务器的交互。缓冲池内部可以使用 LRU、LFU等各种替换算法;交互单元将来自假访问伪造单元的数据加密存储至存储云服务器的指定位置,或者将存储云服务器对应位置的加密数据解密后输出至假访问伪造单元;假访问伪造单元根据假访问伪造算法伪造特定位置的假访问,将多级队列中的特定数据输出至交互模块写入存储云服务器或者利用交互模块仅仅对存储云服务器中特定的位置进行假访问。
[0008] 所述的多级队列,由L=logN个缓存队列组成,其中:任意一个队列记为Qi,i=1,2,...,L。
[0009] 所述的假访问,在序列器为空时,将根据假访问伪造算法伪造特定位置的假访问,将多级队列中的特定数据输出至交互模块写入存储云服务器,或者利用交互模块仅仅对存储云服务器中某些特定的位置做假访问;当序列器不为空时,假访问伪造单元将拿到序列其中的访问请求,直接通过交互模块对对应的位置发起访问,并且按照假访问伪造算法更新多级队列的状态。
[0010] 本发明涉及一种基于上述系统的不经意访问方法,包括:单次访问混淆访问算法、系统初始化算法、访问伪造算法和数据洗牌算法。
[0011] 所述的单次访问混淆访问算法将交互模块发起的与存储云服务器的单次访问(读或写) 替换为一次读和一次写,且交互的数据内容均为抵抗选择明文攻击的对称加密后的结果,即当原访问请求是读访问时,写回的数据明文为原明文,而当原访问是写访问时,写回的数据为新数据,具体包括:
[0012] S01.交互模块读取指定的位置桶,并且进行对称解密。
[0013] S02.当为读请求,则将数据交还给用户侧,并且将数据重新加密输出至交互模块,并执行步骤S04;否则执行步骤S03。
[0014] S03.当为写请求,则把要写入的数据加密输出至交互模块。
[0015] 所述的系统初始化算法,具体包括:
[0016] S11.初始化可信代理服务器和存储云服务器:将存储云服务器的中的存储组织成完全二叉树的形式,每一个二叉树节点又称为一个桶,每一个桶包括Z个数据块。整个树高为L=logN,总存储空间的块个数为N,每一个块能够存储B个字节后执行步骤S12。
[0017] S12.在可信代理服务器端初始化一个位置映射表,记录原数据地址空间中每一个数据块将会被映射到位于云端二叉树的叶子结点路径和具体的桶高度,当某一个数据块被映射到一个已经满的桶时,重新随机选取一个桶,直到选到一个不满的桶。被映射的原数据块,经过抗选择明文攻击的对称加密算法加密后,存储在存储云服务器对应位置上。
[0018] 所述的映射,每一条记录是以此随机生成。
[0019] 所述的可信代理服务器提供的,或者说用户群可见的的原数据地址空间小于存储云服务器上的整个二叉树容量大小。
[0020] S13.填补剩余的空位置:对云端二叉树中的仍然存在空的桶或者是桶中空的未插入数据的位置,伪造随机数据串放入到对应的位置。
[0021] 所述的访问伪造算法,具体包括:
[0022] S21.访问发起触发:假访问伪造单元周期性地查询当序列器中有待发起的访问请求时,执行步骤S22,否则执行步骤S23。
[0023] S22.真实访问:假访问伪造单元会查询位置映射表,获取对应数据块所在的桶位置高度 n,桶编号m,输出至交互模块,由交互模块发起读/写访问。然后进行数据洗牌算法的步骤S31。
[0024] S23.假访问伪造:假访问伪造单元会随机选择一个层高度n,1≤n≤L,然后在该层n‑1随机选取一个桶号m,1≤m≤2 ,对此随机桶经由交互模块发起读/写访问后执行步骤S33。
[0025] 所述的数据洗牌算法,具体包括:
[0026] S31.真数据洗牌算法:当多级队列最上层队列Q0不满,则执行步骤S32,否则执行步骤 S34。
[0027] S32.数据块上升:将此次访问的数据块放在Q0末尾且修改位置映射表中原数据块编号对应的层为0,桶标为空,当Qn中存在数据块,则执行步骤S33。
[0028] S33.出队写回:从Qn中拿出一个或者多个数据块,填补在当前访问的这个原数据块,并且更新对应数据块在位置映射表中记录的桶编号并执行步骤S34。
[0029] S34.数据块下沉:对于同一个桶中非此次访问的其他的真实数据块,将其移出并且下沉到下层队列Qn+1中,同时更新位置映射表中对应数据块的位置。
[0030] 技术效果
[0031] 与现有技术中当用户发起访问才会发起膨胀后的若干个访问,本发明随时随刻都在发起访问,同时隐藏访问模式和访问密度,并将整个数据块的混洗均摊在每次真假访问中,每次访问的复杂度均为O(1),小于现有技术的O(logN)。

附图说明

[0032] 图1为数据伪造流程图;
[0033] 图2为本发明系统示意图;
[0034] 图3为实施例二叉树示意图;
[0035] 图4为实施例数据洗牌算法示意图;
[0036] 图5为实施例数据块下沉示意图;
[0037] 图6为实施例整体流程图。

具体实施方式

[0038] 当客户端侧有和总存储容量线性比例大小的存储空间,即当要求服务器端提供N个大小为B的块大小存储空间,则客户端侧有cNlogN的存储空间大小。其中clogN<<B。另外当,客户端发起的请求是相对稀疏的,也即一段时间内的通信速度只为带宽总量的1/logN。
[0039] 如图2所示,服务器代理只负责接受响应客户端代理发来的访问请求,读指定位置的数据返回给客户端代理,或者写客户端代理发来的数据到指定的位置,它一个抽象接口,它可以承接任何类型的文件系统,也可以直接是物理文件系统,包括NTFS、ext4等。客户端侧的位置映射,存储着每一个原始数据块在服务器侧的实际存储位置,这些位置对于服务器侧来说是不可知的。客户端代理对于每一次客户发出的I/O请求,都查询位置映射,从而向服务器代理提交访问请求,其中:对于写访问,客户端代理会对写入的数据做一个对称加密处理,然后再传输给服务器代理。对于读访问,客户端代理会对从服务器代理处拿到的加密数据解密,再传回给客户,其中:算法由客户端代理承接。
[0040] 如图5所示,为本实施例涉及一种不经意访问存储系统的控制方法,包括:读写混淆算法、系统初始化算法、访问伪造算法和数据洗牌算法。
[0041] 所述的读写混淆算法,发生在每一次用户发起读写请求时。所述的读写混淆算法使得服务器侧无法获知此次访问是一个读请求还是一个写请求,具体通过以下方式实现:不论客户发送给客户端代理的是读请求还是写请求,都由客户端代理连续发起一个读请求和对应同一个位置的一个写请求,当原始请求是一个读请求时,客户端代理将读取到的加密数据解密后返回给客户端,同时将明文重加密后写入到服务器侧;当原始请求是一个写请求,则客户端首先向服务器侧的目标地址读取该数据,然后直接丢弃,并将写请求中的数据加密后,写入到服务器侧,从而实现一次访问(Access)。
[0042] 所述的系统初始化算法,客户端预先将所有数据以乱序方式存放于服务器侧的磁盘上,然后分别加密写入到服务器端,其中原始地址与实际存储在服务器端的地址的映射关系通过位置映射记录,使得存储于服务器侧的数据在逻辑上构成一个二叉树的形式,如图3所示。同时更新位置映射记录。
[0043] 所述的位置映射记录任一数据块存储的层数及其节点位置。
[0044] 所述的二叉树的总容量大于原始数据量,对于部分不包含真实数据的叶子结点的位置填补随机字符串,用于与真实数据混淆,具体填补的实现方式为:约定标记最上层为第0层,每个节点中可以存储若干个数据块,图中为三块。每一层从左到右,分别标记为0,...,i‑1
2 号节点, i为层号;每一次访问的数据粒度,是一个节点,而不是节点中的数据块,这样会同时读或者写多个数据块,但是可以在一定程度上混淆当前访问的数据块信息。经过随机写入后,原始的数据集会分布在整个二叉树的各个节点上。
[0045] 所述的访问伪造算法,在每隔一定的短时间都会被发起,生成一个随机地址,对其发出一个访问。
[0046] 所述的随机地址,具体通过以下方式生成:
[0047] ①从第0到第L层中随机选择一层k;
[0048] ②在第k层的2k个节点中随机选择一个节点;
[0049] 从而保证越上层的节点访问的概率越高,而越下层的概率越低。
[0050] 如图4所示,所述的数据洗牌算法通过设置客户端代理侧额外维护一个多级队列,使得任何处于服务器端的观察者无法区分任意两次访问之间的关联关系,从而无法捕捉到客户端的访问模式。
[0051] 如图5所示,所述的多级队列的队列数量与所述二叉树中的树高相等,队列对应标记为 Q0,...,QL‑1每个队列里存储着当前应该放置到对应层的数据块,当访问是一个来自于客户的真实访问时,设被访问的数据块本来处于二叉树的第k层,当Q0不是满的话,此次访问的数据块会被重新放置在Q0的末尾,称为数据块上升,如图5中上升箭头所指。另外对于拿出后空缺的位置,从Qk中随机拿出一个或者多个数据块,写入到访问到的叶子节点中本来是原始被访问数据块的位置,以及可能存在的假数据填补的空位中,称为出队写回,如图5中虚线所指代的块,即被写回空位。对于同一个节点中没有命中的其他数据块,如图5中阴影表示的块,提出数据并且下沉到下一层队列Qk+1中,称为数据块下沉。与此同时,更新这些数据块在位置映射中的位置信息,对于处于队列里的数据块,位置映射只记录它的层号,与队列号一直,并不记录叶子结点号。
[0052] 当访问是一个随机的假访问时,并不会对访问到的数据提升到最顶层,当该叶子结点存在空位的话,仅仅执行一个出队写回操作:拿出对应队列Qk中的一个或者若干个数据,写入到对应的空位中。这样,高层的高概率随机到访问,保证了上层的数据能够持续不断的往下移动,而不会使队列过度膨胀。
[0053] 综上,本发明能够随时响应用户请求并直接定位访问所要求的数据;每次用户所需要访问的只是单个数据块数据量的常数倍,一般为6倍;用户每次访问对于服务器端来说是经过混淆的,服务器端无法区分是否这次访问是真实由用户发出的访问,也无法猜测内容,因为内容已经被对称加密了,对称加密引入随机数的情况下能够保证抵抗选择明文攻击。
[0054] 上述具体实施可由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现方案均受本发明之约束。