一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种适用于TEE混淆计算的ORAM访问方法与流程

2022-03-01 21:10:48 来源:中国专利 TAG:
一种适用于tee混淆计算的oram访问方法
技术领域
:1.本发明涉及信息安全
技术领域
:,特别涉及一种适用于tee混淆计算的oram访问方法。
背景技术
::2.随着云计算的高速发展,越来越多的计算任务被交由云服务器处理,受到云平台的控制,这严重影响了用户的隐私安全。同态加密技术能够实现数据在密文状态下的运算,为用户的隐私提供一定的安全保障。然而,对数据的加密运算只能保证输入/输出数据的隐私,用户对数据、代码的访问模式(即,用户程序在执行过程中对代码、数据地址的一系列访问序列)依然暴露在云服务器的视野中,这会导致大量用户隐私信息的泄露。因此,需要一种有效的技术,来隐藏程序执行过程中的访问模式,实现对计算的混淆。3.茫然随机访问机(obliviousrandomaccessmachine,oram)是一种有效的访问模式保护技术,它通过访问多个存储位置来混淆访问目标,从而实现存储的安全访问。在文献“nayakkartik,etal.hop:hardwaremakesobfuscationpractical.network&distributedsystemsecuritysymposium2017.”中,nayakkartik等人利用现场可编程逻辑门阵列(fieldprogrammablegatearray,fpga)设计了一种基于oram的安全处理器hop。该处理器能够保护程序执行过程中代码与数据的访问模式,实现计算的混淆。然而,该方法需要专用硬件的支持,不具有通用性。4.可信执行环境(trustedexecutionenvironment,tee)技术能够在计算机中建立的安全的计算区域,并为内部代码和数据提供硬件级的安全隔离和保护。在商用硬件的tee中实现基于oram的混淆计算方案,能够有效提高方案的通用性。然而,现有的oram方案(如,pathoram、circuitoram)不依赖于tee提供的安全保护。因此,将这些方案直接应用于tee中来实现混淆计算无法有效的利用tee提供的安全保障,导致不必要的计算开销。此外,现有的商用tee技术(如,armtrustzone、intelsgx)存在侧信道攻击问题,攻击者可以利用这些侧信道攻击获取tee中某些数据的访问模式从而推测出用户的隐私信息。虽然,oram可以隐藏用户数据的访问模式,但是它包含的一些敏感数据结构的访问模式仍需要额外的保护,例如,hop中利用专用硬件提供了足够大小的寄存器(现有的商品硬件无法提供足够大小的寄存器)来存储这些数据,从而保证相关的敏感信息不会泄露访问模式。因此,在tee中实现基于oram的混淆计算方案,需要额外为oram中的敏感数据结构提供有效的保护方案。技术实现要素:5.为了解决上述问题,本发明提供了一种适用于tee混淆计算的oram访问方法,该方法基于tee提供的安全环境,有效的隐藏了程序执行时代码和数据的访问模式;利用tee的安全特性,有效的减少了不必要的访问开销。同时,使用了混淆数据操作保护oram的敏感数据结构,隐藏了敏感数据的访问模式。6.为了行文方便,本文定义如下术语:7.oramtree(oram存储模块):该存储模块以完全二叉树的形式存储用户的数据块。设该完全二叉树的结点数为n,则树的深度为logn(底数为2)。树的结点又称为桶,每个桶包含z个大小相同的数据块。其中,真实数据块的数量不能超过1/2*(n 1)*z,其余为虚拟数据块;8.addresstranslationtable(地址转换表):用于记录程序访问的数据块的虚拟地址和物理地址的对应关系。地址转换表的表项数量与真实数据块的数量相同,通常不大于1/2*(n 1)*z。9.positionmap(位置表):用于存放数据块与oramtree中叶子结点的对应关系。该对应关系在oramtree数据块填充阶段随机分配,其中该叶子结点代表的路径必须包含该数据块所在的结点。位置表的表项数量与真实数据块的数量相同,通常不大于1/2*(n 1)*z。10.pmupdatequeue(positionmap更新队列):用于暂时记录oramtree中数据块的位置变化信息,以供positionmap未来的更新。更新队列的队列数量由用户设置,通常为常数。11.deepestmetadata(深度元数据):记录某条路径中,每个结点的数据块可以存放至该路径的最深位置(路径自根结点向叶子结点,越靠近叶子结点则越深)。为了便于理解,首先对数据块可以存放至的路径最深位置进行定义:设oramtree中一条路径为path1,则path1上的数据块b能够放置在path1中的最深位置为b在positionmap中对应的路径pathb与路径path1的第一个共同结点(自叶子结点向根结点)。深度元数据是一个大小为logn的数组。设deepest[i]为路径path1的深度元数据,i∈[1,logn],则deepest[i]=l表示路径path1中第i层的数据块最深可以被放置到l层上的结点中。其中,deepest[1]对应路径的根结点,deepest[logn]对应路径的叶子结点。[0012]oramcontroller(oram控制器):用于实现oram的相关操作,包括oramtree的填充、数据块的读取与写回、元数据扫描、positionmap的查询与更新等。[0013]pad(执行板块):pad是一个位置固定的内存区域,与一个数据块的大小相等,用于存放从oramtree中读取出来的数据块。被取至pad上的数据块,将被源程序调用。[0014]数据混淆操作:数据混淆操作能够用来隐藏关键数据的访问模式。本发明使用x86架构下的无条件分支指令cmov实现了数据混淆操作。具体来说,cmov指令的输入参数包括条件、源操作数、目标操作数,如果条件为真,指令则将源操作数复制到目标操作数的地址中,反之则不赋值。由于该指令执行时,源操作数和目标操作数都将被取出并存在寄存器中,因此无论是否赋值成功,攻击者看到的都是相同的访问模式。下列代码显示了使用cmov指令实现的混淆数据赋值操作。[0015][0016]本发明的原理是,对于源程序的访问请求,首先查询addresstranslationtable将目标虚拟地址转化为数据地址,然后检索positionmap获取相应的leaf标签。之后,无需将leaf标签对应的整条路径读出,而是直接检索该路径,并将目标数据块取至位置固定的pad供源程序使用。在写回数据时,为数据块随机新的leaf标签,并对pad与原路径的数据块进行深度元数据扫描。最终,根据扫描出的深度元数据将pad中的数据块写回原路径,并调整原路径上数据块的位置。尤其针对addresstranslationtable、positionmap以及oramtree等数据的查询与更新使用了混淆数据操作,有效的隐藏了敏感数据的访问模式。[0017]本发明提供的方法包含五个阶段,分别为oramtree数据块填充阶段、oramtree数据块请求阶段、oramtree数据块执行阶段、元数据扫描阶段、oramtree数据块写回阶段。具体包含如下步骤:[0018]a.在oramtree数据块填充阶段,oramcontroller负责将数据块填充进oramtree,并使用混淆数据操作更新addresstranslationtable和positionmap中与数据块对应的表项;该阶段只在oramtree初始化的过程中执行一次;具体执行步骤如下:[0019]a1.对于一个需要被填充进oramtree的数据块,oramcontroller首先为其随机一个叶子结点leaf;[0020]a2.oramcontroller将数据块填充到leaf对应路径的结点中;以叶子结点至根结点的顺序,寻找结点中的空位,并存放数据块;[0021]a3.根据数据块被存放的位置,oramcontroller将数据块虚拟地址与物理地址的对应关系更新至addresstranslationtable;使用混淆数据操作对addresstranslationtable进行更新,隐藏表项与数据块的对应关系;[0022]a4.根据数据块被存放的位置与随机的叶子结点leaf,oramcontroller将数据块与叶子结点的关系更新至positionmap;使用混淆数据操作对positionmap进行更新,隐藏表项与数据块的对应关系;[0023]a5.重复执行a1-a4的操作,直至完成对所有数据块的填充;[0024]b.在oramtree数据块读取阶段,oramcontroller通过查询addresstranslationtable和positionmap将源程序请求的数据块地址转换为数据块对应的叶子结点标签,通过访问与该叶子结点对应的路径获取目标数据块;具体执行如下操作:[0025]b1.源程序向oramcontroller发送数据块请求q1=(operation,address,type);其中,operation表示该请求需要进行的操作,address表示目标数据块的虚拟地址,type表示数据块的类型;[0026]b2.oramcontroller对q1请求进行权限检查;其中,type值为data时,可以执行读操作与写操作,type为代码块的请求只能进行读操作;[0027]b3.oramcontroller使用混淆数据操作访问addresstranslationtable,获取q1中的虚拟地址对应的物理地址;[0028]b4.oramcontroller使用混淆数据操作查询positionmap,根据目标数据块的物理地址获取对应的leaf标签;[0029]b5.oramcontroller使用混淆数据操作查询获取到的leaf标签对应的oramtree路径path1,并取出目标数据块,存于pad中;[0030]c.在oramtree数据块执行阶段,源程序对pad中数据块执行数据处理操作;完成操作后,向oramcontroller发起下一次数据块请求;具体执行如下操作:[0031]c1.源程序对pad中的数据块执行数据处理操作;由于pad在内存中的位置固定,源程序的数据访问模式将一直显示为固定位置,有效隐藏数据块的访问模式;[0032]c2.完成当前数据操作后,源程序向oramcontroller发送下一个数据块请求q2=(operation,address,type);[0033]d.在元数据扫描阶段,oramcontroller收到q2后,oramcontroller进行两次元数据扫描,将当前pad中的数据块写回oramtree;具体执行如下操作:[0034]d1.oramcontroller为该数据块随机一个新的叶子结点标签;[0035]d2.oramcontroller将pad与path1路径上的数据块结合为一条新的路径path2,将pad中的数据块置于根结点之上作为新的根结点,路径path2自上至下为pad数据块结点至叶子结点,对path2进行第一次元数据扫描操作;第一次元数据扫描操作步骤为:[0036]d2.1创建一个临时数组temp[i],i∈[1,logn],用于记录第一次扫描得到的结果;[0037]d2.2自根结点向叶子结点扫描path2中每个结点nj中的数据块,j∈[0,logn],其中n0为pad数据块代表的结点;其中,每扫描一个结点nj,基于path2计算nj中数据块能够放置的最深层级lj;[0038]d2.3当扫描至结点nj中数据块放置在最深层级li时,则在该层对应的temp数组中记录nj的层级lj,即令temp[i]=lj,第一次元数据扫描完成;[0039]d3.oramcontroller对路径path2进行第二次元数据扫描;[0040]e.在oramtree数据块写回阶段,oramcontroller将pad中的数据块写回路径path1,并更新数据块对应的positionmap表项中的信息;具体执行如下操作:[0041]e1.oramcontroller对路径path2自根结点向叶子结点执行数据块写回操作。[0042]e2.oramcontroller基于pmupdatequeue完成对positionmap的更新。[0043]e3.oramtree数据块写回阶段结束,oramcontroller将根据请求q2进行下一轮的数据读取操作。[0044]进一步的,所述步骤b3中oramcontroller使用混淆数据操作,其具体操作为:oramcontroller比较q1中的数据块虚拟地址与addresstranslationtable中的每一表项的虚拟地址,通过比较的结果,来决定是否执行真实的取值操作来获取对应的物理地址;当oramcontroller完成对所有表项的混淆数据操作后,只有与q1中虚拟地址相同的表项中的值才被真实的取出,在外部只能观察到oramcontroller对每一表项执行了相同的访问操作。[0045]进一步的,所述步骤d3中oramcontroller对路径path2进行第二次元数据扫描,具体为:自叶子结点向根结点扫描path2中每个结点nj,j∈[0,logn],其中:n0为pad数据块代表的结点;基于d2中得出的元数据数组temp[i]计算每个结点中的数据能够放至的最深的层级,并将结果记录至元数据数组deepest[i]中;deepest[i]=lj表示结点ni中的数据块最深能放至lj层,以完成第二次数据扫描。[0046]进一步的,所述步骤e1在写回过程的具体操作为:[0047]e1.1oramcontroller取出根结点中的数据块b,并基于元数据扫描结果deepest[i]自根结点向叶子结点检索。[0048]e1.2当检索到b能够放置的最深层级时,将数据块b放至该层的结点中。或者,在检索到具有更深放置位置的数据块b1时,将b放置该层,并将b1取出。[0049]e1.3如未出现上述两种情况,oramcontroller仍然会执行虚假的数据放置操作,以隐藏数据的访问模式。[0050]e1.4数据块被放置后,oramcontroller将在pmupdatequeue中记录该数据块需要在positionmap中更新的内容,为positionmap的最终更新做准备。[0051]e1.5oramcontroller重复上述操作,直至整条路径检索完毕,数据块的写回操作完成。[0052]e1.6对于路径path2的数据写回操作与pmupdatequeue的记录操作使用数据混淆操作来隐藏数据块的访问模式。[0053]本发明的有益效果是:[0054]本发明提供一种适用于tee混淆计算的oram访问方法,该方法能够隐藏tee中程序执行的访问模式,实现程序的混淆计算;该方法实现于tee中,并利用tee提供的安全保障,优化oram访存操作,减少了计算开销。同时,本方法使用混淆数据操作保护oram访问过程中的敏感数据结构,从而有效的隐藏敏感数据的访问模式。具体地,本发明具有如下优点:[0055](一)本发明提供的适用于tee混淆计算的oram访问方法,将oram访问方法和tee结合,消除对专用硬件的依赖,具有通用性;[0056](二)本发明提供的适用于tee混淆计算的oram访问方法,利用tee提供的安全保障来优化oram访存操作,减少计算开销;[0057](三)本发明提供的适用于tee混淆计算的oram访问方法,通过对oram中的敏感数据结构执行混淆数据操作来保护数据的访问模式,进而抵御tee存在的侧信道攻击。附图说明[0058]图1是本发明提供的一种适用于tee混淆计算的oram访问方法的流程框图。[0059]图2是本发明提供的一种适用于tee混淆计算的oram访问方法中oramtree数据块填充的流程框图。[0060]图3是本发明提供的一种适用于tee混淆计算的oram访问方法中数据块请求的流程框图。[0061]图4是本发明提供的一种适用于tee混淆计算的oram访问方法中数据块执行的流程框图。[0062]图5是本发明提供的一种适用于tee混淆计算的oram访问方法中数据块写回的流程框图。[0063]注:图1-图5中灰色部分为基于数据混淆操作实现的相关执行过程,因此灰色部分的执行不会泄露数据的访问模式。具体实施方式[0064]为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本技术的实施例及实施例中的特征可以相互组合。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。[0065]本发明提供一种适用于tee混淆计算的oram访问方法,是一种新型的oram访问方法,该方法能够隐藏tee中程序执行的访问模式,实现程序的混淆计算。该方法利用tee提供的安全保障优化了oram访存操作,并使用混淆数据操作隐藏oram访问过程中的敏感数据结构,从而有效隐藏其访问模式。[0066]本发明提供的方法包含五个阶段,分别为oramtree数据块填充阶段、oramtree数据块请求阶段、oramtree数据块执行阶段、元数据扫描阶段、oramtree数据块写回阶段。具体包含如下步骤:[0067]a.oramtree数据块填充阶段只在oramtree初始化的过程中执行一次。在该阶段,oramcontroller负责将数据块填充进oramtree,并使用混淆数据操作更新addresstranslationtable和positionmap中与数据块对应的表项。具体执行步骤如下:[0068]a1.对于一个需要被填充进oramtree的数据块,oramcontroller首先为其随机一个叶子结点leaf;[0069]a2.oramcontroller将数据块填充到leaf对应路径的结点中,以叶子结点至根结点的顺序,寻找结点中的空位,并存放数据块。[0070]a3.根据数据块被存放的位置,oramcontroller将数据块虚拟地址与物理地址的对应关系更新至addresstranslationtable。为了隐藏表项与数据块的对应关系,addresstranslationtable更新基于混淆数据操作。具体为:oramcontroller对addresstranslationtable中的每一表项进行赋值操作,并通过控制混淆数据操作中条件的值,来决定操作是否为真实的赋值操作。在每一次addresstranslationtable更新中,oramcontroller需要完成对所有表项的混淆赋值操作,其中只有一次赋值是真实的。外部只能观察到oramcontroller对每一表项执行了相同的访问操作,但无法确定对哪一个表项执行了真实的赋值操作。[0071]a4.根据数据块被存放的位置与随机的叶子结点leaf,oramcontroller将数据块与的叶子结点的关系更新至positionmap。该操作同样基于混淆数据操作,其具体操作与a3中类似。[0072]a5.重复执行a1-a4的操作,直至完成对所有数据块的填充。[0073]b.在oramtree数据块读取阶段,oramcontroller通过查询addresstranslationtable和positionmap将源程序请求的数据块地址转换为数据块对应的叶子结点标签,并通过访问与该叶子结点对应的路径获取目标数据块。具体执行如下操作:[0074]b1.源程序向oramcontroller发送数据块请求q1=(operation,address,type)。其中,operation表示该请求需要进行的操作(如,读操作或写操作),address表示目标数据块的虚拟地址,type表示数据块的类型(如,代码块或数据块);[0075]b2.oramcontroller首先对q1请求进行权限检查。其中,type值为data时,可以执行读操作与写操作,type为代码块的请求只能进行读操作,即operation=write,且type=code时,拒绝请求。[0076]b3.oramcontroller使用混淆数据操作访问addresstranslationtable,获取q1中的虚拟地址对应的物理地址。具体来说,oramcontroller比较q1中的数据块虚拟地址与addresstranslationtable中的每一表项的虚拟地址,通过比较的结果,来决定是否执行真实的取值操作来获取对应的物理地址。当oramcontroller完成对所有表项的混淆数据操作后,只有与q1中虚拟地址相同的表项中的值才被真实的取出,而外部只能观察到oramcontroller对每一表项执行了相同的访问操作,无法确定oramcontroller对哪一个表项执行了真实的取值操作。[0077]b4.oramcontroller使用混淆数据操作查询positionmap,其具体操作与b3中类似,根据目标数据块的物理地址获取对应的leaf标签。[0078]b5.oramcontroller使用混淆数据操作查询获取到的leaf标签对应的oramtree路径path1,并取出目标数据块,存于pad中。其具体操作与b3中类似。[0079]c.在oramtree数据块执行阶段,源程序首先对pad中数据块执行数据处理操作。完成操作后,向oramcontroller发起下一次数据块请求。具体执行如下操作:[0080]c1.源程序对pad中的数据块执行数据处理操作。由于pad在内存中的位置固定,源程序的数据访问模式将一直显示为固定位置,因此可以有效的隐藏数据的访问模式;[0081]c2.源程序完成当前数据操作后,oramcontroller向发送下一个数据块请求q2=(operation,address,type);[0082]d.在元数据扫描阶段,oramcontroller收到q2后,首先需要将当前pad中的数据块写回oramtree。为了将pad中的数据块顺利写回oramtree,oramcontroller进行两次元数据扫描,具体执行如下操作:[0083]d1.oramcontroller首先为该数据块随机一个新的叶子结点标签;[0084]d2.oramcontroller将pad与path1路径上的数据块结合为一条新的路径path2,其中:将pad中的数据块置于根结点之上作为新的根结点,即路径path2自上至下为pad数据块结点至叶子结点,并对path2进行第一次元数据扫描操作。第一次元数据扫描操作步骤为:[0085]d2.1创建一个临时数组temp[i],i∈[1,logn],用于记录第一次扫描得到的结果;[0086]d2.2自根结点向叶子结点扫描path2中每个结点nj(j∈[0,logn],其中n0为pad数据块代表的结点)中的数据块,并记录该数据块能放至该路径最深的层级li。为了便于理解,这里假设扫描中的结点中只包含一个数据块,即z=1。进一步地,当z》1时,只需记录该结点中数据块能放至最深的层级即可。[0087]d2.3当扫描至结点nj中数据块能放置的最深层级li时,则在该层对应的temp数组中记录nj的层级lj,即令temp[i]=lj;此时,第一次元数据扫描完成。[0088]d3.oramcontroller对路径path2进行第二次元数据扫描。其步骤为:[0089]自叶子结点向根结点扫描path2中每个结点nj,j∈[0,logn],其中n0为pad数据块代表的结点。基于d2中得出的元数据数组temp[i]计算每个结点中的数据能够放至的最深的层级,并将结果记录至元数据数组deepest[i]中。deepest[i]=lj表示结点ni中的数据块最深能放至lj层,第二次数据扫描完成。[0090]e.在oramtree数据块写回阶段,oramcontroller将pad中的数据块写回路径path1,并更新数据块对应的positionmap表项中的信息。具体执行如下操作:[0091]e1.oramcontroller对路径path2自根结点向叶子结点执行数据块写回操作。[0092]在写回过程中的具体操作为:[0093]e1.1oramcontroller首先取出根结点中的数据块b(即,pad中的数据块),并基于元数据扫描结果deepest[i]自根结点向叶子结点检索。[0094]e1.2当检索到b能够放置的最深层级时,将数据块b放至该层的结点中。或者,在检索到具有更深放置位置的数据块b1时,将b放置该层,并将b1取出。如果未出现上述两种情况,oramcontroller仍然会执行虚假的数据放置操作(基于数据混淆操作实现),以隐藏数据的访问模式。[0095]e1.3数据块被放置后,oramcontroller将在pmupdatequeue中记录该数据块需要在positionmap中更新的内容(如,数据块的新物理地址等信息),为positionmap的最终更新做准备。[0096]e1.4oramcontroller重复上述操作,直至整条路径检索完毕,数据块的写回操作完成。[0097]需要注意的是,对于路径path2的数据写回操作与pmupdatequeue的记录操作也使用数据混淆操作来隐藏数据块的访问模式,因此不会泄露敏感信息。[0098]e2.oramcontroller基于pmupdatequeue完成对positionmap的更新。使用positionmap更新队列是为了将positionmap的更新操作延后到数据写回操作之后,减少使用数据混淆操作更新positionmap的次数,从而提高了效率。[0099]e3.此时,oramtree数据块写回阶段结束,oramcontroller将根据请求q2进行下一轮的数据读取操作。[0100]下面通过实例对本发明做进一步说明:[0101]对于一个oramtree,假设其结点数为15,每个结点中包含1个数据块,且真实数据块数为8(分别为b1,b2,…,b8),则oramtree的深度为4,addresstranslationtable与positionmap的数组大小都为8(分别表示为att[n],pm[m],其中n∈[1,8],m∈[1,8])。更为具体地,att[n]=(v-add,p-add),其中v-add表示数据块的虚拟地址,p-add表示数据块对应的物理地址。pm[m]=(p-add,leaf),其中leaf表示数据块对应在oramtree上的路径。假设pmupdatequeue的队列大小固定为3,且现有一个来自源程序的数据请求q=(write,v-add,data)。本发明的工作包括五个阶段,如图1所示,分别为oramtree数据块填充阶段、oramtree数据块请求阶段、oramtree数据块执行阶段、元数据扫描阶段、oramtree数据块写回阶段。[0102]图2是oramtree数据块填充的流程图。根据图2所示流程,oramcontroller接受新的数据块b1,并为其随机一个叶子结点leafb1作为填充路径。进行填充时,oramcontroller从leafb1开始向根结点执行检查,遇到空结点则将b1放置其中。之后,oramcontroller根据b1当前的物理地址和路径信息,更新att[n]与pm[m]中内容。此时,att[n]与pm[m]为两个空的数组,但是为了保证安全性更新过程需要基于数据混淆操作遍历上述数组的所有元素,并各随机选择一个空的元素填充b1的地址和路径信息。b2,…,b8的填充操作与b1相同。[0103]图3是oramtree数据块请求的流程图。根据图3所示流程,oramcontroller首先接收到源程序发送的数据块请求q=(write,v-add,data),并对该请求进行检查(如,对代码块的写操作将会被拒绝)。通过检查后,oramcontroller首先访问att[n],将q中的add与att[n]中元素的v-add进行对比,将成功匹配的元素中的p-add提取出来。这里对att[n]的访问操作也是基于数据混淆操作实现的,因此外部并不知晓att[n]的那个元素被读取了。然后,oramcontroller访问pm[m],将提取出来的p-add与pm[m]中元素的p-add进行对比,将成功匹配的元素中的leaf提取出来。同样,该过程也使用数据混淆操作实现。上述过程实现了数据块的虚拟地址到oramtree中路径的转换。获取到leaf后,oramcontroller使用混淆数据操作检索leaf路径上的所有结点,从而获取目标数据块。最后,oramcontroller将数据块提取至pad中。[0104]图4是数据块执行的流程图。oramcontroller将数据块提取至pad后,将会给源程序反馈。获得反馈后,源程序将对pad中的数据块执行相应的写操作。之后,源程序将向oramcontroller发送下一个数据块请求。[0105]图5是oramtree数据块写回的流程图。根据图5所示流程,在进行下一次数据块访问之前,oramcontroller需要完成对现存pad中数据块的写回操作。首先,oramcontroller为pad中的数据块随机一个叶子结点作为其新路径。之后,oramcontroller需要完成对源路径的两次元数据扫描。oramcontroller将pad的数据块作为leaf路径上新的根结点,即位于原根结点之上。第一次元数据扫描,将自根结点向叶子结点扫描该路径上的每个结点nx(x∈[0,4])中的数据块,计算该数据块能放至该路径最深的层级,并记录在一个临时数组temp[t](t∈[0,4])中。第二次元数据扫描,将自叶子结点向根结点扫描路径中每个结点nx,并基于temp[t]计算每个结点中的数据能够放至的最深的层级,并将结果记录至元数据数组deepest[y](y∈[1,4])。此时,deepest[y]=l表示结点ny中的数据块最深能放至l层。完成两次元数据扫描后,oramcontroller将完成最终的写回过程。oramcontroller将pad中的数据块b取出,并自路径的根结点向叶子结点进行检索。当检索到b能够放置的最深层级时,将数据块b放至该层的结点中。或者,当前结点中存在数据块具有比b更深的放置位置时,将b放至该结点,并将该结点的数据块取出。需要注意的是,即使未出现上述两种情况,oramcontroller仍然会执行虚假的数据放置操作(基于数据混淆操作实现),以隐藏数据的访问模式。数据块被放置后,oramcontroller将在pmupdatequeue中记录该数据块需要在positionmap中更新的内容(如,数据块的新物理地址等信息),为positionmap的最终更新做准备。之后,oramcontroller重复上述操作,直至整条路径检索完毕。最终,oramcontroller基于pmupdatequeue完成对positionmap的更新。完成上述写回操作后,oramcontroller将继续执行下一轮的数据请求。[0106]显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改,等同替换和改进等,均应包含在本发明权利要求的保护范围之内。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献