CN101976322B - 基于一种完整性校验的安全元数据管理方法 - Google Patents
基于一种完整性校验的安全元数据管理方法 Download PDFInfo
- Publication number
- CN101976322B CN101976322B CN 201010543265 CN201010543265A CN101976322B CN 101976322 B CN101976322 B CN 101976322B CN 201010543265 CN201010543265 CN 201010543265 CN 201010543265 A CN201010543265 A CN 201010543265A CN 101976322 B CN101976322 B CN 101976322B
- Authority
- CN
- China
- Prior art keywords
- hash
- node
- files
- blocks
- cryptographic hash
- 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.)
- Expired - Fee Related
Links
- 238000007726 management method Methods 0.000 title claims abstract description 27
- 238000000034 method Methods 0.000 claims abstract description 39
- 238000003860 storage Methods 0.000 claims abstract description 25
- 238000012795 verification Methods 0.000 claims abstract description 6
- 101100217298 Mus musculus Aspm gene Proteins 0.000 claims description 18
- 239000000203 mixture Substances 0.000 claims description 2
- 238000003825 pressing Methods 0.000 claims description 2
- 238000005516 engineering process Methods 0.000 abstract description 11
- 230000000875 corresponding effect Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 239000011295 pitch Substances 0.000 description 2
- 241001479482 Datisca glomerata Species 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000005728 strengthening Methods 0.000 description 1
Images
Landscapes
- Storage Device Security (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
基于一种完整性校验的元数据元数据管理方法属于存储安全领域,其特征在于:在客户端,采用了文件数据的自加密技术,对文件数据进行加密,提高了存储的效率;在安全元数据管理服务器端,采用64叉堆哈希树来维护文件块的哈希值,提供了文件数据块哈希值的完整性保护,并实现了用户对文件的访问验证和数据更新的高效性,同时采用了根哈希虚拟链表技术,保证了同属于一个文件的多棵64叉堆哈希树的根哈希的完整性,在一定程度上支持用户对该文件的并发访问。
Description
技术领域
基于一种完整性校验的安全元数据管理方法属于存储安全领域,尤其涉及其中的完整性校验和安全元数据管理领域。
背景技术
随着网络技术的发展,当今社会对数据存储和共享的需求在逐渐加大,分布式和网络化的技术也得到越来越广泛的应用。但是随着数据在物理级别上脱离了用户,导致了数据可能在网络存储中遭受泄露以及篡改的机会增加,因此如何让用户放心地将数据共享,同时也能保证数据的机密性和完整性显得愈加重要。
数据的机密性值的是数据对于没有访问权限的用户(也可以称为非法用户)将是未知的,没有访问权限的用户无法从数据中获取关于其想得到的信息。一般保护数据的机密性的方法主要是利用广泛应用的加密算法对数据进行加密,具有访问权限的用户拥有密钥,并能对数据进行访问。
数据的完整性校验指的是,数据在传输和存储过程中,确保信息不被非法篡改或者是数据的非法篡改能被合法用户迅速发现,为用户提供的一种完整性保护的方法。现今的数据完整性校验的方法是在存储或者是传输数据前,利用哈希算法对数据计算哈希值,并进行保存,当用户需要对数据进行访问,利用相同的哈希算法重新计算该数据的哈希值,并与之前保存的哈希值进行对比,若相等,则说明数据是完整的,若不相等,则说明数据被非法篡改或者在存储的过程中丢失了部分数据。但是由于数据的哈希值也有可能成为攻击的目标,因此本发明采取了更完善的完整性校验,不仅包括了数据的完整性校验,同时也包括了数据哈希值的完整性校验。
基于一种完整性校验的安全元数据管理方法是指:在网络共享系统中,为保证安全元数据的机密性和完整性,以及用户能够对文件进行高效访问所提出的管理方法。传统的安全元数据管理方法主要有以下三种:第一种是管理文件 级的哈希值,即使用哈希算法对整个文件计算哈希值并进行保存,当用户访问该文件时,则对该文件重新计算哈希值,并与之前保存的哈希值进行对比,以此判断文件的完整性,这种方法的缺点是:由于哈希值是文件级的,当用户对该文件某个部分进行修改或者读取该文件的某个部分时,为了保证用户读取到的数据是完整的,因此需要进行完整性校验,用户则需要重新计算整个文件的哈希值,并与之前保存的哈希值进行比较,判断该文件是否完整,这样做计算开销太大;第二种是管理文件块级的哈希值,具体的操作过程为:将一个文件划分为许多大小固定的文件块,并使用哈希算法计算每个文件块的哈希值来保证文件块的完整性,同时为了保证每个文件块哈希值的完整性,需要将每个文件块的哈希值进行拼接合并,并对拼接合并后的结果再求哈希值进行保存,这种方法的缺点是:当用户需要对某个文件块进行改动或者读取某个文件块时,为了保证用户读取到的该文件块是完整的,用户需要重新计算所有文件块的哈希值,然后将计算而得的哈希值进行拼接合并后再计算哈希,判断求出的哈希值是否与之前保存的一致,这样做开销较大,并且哈希值没有得到有效管理;第三种做法是使用文件块级的哈希值和简单的Merkle哈希树,具体的做法是:首先计算每个文件块的哈希值,然后构建Merkle哈希树;具体的构建方法如下,首先保证Merkle哈希树的叶子节点同文件块数目相等,并形成叶子节点到文件块的一一映射,在每个叶子节点存放相应文件块的哈希值,然后根据该树的叉数,从叶子节点开始逐层向上分别计算内部节点(即:除根节点之外的非叶子节点)的所有儿子节点内容拼接后的哈希值,并存放在该节点中,最后直至根节点,对存放在根节点中的哈希值进行签名,这样最终保证了每个文件块哈希值的完整性,这种做法虽然可以有效管理文件块的哈希值,但是可能造成Merkle哈希树高度过大,使得每次完整性校验都需要对叶子节点进行访问,这样将不仅需要很多次的I/O,而且开销较大,除此之外,Merkle哈希树的完整性也没有得到很好的保护。
本发明提出了基于一种完整性校验的安全元数据管理方法,该方法通过文件块自加密技术计算,通过哈希值生成密钥对文件块进行加密,从而提高了存储的效率;采用了4层的64叉堆哈希树结构,保证了哈希值的完整性,提高了文件块哈希值的更新和验证效率,并且降低了用户访问哈希树所需要的I/O 量;最后通过构建根哈希虚拟链表,保证了根哈希的完整性,同时在一定程度上支持了用户的并发访问。
发明内容
本发明的目的在于提供一种对安全元数据进行有效便捷管理的方法,能够保证安全元数据的完整性,同时用户能够对安全元数据信息进行方便和高效的访问和更新,并且支持多用户对一个文件进行并发访问。本发明的重点是文件块级别的自加密技术,64叉堆哈希树的设计及根哈希虚拟链表的设计。
本发明的特征在于:是在客户端和一个安全元数据管理服务器组成的系统中,依次按以下步骤实现的:
步骤(1):客户端用自加密方法生成文件块级的安全元数据信息,步骤为:
步骤(1.1):按需要地把文件F分为固定大小为S的文件块集合F=(f1,f2,...,fn,...,fN),N表示文件块数,当文件F不是固定大小S的整数倍,则将最后一个文件块填充到大小为S的值,
步骤(1.2):用安全散列算法SHA1对所述文件块fi计算其哈希值hashi,hashi=SHA1(fi),其中i=1,2,...,n,...,N,得到文件块的哈希值集合(hash1,hash2,...,hashN),
步骤(1.3):利用步骤(1.2)得到的哈希值hashi生成加密密钥,用keyi表示,keyi=hashi||offseti,其中:offseti表示文件块fi在所述文件中的偏移量,占用12B的存储空间,文件块fi的哈希值hashi占用20B的存储空间,″||″为拼接合并符号,则加密密钥keyi占用的存储空间为32B,
步骤(1.4):对所述文件块fi按下式加密:ci=E(fi,keyi),其中E表示AES加密算法,文件块fi和密钥keyi是输入参数,ci表示对文件块fi进行加密所得到的密文;
步骤(2):在所述安全元数据管理服务器构造所述文件F内所有文件块哈希值集合(hash1,hash2,...,hashN)的64叉堆哈希树,步骤如下:
步骤(2.1):定义64叉堆哈希树的数据结构:内部节点和根节点的儿子数目都是64,每个节点所存放的内容是:bHash||cHash,所述的每个节点是指根节点或者内部节点或者叶子节点,其中,bHash是该节点所对应文件块的哈希值,节点i的序号对应于文件块i的序号,以保证该节点i所对应文件块fi的 数据完整性,其中i=(1,2,...,n,...,N),cHash是该节点i的所有儿子节点的内容,包括每个儿子节点中存储的bHash和cHash在拼接后计算得到的哈希值,以保证该节点i的所有儿子节点内容的完整性,即保证每个儿子节点中的bHash和cHash的完整性,″||″为拼接合并符号,
步骤(2.2):构造所述64叉堆哈希树,初始化各节点i的内容,
步骤(2.2.1):64叉堆哈希树节点集合如下: 其中 为根节点,表示根节点只有一个, 是 的第1个儿子, 是 的第64个儿子, 表示为 的第1个儿子,以此类推, 表示所述64叉堆哈希树中第j层的第i个节点,则对于该64叉堆哈希树,第0层的节点为根节点,数目为1,第1层的节点为根节点的儿子,其数目为64,第2层节点为第1层相关节点的儿子,其数目为642,第3层的节点为第2层相关节点的儿子,其数目为643,以此类推,则对于所述非叶子节点 其所有儿子节点集合为
步骤(2.2.2):初始化各节点的哈希值bHash:将步骤(1.2)得到的文件块哈希值集合(hash1,hash2,...,hashN)和64叉堆哈希树的节点集合 形成一一对应,具体方法如下:对于根节占 所对应的文件块f1的哈希值为hash1,记为 所对应的文件块f2的哈希值为hash2,记为 对于第j层的第i个节点 所对应文件块fn的哈希值为hashn,其中n需要满足的条件为 记为
步骤(2.2.3):初始化各节点的哈希值cHash:从叶子节点开始逐层向上直至根节点,对于叶子节点而言,利用线性同余法生成随机数,将该随机数赋值于 对于非叶子节点 而言,对其所有的儿子节点内容的哈希值,包括bHash和cHash,进行拼接后计算哈希值,表示为 并将结果赋值于cHash,用 表示,,
步骤(2.3):按照以下步骤随机访问数据块,
步骤(2.3.1):判断所述随机访问是否越界,
步骤(2.3.1.1):文件F的大小为filesize,当用户访问偏移量为offset,大小为size的数据块,若offset+size>filesize,则访问越界,用户只能访问偏移量为offset,大小为(filesize-offset)的数据块,如果offset+size≤filesize,则用户正常访问目标数据块,
步骤(2.3.1.2):找出包含步骤(2.3.1.1)中的目标数据块f在步骤(1.1)中生成的文件块集合中的文件块子集合:(fstart,fstart+1,...,femd),其中,fstart为起始文件块,fend为终止文件块,通过计算可以得到,
步骤(2.3.2):进行文件块子集合的哈希值的完整性校验,步骤如下:
步骤(2.3.2.1):找出步骤(2.3.1.2)中包含所述的目标数据块f的文件块子集合(fstart,fstart+1,...,femd)所对应的64叉堆哈希树的各节点,
步骤(2.3.2.2):找出步骤(2.3.2.1)中所述64叉堆哈希树各节点各自父亲节点直至根节点的路径,对该路径经过的每个节点,无论内部节点和根节点,用SHA1算法计算所述路径内的每个节点的所有儿子节点的内容拼接后而成的哈希值,看与该节点中保存的cHash是否相等,若相等,说明文件块子集合的哈希值是完整的,若不相等,则说明文件块子集合的哈希值被非法篡改,
步骤(2.3.2.3):对文件块进行完整性校验,步骤如下:用户重新计算文件块子集合的哈希值,用SHA1算法逐个计算该文件块子集合中的每个文件块的哈希值,再找出于该文件块子集合所对应的那些所述64叉堆哈希树的节点,判断重新计算得出的哈希值是否与这些节点中的bHash相等,如果相等,说明文件块子集合的内容是完整的,没有经过非法篡改,如果不相等,则说明文件块子集合的内容不完整;
步骤(3):按以下步骤更新文件数据块:
步骤(3.1):进行完整性校验,包括相关文件块的哈希值的完整性校验以及该文件块内容的完整性校验:判断(offset+size)和文件大小filesize的关系,如果offset+size>filesize,则fend不存在,因此只需要验证文件块fstart的完整性以及fstart的哈希值的完整性,后者的验证方法如步骤(2.3.2.2)所述,如果offset+size ≤filesize,则需要验证起始文件块fstart和终止文件块fend的完整性,以及这两个文件块的哈希值的完整性,后者的验证方法如步骤(2.3.2.2)所述,
步骤(3.2):重新计算被更新数据块的哈希值:当数据块更新完毕,需要利用哈希算法SHA1算法对更新的部分进行重新计算哈希值,并使用重新计算得到的哈希值生成加密密钥,并使用所述AES加密算法对更新后的文件块进行加密处理,
步骤(3.3):把步骤(3.2)重新计算得到的哈希值赋值于bHash,并逐层向上找到它们的父亲节点直至根节点的路径,找到该路径上的相关节点,重新计算该节点的所有儿子节点的内容所拼接合并后的哈希值,赋值于该节点的cHash;
步骤(4):一个文件的所有文件块的哈希值由多棵64叉堆哈希树来维护的情况下,当发生并发访问时,要按照以下步骤构造一个根哈希虚拟链表,以此来支持并发访问,步骤如下:
步骤(4.1):构造根哈希虚拟链表:
步骤(4.1.1):将同属于一个文件的多棵64叉堆哈希树的根节点邻接,构成根节点之间的索引,每个根节点除包含了哈希树的根哈希值,
步骤(4.1.2):根哈希虚拟链表为(rh1,rh2,...,rhn),其中rhi表示第i棵64叉堆哈希树的根节点所存储的根哈希值,
步骤(4.1.3):当存在对根哈希虚拟链表进行并发访问的时,首先检查rhi值是否处于顺序邻接的位置,对于尾节点rhn,查看其索引是否指向自己,
步骤(4.1.4):当多个进程不同时修改属于同一棵64叉堆哈希树的文件块,就允许这些操作并发执行。
本发明的效果如下:
i.采用了文件块自加密技术,避免了一般情况下需要存储加密密钥和哈希值的情况,通过使用文件块的哈希值生成密钥,实现了系统只需要存储文件块的哈希值就可以保证文件块的机密性和完整性的要求,提高了存储的效率;
ii.使用了64叉堆数据结构管理文件块的哈希值,在每个节点中存储文件块哈希值以及该节点的所有儿子节点文件块哈希值拼接后所计算的哈希值,这样的设计缩短了文件块被修改时,64叉堆哈希树需要更新和验证的路径,同时由于文件块的加密密钥是由相应的文件块 的哈希值生成,因此这些密钥的完整性也在64叉堆哈希树中得到了保护;
iii.实现了根哈希的虚拟链表技术。由于一个文件的完整性信息可能由多棵64叉堆进行维护,使用根哈希的虚拟链表技术保证了根哈希的完整性,同时在支持了用户并发访问的需求。
附图说明
图1.文件分割成文件块示意图。
图2.文件块自加密过程示意图。
图3.64叉堆哈希树数据结构图:其中bHash为该节点所对应文件块的哈希值,cHash为该节点的所有儿子节点内容拼接合并后计算的哈希值。
图4.当随机访问文件块时,64叉堆的完整性校验:其中bHash为该节点所对应文件块的哈希值,cHash为该节点的所有儿子节点内容拼接合并后计算的哈希值。
图5.根哈希虚拟链表数据结构图。
图6.并发访问的流程示意图。
图7.具体方法流程图。
具体实施方式
本发明的核心是在安全元数据管理服务器上实现了对文件安全元数据的管理,其实现主要是由以下几个部分,管理操作主要由每个部分的相应模块构成:
●客户端:申请对文件的访问,并在文件加密的过程中主要负责计算文件块的哈希值,以及对文件块进行加密操作;
A.文件分块模块:负责对文件进行分块操作,具体操作如图1所示。
针对一个文件,将其划分为多个固定大小的文件块;
B.自加密模块:负责对文件块进行自加密操作,具体操作如图2所示。
在模块中所使用的加密算法为对称块加密算法AES,其中AES算法是美国国家技术标准委员会在2000年所确定的高级加密标准,由于AES算法是块加密算法,如果需要加密的块超过AES算法加密的基本单元,则需要使用分组加密模式。AES算法包含了多种不同的分 组加密模式,这些分组加密模式可以让使用者根据其对性能和安全性的综合考虑而选择使用。在模块中,首先采用SHA1算法对每个文件块计算哈希值,并将文件块的哈希值和其所在的偏移值进行拼接合并,构成密钥;然后利用该密钥,使用AES算法以及用户所选择的分组模式,对文件块进行加密,加密后,将每个文件块的哈希值发给安全元数据管理服务器;
C.完整性校验模块:验证所请求访问的数据块的完整性;当客户端向安全元数据管理服务器申请访问某个文件中偏移为offset、大小为size的数据块,安全元数据管理服务器通过步骤2.3.2验证包含该数据块的最小文件块子集合的哈希值的完整后,将会返回给用户端包含该数据块的最小文件块子集合中的每个文件块的哈希值,客户端运行此模块重新计算这些文件块的哈希值,判断是否与得到的哈希值相同,若相同,则说明所请求访问的数据块是完整的,否则,则说明所请求访问的数据块的完整性受到破坏;
●网络:以密文形式传输用户的请求和安全元数据信息;
●安全元数据管理服务器:接受文件的安全元数据信息,构建并维护64叉堆哈希树;当用户申请对数据块进行访问,安全服务器确定了包含该数据块的最小文件块子集合,然后对该子集合中的文件块的哈希值进行完整性校验;
A.元数据初始模块:从客户端接收文件块集合的哈希值,并初始化64叉堆哈希树结构,64叉堆哈希树的数据结构如图3所示;
1.定义64叉堆哈希树节点的数据结构:
64叉堆哈希树中,每个节点的内容包括:bHash和cHash;其中,bHash指的是该节点所对应的文件块的哈希值,该哈希值是使用SHA1算法对文件块进行计算而得,占用的存储空间为20B;
cHash指的是该节点的所有儿子节点的内容拼接合并后所计算而得的哈希值,占用的存储空间为20B;
2.从客户端接收文件块的哈希值,并根据步骤2.2,依据节点的 数据结构初始化64叉堆哈希树;
B.哈希值完整性校验模块:针对用户申请访问的数据块,对它所相关的文件块的哈希值进行完整性校验,如图4所示,该模块的主要功能有以下两个:
1.哈希值的完整性校验:得到用户的访问申请后,通过用户申请访问的数据块计算得出包含该数据块的最小文件块子集合,得出最小文件块子集合中每个文件块所对应的64叉堆节点,并求出从这些节点的父亲节点到根节点的路径,以及该路径经过的相关节点;对于这些相关节点,通过计算每个节点的所有儿子内容拼接而得的哈希值,判断是否与存储在该节点的cHash相同,若相同,则说明该文件块子集合的哈希值是完整的,否则向安全元数据管理服务器报错;
C.安全元数据更新模块:对64叉堆哈希树进行更新;当用户对数据块进行更新后,对于包含该数据块的最小文件块子集合中的文件块,其哈希值由于数据块内容的更新而得到改变;该模块的具体做法是:对于被用户更新的数据块,得出包含该数据块的最小文件块子集合,得出最小文件块子集合中每个文件块所对应的64叉堆哈希树节点,并求出从这些节点的父亲节点到根节点的路径,以及该路径经过的相关节点;对于这些相关节点,将该节点所对应文件块的哈希值赋值于bHash,并逐一计算每个节点的所有儿子内容拼接合并后的哈希值,并赋值于该节点的cHash;
D.根哈希完整性校验模块:验证根哈希值的完整性,其中根哈希虚拟链表的数据结构如图5所示。验证根哈希的完整性需要检查相应的根哈希的索引,具体步骤如下:
1.该根节点是根哈希链表的最后一个节点时,检查该节点的索引是否指向自己;
2.当该根节点是根哈希链表的中间节点rhi时,检查该节点的前一个根节点rhi-1的索引是否指向rhi;
E.并发访问模块:支持多用户对同属于一个文件的不同64叉堆哈希 树所维护的文件块进行访问,如图6所示。当用户useri申请访问偏移量为offset,大小为size的数据块,该模块的处理过程主要如下:
1.根据用户申请访问的数据块的偏移量和大小,计算得到维护该数据块的64叉堆哈希树的根节点;
2.查看以这些根节点为根的64叉堆哈希树是否正在被其他用户使用,如果正在使用,则用户的访问请求进入等待队列;如果未在使用,则调用根哈希完整性校验模块对根节点的哈希值的进行完整性校验,然后再调用节点完整性校验模块;
3.访问完毕,将这些64叉堆哈希树交由等待队列中的下一个用户,并处理其访问请求;
F.错误处理模块:定义了一些错误的信息编号,表1列举了一些常见的错误:
表1常见错误的错误代码以及解释
错误代码 错误解释
ERR_MALLOC 开辟空间错误
ERR_HASH_NOT_MATCH 完整性校验错误
错误处理模块收集上述模块所反馈的错误信息,并传达给客户端和服务器以作进一步的处理。
其具体方法的流程图如图7所示,操作步骤如下:
步骤1.1:根据需求将文件分为固定粒度的文件块。将文件F分为固定大小为S的文件块集合,倘若文件F不是S的整数倍,则将分割后剩下的最后一个文件块进行填充使其大小为S,最后可得到文件块集合(f1,f2,...fn);
步骤1.2:使用SHA1算法对文件块集合中的每个文件块计算其哈希值,其中SHA1算法是由美国国家安全局设计,并由美国国家标准与技术研究院发布的一种安全散列算法,是一种被广泛应用的哈希算法,它的用处是将冗长的文件压缩成为一段独特的数字信息(一般称为哈希值),保证原来文件的合法性和安全性。使用SHA1算法,对以上文件块集合 中每个固定大小为S的文件块计算哈希值。令hashi表示文件块fi经过SHA1算法计算而得的哈希值,则可以表示为hashi=SHA1(fi),最后可以得到哈希值集合(hash1,hash2,...,hashn),其中每个哈希值占用的存储空间为20B;
步骤1.3:利用哈希值生成加密密钥;令offseti表示文件块fi在文件中的偏移量,其中offseti占用的存储空间为12B,令keyi表示对文件块fi进行加密的密钥;通过offseti和hashi生成keyi的方法如下:keyi=hashi||offseti,其中″||″为拼接合并符号,表示keyi是由hashi和offseti的内容拼接合并而成,则keyi所占用的存储空间大小=20B(hashi所占用的存储空间)+12B(offseti所占用的存储空间)=32B;
步骤1.4:利用生成的密钥,并使用AES加密算法对文件块加密,其中AES算法是美国国家技术标准委员会在2000年所确定的高级加密标准,是一种广泛应用的保护数据安全的加密算法。令ci表示前面得到的keyi对文件块fi进行加密所得到的密文,则有ci=E(fi,keyi),其中文件块fi和密钥keyi为输入参数,ci为输出结果,所使用的加密算法E为AES加密算法,;
步骤2.1:定义64叉堆哈希树的主要数据结构。一棵64叉堆树的主要由叶子节点,内部节点和根节点构成,其中内部节点和根节点的儿子数目都是64。在步骤1.1中划分而成的文件块都和该文件的64叉堆哈希树的节点形成一一对应,在64叉堆哈希树中,每个节点存放两部分内容:第一部分是该节点所对应文件块的哈希值,记为bHash,bHash的作用是为了保证该节点所对应文件块的完整性;第二部分则存储了该节点的所有儿子节点存放内容拼接后所计算的哈希值,记为cHash,cHash的作用是为了保证该节点的所有儿子节点内容的完整性;可以得出,在64叉堆哈希树中,每个节点中存储的内容为bHash和cHash所拼接合并后的值,即bHash||cHash,构建64叉堆哈希树以及初始化其节点内容的步骤 如下;
√步骤2.2.1:节点的定义:定义 为64叉堆哈希树的节点集合,其中 表示的是哈希树中第j层的第i个节点,则可以得知 是根节点, 是 的所有儿子节点,依次类推,则在64叉堆哈希树中,第0层的节点数为1,第1层的节点数为64,第2层的节点数为64×64=4096,第3层的节点数为64×64×64=262144。对于非叶子节点 它的所有儿子节点集合为
√步骤2.2.2:初始化节点的内容bHash;将步骤1.2得到的哈希值集合(hash1,hash2,...,hashn)与上面步骤2.2.1中定义的64叉堆哈希树的节点集合 中每个节点的bHash建立一一对应关系,例如将hash1与根节点 的bHash对应,记为 然后将hash2与节点 的bHash对应,记为 通过这种方法类推,将hashn和节点 的bHash对应,记为 (当满足 时),通过这种方法初始化64叉堆哈希树中每个节点的bHash内容。对于 称hashn为节点 所对应的文件块哈希值,由于hashn是由文件块fn经过哈希算法计算而得,称fn为 所对应的文件块,称 为fn所对应的64叉堆哈希树节点;
√步骤2.2.3:初始化节点的内容cHash:对哈希树的节点 进行考虑,当其为叶子节点时,则使用随机数生成算法(例如线性同余法)生成随机数,并将生成的随机数赋值于 当其为非叶子节点时,则可以计算得到它的儿子节点集合为 将所有儿子节点内容进行拼接合并,再通过SHA1算法求其哈希值,然后将结果赋值于 即
√步骤2.3.1:判断访问:在大小为filesize的文件F中,当用户访问偏移量为offset,大小为size的数据块f;如果offset+size>filesize,则访问越界,用户只能访问偏移量为offset,大小为(filesize-offset)的数据块;如果offset+size≤filesize,则用户可以正常访问目标数据块。在步骤1.1中生成的文件块集合中,求出包含数据块f的最小的文件块子集合,即找出子集合(fstart,fstart+1,...,femd),满足数据块f包含于(fstart,fstart+1,...,femd),同时任何包含数据块f的文件块子集合都包含(fstart,fstart+1,…,femd),通过计算可以得到,
√步骤2.3.2:哈希值的完整性校验:找出包含数据块f的最小文件块子集合(fstart,fstart+1,...,femd)所对应的64叉堆哈希树节点,并找出它们所在父亲节点直至根节点的路径,对该路径经过的每个节点,包括内部节点和根节点,用哈希算法计算将它的儿子节点的内容所拼接合并而成后的哈希值,看与该节点中保存的cHash是否相等,如果相等,说明文件块子集合的哈希值是完整的,用户可以进行步骤2.3.3;如果不相等,则说明文件块子集合的哈希值被非法篡改;
√步骤2.3.3:文件块的完整性校验:在验证了文件块子集合哈希值的完整性后,用户重新计算文件块子集合的哈希值,然后找出该文件块子集合所对应的64叉堆哈希树的节点,并与保存在该节点中的bHash进行对比,如果相等,说明文件块子集合的内容是完整的,没有经过非法篡改,如果不相等,则说明文件块子集合的内容不完整;
√步骤2.4.1:进行完整性校验:在大小为filesize的文件F中,当用户需要更新偏移量为offset,大小为size的数据块f。具体的操作过程如下:通过步骤2.3.1可得,包含数据块f的最小的文件块子集合 为(fstart,fstart+1,…,femd),考虑到在更新的过程中,数据块中间部分的内容将会被更新,其完整性信息(即哈希值)也将被更新,因此只需要对包含数据块最小的文件块子集合的起始文件块和终止文件块进行完整性校验,即仅需要判断文件块fstart和fend的完整性。判断(offset+size)和文件大小filesize的关系,如果offset+size>filesize,则fend不存在,因此只需要验证文件块fstart的完整性;如果offset+size≤filesize,则需要验证文件块fstart和文件块fend的完整性以及其哈希值的完整性,具体的步骤同步骤2.3所述;
√步骤2.4.2:重新计算数据块的哈希值:当数据块更新完毕,需要利用哈希算法对更新的部分进行重新计算哈希值,并使用重新计算得到的哈希值生成加密密钥,并使用AES加密算法对更新后的文件块进行加密处理;
√步骤2.4.3:对64叉堆的相关节点进行更新:根据步骤2.2.2找到更新后的数据块所对应的64叉堆哈希树的相关节点,并对存放在这些节点中内容,即bHash和cHash进行更新,具体更新操作如下:将步骤2.4.2重新计算得到的哈希值赋值于bHash,并逐层向上找到它们的父亲节点直至根节点的路径,找到该路径上的相关节点,重新计算该节点的所有儿子节点的内容所拼接合并后的哈希值,赋值于该节点的cHash;
步骤3:根哈希虚拟链表,以及对并发访问的支持。一个文件的所有文件块的哈希值可能由多棵64叉堆哈希树来维护,为了提供更高层次的完整性保护,因此需要保证每棵哈希树根节点的完整性,具体的步骤如下:
步骤3.1:根哈希虚拟链表的构建。将同属于一个文件的多棵64叉堆哈希树的根节点邻接,每个根节点除包含所在哈希树的根哈希值之外,还包含一个索引。定义根哈希虚拟链表为(rh1,rh2,...,rhn),其中rhi表示第i棵64叉堆哈希树的根节点所存储的根哈希值,链表中除最后一个节点外,每个根节点的索引都指向与其邻接的下一节点(也就是说rhi指向rhi+1);而最后一个节点的索引则指向自己(也就是说rhn仍旧指向rhn),由于这些哈希树的根哈希节点是顺序存储,没有任何指针,因此它并不是一个 真正的链表;
Claims (1)
1.基于一种完整性校验的安全元数据管理方法,其特征在于:是在客户端和一个安全元数据管理服务器组成的系统中,依次按以下步骤实现的:
步骤(1):客户端用自加密方法生成文件块级的安全元数据信息,步骤为:
步骤(1.1):按需要地把文件F分为固定大小为S的文件块集合F=(f1,f2,...,fn,...,fN),N表示文件块数,当文件F不是固定大小S的整数倍,则将最后一个文件块填充到大小为S的值,
步骤(1.2):用安全散列算法SHA1对所述文件块fi计算其哈希值hashi,hashi=SHA1(fi),其中i=1,2,...,n,...,N,得到文件块的哈希值集合(hash1,hash2,...,hashN),
步骤(1.3):利用步骤(1.2)得到的哈希值hashi生成加密密钥,用keyi表示,keyi=hashi||offseti,其中:offseti表示文件块fi在所述文件中的偏移量,占用12B的存储空间,文件块fi的哈希值hashi占用20B的存储空间,″||″为拼接合并符号,则加密密钥keyi占用的存储空间为32B,
步骤(1.4):对所述文件块fi按下式加密:ci=E(fi,keyi),其中E表示AES加密算法,文件块fi和密钥keyi是输入参数,ci表示对文件块fi进行加密所得到的密文;
步骤(2):在所述安全元数据管理服务器构造所述文件F内所有文件块哈希值集合(hash1,hash2,...,hashN)的64叉堆哈希树,步骤如下:
步骤(2.1):定义64叉堆哈希树的数据结构:内部节点和根节点的儿子数目都是64,每个节点所存放的内容是:bHash||cHash,所述的每个节点是指根节点或者内部节点或者叶子节点,其中,bHash是该节点所对应文件块的哈希值,节点i的序号对应于文件块i的序号,以保证该节点i所对应文件块fi的数据完整性,其中i=(1,2,...,n,...,N),cHash是该节点i的所有儿子节点的内容,包括每个儿子节点中存储的bHash和cHash在拼接后计算得到的哈希值,以保证该节点i的所有儿子节点内容的完整性,即保证每个儿子节点中的bHash和cHash的完整性,″||″为拼接合并符号,
步骤(2.2):构造所述64叉堆哈希树,初始化各节点i的内容,
步骤(2.2.1):64叉堆哈希树的节点集合如下: 其中 为根节点,表示根节点只有一个, 是 的第1个儿子, 是 的第64个儿子, 表示为 的第1个儿子,以此类推, 表示所述64叉堆哈希树中第j层的第i个节点,则对于该64叉堆哈希树,第0层的节点为根节点,数目为1,第1层的节点为根节点的儿子,其数目为64,第2层节点为第1层相关节点的儿子,其数目为642,第3层的节点为第2层相关节点的儿子,其数目为643,以此类推,则对于所述非叶子节点 其所有儿子节点集合为
步骤(2.2.2):初始化各节点的哈希值bHash:将步骤(1.2)得到的文件块哈希值集合(hash1,hash2,...,hashN)和64叉堆哈希树的节点集合 形成一一对应,具体方法如下:对于根节点 所对应的文件块f1的哈希值为hash1,记为 所对应的文件块f2的哈希值为hash2,记为 对于第j层的第i个节点 所对应文件块fn的哈希值为hashn,其中n需要满足的条件为 记为
步骤(2.2.3):初始化各节点的哈希值cHash:从叶子节点开始逐层向上直至根节点,对于叶子节点而言,利用线性同余法生成随机数,将该随机数赋值于 对于非叶子节点 而言,对其所有的儿子节点内容的哈希值,包括bHash和cHash,进行拼接后计算哈希值,表示为 并将结果赋值于cHash,用 表示,
步骤(2.3):按照以下步骤随机访问数据块,
步骤(2.3.1):判断所述随机访问是否越界,
步骤(2.3.1.1):文件F的大小为filesize,当用户访问偏移量为offset,大小为size的数据块,若offset+size>filesize,则访问越界,用户只能访问偏移量为offset,大小为(filesize-offset)的数据块,如果offset+size≤filesize,则用户正常访问目标数据块,
步骤(2.3.1.2):找出包含步骤(2.3.1.1)中的目标数据块f在步骤(1.1)中 生成的文件块集合中的文件块子集合:(fstart,fstart+1,...,femd),其中,fstart为起始文件块,fend为终止文件块,通过计算可以得到,
步骤(2.3.2):进行文件块子集合的哈希值的完整性校验,步骤如下:
步骤(2.3.2.1):找出步骤(2.3.1.2)中包含所述的目标数据块f的文件块子集合(fstart,fstart+1,...,femd)所对应的64叉堆哈希树的各节点,
步骤(2.3.2.2):找出步骤(2.3.2.1)中所述64叉堆哈希树各节点各自父亲直至根节点的路径,对该路径经过的每个节点,无论内部节点和根节点,用SHA1算法计算所述路径内的每个节点的所有儿子节点的内容拼接后而成的哈希值,看与该节点中保存的cHash是否相等,若相等,说明文件块子集合的哈希值是完整的,若不相等,则说明文件块子集合的哈希值被非法篡改,
步骤(2.3.2.3):对文件块进行完整性校验,步骤如下:用户重新计算文件块子集合的哈希值,用SHA1算法逐个计算该文件块子集合中的每个文件块的哈希值,再找出与该文件块子集合所对应的那些所述64叉堆哈希树的节点,判断重新计算得出的哈希值是否与这些节点中的bHash相等,如果相等,说明文件块子集合的内容是完整的,没有经过非法篡改,如果不相等,则说明文件块子集合的内容不完整;
步骤(3):按以下步骤更新文件数据块:
步骤(3.1):进行完整性校验,包括相关文件块的哈希值的完整性校验以及该文件块内容的完整性校验:判断(offset+size)和文件大小filesize的关系,如果offset+size>filesize,则fend不存在,因此只需要验证文件块fstart的完整性以及fstart的哈希值的完整性,后者的验证方法如步骤(2.3.2.2)所述,如果offset+size≤filesize,则需要验证起始文件块fstart和终止文件块fend的完整性,以及这两个文件块的哈希值的完整性,后者的验证方法如步骤(2.3.2.2)所述,
步骤(3.2):重新计算被更新数据块的哈希值:当数据块更新完毕,需要利用哈希算法SHA1算法对更新的部分进行重新计算哈希值,并使用重新计算得到的哈希值生成加密密钥,并使用所述AES加密算法对更新后的文件块进行加密处理,
步骤(3.3):把步骤(3.2)重新计算得到的哈希值赋值于bHash,并逐层向上 找到它们的父亲直至根的路径,找到该路径上的相关节点,重新计算该节点的所有儿子节点的内容所拼接合并后的哈希值,赋值于该节点的cHash;
步骤(4):一个文件的所有文件块的哈希值由多棵64叉堆哈希树来维护的情况下,当发生并发访问时,要按照以下步骤构造一个根哈希虚拟链表,以此来支持并发访问,步骤如下:
步骤(4.1):构造根哈希虚拟链表:
步骤(4.1.1):将同属于一个文件的多棵64叉堆哈希树的根节点邻接,构成根节点之间的索引,每个根节点除包含了哈希树的根哈希值,
步骤(4.1.2):根哈希虚拟链表为(rh1,rh2,...,rhn),其中rhi表示第i棵64叉堆哈希树的根节点所存储的根哈希值,
步骤(4.1.3):当存在对根哈希虚拟链表进行并发访问时,首先检查rhi值是否处于顺序邻接的位置,对于尾节点rhn,查看其索引是否指向自己,
步骤(4.1.4):当多个进程不同时修改属于同一棵64叉堆哈希树的文件块,就允许这些操作并发执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010543265 CN101976322B (zh) | 2010-11-11 | 2010-11-11 | 基于一种完整性校验的安全元数据管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010543265 CN101976322B (zh) | 2010-11-11 | 2010-11-11 | 基于一种完整性校验的安全元数据管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101976322A CN101976322A (zh) | 2011-02-16 |
CN101976322B true CN101976322B (zh) | 2012-05-23 |
Family
ID=43576206
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010543265 Expired - Fee Related CN101976322B (zh) | 2010-11-11 | 2010-11-11 | 基于一种完整性校验的安全元数据管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101976322B (zh) |
Families Citing this family (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102546105A (zh) * | 2011-12-28 | 2012-07-04 | 深圳市新为软件有限公司 | 一种网络资源传输的方法和装置 |
JP5948503B2 (ja) * | 2012-08-15 | 2016-07-06 | ヒューレット−パッカード デベロップメント カンパニー エル.ピー.Hewlett‐Packard Development Company, L.P. | ロックボックスを有する、患者のメタデータツリー |
CA2881983A1 (en) * | 2012-08-15 | 2014-02-20 | Hewlett-Packard Development Company, L.P. | Metadata tree with key rotation information |
CN103841135B (zh) * | 2012-11-22 | 2018-06-22 | 腾讯科技(深圳)有限公司 | 文件加速下载方法及装置 |
CN103838639B (zh) * | 2012-11-23 | 2018-04-27 | 华为技术有限公司 | 一种恢复虚拟磁盘元数据的方法、装置及系统 |
CN103873504A (zh) * | 2012-12-12 | 2014-06-18 | 鸿富锦精密工业(深圳)有限公司 | 数据分块存储至分布式服务器的系统及方法 |
CN104868973B (zh) * | 2014-02-21 | 2018-09-11 | 中国电信股份有限公司 | 数据完整性校验方法和系统 |
CN104866738B (zh) * | 2014-02-25 | 2019-04-26 | 北京娜迦信息科技发展有限公司 | 一种程序代码保护方法及装置 |
CN105282555B (zh) * | 2014-06-26 | 2018-03-30 | 爱尔达科技股份有限公司 | 多媒体文件储存系统与相关装置 |
CN104572983B (zh) * | 2014-12-31 | 2018-03-06 | 北京锐安科技有限公司 | 基于内存的散列表的构建方法、文本查找方法及相应装置 |
CN105138478B (zh) * | 2015-07-28 | 2018-10-26 | 哈尔滨工程大学 | 一种非平衡哈希树的存储器完整性保护方法 |
CN105306434A (zh) * | 2015-09-11 | 2016-02-03 | 北京金山安全软件有限公司 | 程序文件校验方法及装置、服务器和终端 |
CN105243334B (zh) * | 2015-09-17 | 2018-10-30 | 浪潮(北京)电子信息产业有限公司 | 一种数据存储保护方法与系统 |
CN107015982A (zh) * | 2016-01-27 | 2017-08-04 | 阿里巴巴集团控股有限公司 | 一种监控系统文件完整性的方法、装置和设备 |
CN106570065B (zh) * | 2016-10-10 | 2020-01-14 | 北京金堤科技有限公司 | 验证数据库中文件的时间戳是否伪造的方法和系统 |
CN108234436A (zh) * | 2016-12-22 | 2018-06-29 | 航天信息股份有限公司 | 一种基于OpenStack 对象存储的加密方法和系统 |
TW201824013A (zh) * | 2016-12-27 | 2018-07-01 | 泰德陽光有限公司 | 一種即時稽核的雲端存取方法 |
CN107272540A (zh) * | 2017-07-29 | 2017-10-20 | 深圳市益鑫智能科技有限公司 | 一种用于水产品养殖的水质智能监测系统 |
CN108446376B (zh) * | 2018-03-16 | 2022-04-08 | 众安信息技术服务有限公司 | 数据存储方法与装置 |
CN110324682A (zh) * | 2019-07-10 | 2019-10-11 | 中国联合网络通信集团有限公司 | 基于区块链的视频点播方法及系统 |
CN110474673B (zh) * | 2019-08-22 | 2022-02-25 | 上海航天计算机技术研究所 | 一种支持断点续传的动态在轨热更新方法 |
CN112883427A (zh) * | 2019-11-29 | 2021-06-01 | 航天信息股份有限公司 | 文件完整性的检测方法及装置 |
CN112989430A (zh) * | 2019-12-13 | 2021-06-18 | 华为技术有限公司 | 完整性校验方法、装置、终端设备及验证服务器 |
CN110830520B (zh) * | 2020-01-13 | 2020-04-17 | 中国人民解放军国防科技大学 | 一种物联网的健壮可靠的边缘存储方法及系统 |
CN111291002B (zh) * | 2020-03-05 | 2023-07-18 | 深圳市网心科技有限公司 | 文件对账方法、装置、计算机设备及存储介质 |
CN111966631A (zh) * | 2020-07-10 | 2020-11-20 | 福建升腾资讯有限公司 | 一种可快速分发的镜像文件生成方法、系统、设备和介质 |
CN111984605A (zh) * | 2020-07-14 | 2020-11-24 | 浙江大华技术股份有限公司 | 小文件管理方法、电子设备及存储装置 |
CN113064672A (zh) * | 2021-04-30 | 2021-07-02 | 中国工商银行股份有限公司 | 一种负载均衡设备配置信息的校验方法及装置 |
CN113032283B (zh) * | 2021-05-20 | 2021-08-13 | 华控清交信息科技(北京)有限公司 | 一种密文运算调试方法、计算引擎和密文运算系统 |
CN113704182B (zh) * | 2021-06-15 | 2023-05-12 | 成都统信软件技术有限公司 | 一种数据检查方法及计算设备 |
CN115225319A (zh) * | 2022-06-10 | 2022-10-21 | 中电云数智科技有限公司 | 一种数据校验方法及装置 |
CN117195300B (zh) * | 2023-09-20 | 2024-03-29 | 全拓科技(杭州)股份有限公司 | 一种大数据安全防护方法、装置及系统 |
CN117094037B (zh) * | 2023-10-16 | 2024-01-05 | 湘江实验室 | 基于Path+ORAM的多路径缓存写回方法、装置及相关设备 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100442277C (zh) * | 2004-08-24 | 2008-12-10 | 侯方勇 | 优化哈希树完整性校验的方法 |
FR2917259B1 (fr) * | 2007-06-08 | 2009-08-21 | Alcatel Lucent Sas | Utilisation d'un arbre de hachage a prefixes (pht) pour la localisation des services au sein d'un reseau de communication poste-a-poste |
CN101741845B (zh) * | 2009-12-08 | 2012-05-23 | 中国科学院声学研究所 | 一种基于分片的内容认证方法 |
-
2010
- 2010-11-11 CN CN 201010543265 patent/CN101976322B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101976322A (zh) | 2011-02-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101976322B (zh) | 基于一种完整性校验的安全元数据管理方法 | |
Xie et al. | zkbridge: Trustless cross-chain bridges made practical | |
US11709948B1 (en) | Systems and methods for generation of secure indexes for cryptographically-secure queries | |
CN109074462B (zh) | 使用分布式散列表和点对点分布式分类账验证数字资产所有权的方法和系统 | |
CN109314636B (zh) | 用于从区块链中安全提取数据的密码方法和系统 | |
US20200186354A1 (en) | Digital composition hashing | |
CN106789080A (zh) | 数字签名生成方法和系统 | |
US11870897B1 (en) | Post quantum unique key per token system | |
CN112069550B (zh) | 一种基于智能合约方式的电子合同存证系统 | |
CN112307513B (zh) | 基于时域共识的上链文档安全管理方法、装置和电子设备 | |
CN110224984A (zh) | 一种基于区块链技术的多方授权方法及装置 | |
CN115001730B (zh) | 分布式场景下基于角色属性的访问控制系统及方法 | |
Vaidya et al. | Commit signatures for centralized version control systems | |
US20220417029A1 (en) | Method and system for digital signatures utilizing multiplicative semigroups | |
CN113810185B (zh) | 一种抗陷门泄露的链上数据修复系统及方法 | |
CN105790928B (zh) | 一种基于数字摘要的文件分割方法 | |
Andi et al. | Securing Medical Records of COVID-19 Patients Using Elliptic Curve Digital Signature Algorithm (ECDSA) in Blockchain | |
CN113342743A (zh) | 一种基于联盟链区块链底层的电子档案数据交互的方法 | |
CN109491981B (zh) | 基于区块链的文件管理方法和装置 | |
CN113468549A (zh) | 基于区块链的加密信息存证的检索方法、系统及电子设备 | |
CN111046397A (zh) | 一种电子数据加密保管公证平台 | |
CN116599971B (zh) | 数字资产数据存储及应用方法、系统、设备及存储介质 | |
ANTOLINO-HERNÁNDEZ et al. | Management of digital documents with encrypted signature, through the use of centralized PKI, and distributed using blockchain for a secure exchange | |
Miao et al. | Blockchain-based electronic evidence storage and efficiency optimization | |
Peng et al. | Redactable Blockchain in the Permissioned Setting |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120523 Termination date: 20171111 |
|
CF01 | Termination of patent right due to non-payment of annual fee |