CN112651054B - 一种内存数据完整性保护方法、装置及电子设备 - Google Patents
一种内存数据完整性保护方法、装置及电子设备 Download PDFInfo
- Publication number
- CN112651054B CN112651054B CN202011643495.1A CN202011643495A CN112651054B CN 112651054 B CN112651054 B CN 112651054B CN 202011643495 A CN202011643495 A CN 202011643495A CN 112651054 B CN112651054 B CN 112651054B
- Authority
- CN
- China
- Prior art keywords
- node
- check
- data
- counter
- local
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本申请实施例公开一种内存数据完整性保护方法、装置及电子设备,涉及内存数据保护技术领域,能够有效地对内存中的数据进行完整性保护。所述内存数据完整性保护方法,包括:把待写入数据分割成数据块;根据数据块的写入地址确定所述写入地址所对应的存储单元;根据所述存储单元以及预先建立的校验树,确定校验路径;从所述校验树的根节点开始,沿所述校验路径,依次对各节点进行校验;在依次对所述校验路径上的各节点校验通过后,对所述数据块进行数据校验,若校验通过,则将所述数据块写入所述存储单元;基于所述数据块在所述存储单元中的写入,更新所述校验树。本申请实施例适用于内存数据的完整性保护。
Description
技术领域
本发明涉及内存数据保护技术领域,尤其涉及一种内存数据完整性保护方法、装置及电子设备。
背景技术
研究表明,攻击者可以读取或修改内存中的数据。为了保护内存中数据的机密性、完整性,并防御重放攻击,提出了内存加密引擎(MEE,Memory Encryption Engine),并给出了相应的扩展指令集SGX。通常情况下,CPU需要的数据是由内存控制器(MC,MemoryController)来操作,但涉及到被保护数据时,就需要由MEE来控制。
当数据写入内存前,MEE中的加密模块会把数据加密;当加密数据从内存中读出时,MEE中的解密模块会把数据解密,然后送到缓存,供CPU核使用。即便内存中的数据是密文存储,但有可能被修改或替换,为此需要对内存数据进行完整性保护。
发明内容
有鉴于此,本发明实施例提供一种内存数据完整性保护方法、装置及电子设备,能够有效地对内存中的数据进行完整性保护。
第一方面,本发明实施例提供一种内存数据完整性保护方法,包括:把待写入数据分割成数据块;根据一数据块的写入地址,确定所述写入地址所对应的存储单元;其中,所述数据块为所述待写入数据分割后形成的两个以上的数据块中的其中一个数据块,所述存储单元位于内存中的数据保护存储区,所述数据保护存储区中的每个存储单元分配有一局部计数器,每N个局部计数器分配有一全局计数器;N为大于等于2的自然数;根据所述存储单元以及预先建立的校验树,确定校验路径;其中,所述校验树的每个节点具有一全局计数器和N个局部计数器,每个节点与上一层节点中的一局部计数器相对应,每个末节点的N个局部计数器与所述数据保护存储区中的N个存储单元一一对应;从所述校验树的根节点开始,沿所述校验路径,依次对各节点进行校验;在依次对所述校验路径上的各节点校验通过后,对所述数据块进行数据校验,若校验通过,则将所述数据块写入所述存储单元;基于所述数据块在所述存储单元中的写入,更新所述校验树。
根据本发明实施例中的一具体实现方式,所述从所述校验树的根节点开始,沿所述校验路径,依次对各节点进行校验,包括:从所述校验树的根节点开始,沿一条校验路径,依次对各节点进行校验;所述从所述校验树的根节点开始,沿一条校验路径,依次对各节点进行校验,包括:获取第i个节点的全局计数器和第j个局部计数器的值,结合第i-1个节点的全局计数器和各局部计数器的值,计算一节点校验值,将计算的节点校验值与第i-1个节点中存储的节点校验值进行比较,若二者一致,则对第i-1个节点校验成功;其中,所述第i个节点和第i-1个节点为所述校验路径上两个相邻的节点,所述第i-1个节点与所述第i个节点的第j个局部计数器相对应;其中,2≤i≤M,1≤j≤N,M为校验树的最大层数。
根据本发明实施例中的一具体实现方式,所述对所述数据块进行数据校验,包括:获取至少两个存储单元所存储的数据,结合该至少两个存储单元所对应的局部计数器和全局计数器的值,计算出一数据校验值;其中,所述至少两个存储单元包括所述写入地址所对应的存储单元;将计算出的所述数据校验值,与预先存储的数据校验值进行比较;其中,所述预先存储的数据校验值,预先根据所述至少两个存储单元所存储的数据,结合所述至少两个存储单元所对应的局部计数器和全局计数器的值计算得出;若计算出的所述数据校验值与所述预先存储的数据校验值一致,则对所述数据块的数据校验通过。
根据本发明实施例中的一具体实现方式,在将所述数据块写入所述存储单元之后,所述方法还包括:获取所述至少两个存储单元所存储的数据块,结合所述至少两个存储单元所对应的局部计数器和全局计数器的值,计算出一新的数据校验值;利用所述新的数据校验值,更新所述预先存储的数据校验值。
根据本发明实施例中的一具体实现方式,所述基于所述数据块在所述存储单元中的写入,更新所述校验树,包括:将第i个节点的第j个局部计数器的值加上第一预定值,并将第i+1个节点中的第k个局部计数器的值加上第二预定值;其中,所述第i个节点与所述第i+1个节点中的第k个局部计数器相对应;其中,1≤i≤M-1,1≤j≤N,1≤k≤N,M为校验树的最大层数;将所述第i+1个节点的全局计数器及所述第k个局部计数器的值,结合所述第i个节点的全局计数器和各局部计数器的值,计算一新的节点校验值,利用计算的所述新的节点校验值更新所述第i个节点的节点校验值。
根据本发明实施例中的一具体实现方式,所述基于所述数据块在所述存储单元中的写入,更新所述校验树,包括:判断所述校验路径上的第i个节点中,非零局部计数器的个数是否小于或等于预定阈值;其中,所述第i个节点为当前要更新的节点;其中,1≤i≤M,M为校验树的最大层数;若所述第i个节点中,非零局部计数器的个数小于或等于预定阈值,则确定以第一存储模式存储第i个节点;在第一存储模式下,值为0的局部计算器的计数位以压缩后的比特位表示;判断所述第i个节点中的第j个局部计数器加1后是否会溢出;所述第j个局部计数器为所述第i个节点中当前要更新的局部计数器;其中,1≤j≤N;若所述第j个局部计数器加1后会溢出,则将所述第i个节点的全局计数器的计数值加上第三预定值,同时,将所述第i个节点的各局部计数器的计数值置零。
根据本发明实施例中的一具体实现方式,在第一存储模式下,值为0的局部计算器的计数位以压缩后的比特位表示后,值为0的局部计算器的其它计数位供非零局部计数器计数使用。
根据本发明实施例中的一具体实现方式,若第i个节点中非零局部计数器的个数大于预定阈值,则确定以第二存储模式存储第i个节点;判断所述第j个局部计数器,加1后是否会溢出;若所述第j个局部计数器加1后会溢出,且所述第i个节点中的局部计数器的最小计数值不为0,则将所述第i个节点中的各局部计数器减去第四预定值后,再将所述第j个局部计数器加1;其中,所述第四预定值大于或等于所述第i个节点中的局部计数器的最小计数值。
根据本发明实施例中的一具体实现方式,所述基于所述数据块在所述存储单元中的写入,更新所述校验树,包括:判断所述校验路径上的第i个节点中的第j个局部计数器,加1后是否会溢出;所述第j个局部计数器为所述第i个节点中当前要更新的局部计数器;其中,1≤i≤M,1≤j≤N,M为校验树的最大层数;若所述第j个局部计数器加1后会溢出,且所述第i个节点中的局部计数器的最小计数值不为0,则将所述第i个节点中的各局部计数器减去第四预定值后,再将所述非零局部计数器加1;其中,所述第四预定值大于或等于所述第i个节点中的局部计数器的最小计数值。
根据本发明实施例中的一具体实现方式,各节点的全局计数器包括一级全局计数器和二级全局计数器;若所述第j个局部计数器加1后会溢出,且所述第i个节点中的局部计数器的最小计数值为0,则将所述第i个节点的全局计数器中的二级全局计数器,加上第五预定值后,将所述第i个节点的各局部计数器的计数值置零。
第二方面,本发明实施例提供一种内存数据完整性保护装置,包括:数据分割模块,用于把待写入数据分割成数据块;存储单元确定模块,用于根据数据块的写入地址,确定所述写入地址所对应的存储单元;其中,所述数据块为所述待写入数据分割后形成的两个以上的数据块中的其中一个数据块,所述存储单元位于内存中的数据保护存储区,所述数据保护存储区中的每个存储单元分配有一局部计数器,每N个局部计数器分配有一全局计数器;N为大于等于2的自然数;校验路径确定模块,用于根据所述存储单元以及预先建立的校验树,确定校验路径;其中,所述校验树的每个节点具有一全局计数器和N个局部计数器,每个节点与上一层节点中的一局部计数器相对应,每个末节点的N个局部计数器与所述数据保护存储区中的N个存储单元一一对应;第一校验模块,用于从所述校验树的根节点开始,沿所述校验路径,依次对各节点进行校验;第二校验模块,用于在所述第一校验模块依次对所述校验路径上的各节点校验通过后,对所述数据块进行数据校验;数据写入模块,用于所述第二校验模块对所述数据块进行数据校验通过后,将所述数据块写入所述存储单元;校验树更新模块,用于基于所述数据块在所述存储单元中的写入,更新所述校验树。
根据本发明实施例中的一具体实现方式,所述第一校验模块,具体用于:获取第i个节点的全局计数器和第j个局部计数器的值,结合第i-1个节点的全局计数器和各局部计数器的值,计算一节点校验值,将计算的节点校验值与第i-1个节点中存储的节点校验值进行比较,若二者一致,则对第i-1个节点校验成功;其中,所述第i个节点和第i-1个节点为所述校验路径上两个相邻的节点,所述第i-1个节点与所述第i个节点的第j个局部计数器相对应;;其中,2≤i≤M,1≤j≤N,M为校验树的最大层数。
根据本发明实施例中的一具体实现方式,所述第二校验模块,具体用于:获取至少两个存储单元所存储的数据,结合该至少两个存储单元所对应的局部计数器和全局计数器的值,计算出一数据校验值;其中,所述至少两个存储单元包括所述写入地址所对应的存储单元;将计算出的所述数据校验值,与预先存储的数据校验值进行比较;其中,所述预先存储的数据校验值,预先根据所述至少两个存储单元所存储的数据块,结合所述至少两个存储单元所对应的局部计数器和全局计数器的值计算得出;若计算出的所述数据校验值与所述预先存储的数据校验值一致,则对所述数据块的数据校验通过。
根据本发明实施例中的一具体实现方式,所述校验树更新模块,还用于:在所述数据块写入模块将所述数据写入所述存储单元之后,获取所述至少两个存储单元所存储的数据块,结合所述至少两个存储单元所对应的局部计数器和全局计数器的值,计算出一新的数据校验值;利用所述新的数据校验值,更新所述预先存储的数据校验值。
根据本发明实施例中的一具体实现方式,所述校验树更新模块,包括:第一更新子模块,用于将第i个节点的第j个局部计数器的值加上第一预定值,并将第i+1个节点中的第k个局部计数器的值加上第二预定值;其中,所述第i个节点与所述第i+1个节点中的第k个局部计数器相对应;其中,1≤i≤M-1,1≤j≤N,1≤k≤N,M为校验树的最大层数;第二更新子模块,用于将所述第i+1个节点的全局计数器及所述第k个局部计数器的值,结合所述第i个节点的全局计数器和各局部计数器的值,计算一新的节点校验值,利用计算的所述新的节点校验值更新所述第i个节点的节点校验值。
根据本发明实施例中的一具体实现方式,所述校验树更新模块,包括:第一判断子模块,用于判断所述校验路径上的第i个节点中,非零局部计数器的个数是否小于或等于预定阈值;其中,所述第i个节点为当前要更新的节点;其中,1≤i≤M,M为校验树的最大层数;存储模式确定子模式,用于若所述第i个节点中,非零局部计数器的个数小于或等于预定阈值,则确定以第一存储模式存储第i个节点;在第一存储模式下,值为0的局部计算器的计数位以压缩后的比特位表示;第二判断子模块,用于判断所述第i个节点中的第j个局部计数器加1后是否会溢出;所述第j个局部计数器为所述第i个节点中当前要更新的局部计数器;其中,1≤j≤N;第三更新子模块,用于若所述第j个局部计数器加1后会溢出,则将所述第i个节点的全局计数器的计数值加上第三预定值,同时,将所述第i个节点的各局部计数器的计数值置零。
根据本发明实施例中的一具体实现方式,在第一存储模式下,值为0的局部计算器的计数位以压缩后的比特位表示后,值为0的局部计算器的其它计数位供非零局部计数器计数使用。
根据本发明实施例中的一具体实现方式,存储模式确定子模式,还用于若第i个节点中非零局部计数器的个数大于预定阈值,则确定以第二存储模式存储第i个节点;所述第二判断子模块,还用于判断所述第j个局部计数器,加1后是否会溢出;所述第三更新子模块,还用于若所述第j个局部计数器加1后会溢出,且所述第i个节点中的局部计数器的最小计数值不为0,则将所述第i个节点中的各局部计数器减去第四预定值后,再将所述第j个局部计数器加1;其中,所述第四预定值大于或等于所述第i个节点中的局部计数器的最小计数值。
根据本发明实施例中的一具体实现方式,所述校验树更新模块,包括:第三判断子模块,用于判断所述校验路径上的第i个节点中的第j个局部计数器,加1后是否会溢出;所述第j个局部计数器为所述第i个节点中当前要更新的局部计数器;其中,1≤i≤M,1≤j≤N,M为校验树的最大层数;第四更新子模块,用于若所述第j个局部计数器加1后会溢出,且所述第i个节点中的局部计数器的最小计数值不为0,则将所述第i个节点中的各局部计数器减去第四预定值后,再将所述非零局部计数器加1;其中,所述第四预定值大于或等于所述第i个节点中的局部计数器的最小计数值。
根据本发明实施例中的一具体实现方式,各节点的全局计数器包括一级全局计数器和二级全局计数器;所述校验树更新模块,还包括第五更新子模块,用于若所述第j个局部计数器加1后会溢出,且所述第i个节点中的局部计数器的最小计数值为0,则将所述第i个节点的全局计数器中的二级全局计数器,加上第五预定值后,将所述第i个节点的各局部计数器的计数值置零。
第三方面,本发明实施例提供一种电子设备,所述电子设备包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一实现方式所述的方法。
第四方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述任一实现方式所述的方法。
本申请实施例中,在需要将数据写入内存的数据保护区时,可先把待写入数据分割成数据块,根据其中的一数据块的写入地址,确定所述写入地址所对应的存储单元后,从校验树的根节点开始,沿校验路径,依次对各节点进行校验;在依次对所述校验路径上的各节点校验通过后,再对所述数据块进行数据校验,若校验通过,则将所述数据块写入所述存储单元,并基于所述数据块在所述存储单元中的写入,更新校验树。通过将校验路径上的各节点校验,与待写入的数据块的数据校验相结合,可更有效地对内存中的数据进行完整性保护。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本申请一实施例内存数据的完整性保护方法;
图2为本申请一实施例中更新校验树的流程示意图;
图3为本申请另一实施例中更新校验树的流程示意图;
图4为本申请又一实施例中更新校验树的流程示意图;
图5为本申请一实施例中构建的校验树结构示意图;
图6为本申请一实施例中节点的零值压缩存储模式示意图;
图7为本申请一实施例中节点的局部计数器复位存储模式示意图;
图8为本申请一实施例内存数据完整性保护装置的方框示意图;
图9为本申请一实施例中校验树更新模块的方框示意图;
图10为本申请另一实施例中校验树更新模块的方框示意图;
图11为本申请一实施例电子设备结构示意图。
具体实施方式
下面结合附图对本发明实施例进行详细描述。应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
通常情况下,CPU需要的数据是由内存控制器MC来操作,但涉及到被保护数据时,就需要由内存加密引擎MEE来控制。当数据写入内存前,MEE中的加密模块会把数据加密;当加密数据从内存中读出时,MEE中的解密模块会把数据解密,然后送到缓存,供CPU核使用。即便内存中的数据是密文存储,但有可能被修改或替换,为此需要使用密码技术对内存数据进行完整性保护。为了防御重放攻击,MEE需要再构建完整性保护树,而且把树根中的数据放在芯片内的安全存储空间中,这个安全存储空间只能由MEE访问。除了根节点,完整性保护树的其它部分也存储在内存中。
图1为本申请一实施例内存数据的完整性保护方法,参看图1,本申请实施例内存数据的完整性保护方法,包括步骤:
S100、把待写入数据分割成数据块。
每个数据块的大小可等于缓存行的大小,以便内存控制器将数据块从内存读出并写到缓存中时,可与缓存行的大小相适应。
S102、根据一数据块的写入地址,确定所述写入地址所对应的第一存储单元。
所述数据块为待写入数据分割后形成的两个以上的数据块中的其中一个数据块。存储单元为内存中的一最小存储单位。存储单元中存储的数据可称为数据块。可根据所述数据块写入指令中的地址信息确定所述数据块要写入的存储单元。所述数据块可为经过内存控制器加密后的数据块。
所述存储单元位于内存中的数据保护存储区,数据保护存储区中的每个存储单元分配有一局部计数器,每N个局部计数器分配有一全局计数器。每个存储单元可存储一数据块,因此,为每个存储单元分配一局部计数器,相当于为每个存储单元存储的数据块分配一局部计数器。
N为大于等于2的自然数。在一个例子中,N为32,在另一个例子中,N为64,在又一个例子中,N为128。N值越大,构建的校验树的层数相对越少,校验树中节点的总数量也就相对较少,使得整个校验树的所有节点所占用的存储空间就相对较少,可有效减少完整性保护树的存储空间消耗。
S104、根据所述存储单元以及预先建立的校验树,确定校验路径。
校验树的根节点可存储在安全存储空间内,该安全存储空间只能由内存加密引擎(MEE)访问。校验树的各节点可存储在内存的校验树存储区中。校验树的每个节点具有一全局计数器和N个局部计数器,每个节点与上一层节点中的一局部计数器相对应,每个末节点的N个局部计数器与数据保护存储区中的N个存储单元一一对应,其中,末节点为校验树中距离根节点最远的节点。
确定所述存储单元之后,可自所述存储单元所对应的末节点开始,至校验树的根节点,确定出一校验路径。
S106、从校验树的根节点开始,沿校验路径,依次对各节点进行校验。
各节点存储有一唯一的节点校验值(以下称为MAC值,MAC全称是MessageAuthentication Codes,中文含义为消息验证码)。在对各节点进行校验时,从根节点开始,沿校验路径,计算各节点的MAC值,将计算的各节点的MAC值与对应节点所存储的MAC值进行比较,若二者一致,则对应的节点校验通过后,执行步骤S108。
S108、对所述数据块进行数据校验。若校验通过,则执行步骤S110。
S110、将所述数据块写入所述存储单元。
本实施例中,将所述数据块写入所述存储单元,即为对所述存储单元中存储的数据块进行更新。在初始化后,在首次向所述存储单元写入数据块时,可默认允许写入,不进行数据块的校验。当再次向所述存储单元写入数据块时,需要进行数据块校验。
S112、基于所述数据块在所述存储单元中的写入,更新校验树。
本实施例中,在需要将数据写入内存的数据保护区时,可先把待写入数据分割成数据块,根据其中的一数据块的写入地址,确定所述写入地址所对应的存储单元后,从校验树的根节点开始,沿校验路径,依次对各节点进行校验;在依次对所述校验路径上的各节点校验通过后,再对所述数据块进行数据校验,若校验通过,则将所述数据块写入所述存储单元,并基于所述数据块在所述存储单元中的写入,更新校验树。通过将校验路径上的各节点校验,与待写入的数据块的数据校验相结合,可更有效地对内存中的数据进行完整性保护。
此外,本实施例中,当需要有新的输入写入内存中时,需要通过校验树层层校验,并且校验树的根节点存储在只能由内存加密引擎访问的安全存储空间内,这样可避免对内存中的数据进行恶意替换或修改,能够有效防止重放攻击。
在一个例子中,从校验树的根节点开始,沿校验路径,依次对各子节点节点进行校验(步骤S106),可包括:从所述校验树的根节点开始,沿一条校验路径,依次对各节点进行校验;所述从所述校验树的根节点开始,沿一条校验路径,依次对各节点进行校验,包括:
获取第i个节点的全局计数器和第j个局部计数器的值,结合第i-1个节点的全局计数器和各局部计数器的值,计算一MAC值,将计算的MAC值与第i-1个节点中存储的MAC值进行比较,若二者一致,则对第i-1个节点校验成功。
其中,第i个节点和第i-1个节点为校验路径上两个相邻的节点,第i-1个节点与第i个节点的第j个局部计数器相对应。其中,2≤i≤M,M为校验树的最大层数;1≤j≤N,N为一节点中局部计数器的总数量。
校验路径上从根节点到末节点,可包括多个节点,每个节点包括一个全局计数器和多个局部计数器,从根节点开始沿着一校验路径,依次对各个节点进行校验,每两个相邻的节点之间的校验过程如下:
获取校验路径中的第i个节点中的全局计数器和与第i-1个节点对应的局部计数器的值,再结合第i-1个节点中的全局计数器和所有局部计数器的值,能够计算得到一个MAC值,将该值与第i-1个节点中存储的MAC值进行比较,若二者一致,则对第i-1个节点校验成功。
具体参见图5,第i个节点对应的全局计数器为G1000,与第i-1个节点对应的局部计数器为N1000,获取G1000和N1000的值,再结合第i-1个节点中的全局计数器G0000和局部计数器N0000-N0127的值,即可得到一个的MAC值,将该值与第i-1个节点中存储的MAC值进行比较,若二者一致,则对第i-1个节点校验成功。
需要说明的是,第i个节点和第i-1个节点为校验路径上两个相邻的节点,且第i个节点更靠近根节点。
按照上述过程,可从根节点开始沿着一校验路径,依次对两个相邻的节点进行校验。
在一个例子中,对所述数据块进行数据校验(步骤S108),可包括:获取至少两个存储单元所存储的数据,结合该至少两个存储单元所对应的局部计数器和全局计数器的值,计算出一数据校验值(以下称为tag值,中文含义为标签值);其中,所述至少两个存储单元包括所述写入地址所对应的存储单元;将计算出的tag值,与预先存储的第一tag值进行比较;其中,第一tag值,预先根据至少两个存储单元所存储的数据块,结合至少两个存储单元所对应的局部计数器和全局计数器的值计算得出;若计算出的tag值与第一tag值一致,则对所述数据块的数据校验通过。
所述至少两个存储单元,可以是相邻的至少两个存储单元,也可以是不相邻的至少两个存储单元。
在一个例子中,可获取两个相邻存储单元所存储的数据块,结合该两个相邻存储单元所对应的局部计数器和全局计数器的值,计算出一tag值;其中,第一tag值,预先根据该两个相邻存储单元所存储的数据块,结合该两个相邻存储单元所对应的局部计数器和全局计数器的值计算得出。该两个相邻存储单元包括所述写入地址所对应的存储单元。
在另一个例子中,可获取包括所述写入地址所对应的存储单元的三个相邻存储单元所存储的数据,结合该三个相邻存储单元所对应的局部计数器和全局计数器的值,计算出一tag值;其中,第一tag值,预先根据该三个相邻存储单元所存储的数据块,结合该三个相邻存储单元所对应的局部计数器和全局计数器的值计算得出。
在其他的例子中,所述至少两个存储单元还可以是四个、五个、六个等。
获取至少两个存储单元所存储的数据块以计算出一tag值,相比采用单个存储单元所存储的数据块,计算tag值来讲,计数出的tag值的数量更少,相应的tag值所占用的存储空间更少,有利于减少对存储空间的占用,可有效减少完整性保护树的存储空间消耗,提高完整性保护树读取和更新的计算效率。
在一个例子中,在将所述数据块写入所述存储单元之后,所述方法还可包括:获取至少两个存储单元所存储的数据块,结合至少两个存储单元所对应的局部计数器和全局计数器的值,计算出一新的tag值;利用新的tag值,更新第一tag值,以供下次进行数据校验时使用。
参看图2,在一个例子中,基于所述数据块在所述存储单元中的写入,更新校验树(步骤S112),可包括:
S1121a、将第i个节点的第j个局部计数器的值加上第一预定值。其中,第i个节点与第i+1个节点中的第k个局部计数器相对应;其中,1≤i≤M-1,M为校验树的最大层数;1≤j≤N,1≤k≤N,N为一节点中局部计数器的总数量。
S1122a、将第i+1个节点中的第k个局部计数器的值加上第二预定值。
S1123a、将第i+1个节点的全局计数器及第k个局部计数器的值,结合第i个节点的全局计数器和各局部计数器的值,计算一新的MAC值。
S1124a、利用计算的新的MAC值更新第i个节点的MAC值。
在一个例子中,第一预定值和第二预定值分别为1,本申请实施例不限于此,第一预定值和第二预定值也可分别为2或3等。
本实施例中,各节点的局部计数器的位数均相同,比如均为3bit(比特),各节点的全局计数器的位数也均相同,比如均为57bit。
具体更新时,从末节点更新开始,逐次更新上一层节点,直至到根节点的更新。
本实施例中,若第i个节点的第j个局部计数器的值加上第一预定值(如加1)后溢出,则在将第i个节点的全局计数器加1后,将第i个节点的各局部计数器置零后,将第i+1个节点中的第k个局部计数器的值加上第二预定值,然后根据上述计算方式计算一新的MAC值,利用计算的新的MAC值更新第i个节点的MAC值。
图3为本申请另一实施例中更新校验树的流程示意图,参看图3,本实施例与图1所示实施例的方法基本相同,不同之处在于,本实施例中,对各节点的计数器的保存方式不同,具体地,本实施例中,基于所述数据块在所述存储单元中的写入,更新校验树(步骤S112),可包括:
S1121b、判断校验路径上的第i个节点中,非零局部计数器的个数是否小于或等于预定阈值;其中,1≤i≤M,M为校验树的最大层数。
其中,第i个节点为当前要更新的节点。若第i个节点中,非零局部计数器的个数小于或等于预定阈值(如32或64等),则执行步骤S1122b。
S1122b、确定以第一存储模式存储第i个节点。
第一存储模式下,也可称为零值压缩模式,或称为ZCC模式。在该存储模式下,值为0的局部计算器的计数位以压缩后的比特位表示。
在一个例子中,非零局部计算器的计数位为3bit(比特),值为0的局部计算器的计数位以1bit表示。值为0的局部计算器的计数位少于非零局部计算器的计数位,因此,值为0的局部计算器的计数位可称为以压缩后的比特位表示。
S1123b、判断第i个节点中的第j个局部计数器加1后是否会溢出;其中,1≤j≤N,N为一节点中局部计数器的总数量。
第j个局部计数器为第i个节点中当前要更新的局部计数器。若第j个局部计数器加1后会溢出,则执行步骤S1124b,否则执行步骤S1125b。
S1124b、将第i个节点的全局计数器的计数值加上第三预定值,同时,将第i个节点的各局部计数器的计数值置零。
S1125b、更新第i个节点的MAC值。
本实施例中,更新第i个节点的MAC值的方法,与图2所示实施例中更新第i个节点的MAC值的方法相似,在此不再赘述。
本实施例中,值为0的局部计算器的计数位可称为以压缩后的比特位表示,可减少值为0的局部计算器所占用的存储空间,从而可减少校验树所占用的存储空间。
进一步地,为减少非零局部计数器的溢出几率,相应提高校验树的更新效率,在其它实施例中,在第一存储模式下,值为0的局部计算器的计数位以压缩后的比特位表示后,值为0的局部计算器的其它计数位供非零局部计数器计数使用,这样可增大非零局部计数器的位数,减少非零局部计数器的溢出几率,可减少非零局部计数器溢出时,同一节点的其它局部计数器均被置零的情况发生,可相应提高校验树的更新效率。
本实施例中,若第i个节点中非零局部计数器的个数大于预定阈值(如32或64等),则执行步骤S1126b。
S1126b、以第二存储模式存储第i个节点。
第二存储模式,也可称为局部计数器复位模式,或称为MCR模式。在第二存储模式下,各节点的全局计数器可包括一级全局计数器和二级全局计数器,其中的二级全局计数器可为一个或多个。
S1127b、判断第j个局部计数器,加1后是否会溢出。
若第j个局部计数器加1后会溢出,且第i个节点中的局部计数器的最小计数值不为0,则执行步骤S1128b,否则执行步骤S1129b。
S1128b、将第i个节点中的各局部计数器减去第四预定值后,再将第j个局部计数器加1。
其中,第四预定值大于或等于第i个节点中的局部计数器的最小计数值。在一个例子中,第四预定值等于第i个节点中的局部计数器的最小计数值。
S1129b、更新第i个节点的MAC值。
本实施例中,更新第i个节点的MAC值的方法,与图2所示实施例中更新第i个节点的MAC值的方法相似,在此不再赘述。
本实施例中,若第j个局部计数器加1后会溢出,且第i个节点中的局部计数器的最小计数值不为0,则将第i个节点中的各局部计数器减去第四预定值后,再将第j个局部计数器加1,可有效减少局部计数器的溢出几率,减少局部计数器溢出时,同一节点的其它局部计数器均被置零的情况发生,可相应提高校验树的更新效率。
为便于记录第i个节点中的局部计数器减去的具体值,可在将第i个节点中的各局部计数器减去第四预定值后,将二级全局计数器加上第四预定值。
本实施例中,若第j个局部计数器加1后会溢出,且第i个节点中的局部计数器的最小计数值为0,则将第i个节点的全局计数器中的二级全局计数器,加上第五预定值(如加1)后,将第i个节点的各局部计数器的计数值置零。
图4为本申请又一实施例中更新校验树的流程示意图,参看图4,本实施例与图1所示实施例的方法基本相同,不同之处在于,本实施例中,对各节点的计数器的更新方式不同,具体地,本实施例中,基于所述数据块在所述存储单元中的写入,更新校验树(步骤S112),可包括:
S1121c、判断校验路径上的第i个节点中的第j个局部计数器,加1后是否会溢出。
第j个局部计数器为第i个节点中当前要更新的局部计数器,其中,1≤i≤M,1≤j≤N,M为校验树的最大层数;N为一节点中局部计数器的总数量。若第j个局部计数器加1后会溢出,且第i个节点中的局部计数器的最小计数值不为0,则执行步骤S1122c,否则执行步骤S1123c。
S1122c、将第i个节点中的各局部计数器减去第四预定值后,再将非零局部计数器加1。
其中,第四预定值大于或等于第i个节点中的局部计数器的最小计数值。在一个例子中,第四预定值等于第i个节点中的局部计数器的最小计数值。
S1123c、更新第i个节点的MAC值。
本实施例中,更新第i个节点的MAC值的方法,与图2所示实施例中更新第i个节点的MAC值的方法相似,在此不再赘述。
本实施例中,若第j个局部计数器加1后会溢出,且第i个节点中的局部计数器的最小计数值不为0,则将第i个节点中的各局部计数器减去第四预定值后,再将第j个局部计数器加1,可有效减少局部计数器的溢出几率,减少局部计数器溢出时,同一节点的其它局部计数器均被置零的情况发生,可相应提高校验树的更新效率。
本实施例中,各节点的全局计数器包括一级全局计数器和二级全局计数器,其中的二级全局计数器可为一个或多个。
为便于记录第i个节点中的局部计数器减去的具体值,可在将第i个节点中的各局部计数器减去第四预定值后,将二级全局计数器加上第四预定值。
本实施例中,若第j个局部计数器加1后会溢出,且第i个节点中的局部计数器的最小计数值为0,则将第i个节点的全局计数器中的二级全局计数器,加上第五预定值(如加1)后,将第i个节点的各局部计数器的计数值置零。
下面采用一个具体的实施例,对图1~图4中任一个所示方法实施例的技术方案进行详细说明。
本实施例中,假设要保护的内存数据为16G,可预先根据如下方式构建出一个4层(从0层到3层)的完整性保护树。图5中Dj就是内存中需要保护的数据块(其存储在对应的存储单元中)。应当理解的是,当保护的内存数据大小不同时,使用上述方法可以构建出不同层数的完整性保护树。
需要说明的是,图5中的第0层-第3层是采用计算机语言进行描述的,本实施例中的第0层可与本申请其它实施例的校验路径中的第1个节点相对应。
对于每一个Dj(相当于每一个存储单元)分配一个局部计数器Nij,每128个N0j分配一个全局计数器G0k,每两块加密数据Dj,Dj+1结合Nij,Ni(j+1)共同计算出一个Tag值,该Tag值就是数据的一个校验值。如果需要减少更多的内存消耗,可以每四块或每八块加密数据共同计算出一个Tag值。
接着为G0k和128个N0j分配一个局部计数器N1k和对应的全局计数器G1q,由G0k和128个N0j以及G1q,N1k计算出一个MAC值,该MAC值就是节点的一个校验值,这样就形成了校验树中一校验路径中的末节点,即第0层的一个节点。
对于第0层的每个节点,在第1层有一个局部计数器N1k与之对应,每128个N1k对应一个全局计数器G1q,然后为G1q和128个N1k分配N2q和G2h,然后计算出一个MAC值,这样就形成了校验树中一校验路径中的末节点的上层节点,即第1层的一个节点。
依此类推直到第3层根节点。根节点中的数据放在芯片内的安全存储空间中,这个安全存储空间只能由内存加密引擎(MEE)访问。
校验树可在系统开机完成内存初始化之后,根据内存的存储单元中存储的随机数来构建。具体构建过程与上述构建过程基本相同。在校验树构建完成之后,如有新的数据块写入内存的存储单元中时,则需要对根据已构建的校验树进行校验。
假设需要把新的加密数据块D1’写入G0127对应的D1内存(存储单元),则根据D1和图5所示校验树可确定出一校验路径,之后需要执行如下步骤:
S201、从根节点中读取G3000,N3000,并结合第2层中G2000,N2000,N2001,……,N2126,N2127,计算出一个新的MAC值,与第2层中存储的MAC值比较,如果不相等,则输出错误,并终止写入加密数据块D1’;
S202、从第2层中读取G2000,N2000,并结合第1层中G1000,N1000,N1001,……,N1126,N1127,计算出一个新的MAC值,与第1层中存储的MAC值比较,如果不相等,则输出错误,并终止写入加密数据块D1’;
S203、从第1层中读取G1000,N1127,并结合第0层中G0127,N0000,N0001,……,N0126,N0127,计算出一个新的MAC值,与第0层中存储的MAC值比较,如果不相等,则输出错误,并终止写入加密数据块D1’;
S204、从第0层中读取G0127,N0001,并结合数据块D1,计算出一个新的Tag1,并与内存中存储的Tag1比较,如果不相等,则输出错误,并终止写入加密数据块D1’;如相等,则执行步骤S205。
S205、更新加密数据块D1,并更新完整性校验树。
本步骤中,将加密数据块D1’写入G0127对应的D1内存,即用加密数据块D1’更新D1内存中已有的加密数据块D1。
图5中每一个节点有128个局部计数器Nij,每一个节点有两种存储模式:零值压缩(ZCC)模式(如图6)和局部计数器复位(MCR)模式(如图7)。当128个局部计数器中有64个以上为零时,这个节点就用ZCC模式表示;否则就用MCR模式。当使用ZCC模式时,针对一局部计数器Nij,其有效计数器是Gi+Nij;而使用MCR模式时,其有效计数器是(Gi||base)+Nij,其中Gi可称为一级全局计数器,base可称为二级全局计数器。这两种模式下,针对一局部计数器Nij的有效计数器的位数都大约是57比特。当有效计数器将溢出时,把这个节点重置成初始化状态,并更新整个完整性校验树。由于257是一个比较大的整数,一局部计数器Nij的有效计数器溢出的频率是比较低的。应当理解的是,全局计数器和MAC值的位数不限于图6和图7中所示的位数,在其它实施例中,可以使用其它位数的全局计数器和MAC值。
初始化后,首先使用的是ZCC模式。使用ZCC模式时,当局部计数器为0时,只在比特向量v中标识。非零局部计数器的长度CtrSZ随非零局部计数器的个数的变化而变化。当非零局部计数器的个数少于23时,非零局部计数器的长度CtrSZ=28-3,即非零局部计数器最大可以达到232-1;当非零局部计数器的个数大于23,小于24时,CtrSZ=28-4,即非零局部计数器最大可以达到216-1;以此类推,当非零局部计数器的个数大于25,小于26时,CtrSZ=28 -6,即非零局部计数器最大可以达到24-1。当局部计数器将要溢出时,全局计数器Gi=Gi+1,同时将这个全局计数器对应的128个局部计数器全部置为0,然后再更新这128个局部计数器对应节点的MAC值和/或Tag值。
如图6,使用ZCC模式时,全局计数器Gi和局部计数器Ni都初始化为0,非零局部计数器的长度CtrSZ赋值为0b111111;模式F置为0,比特向量V赋值为0b0。需要说明的是,在其它实施例中,局部计数器和全局计数器也可以初始化为某个整数,不一定必须是0。
每一次内存写操作,都会更新第0层节点相应的局部计数器,然后计算Tag值;接着更新第1层节点的局部计数器,更新方式就是局部计数器加1,再计算第0层节点的MAC值;继续更新第2层节点的局部计数器,再计算第1层节点的MAC值;依次类推,直至更新完根节点。由于根节点在安全存储空间中,可不需要MAC对它进行完整性保护。
随着写操作次数的增加,局部计数器的非零个数也不断增加。当非零局部计数器的个数等于64时,ZCC模式需要转换为MCR模式。
使用MCR模式时,当一局部计数器将大于23-1时(即将要溢出时),如果最小的局部计数器为0,则base=base+(largest Nij+1),largest Nij为局部计数器所在节点中局部计数器的最大计数值,同时将这个全局计数器对应的128个局部计数器全部置为0,然后再更新这128个局部计数器对应节点的MAC值和/或Tag值;如果最小的局部计数器不为0,则128个局部计数器减去最小局部计数器的值,同时base加上该最小局部计数器的值。然后可以看出,当最小的局部计数器不为0时,先将128个局部计数器减去最小局部计数器的值后,在将局部计数器加1,这样可以减少溢出的次数,而且减少更新节点MAC值或Tag值的次数。
当base将大于27-1时(即base将要溢出时),全局计数器Gi=Gi+2,base和该节点的128个局部计数器都置0,再更新该节点下属的128个节点的MAC值或Tag值,然后转换为ZCC模式。
在其它实施例中,base不限于一个,也可以有多个。
假设需要从内存中读取图5中加密数据块D0,需要执行如下步骤:
S301、从根节点中读取G3000,N3000,并结合第2层中G2000,N2000,N2001,……,N2126,N2127,计算出一个新的MAC值,与第2层中存储的MAC值比较,如果不相等,则输出错误,并终止读取加密数据块D0;
S302、从第2层中读取G2000,N2000,并结合第1层中G1000,N1000,N1001,……,N1126,N1127,计算出一个新的MAC值,与第1层中存储的MAC值比较,如果不相等,则输出错误,并终止读取加密数据块D0;
S303、从第1层中读取G1000,N1000,并结合第0层中G0000,N0000,N0001,……,N0126,N0127,计算出一个新的MAC值,与第0层中存储的MAC值比较,如果不相等,则输出错误,并终止读取加密数据块D0;
S304、从第0层中读取G0000,N0000,N0001,并结合数据块D0,D1,计算出一个新的Tag0,并与内存中存储的Tag0比较,如果不相等,则输出错误,并终止读取加密数据块D0;如果相等,则执行步骤S305。
S305、输出加密数据块D0。
下面举例说明Tag值和MAC值的计算。
(一)Tag值的计算
图5中第0层的Nij是叶节点(也可称为节点)的局部计数器,G0k的长度是64比特,作为所在叶节点的全局计数器,两者都初始化为0。把G0k,Nij,Ni(j+1)结合加密数据Dj,Dj+1,计算出Tagj,
其中,符合是异或,符号||是字符串连接,k1是512比特hash密钥,即k1=KHASH;k2是128比特MAC密钥,即k2=KMAC;x0是Dj在cache line中的地址,x0的比特长度为α0;而β0是G0t||Nij的比特长度;x1是Dj+1在cache line中的地址,x1的比特长度为α1;而β1是G0t||Ni(j+1)的比特长度;Truncate64截取字符串的最低64比特;符号代表有限域 的乘法。
(二)MAC值的计算
以第1层G1k所在节点为例,说明MAC值的计算。图5中第1层G1k是64比特,作为该节点的全局计数器,N1j是局部计数器,都初始化为0。这一层中的MAC值是通过以下方式计算:
其中,符合是异或,符号||是字符串连接,k1是512比特hash密钥,即k1=KHASH;k2是128比特MAC密钥,即k2=KMAC;x是G1k在cache line中的地址,x的比特长度为α;而β是G2000||N2k的比特长度;Truncate64截取字符串的最低64比特;符号代表有限域的乘法;GN表示长为512比特的G1k||N1000||…||N1127。
Tag值和MAC值不限于采用上述公式计算得出,在其它实施例中。也可以选用其它公式计算得出。
本实施例中,假设需要对16GB的内存进行完整性校验,使用图5的方案,将生成一棵4层的树,第0层中每个叶节点连接128个加密数据块,其它各层中每个节点连接128个节点。可以计算所有叶节点连接的数据块一共有128×128×128×128=228个,而每个数据块包含26B的数据,因此228×26=234B,即24GB。图5中Tagj将占用存储228×4=230B=1GB,意味着占比图5中第0层占用存储1283×64=227B;第1层占用1282×64=220B;第2层占用128×64=213B;第3层占用64=26B,因此整棵树存储占比 消耗的内存较少。
图8为本申请一实施例内存数据完整性保护装置的方框示意图,参看图8,本实施例一种内存数据完整性保护装置,包括:数据分割模块02、存储单元确定模块10、校验路径确定模块20、第一校验模块30、第二校验模块40、数据写入模块50以及校验树更新模块60。
其中,数据分割模块02,用于把待写入数据分割成数据块。
存储单元确定模块10,用于确定待写入数据的存储单元;其中,所述存储单元位于内存中的数据保护存储区,所述数据保护存储区中的每个存储单元分配有一局部计数器,每N个局部计数器分配有一全局计数器;N为大于等于2的自然数。
校验路径确定模块20,用于根据所述所述存储单元以及预先建立的校验树,确定校验路径;其中,所述校验树的每个节点具有一全局计数器和N个局部计数器,每个节点与上一层节点中的一局部计数器相对应,每个末节点的N个局部计数器与所述数据保护存储区中的N个存储单元一一对应。
第一校验模块30,用于从所述校验树的根节点开始,沿所述校验路径,依次对各节点进行校验。
第二校验模块40,用于在所述第一校验模块依次对所述校验路径上的各节点校验通过后,对所述数据块进行数据校验。
数据写入模块50,用于所述第二校验模块对所述数据块进行数据校验通过后,将所述数据写入所述存储单元。
校验树更新模块60,用于基于所述数据在所述存储单元中的写入,更新所述校验树。
本实施例的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
在一实施例中,所述第一校验模块30,具体用于:获取第i个节点的全局计数器和第j个局部计数器的值,结合第i-1个节点的全局计数器和各局部计数器的值,计算一节点校验值,将计算的节点校验值与第i-1个节点中存储的节点校验值进行比较,若二者一致,则对第i-1个节点校验成功;其中,所述第i个节点和第i-1个节点为所述校验路径上两个相邻的节点,所述第i-1个节点与所述第i个节点的第j个局部计数器相对应,其中,2≤i≤M,1≤j≤N,M为校验树的最大层数。
在一实施例中,所述第二校验模块40,具体用于:获取包括所述存储单元的至少两个存储单元所存储的数据,结合该至少两个存储单元所对应的局部计数器和全局计数器的值,计算出一数据校验值;将计算出的所述数据校验值,与预先存储的数据校验值进行比较;其中,所述预先存储的数据校验值,预先根据所述至少两个存储单元所存储的数据,结合所述至少两个存储单元所对应的局部计数器和全局计数器的值计算得出;若计算出的所述数据校验值与所述预先存储的数据校验值一致,则对所述数据块的数据校验通过。
在一实施例中,所述校验树更新模块60,还用于:在所述数据写入模块将所述数据写入所述存储单元之后,获取所述至少两个存储单元所存储的数据,结合所述至少两个存储单元所对应的局部计数器的值,计算出一新的数据校验值;利用所述新的数据校验值,更新所述预先存储的数据校验值。
图9为本申请一实施例中校验树更新模块的方框示意图,参看图9,所述校验树更新模块60,包括:第一更新子模块601和第二更新子模块602;其中,第一更新子模块601,用于将第i个节点的第j个局部计数器的值加上第一预定值,并将第i+1个节点中的第k个局部计数器的值加上第二预定值;其中,所述第i个节点与所述第i+1个节点中的第k个局部计数器相对应;其中,1≤i≤M-1,1≤j≤N,1≤k≤N,M为校验树的最大层数;第二更新子模块602,用于将所述第i+1个节点的全局计数器及所述第k个局部计数器的值,结合所述第i个节点的全局计数器和各局部计数器的值,计算一新的节点校验值,利用计算的所述新的节点校验值更新所述第i个节点的节点校验值。
本实施例的装置,可以用于执行图2所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图10为本申请另一实施例中校验树更新模块的方框示意图,参看图10,所述校验树更新模块60,包括:第一判断子模块603、存储模式确定子模式604、第二判断子模块605以及第三更新子模块606。
其中,第一判断子模块603,用于判断所述校验路径上的第i个节点中,非零局部计数器的个数是否小于或等于预定阈值;其中,所述第i个节点为当前要更新的节点,其中,1≤i≤M,M为校验树的最大层数。
存储模式确定子模式604,用于若所述第i个节点中,非零局部计数器的个数小于或等于预定阈值,则确定以第一存储模式存储第i个节点;在第一存储模式下,值为0的局部计算器的计数位以压缩后的比特位表示。
第二判断子模块605,用于判断所述第i个节点中的第j个局部计数器加1后是否会溢出;所述第j个局部计数器为所述第i个节点中当前要更新的局部计数器。
第三更新子模块606,用于若所述第j个局部计数器加1后会溢出,则将所述第i个节点的全局计数器的计数值加上第三预定值,同时,将所述第i个节点的各局部计数器的计数值置零。
在第一存储模式下,值为0的局部计算器的计数位以压缩后的比特位表示后,值为0的局部计算器的其它计数位供非零局部计数器计数使用。
存储模式确定子模式604,还用于若第i个节点中非零局部计数器的个数大于预定阈值,则确定以第二存储模式存储第i个节点。
所述第二判断子模块605,还用于判断所述第j个局部计数器,加1后是否会溢出。
所述第三更新子模块606,还用于若所述第j个局部计数器加1后会溢出,且所述第i个节点中的局部计数器的最小计数值不为0,则将所述第i个节点中的各局部计数器减去第四预定值后,再将所述第j个局部计数器加1;其中,所述第四预定值大于或等于所述第i个节点中的局部计数器的最小计数值。
本实施例的装置,可以用于执行图3所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
在一实施例中,所述校验树更新模块60,包括:第三判断子模块和第四更新子模块。
其中,第三判断子模块,用于判断所述校验路径上的第i个节点中的第j个局部计数器,加1后是否会溢出;所述第j个局部计数器为所述第i个节点中当前要更新的局部计数器,其中,1≤i≤M,1≤j≤N,M为校验树的最大层数。
第四更新子模块,用于若所述第j个局部计数器加1后会溢出,且所述第i个节点中的局部计数器的最小计数值不为0,则将所述第i个节点中的各局部计数器减去第四预定值后,再将所述非零局部计数器加1;其中,所述第四预定值大于或等于所述第i个节点中的局部计数器的最小计数值。
本实施例的装置,可以用于执行图4所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
在一实施例中,各节点的全局计数器包括一级全局计数器和二级全局计数器;
所述校验树更新模块60,还包括第五更新子模块,用于若所述第j个局部计数器加1后会溢出,且所述第i个节点中的局部计数器的最小计数值为0,则将所述第i个节点的全局计数器中的二级全局计数器,加上第五预定值后,将所述第i个节点的各局部计数器的计数值置零。
图11为本申请一实施例电子设备结构示意图,可以实现本发明图1-4所示实施例的流程,如图11所示,所述电子设备可以包括:壳体41、处理器42、存储器43、电路板44和电源电路45,其中,电路板44安置在壳体41围成的空间内部,处理器42和存储器43设置在电路板44上;电源电路45,用于为上述电子设备的各个电路或器件供电;存储器43用于存储可执行程序代码;处理器42通过读取存储器43中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一实施例的内存数据完整性保护方法。
处理器42对上述步骤的具体执行过程以及处理器42通过运行可执行程序代码来进一步执行的步骤,可以参见本发明图1-4所示实施例的描述,在此不再赘述。
该电子设备以多种形式存在,包括但不限于服务器。服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述任一权利要求所述的内存数据完整性保护方法。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
为了描述的方便,描述以上装置是以功能分为各种单元/模块分别描述。当然,在实施本发明时可以把各单元/模块的功能在同一个或多个软件和/或硬件中实现。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (13)
1.一种内存数据完整性保护方法,其特征在于,包括:
把待写入数据分割成数据块;
根据一数据块的写入地址,确定所述写入地址所对应的存储单元;其中,所述数据块为所述待写入数据分割后形成的两个以上的数据块中的其中一个数据块,所述存储单元位于内存中的数据保护存储区,所述数据保护存储区中的每个存储单元分配有一局部计数器,每N个局部计数器分配有一全局计数器;N为大于等于2的自然数;
根据所述存储单元以及预先建立的校验树,确定校验路径;其中,所述校验树的每个节点具有一全局计数器和N个局部计数器,每个节点与上一层节点中的一局部计数器相对应,每个末节点的N个局部计数器与所述数据保护存储区中的N个存储单元一一对应;
从所述校验树的根节点开始,沿所述校验路径,依次对各节点进行校验;
在依次对所述校验路径上的各节点校验通过后,对所述数据块进行数据校验,若校验通过,则将所述数据块写入所述存储单元;
基于所述数据块在所述存储单元中的写入,更新所述校验树。
2.根据权利要求1所述的内存数据完整性保护方法,其特征在于,所述从所述校验树的根节点开始,沿所述校验路径,依次对各节点进行校验,包括:从所述校验树的根节点开始,沿一条校验路径,依次对各节点进行校验;
所述从所述校验树的根节点开始,沿一条校验路径,依次对各节点进行校验,包括:
获取第i个节点的全局计数器和第j个局部计数器的值,结合第i-1个节点的全局计数器和各局部计数器的值,计算一节点校验值,将计算的节点校验值与第i-1个节点中存储的节点校验值进行比较,若二者一致,则对第i-1个节点校验成功;其中,所述第i个节点和第i-1个节点为所述校验路径上两个相邻的节点,所述第i-1个节点与所述第i个节点的第j个局部计数器相对应;其中,2≤i≤M,1≤j≤N,M为校验树的最大层数。
3.根据权利要求1所述的内存数据完整性保护方法,其特征在于,所述对所述数据块进行数据校验,包括:
获取至少两个存储单元所存储的数据块,结合该至少两个存储单元所对应的局部计数器和全局计数器的值,计算出一数据校验值;其中,所述至少两个存储单元包括所述写入地址所对应的存储单元;
将计算出的所述数据校验值,与预先存储的数据校验值进行比较;其中,所述预先存储的数据校验值,预先根据所述至少两个存储单元所存储的数据块,结合所述至少两个存储单元所对应的局部计数器和全局计数器的值计算得出;
若计算出的所述数据校验值与所述预先存储的数据校验值一致,则对所述数据块的数据校验通过。
4.根据权利要求3所述的内存数据完整性保护方法,其特征在于,在将所述数据块写入所述存储单元之后,所述方法还包括:
获取所述至少两个存储单元所存储的数据块,结合所述至少两个存储单元所对应的局部计数器和全局计数器的值,计算出一新的数据校验值;
利用所述新的数据校验值,更新所述预先存储的数据校验值。
5.根据权利要求1所述的内存数据完整性保护方法,其特征在于,所述基于所述数据块在所述存储单元中的写入,更新所述校验树,包括:
将第i个节点的第j个局部计数器的值加上第一预定值,并将第i+1个节点中的第k个局部计数器的值加上第二预定值;其中,所述第i个节点与所述第i+1个节点中的第k个局部计数器相对应;其中,1≤i≤M-1,1≤j≤N,1≤k≤N,M为校验树的最大层数;
将所述第i+1个节点的全局计数器及所述第k个局部计数器的值,结合所述第i个节点的全局计数器和各局部计数器的值,计算一新的节点校验值,利用计算的所述新的节点校验值更新所述第i个节点的节点校验值。
6.根据权利要求1所述的内存数据完整性保护方法,其特征在于,所述基于所述数据块在所述存储单元中的写入,更新所述校验树,包括:
判断所述校验路径上的第i个节点中,非零局部计数器的个数是否小于或等于预定阈值;其中,所述第i个节点为当前要更新的节点;其中,1≤i≤M,M为校验树的最大层数;
若所述第i个节点中,非零局部计数器的个数小于或等于预定阈值,则确定以第一存储模式存储第i个节点;在第一存储模式下,值为0的局部计算器的计数位以压缩后的比特位表示;
判断所述第i个节点中的第j个局部计数器加1后是否会溢出;所述第j个局部计数器为所述第i个节点中当前要更新的局部计数器;其中,1≤j≤N;
若所述第j个局部计数器加1后会溢出,则将所述第i个节点的全局计数器的计数值加上第三预定值,同时,将所述第i个节点的各局部计数器的计数值置零。
7.根据权利要求6所述的内存数据完整性保护方法,其特征在于,在第一存储模式下,值为0的局部计算器的计数位以压缩后的比特位表示后,值为0的局部计算器的其它计数位供非零局部计数器计数使用。
8.根据权利要求6所述的内存数据完整性保护方法,其特征在于,若第i个节点中非零局部计数器的个数大于预定阈值,则确定以第二存储模式存储第i个节点;
判断所述第j个局部计数器,加1后是否会溢出;
若所述第j个局部计数器加1后会溢出,且所述第i个节点中的局部计数器的最小计数值不为0,则将所述第i个节点中的各局部计数器减去第四预定值后,再将所述第j个局部计数器加1;其中,所述第四预定值大于或等于所述第i个节点中的局部计数器的最小计数值。
9.根据权利要求1所述的内存数据完整性保护方法,其特征在于,所述基于所述数据块在所述存储单元中的写入,更新所述校验树,包括:
判断所述校验路径上的第i个节点中的第j个局部计数器,加1后是否会溢出;所述第j个局部计数器为所述第i个节点中当前要更新的局部计数器;其中,1≤i≤M,1≤j≤N,M为校验树的最大层数;
若所述第j个局部计数器加1后会溢出,且所述第i个节点中的局部计数器的最小计数值不为0,则将所述第i个节点中的各局部计数器减去第四预定值后,再将非零局部计数器加1;其中,所述第四预定值大于或等于所述第i个节点中的局部计数器的最小计数值。
10.根据权利要求8或9所述的内存数据完整性保护方法,其特征在于,各节点的全局计数器包括一级全局计数器和二级全局计数器;
若所述第j个局部计数器加1后会溢出,且所述第i个节点中的局部计数器的最小计数值为0,则将所述第i个节点的全局计数器中的二级全局计数器,加上第五预定值后,将所述第i个节点的各局部计数器的计数值置零。
11.一种内存数据完整性保护装置,其特征在于,包括:
数据分割模块,用于把待写入数据分割成数据块;
存储单元确定模块,用于根据一数据块的写入地址,确定所述写入地址所对应的存储单元;其中,所述数据块为所述待写入数据分割后形成的两个以上的数据块中的其中一个数据块,所述存储单元位于内存中的数据保护存储区,所述数据保护存储区中的每个存储单元分配有一局部计数器,每N个局部计数器分配有一全局计数器;N为大于等于2的自然数;
校验路径确定模块,用于根据所述存储单元以及预先建立的校验树,确定校验路径;其中,所述校验树的每个节点具有一全局计数器和N个局部计数器,每个节点与上一层节点中的一局部计数器相对应,每个末节点的N个局部计数器与所述数据保护存储区中的N个存储单元一一对应;
第一校验模块,用于从所述校验树的根节点开始,沿所述校验路径,依次对各节点进行校验;
第二校验模块,用于在所述第一校验模块依次对所述校验路径上的各节点校验通过后,对所述数据块进行数据校验;
数据写入模块,用于所述第二校验模块对所述存储单元进行数据校验通过后,将所述数据块写入所述存储单元;
校验树更新模块,用于基于所述数据块在所述存储单元中的写入,更新所述校验树。
12.一种电子设备,其特征在于,所述电子设备包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述权利要求1-10任一所述的方法。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述权利要求1-10任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011643495.1A CN112651054B (zh) | 2020-12-30 | 2020-12-30 | 一种内存数据完整性保护方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011643495.1A CN112651054B (zh) | 2020-12-30 | 2020-12-30 | 一种内存数据完整性保护方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112651054A CN112651054A (zh) | 2021-04-13 |
CN112651054B true CN112651054B (zh) | 2022-10-14 |
Family
ID=75367065
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011643495.1A Active CN112651054B (zh) | 2020-12-30 | 2020-12-30 | 一种内存数据完整性保护方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112651054B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113872752B (zh) * | 2021-09-07 | 2023-10-13 | 哲库科技(北京)有限公司 | 安全引擎模组、安全引擎装置和通信设备 |
CN114564754A (zh) * | 2021-12-30 | 2022-05-31 | 海光信息技术股份有限公司 | 一种dram内存完整性保护方法、装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105022968A (zh) * | 2015-07-30 | 2015-11-04 | 哈尔滨工程大学 | 一种内存数据的完整性校验方法 |
CN105138478A (zh) * | 2015-07-28 | 2015-12-09 | 哈尔滨工程大学 | 一种非平衡哈希树的存储器完整性保护方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901316B (zh) * | 2010-07-15 | 2012-05-09 | 哈尔滨工程大学 | 基于Bloom Filter的数据完整性保护方法 |
US9798900B2 (en) * | 2015-03-26 | 2017-10-24 | Intel Corporation | Flexible counter system for memory protection |
CN105069379B (zh) * | 2015-07-29 | 2017-11-21 | 哈尔滨工程大学 | 一种基于写计数器的存储器完整性保护方法 |
JP7096323B2 (ja) * | 2017-08-03 | 2022-07-05 | アーム・リミテッド | メモリセキュリティのためのカウンタ整合性ツリー |
US10540297B2 (en) * | 2017-08-03 | 2020-01-21 | Arm Limited | Memory organization for security and reliability |
US11088846B2 (en) * | 2019-03-28 | 2021-08-10 | Intel Corporation | Key rotating trees with split counters for efficient hardware replay protection |
-
2020
- 2020-12-30 CN CN202011643495.1A patent/CN112651054B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105138478A (zh) * | 2015-07-28 | 2015-12-09 | 哈尔滨工程大学 | 一种非平衡哈希树的存储器完整性保护方法 |
CN105022968A (zh) * | 2015-07-30 | 2015-11-04 | 哈尔滨工程大学 | 一种内存数据的完整性校验方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112651054A (zh) | 2021-04-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109388975B (zh) | 针对安全性和可靠性的存储器组织 | |
US10778441B2 (en) | Redactable document signatures | |
CN110945509B (zh) | 用于控制对受保护存储器区域中数据的访问的设备和方法 | |
EP2684134B1 (en) | Programmable data storage management | |
JP5159849B2 (ja) | メモリ管理装置及びメモリ管理方法 | |
CN112651054B (zh) | 一种内存数据完整性保护方法、装置及电子设备 | |
CN105069379B (zh) | 一种基于写计数器的存储器完整性保护方法 | |
CN101853190B (zh) | 一种适用于嵌入式处理器的数据完整性验证方法 | |
US10686589B2 (en) | Combining hashes of data blocks | |
Ren et al. | Integrity verification for path oblivious-ram | |
US20190251275A1 (en) | Counter integrity tree for memory security | |
US8639916B2 (en) | Method of maintaining software integrity | |
KR20060096286A (ko) | 다수의 필드를 갖는 데이터를 안전하게 하기 위한 방법,시스템 및 컴퓨터-액세스가능 매체 | |
US11270227B2 (en) | Method for managing a machine learning model | |
CN107430671B (zh) | 用于在缓存中保护对安全重要的数据的方法 | |
Apostal et al. | Password recovery using MPI and CUDA | |
CN115659417A (zh) | 审计日志存储方法、验证方法、装置和计算机设备 | |
CN112597488B (zh) | 页表完整性保护方法、装置和设备 | |
CN115567199A (zh) | 一种随机数种子生成方法、装置、电子设备及存储介质 | |
Real et al. | Application deployment strategies for spatial isolation on many-core accelerators | |
CN113448958B (zh) | 数据处理方法和装置、电子设备、存储介质 | |
CN115081034B (zh) | 多重冗余方式实现的可信处理器芯片及片内可信度量方法 | |
CN112291355B (zh) | 区块链钱包的密钥备份和恢复方法与装置 | |
John | Privacy leakage via write-access patterns to the main memory | |
US20230099543A1 (en) | Application-specific computer memory protection |
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 |