一种支持数据更新的加密数据块客户端去重方法转让专利

申请号 : CN201711347947.X

文献号 : CN108182367B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘茂珍杨超杨力张俊伟马建峰

申请人 : 西安电子科技大学

摘要 :

本发明公开了一种支持数据更新的加密数据块客户端去重方法,利用收敛加密算法,使得相同的明文文件块加密后映射为相同的密文文件块,构建新型动态平衡跳跃表作为文件所有权认证结构,进行服务器与文件后继上传者之间的文件所有权认证交互,实现加密数据块客户端去重。提出动态平衡跳跃表自平衡的方法,根据用户上传的动态操作指令和待更新的明文文件块的认证值,对动态平衡跳跃表中节点进行修改、插入和删除操作,本发明不仅提高了服务器去重比率和存储资源利用率,节省用户带宽和上传时间,而且支持数据块更新,实现服务器端数据弹性管理。

权利要求 :

1.一种支持数据更新的加密数据块客户端去重方法,其特征在于,包括如下步骤:步骤1,文件首位上传者对数据块进行加密处理:

文件首位上传者利用256位安全散列算法SHA256,以明文文件作为输入,计算明文文件的密钥,以明文文件的密钥作为输入,计算明文文件的标签;

文件首位上传者对明文文件进行长度为4kb的分块,生成多个明文文件块;

文件首位上传者利用256位安全散列算法SHA256,以每一个明文文件块作为输入,计算每一个明文文件块密钥,以每一个明文文件块和明文文件块密钥前后连接作为输入,计算每一个明文文件块的认证值;

文件首位上传者采用256位高级加密标准AES256中的加密算法,用明文文件块密钥加密明文文件块,得到密文文件块,用明文文件密钥加密明文文件块密钥的连接值,得到明文文件块密钥的连接值密文;

文件首位上传者将明文文件的标签、明文文件块的认证值、密文文件块和明文文件块密钥的连接值密文上传至服务器;

步骤2,服务器构建新型动态平衡跳跃表:

第一步,将每个明文文件块认证值对应的基层节点,按照明文文件块认证值对应的明文文件块的前后顺序,连接成一个单链表;

第二步,从当前链表左侧第一个节点开始,将每两个节点作为子节点生成一个父节点;

若当前链表中节点个数为奇数时,将剩余的最后三个节点作为子节点生成一个父节点;

第三步,利用256位安全散列算法SHA256,将每个父节点中每个子节点的哈希值,按照子节点左右顺序连接成哈希连接值作为输入,计算哈希连接值的哈希值,将哈希连接值的哈希值赋值给每个父节点的哈希值;

第四步,将每个父节点中每个子节点可达基层节点数的和赋值给每个父节点的可达的基层节点数;将生成每个父节点所用的节点数赋值给每个父节点的子节点数;

第五步,用每个父节点的下指针指向该节点左侧第一个子节点的位置,将生成的父节点按照生成的先后顺序链接成父链表;

第六步,删除不同父节点中子节点之间的指针;

第七步,判断父链表中是否只有一个节点,若是,则将父链表中的唯一节点标记为根节点,得到动态平衡跳跃表后执行步骤3;否则,以生成的父链表作为当前链表后执行本步骤的第二步;

步骤3,服务器对加密数据块进行去重操作:

服务器利用256位安全散列算法SHA256,以密文文件块作为输入,计算密文文件块的标签,删除已有相同密文文件块标签的重复密文文件块,完成服务器端的加密数据块去重操作;

步骤4,文件后继上传者与服务器进行文件所有权认证交互:

服务器利用随机函数随机生成两个正整数,将两个正整数发送给文件后继上传者;

文件后继上传者将两个正整数中的一个作为随机种子,生成与另一个正整数相等的多个随机数作为被挑战文件块的索引值;

文件后继上传者对明文文件进行长度为4kb的分块,生成多个明文文件块;

文件后继上传者利用256位安全散列算法SHA256,计算被挑战文件块的索引值所对应的被挑战文件块的认证值,将其发送至服务器;

步骤5,服务器确定该后继上传者是否是文件拥有者:

服务器将两个正整数中的一个作为随机种子,生成与另一个正整数相等的多个随机数作为被挑战文件块的索引值;

在动态平衡跳跃表中,服务器查找被挑战文件块索引值所对应基层节点的父节点和父节点的兄弟节点;

利用256位安全散列算法SHA256,服务器用兄弟节点的哈希值和接收到的被挑战文件块的认证值,重新计算动态平衡跳跃表根节点的哈希值;

判断动态平衡跳跃表根节点的哈希值与服务器本地所存储的根节点哈希值是否相等,若是,则文件所有权认证通过,服务器将后续上传者标记为文件拥有者后执行步骤6;否则,文件所有权认证失败;

步骤6,文件拥有者下载服务器端的密文文件块:

文件拥有者将明文文件的标签和下载请求发送至服务器;

服务器将明文文件标签对应的所有密文文件块和明文文件块密钥连接值的密文发送至文件拥有者;

步骤7,文件拥有者解密服务器端的密文文件块:

文件拥有者采用256位高级加密标准AES256中的解密算法,用明文文件的密钥解密明文文件块密钥的连接值密文,得到明文文件块密钥的连接值,用明文文件块的密钥解密密文文件块,得到明文文件块;

步骤8,文件拥有者对新的明文文件块进行加密处理:

文件拥有者将明文文件的标签和更新请求发送至服务器;

服务器将文件块密钥连接值的密文发送给文件拥有者;

采用256位高级加密标准AES256中的解密算法,文件拥有者用明文文件的密钥解密明文文件块密钥连接值的密文,得到明文文件块密钥的连接值;

利用256位安全散列算法SHA256,文件拥有者分别计算新的明文文件的密钥,新的明文文件的标签,待修改或待插入的明文文件块密钥和待修改或待插入的明文文件块的认证值;

文件拥有者利用待修改或待插入的明文文件块的索引值及其明文文件块密钥更新明文文件块密钥的连接值,得到新的明文文件块密钥的连接值;

采用256位高级加密标准AES256中的加密算法,文件拥有者用待修改或待插入的明文文件块密钥加密对应的明文文件块,得到待修改或待插入的密文文件块,用新的明文文件的密钥加密新的明文文件块密钥的连接值,得到新的明文文件块密钥的连接值密文;

文件拥有者将新的明文文件的标签、新的明文文件块密钥的连接值密文、动态操作指令、待修改或待插入或待删除文件块的索引值、待修改或待插入的密文文件块、待修改待插入的明文文件块的认证值发送至服务器;

步骤9,服务器对新的密文文件块进行去重操作:

服务器利用256位安全散列算法SHA256,计算待修改或待插入的密文文件块的标签,删除已有相同密文文件块标签的重复密文文件块,完成服务器端的加密数据块去重操作;

步骤10,服务器修改动态平衡跳跃表中的基层节点:

服务器查找待修改文件块的索引值对应基层节点的父节点和父节点的兄弟节点,利用

256位安全散列算法SHA256,服务器用待修改明文文件块的认证值和兄弟节点的认证值,更新父节点的认证值;

步骤11,服务器插入动态平衡跳跃表中的基层节点:

第一步,服务器查找待插入文件块的索引值对应基层节点的父节点,生成一个基层节点作为插入节点,用待插入明文文件块的哈希值赋值给插入节点的哈希值,插入节点可达基层节点数赋值为1,插入节点的子节点数赋值为0,将插入节点插入到待插入文件块的索引值所对应基层节点的后指针位置;

第二步,将最低层的父节点的子节点数加1,以最低层的父节点作为当前节点;

第三步,判断当前节点的子节点数是否等于3,若是,则执行本步骤的第四步;否则,执行本步骤的第五步;

第四步,利用当前节点的每一个子节点,更新当前节点的哈希值、可达基层节点数,执行本步骤的第六步;

第五步,利用当前节点的左侧第一个子节点和第二个子节点更新当前节点的哈希值、可达基层节点数和子节点数;利用当前节点的左侧第三个子节点和第四个子节点生成另一个节点,将生成的节点插入到当前节点的后指针位置,将当前节点的父节点的子节点数加

1;

第六步,判断当前节点是否为根节点,若是,则执行步骤12;否则,以上一层父节点作为当前节点,执行本步骤的第三步;

步骤12,服务器删除动态平衡跳跃表中的基层节点:

第一步,服务器查找待删除文件块的索引值对应基层节点的父节点,删除待删除文件块的索引值所对应的基层节点;

第二步,将最低层的父节点的子节点数减1,以最低层的父节点作为当前节点;

第三步,判断当前节点的子节点数是否等于2,若是,则执行本步骤的第四步;否则,执行本步骤的第五步;

第四步,利用当前节点的每一个子节点,更新当前节点的哈希值、可达基层节点数,执行本步骤的第十二步;

第五步,判断当前节点的后指针是否指向一个兄弟节点,若是,则执行本步骤的第六步;否则,执行本步骤的第九步;

第六步,判断当前节点的后指针所指的兄弟节点的子节点个数是否等于3,若是,则执行本步骤的第七步;否则,执行本步骤的第八步;

第七步,将当前节点的后指针所指兄弟节点的左侧第一个子节点作为当前节点的左侧第二个子节点,利用当前节点的两个子节点更新当前节点的哈希值、可达基层节点数和子节点数,利用当前节点的后指针所指的兄弟节点剩余的两个子节点更新该兄弟节点的哈希值、可达基层节点数和子节点数,执行本步骤的第十二步;

第八步,将当前节点的唯一子节点作为当前节点后指针所指兄弟节点的左侧第一个子节点,利用当前节点后指针所指兄弟节点的三个子节点更新该兄弟节点的哈希值、可达基层节点数和子节点数,删除当前节点,将上一层父节点的子节点数减1后执行本步骤的第十二步;

第九步,判断当前节点的前一个兄弟节点的子节点个数是否等于3,若是,则执行本步骤的第十步;否则,执行本步骤的第十一步;

第十步,将前一个兄弟节点的左侧第三个子节点作为当前节点的左侧第一个子节点,利用当前节点的两个子节点更新当前节点的哈希值、可达基层节点数和子节点数,利用当前节点的前一个兄弟节点剩余的两个子节点更新该兄弟节点的哈希值、可达基层节点数和子节点数,执行本步骤的第十二步;

第十一步,将当前节点的唯一子节点作为当前节点的前一个兄弟节点的左侧第三个子节点,利用当前节点的前一个兄弟节点的三个子节点更新该兄弟节点的哈希值、可达基层节点数和子节点数,删除当前节点,将上一层父节点的子节点数减1;

第十二步,判断当前节点是否是根节点,若是,执行步骤13;否则,以上一层的父节点作为当前节点,执行本步骤的第三步;

步骤13,动态平衡跳跃表更新完毕。

2.根据权利要求1所述的一种支持数据更新的加密数据块客户端去重方法,其特征在于:步骤2第一步中所述的基层节点是指,位于动态平衡跳跃表底层的节点。

3.根据权利要求1所述的一种支持数据更新的加密数据块客户端去重方法,其特征在于:步骤2第二步中所述的节点是指,构成动态平衡跳跃表的基本单元,每个节点由一个五元组构成,五元组成员分别为节点哈希值、节点可达基层节点数、子节点数、后指针和下指针。

4.根据权利要求1所述的一种支持数据更新的加密数据块客户端去重方法,其特征在于:步骤5中所述的父节点是指,从根节点到某个基层节点的查找过程中所访问到的节点中满足可达节点包括该基层节点的节点,不包括基层节点本身。

5.根据权利要求1所述的一种支持数据更新的加密数据块客户端去重方法,其特征在于:步骤5中所述的兄弟节点是指,在同一单链表中的其他节点的统称。

说明书 :

一种支持数据更新的加密数据块客户端去重方法

技术领域

[0001] 本发明属于计算机技术领域,进一步涉及信息安全技术领域中的一种支持数据更新的加密数据块客户端去重方法。本发明可用于支持加密数据块去重和更新的云存储系统,不仅可提高去重比率,节省用户的上传带宽和服务器的存储空间,还支持用户对文件块的更新操作,实现数据弹性管理。

背景技术

[0002] 云存储数据去重技术广泛地应用在数据备份中减少网络和存储开销。该技术可以消除数据冗余,只留下一个物理副本,而不会保留多个相同内容的数据拷贝。数据去重技术基于不同的去重策略,可分为客户端或服务器端去重,文件级或文件块级去重等。客户端去重相比于服务器端去重,可以减少重复数据的上传,节省用户带宽和上传时间,带来更好的用户体验。文件块级去重相比于文件级去重,可以实现更细粒度的去重,提高去重比率和存储资源利用率。因此,加密数据块去重技术或者加密数据客户端去重技术得到云存储服务供应商的肯定和支持。但现实生活中,人们往往需要对云端备份文件提出更新请求,因此,数据去重技术支持用户对云端数据的更新,实现服务器对数据的弹性管理,具有重大的现实需求。
[0003] 北京安码科技有限公司在其申请的专利文献“一种安全的重复数据删除方法” (申请号:201310736892.7,公开号:CN 103731423A)中公开了一种重复数据删除的方法。该方法的具体步骤包括:客户端对需要存储的文件运用同一密钥不同的加密算法加密成密文;服务器首先通过文件的哈希值判断是否存储过该文件;客户端通过服务器返回的密文解密出密钥,再用另一加密算法加密;服务器通过对比文件用同一加密算法两次加密判断是否进行重复数据删除。该方法存在的不足之处是:该方法中的密钥是由用户随机产生的,不能抵抗由文件首位上传者发起的内容欺骗攻击,安全性较低,而且该方法不支持文件块级去重,去重粒度小,去重比率低。
[0004] Chen R,Mu Y and Yang G等人在其发表的论文“BL-MLE:Block-Level Message-Locked Encryption for Secure Large File Deduplication”(IEEE Transactions onInformation Forensics Security,2015,10(12):2643–2652.)中提出了一种加密文件块的去重方法。该方法基于收敛加密算法对文件块进行加密处理,实现文件块级去重。该方法的具体步骤:客户端利用文件块的哈希值加密文件块,再利用文件的哈希值对文件块的内容进行指数运算,产生文件块标签。服务器通过双线性对等式判断不同文件中是否存在相同文件块,删除重复加密文件块,从而实现文件块级去重。该方法存在的不足之处是:使用双线性算法和指数运算,计算复杂度高,效率低;不能支持用户对文件块的更新操作,若用户想要更新云端备份文件,则需要上传更新后的整个文件,而不仅是需要更新的文件块,从而浪费用户上传带宽和上传时间。
[0005] He K,Chen J,Du R等人在其发表的论文“DeyPoS:Deduplicatable Dynamic Proof of Storage for Multi-User Environments”(IEEE Transactions on Computers, 2016,65(12):3631–3645.)中提出了一种云存储数据去重环境下支持动态更新的文件所有权认证和完整性验证的方法。该方法设计了一种新的文件所有权认证结构——同态认证树,它可支持三种更新操作,可满足用户对文件块的更新需求。同态认证树中各节点的计算采用同态算法,服务器基于该结构对文件后继上传者进行文件所有权的认证。该方案存在的不足之处是:大规模的插入和删除操作会导致同态认证结构的失衡,从而失去二分查找的高效性;该方法不支持加密文件块去重,去重比率低。
[0006] Zhao,Yongjun,and S.S.M.Chow在其发表的论文“Updatable Block-Level Message-Locked Encryption[C]”(ACM  Asia Conference on Computer and Communications Security.ACM,2017.)中提出了一种可更新的基于收敛加密算法的数据块去重方法。该方法的具体步骤:用户利用文件块的哈希值加密文件块,将文件块哈希值前后连接作为新明文文件块,再利用新明文文件块的哈希值加密对应的新明文文件块,直到产生最后一个明文文件块,该明文文件块的哈希值作为文件的主密钥,用于文件的加密和更新;服务器基于上述加密文件块建立 Merkle Tree,用于文件块和文件块密钥连接值的存储与更新。该方法存在的不足之处是:没有提出安全高效的文件所有权认证方法,造成大量重复文件块的上传,浪费用户带宽;采用迭代收敛加密算法计算文件块密文,使得文件块密文的解密过程效率低;Merkle Tree因自身的结构限制,仅支持叶子节点的修改更新,并不支持叶子节点插入和删除更新,因此,不能完全满足用户对文件块的更新需求。

发明内容

[0007] 本发明的目的是针对上述现有技术的不足,提出一种支持数据更新的加密数据块客户端去重方法。
[0008] 为了实现本发明目的的具体思路是:采用收敛加密算法计算加密文件块的方法,确保相同的明文文件块加密后映射为相同的密文文件块,实现不同文件中相同文件块的去重,保护数据私密性,提高服务器端的去重比率和存储资源利用率。基于跳跃表概率上高效查找和支持更新操作的特性,提出具有二分查找优势的新型动态平衡跳跃表作为文件所有权的认证结构和新的认证方法,实现服务器与文件后继上传者的文件所有权认证交互,避免了相同数据块重复上传,节省用户带宽和上传时间。最后,借鉴平衡二叉树结构平衡特性,提出动态平衡跳跃表更新操作自平衡的方法,根据用户上传的动态操作指令和待更新的明文文件块的认证值,实现动态平衡跳跃表中节点的修改、插入和删除操作,以支持云端文件块的更新,实现服务器端数据弹性管理。
[0009] 本发明的具体步骤包括如下:
[0010] 步骤1,文件首位上传者对数据块进行加密处理:
[0011] 文件首位上传者利用256位安全散列算法SHA256,以明文文件作为输入,计算明文文件的密钥,以明文文件的密钥作为输入,计算明文文件的标签;
[0012] 文件首位上传者对明文文件进行长度为4kb的分块,生成多个明文文件块;
[0013] 文件首位上传者利用256位安全散列算法SHA256,以每一个明文文件块作为输入,计算每一个明文文件块密钥,以每一个明文文件块和明文文件块密钥前后连接作为输入,计算每一个明文文件块的认证值;
[0014] 文件首位上传者采用256位高级加密标准AES256中的加密算法,用明文文件块密钥加密明文文件块,得到密文文件块,用明文文件密钥加密明文文件块密钥的连接值,得到明文文件块密钥的连接值密文;
[0015] 文件首位上传者将明文文件的标签、明文文件块的认证值、密文文件块和明文文件块密钥的连接值密文上传至服务器;
[0016] 步骤2,服务器构建新型动态平衡跳跃表:
[0017] 第一步,将每个明文文件块认证值对应的基层节点,按照明文文件块认证值对应的明文文件块的前后顺序,连接成一个单链表;
[0018] 第二步,从当前链表左侧第一个节点开始,将每两个节点作为子节点生成一个父节点;若当前链表中节点个数为奇数时,将剩余的最后三个节点作为子节点生成一个父节点;
[0019] 第三步,利用256位安全散列算法SHA256,将每个父节点中每个子节点的哈希值,按照子节点左右顺序连接成哈希连接值作为输入,计算哈希连接值的哈希值,将哈希连接值的哈希值赋值给每个父节点的哈希值;
[0020] 第四步,将每个父节点中每个子节点可达基层节点数的和赋值给每个父节点的可达的基层节点数;将生成每个父节点所用的节点数赋值给每个父节点的子节点数;
[0021] 第五步,用每个父节点的下指针指向该节点左侧第一个子节点的位置,将生成的父节点按照生成的先后顺序链接成父链表;
[0022] 第六步,删除不同父节点中子节点之间的指针;
[0023] 第七步,判断父链表中是否只有一个节点,若是,则将父链表中的唯一节点标记为根节点,得到动态平衡跳跃表后执行步骤3;否则,以生成的父链表作为当前链表后执行本步骤的第二步;
[0024] 步骤3,服务器对加密数据块进行去重操作:
[0025] 服务器利用256位安全散列算法SHA256,以密文文件块作为输入,计算密文文件块的标签,删除已有相同密文文件块标签的重复密文文件块,完成服务器端的加密数据块去重操作;
[0026] 步骤4,文件后继上传者与服务器进行文件所有权认证交互:
[0027] 服务器利用随机函数随机生成两个正整数,将两个正整数发送给文件后继上传者;
[0028] 文件后继上传者将两个正整数中的一个作为随机种子,生成与另一个正整数相等的多个随机数作为被挑战文件块的索引值;
[0029] 文件后继上传者对明文文件进行长度为4kb的分块,生成多个明文文件块;
[0030] 文件后继上传者利用256位安全散列算法SHA256,计算被挑战文件块的索引值所对应的被挑战文件块的认证值,将其发送至服务器;
[0031] 步骤5,服务器确定该后继上传者是否是文件拥有者:
[0032] 服务器将两个正整数中的一个作为随机种子,生成与另一个正整数相等的多个随机数作为被挑战文件块的索引值;
[0033] 在动态平衡跳跃表中,服务器查找被挑战文件块索引值所对应基层节点的父节点和父节点的兄弟节点;
[0034] 利用256位安全散列算法SHA256,服务器用兄弟节点的哈希值和接收到的被挑战文件块的认证值,重新计算动态平衡跳跃表根节点的哈希值;
[0035] 判断动态平衡跳跃表根节点的哈希值与服务器本地所存储的根节点哈希值是否相等,若是,则文件所有权认证通过,服务器将后续上传者标记为文件拥有者后执行步骤6;否则,文件所有权认证失败;
[0036] 步骤6,文件拥有者下载服务器端的密文文件块:
[0037] 文件拥有者将明文文件的标签和下载请求发送至服务器;
[0038] 服务器将明文文件标签对应的所有密文文件块和明文文件块密钥连接值的密文发送至文件拥有者;
[0039] 步骤7,文件拥有者解密服务器端的密文文件块:
[0040] 文件拥有者采用256位高级加密标准AES256中的解密算法,用明文文件的密钥解密明文文件块密钥的连接值密文,得到明文文件块密钥的连接值,用明文文件块密钥解密密文文件块,得到明文文件块;
[0041] 步骤8,文件拥有者对新的明文文件块进行加密处理:
[0042] 文件拥有者将明文文件的标签和更新请求发送至服务器;
[0043] 服务器将文件块密钥连接值的密文发送给文件拥有者;
[0044] 采用256位高级加密标准AES256中的解密算法,文件拥有者用明文文件的密钥解密明文文件块密钥连接值的密文,得到明文文件块密钥的连接值;
[0045] 利用256位安全散列算法SHA256,文件拥有者分别计算新的明文文件的密钥,新的明文文件的标签,待修改或待插入的明文文件块密钥和待修改或待插入的明文文件块的认证值;
[0046] 文件拥有者利用待修改或待插入的明文文件块的索引值及其明文文件块密钥更新明文文件块密钥的连接值,得到新的明文文件块密钥的连接值;
[0047] 采用256位高级加密标准AES256中的加密算法,文件拥有者用待修改或待插入的明文文件块密钥加密对应的明文文件块,得到待修改或待插入的密文文件块,用新的明文文件的密钥加密新的明文文件块密钥的连接值,得到新的明文文件块密钥的连接值密文;
[0048] 文件拥有者将新的明文文件的标签、新的明文文件块密钥的连接值密文、动态操作指令、待修改或待插入或待删除文件块的索引值、待修改或待插入的密文文件块、待修改待插入的明文文件块的认证值发送至服务器;
[0049] 步骤9,服务器对新的密文文件块进行去重操作:
[0050] 服务器利用256位安全散列算法SHA256,计算待修改或待插入的密文文件块的标签,删除已有相同密文文件块标签的重复密文文件块,完成服务器端的加密数据块去重操作;
[0051] 步骤10,服务器修改动态平衡跳跃表中的基层节点:
[0052] 服务器查找待修改文件块的索引值对应基层节点的父节点和父节点的兄弟节点,利用256位安全散列算法SHA256,服务器用待修改明文文件块的认证值和兄弟节点的认证值,更新父节点的认证值;
[0053] 步骤11,服务器插入动态平衡跳跃表中的基层节点:
[0054] 第一步,服务器查找待插入文件块的索引值对应基层节点的父节点,生成一个基层节点作为插入节点,用待插入明文文件块的哈希值赋值给插入节点的哈希值,插入节点可达基层节点数赋值为1,插入节点的子节点数赋值为0,将插入节点插入到待插入文件块的索引值所对应基层节点的后指针位置;
[0055] 第二步,将最低层的父节点的子节点数加1,以最低层的父节点作为当前节点;
[0056] 第三步,判断当前节点的子节点数是否等于3,若是,则执行本步骤的第四步;否则,执行本步骤的第五步;
[0057] 第四步,利用当前节点的每一个子节点,更新当前节点的哈希值、可达基层节点数,执行本步骤的第六步;
[0058] 第五步,利用当前节点的左侧第一个子节点和第二个子节点更新当前节点的哈希值、可达基层节点数和子节点数;利用当前节点的左侧第三个子节点和第四个子节点生成另一个节点,将生成的节点插入到当前节点的后指针位置,将当前节点的父节点的子节点数加1后执行本步骤的第六步;
[0059] 第六步,判断当前节点是否为根节点,若是,则执行步骤12;否则,以上一层父节点作为当前节点,执行本步骤的第三步;
[0060] 步骤12,服务器删除动态平衡跳跃表中的基层节点:
[0061] 第一步,服务器查找待删除文件块的索引值对应基层节点的父节点,删除待删除文件块的索引值所对应的基层节点;
[0062] 第二步,将最低层的父节点的子节点数减1,以最低层的父节点作为当前节点;
[0063] 第三步,判断当前节点的子节点数是否等于2,若是,则执行本步骤的第四步;否则,执行本步骤的第五步;
[0064] 第四步,利用当前节点的每一个子节点,更新当前节点的哈希值、可达基层节点数,执行本步骤的第十二步;
[0065] 第五步,判断当前节点的后指针是否指向一个兄弟节点,若是,则执行本步骤的第六步;否则,执行本步骤的第九步;
[0066] 第六步,判断当前节点的后指针所指的兄弟节点的子节点个数是否等于3,若是,则执行本步骤的第七步;否则,执行本步骤的第八步;
[0067] 第七步,将当前节点的后指针所指兄弟节点的左侧第一个子节点作为当前节点的左侧第二个子节点,利用当前节点的两个子节点更新当前节点的哈希值、可达基层节点数和子节点数,利用当前节点的后指针所指的兄弟节点剩余的两个子节点更新该兄弟节点的哈希值、可达基层节点数和子节点数,执行本步骤的第十二步;
[0068] 第八步,将当前节点的唯一子节点作为当前节点后指针所指兄弟节点的左侧第一个子节点,利用当前节点后指针所指兄弟节点的三个子节点更新该兄弟节点的哈希值、可达基层节点数和子节点数,删除当前节点,将上一层父节点的子节点数减1后执行本步骤的第十二步;
[0069] 第九步,判断当前节点的前一个兄弟节点的子节点个数是否等于3,若是,则执行本步骤的第十步;否则,执行本步骤的第十一步;
[0070] 第十步,将前一个兄弟节点的左侧第三个子节点作为当前节点的左侧第一个子节点,利用当前节点的两个子节点更新当前节点的哈希值、可达基层节点数和子节点数,利用当前节点的前一个兄弟节点剩余的两个子节点更新该兄弟节点的哈希值、可达基层节点数和子节点数,执行本步骤的第十二步;
[0071] 第十一步,将当前节点的唯一子节点作为当前节点的前一个兄弟节点的左侧第三个子节点,利用当前节点的前一个兄弟节点的三个子节点更新该兄弟节点的哈希值、可达基层节点数和子节点数,删除当前节点,将上一层父节点的子节点数减1;
[0072] 第十二步,判断当前节点是否是根节点,若是,执行步骤13;否则,以上一层的父节点作为当前节点,执行本步骤的第三步;
[0073] 步骤13,动态平衡跳跃表更新完毕。
[0074] 本发明与现有技术相比具有以下优点:
[0075] 第一,由于本发明根据明文文件块的认证值构建了一个新型动态平衡跳跃表,并将该动态平衡跳跃表作为上传文件所有权的认证结构,实现用户与服务器之间的上传文件所有权认证交互,克服了现有技术存在不能支持文件块客户端去重的缺陷,使得本发明具有避免相同数据块重复上传,节省用户带宽和上传时间,提高服务器存储资源利用率的优点。
[0076] 第二,由于本发明提出了一种动态平衡跳跃表更新自平衡的方法,根据用户上传的动态操作指令和待更新的明文文件块的认证值,对动态平衡跳跃表进行节点的修改、插入和删除操作,克服了现有技术中不能满足用户高效更新云端备份数据的缺陷,使得本发明具有支持数据块更新,实现服务器端数据弹性管理的优点。

附图说明

[0077] 图1为本发明的流程图。
[0078] 图2为本发明的服务器构建新型动态平衡跳跃表步骤的示意图。
[0079] 图3为本法明的文件拥有者对新的明文文件块进行加密处理的流程图;
[0080] 图4为本法明的服务器修改动态平衡跳跃表中基层节点的示意图;
[0081] 图5为本法明的服务器插入动态平衡跳跃表中基层节点的示意图;
[0082] 图6为本法明的服务器删除动态平衡跳跃表中基层节点的示意图;
[0083] 图7为本法明的服务器删除动态平衡跳跃表中的基层节点的流程图。

具体实施方式

[0084] 下面结合附图对本发明做进一步的详细描述。
[0085] 下面结合附图1对本发明实现的步骤做进一步的详细描述。
[0086] 步骤1,文件首位上传者对数据块进行加密处理。
[0087] 文件首位上传者利用256位安全散列算法SHA256,以明文文件作为输入,计算明文文件的密钥,以明文文件的密钥作为输入,计算明文文件的标签。
[0088] 所述的256位安全散列算法SHA256是指:美国国家标准技术研究所发布的联邦信息处理标准FIPS PUB 180-3中规定的256位单向散列算法SHA256,适用于长度不超过264二进制位的消息。
[0089] 文件首位上传者对明文文件进行长度为4kb的分块,生成多个明文文件块。
[0090] 文件首位上传者利用256位安全散列算法SHA256,以每一个明文文件块作为输入,计算每一个明文文件块密钥,以每一个明文文件块和明文文件块密钥前后连接作为输入,计算每一个明文文件块的认证值。
[0091] 所述的256位安全散列算法SHA256是指:美国国家标准技术研究所发布的联邦信息处理标准FIPS PUB 180-3中规定的256位单向散列算法SHA256,适用于长度不超过264二进制位的消息。
[0092] 文件首位上传者采用256位高级加密标准AES256中的加密算法,用明文文件块密钥加密明文文件块,得到密文文件块,用明文文件的密钥加密明文文件块密钥的连接值,得到明文文件块密钥的连接值密文。
[0093] 所述的256位高级加密标准AES256是指:美国联邦政府采用的一种区块加密标准,其中,密钥的长度为256位的高级加密标准。
[0094] 文件首位上传者将明文文件的标签、明文文件块的认证值、密文文件块和明文文件块密钥的连接值密文上传至服务器。
[0095] 步骤2,服务器构建新型动态平衡跳跃表。
[0096] 下面结合附图2对服务器构建动态平衡跳跃表的步骤做进一步的详细描述。
[0097] 图2中A、B、C、D表示四个基层节点,其中,以“△”标示的节点表示根节点,以“○”标示的节点表示基层节点, 表示被删除的指针。E表示节点A和节点B的父节点,F表示节点C和节点D的父节点,R表示节点E和节点F的父节点,同时也表示整个动态平衡跳跃表的根节点。
[0098] 第一步,将每个明文文件块认证值对应的基层节点,按照明文文件块认证值对应的明文文件块的前后顺序,连接成一个单链表。
[0099] 所述的基层节点是指,位于动态平衡跳跃表底层的节点。
[0100] 第二步,从当前链表左侧第一个节点开始,将每两个节点作为子节点生成一个父节点;若当前链表中节点个数为奇数时,将剩余的最后三个节点作为子节点生成一个父节点。
[0101] 所述的节点是指,构成动态平衡跳跃表的基本单元,每个节点由一个五元组构成,元组成员分别为节点哈希值、节点可达基层节点数、子节点数、后指针和下指针。
[0102] 第三步,利用256位安全散列算法SHA256,将每个父节点中每个子节点的哈希值,按照子节点左右顺序连接成哈希连接值作为输入,计算哈希连接值的哈希值,将哈希连接值的哈希值赋值给每个父节点的哈希值。
[0103] 所述的256位安全散列算法SHA256是指:美国国家标准技术研究所发布的联邦信息处理标准FIPS PUB 180-3中规定的256位单向散列算法SHA256,适用于长度不超过264二进制位的消息。
[0104] 第四步,将每个父节点中每个子节点可达基层节点数的和赋值给每个父节点的可达的基层节点数;将生成每个父节点所用的节点数赋值给每个父节点的子节点数。
[0105] 第五步,用每个父节点的下指针指向该节点左侧第一个子节点的位置,将生成的父节点按照生成的先后顺序链接成父链表。
[0106] 第六步,删除不同父节点中子节点之间的指针。
[0107] 第七步,判断父链表中是否只有一个节点,若是,则将父链表中的唯一节点标记为根节点,得到动态平衡跳跃表后执行步骤3;否则,以生成的父链表作为当前链表后执行本步骤的第二步。
[0108] 所述的父链表是指,由多个父节点构成的单链表。
[0109] 步骤3,服务器对加密数据块进行去重操作。
[0110] 服务器利用256位安全散列算法SHA256,以密文文件块作为输入,计算密文文件块的标签,删除已有相同密文文件块标签的重复密文文件块,完成服务器端的加密数据块去重操作。
[0111] 所述的256位安全散列算法SHA256是指:美国国家标准技术研究所发布的联邦信息处理标准FIPS PUB 180-3中规定的256位单向散列算法SHA256,适用于长度不超过264二进制位的消息。
[0112] 步骤4,文件后继上传者与服务器进行文件所有权认证交互。
[0113] 服务器利用随机函数随机生成两个正整数,将两个正整数发送给文件后继上传者。
[0114] 文件后继上传者将两个正整数中的一个作为随机种子,生成与另一个正整数相等的多个随机数作为被挑战文件块的索引值。
[0115] 文件后继上传者对明文文件进行长度为4kb的分块,生成多个明文文件块。
[0116] 文件后继上传者利用256位安全散列算法SHA256,计算被挑战文件块的索引值所对应的被挑战文件块的认证值,将其发送至服务器。
[0117] 所述的256位安全散列算法SHA256是指:美国国家标准技术研究所发布的联邦信息处理标准FIPS PUB 180-3中规定的256位单向散列算法SHA256,适用于长度不超过264二进制位的消息。
[0118] 步骤5,服务器确定该后继上传者是否是文件拥有者。
[0119] 服务器将两个正整数中的一个作为随机种子,生成与另一个正整数相等的多个随机数作为被挑战文件块的索引值。
[0120] 在动态平衡跳跃表中,服务器查找被挑战文件块索引值所对应基层节点的父节点和父节点的兄弟节点。
[0121] 所述的父节点是指,从根节点到某个基层节点的查找过程中所访问到的节点中满足可达节点包括该基层节点的节点,不包括基层节点本身。
[0122] 所述的兄弟节点是指,在同一单链表中的其他节点的统称。
[0123] 利用256位安全散列算法SHA256,服务器用兄弟节点的哈希值和接收到的被挑战文件块的认证值,重新计算动态平衡跳跃表根节点的哈希值。
[0124] 所述的256位安全散列算法SHA256是指:美国国家标准技术研究所发布的联邦信息处理标准FIPS PUB 180-3中规定的256位单向散列算法SHA256,适用于长度不超过264二进制位的消息。
[0125] 判断动态平衡跳跃表根节点的哈希值与服务器本地所存储的根节点哈希值是否相等,若是,则文件所有权认证通过,服务器将后续上传者标记为文件拥有者后执行步骤6;否则,文件所有权认证失败。
[0126] 步骤6,文件拥有者下载服务器端的密文文件块。
[0127] 文件拥有者将明文文件的标签和下载请求发送至服务器。
[0128] 服务器将明文文件标签对应的所有密文文件块和明文文件块密钥连接值的密文发送至文件拥有者。
[0129] 步骤7,文件拥有者解密服务器端的密文文件块。
[0130] 文件拥有者采用256位高级加密标准AES256中的解密算法,用明文文件的密钥解密明文文件块密钥的连接值密文,得到明文文件块密钥的连接值,用明文文件块密钥解密密文文件块,得到明文文件块。
[0131] 所述的256位高级加密标准AES256是指:美国联邦政府采用的一种区块加密标准,其中,密钥的长度为256位的高级加密标准。
[0132] 步骤8,文件拥有者对新的明文文件块进行加密处理。
[0133] 下面结合附图3对新明文文件块加密的步骤做进一步的详细描述。
[0134] 文件拥有者将明文文件的标签和更新请求发送至服务器。
[0135] 服务器将文件块密钥连接值的密文发送给文件拥有者。
[0136] 采用256位高级加密标准AES256中的解密算法,文件拥有者用明文文件的密钥解密明文文件块密钥连接值的密文,得到明文文件块密钥的连接值。
[0137] 所述的256位高级加密标准AES256是指:美国联邦政府采用的一种区块加密标准,其中,密钥的长度为256位的高级加密标准。
[0138] 利用256位安全散列算法SHA256,文件拥有者分别计算新的明文文件的密钥,新的明文文件的标签,待修改或待插入的明文文件块密钥和待修改或待插入的明文文件块的认证值。
[0139] 所述的256位安全散列算法SHA256是指:美国国家标准技术研究所发布的联邦信息处理标准FIPS PUB 180-3中规定的256位单向散列算法SHA256,适用于长度不超过264二进制位的消息。
[0140] 文件拥有者利用待修改或待插入的明文文件块的索引值及其明文文件块密钥更新明文文件块密钥的连接值,得到新的明文文件块密钥的连接值。
[0141] 采用256位高级加密标准AES256中的加密算法,文件拥有者用待修改或待插入的明文文件块密钥加密对应的明文文件块,得到待修改或待插入的密文文件块,用新的明文文件的密钥加密新的明文文件块密钥的连接值,得到新的明文文件块密钥的连接值密文。
[0142] 所述的256位高级加密标准AES256是指:美国联邦政府采用的一种区块加密标准,其中,密钥的长度为256位的高级加密标准。
[0143] 文件拥有者将新的明文文件的标签、新的明文文件块密钥的连接值密文、动态操作指令、待修改或待插入或待删除文件块的索引值、待修改或待插入的密文文件块、待修改待插入的明文文件块的认证值发送至服务器。
[0144] 步骤9,服务器对新的密文文件块进行去重操作。
[0145] 服务器利用256位安全散列算法SHA256,计算待修改或待插入的密文文件块的标签,删除已有相同密文文件块标签的重复密文文件块,完成服务器端的加密数据块去重操作。
[0146] 所述的256位安全散列算法SHA256是指:美国国家标准技术研究所发布的联邦信息处理标准FIPS PUB 180-3中规定的256位单向散列算法SHA256,适用于长度不超过264二进制位的消息。
[0147] 步骤10,服务器修改动态平衡跳跃表中的基层节点。
[0148] 下面结合附图4对服务器在动态平衡跳跃表底层,修改某个位置上基层节点的步骤做进一步的详细描述。
[0149] 图4中以 标示的节点表示父节点,以 标示的节点表示兄弟节点,以“○”标示的节点表示修改的基层节点。
[0150] 图4(a)为服务器修改操作前存储的动态平衡跳跃表,图4(b)为服务器修改操作后的动态平衡跳跃表。
[0151] 图4(a)中A、B、C、D表示四个基层节点,E表示节点A和节点B的父节点,F表示节点C和节点D的父节点,R表示节点E和节点F的父节点,同时也表示整个动态平衡跳跃表的根节点。
[0152] 图4(b)中的C表示修改的基层节点,R、F表示节点C的父节点,E、D 表示父节点的兄弟节点,其中E表示节点F的兄弟节点,D表示节点C的兄弟节点。
[0153] 服务器查找待修改文件块的索引值对应基层节点的父节点和父节点的兄弟节点,利用256位安全散列算法SHA256,服务器用待修改明文文件块的认证值和兄弟节点的认证值,更新父节点的认证值。
[0154] 所述的256位安全散列算法SHA256是指:美国国家标准技术研究所发布的联邦信息处理标准FIPS PUB 180-3中规定的256位单向散列算法SHA256,适用于长度不超过264二进制位的消息。
[0155] 步骤11,服务器插入动态平衡跳跃表中的基层节点。
[0156] 下面结合附图5对服务器在动态平衡跳跃表底层的某个位置插入一个基层节点的步骤做进一步的详细描述。
[0157] 图5中以 标示的节点表示父节点,以 标示的节点表示兄弟节点,以“○”标示的节点表示被插入的节点, 表示被删除的指针。
[0158] 图5(a)为服务器插入节点G操作前存储的动态平衡跳跃表,图5(b)为服务器插入基层节点G操作后的动态平衡跳跃表,图5(c)为服务器插入节点 H操作前存储的动态平衡跳跃表,图5(d)为服务器插入基层节点H操作后的动态平衡跳跃表。
[0159] 图5(a)中A、B、C、D表示四个基层节点,E表示节点A和节点B的父节点,F表示节点C和节点D的父节点,R表示节点E和节点F的父节点,同时也表示整个动态平衡跳跃表的根节点。
[0160] 图5(b)中G表示被插入的基层节点,R、F表示节点G的父节点,E、C、 D表示父节点的兄弟节点,其中E表示节点F的兄弟节点,C、D表示节点G的兄弟节点。
[0161] 图5(c)中A、B、G、C、D表示五个基层节点,E表示节点A和节点B 的父节点,F表示节点G、节点C和节点D的父节点,R表示节点E和节点F 的父节点,同时也表示整个动态平衡跳跃表的根节点。
[0162] 图5(d)中H表示被插入的基层节点,R、F表示节点H的父节点,E、G、 C、D表示父节点的兄弟节点,其中E表示节点F的兄弟节点,G、C、D表示节点H的兄弟节点;在更新过程中,生成新的I节点插入到F节点后指针位置。
[0163] 第一步,服务器查找待插入文件块的索引值对应基层节点的父节点,生成一个基层节点作为插入节点,用待插入明文文件块的哈希值赋值给插入节点的哈希值,插入节点可达基层节点数赋值为1,插入节点的子节点数赋值为0,将插入节点插入到待插入文件块的索引值所对应基层节点的后指针位置。
[0164] 第二步,将最低层的父节点的子节点数加1,以最低层的父节点作为当前节点。
[0165] 第三步,判断当前节点的子节点数是否等于3,若是,则执行本步骤的第四步;否则,执行本步骤的第五步。
[0166] 第四步,利用当前节点的每一个子节点,更新当前节点的哈希值、可达基层节点数,执行本步骤的第六步。
[0167] 第五步,利用当前节点的左侧第一个子节点和第二个子节点更新当前节点的哈希值、可达基层节点数和子节点数;利用当前节点的左侧第三个子节点和第四个子节点生成另一个节点,将生成的节点插入到当前节点的后指针位置,将当前节点的父节点的子节点数加1。
[0168] 第六步,判断当前节点是否为根节点,若是,则执行步骤12;否则,以上一层父节点作为当前节点,执行本步骤的第三步。
[0169] 步骤12,服务器删除动态平衡跳跃表中的基层节点。
[0170] 下面结合附图6的示意图和附图7的流程图,对服务器在动态平衡跳跃表底层,删除某个位置上基层节点的步骤做进一步的详细描述。
[0171] 图6中以 标示的节点表示父节点,以 标示的节点表示兄弟节点,以“○”标示的节点表示被删除的节点, 表示被删除的指针。
[0172] 图6(a)为服务器删除基层节点G操作前存储的动态平衡跳跃表,图6(b) 为服务器删除基层节点G操作后的动态平衡跳跃表,图6(c)为服务器删除基层节点C操作前存储的动态平衡跳跃表,图6(d)为服务器删除基层节点C操作后的动态平衡跳跃表;
[0173] 图6(a)中A、B、G、C、D表示五个基层节点,E表示节点A和节点B 的父节点,F表示节点G、节点C和节点D的父节点,R表示节点E和节点F 的父节点,同时也表示整个动态平衡跳跃表的根节点。
[0174] 图6(b)中G表示被删除的基层节点,R、F表示节点G的父节点,E、C、 D表示父节点的兄弟节点,其中E表示节点F的兄弟节点,C、D表示节点G的兄弟节点。
[0175] 图6(c)中A、B、C、D表示四个基层节点,E表示节点A和节点B的父节点,F表示节点C和节点D的父节点,R表示节点E和节点F的父节点,同时也表示整个动态平衡跳跃表的根节点。
[0176] 图6(d)中C表示被删除的基层节点,R、F表示节点C的父节点,E、D 表示父节点的兄弟节点,其中E表示节点F的兄弟节点,D表示节点C的兄弟节点;在更新过程中,F节点被删除,D节点在移动到B节点后指针的位置。
[0177] 第一步,服务器查找待删除文件块的索引值对应基层节点的父节点,删除待删除文件块的索引值所对应的基层节点。
[0178] 第二步,将最低层的父节点的子节点数减1,以最低层的父节点作为当前节点。
[0179] 第三步,判断当前节点的子节点数是否等于2,若是,则执行本步骤的第四步;否则,执行本步骤的第五步。
[0180] 第四步,利用当前节点的每一个子节点,更新当前节点的哈希值、可达基层节点数,执行本步骤的第十二步。
[0181] 第五步,判断当前节点的后指针是否指向一个兄弟节点,若是,则执行本步骤的第六步;否则,执行本步骤的第九步。
[0182] 第六步,判断当前节点的后指针所指的兄弟节点的子节点个数是否等于3,若是,则执行本步骤的第七步;否则,执行本步骤的第八步。
[0183] 第七步,将当前节点的后指针所指兄弟节点的左侧第一个子节点作为当前节点的左侧第二个子节点,利用当前节点的两个子节点更新当前节点的哈希值、可达基层节点数和子节点数,利用当前节点的后指针所指的兄弟节点剩余的两个子节点更新该兄弟节点的哈希值、可达基层节点数和子节点数,执行本步骤的第十二步。
[0184] 第八步,将当前节点的唯一子节点作为当前节点后指针所指兄弟节点的左侧第一个子节点,利用当前节点后指针所指兄弟节点的三个子节点更新该兄弟节点的哈希值、可达基层节点数和子节点数,删除当前节点,将上一层父节点的子节点数减1后执行本步骤的第十二步。
[0185] 第九步,判断当前节点的前一个兄弟节点的子节点个数是否等于3,若是,则执行本步骤的第十步;否则,执行本步骤的第十一步。
[0186] 第十步,将前一个兄弟节点的左侧第三个子节点作为当前节点的左侧第一个子节点,利用当前节点的两个子节点更新当前节点的哈希值、可达基层节点数和子节点数,利用当前节点的前一个兄弟节点剩余的两个子节点更新该兄弟节点的哈希值、可达基层节点数和子节点数,执行本步骤的第十二步。
[0187] 第十一步,将当前节点的唯一子节点作为当前节点的前一个兄弟节点的左侧第三个子节点,利用当前节点的前一个兄弟节点的三个子节点更新该兄弟节点的哈希值、可达基层节点数和子节点数,删除当前节点,将上一层父节点的子节点数减1。
[0188] 第十二步,判断当前节点是否是根节点,若是,执行本步骤的第十三步;否则,以上一层的父节点作为当前节点,执行本步骤的第三步。
[0189] 步骤13,动态平衡跳跃表更新完毕。