本发明属于数据安全技术领域,尤其涉及一种基于固态盘阵列的数据安全写入、删除、读取方法及装置。
背景技术:
目前,基于闪存的固态盘(ssd)已成为磁盘的有力替代品,并且得到了学术界和工业界的广泛关注。固态盘除了应用于桌面机之外,也渐渐应用于服务器和企业级数据存储系统中。在企业级数据存储系统中,单个固态盘显然无法满足服务对存储系统容量、性能和可靠性的要求。因此,将磁盘阵列(raid)算法应用到固态盘存储系统中,构建大容量、高性能和高可靠的存储系统非常有必要,即固态盘阵列。类似于raid,固态盘阵列的性能也受到阵列中性能最差的成员盘的影响。因此,单个固态盘的不可靠将使得固态盘阵列表现出严重的性能波动。
固态盘阵列中的固态盘在内部都采用异地更新的操作方式,当用户使用安全软件对固态盘中的文件进行安全删除时,对目标数据的覆盖操作全部都被转移到新的空闲物理页。因此,敏感的目标数据不会被物理覆盖或擦除,而仅仅是在固态盘内被标记为无效数据。也就是说,文件内容依然会存在于闪存之中。所有的改变仅仅是,从原来的逻辑地址无法读取到目标文件的数据而已,此类被删除的数据很容易被恢复,数据的安全性无法保障。
基于闪存芯片的固态盘中数据安全删除问题研究,现有的主要手段是通过主机对设备目标数据进行数据填充的方式来实现数据的销毁或清除。这种方法对于闪存型存储器存在两方面问题:①该方法需要通过写操作来完成,而在闪存中写操作过程繁琐,耗时较长,时间开销很大;②出于对闪存寿命及磨损平衡的考虑,存储器保留有用于备份的冗余块,该方法在使用过程中会导致数据残留在备份块中。
技术实现要素:
鉴于上述问题,本发明的目的在于提供一种种基于固态盘阵列的数据安全写入、删除、读取方法及装置,旨在解决现有技术中由于固态盘的异地更新特性导致数据无法安全删除,固态盘阵列的数据存储安全问题,以及大量覆盖写影响闪存寿命及磨损平衡等问题。
一方面,所述基于固态盘阵列的数据安全写入方法包括下述步骤:
生成一个随机秘钥,对待处理的源数据通过所述随机秘钥进行加密,得到加密数据;
通过秘密共享算法share(n,k)将所述随机秘钥进行冗余编码,得到n个子秘密,这里k为重构能力,即为可进行重构的子秘密的份额数量,任意k-1个子秘密无法恢复所述随机秘钥,n>k>0;
采用纠删码算法encode(n,k)对所述加密数据进行冗余编码,得到n个编码子数据,这里k为重构能力,即为可进行重构的编码子数据的份额数量,任意k-1个编码子数据无法恢复所述加密数据,n>k>0;
将n个所述子秘密和n个所述编码子数据一一对应组合,得到n个数据包,每个数据包包含一个子秘密和一个编码子数据,将所述n个数据包一一对应存放至固态盘阵列的n个固态盘中。
另一方面,所述基于固态盘阵列的数据安全删除方法,所述删除方法包括下述步骤:
将破坏冗余能力的至少n-(k-1)个固态盘上的数据包删除,即可完成源数据的安全删除。
进一步的,所述固态盘上的数据包删除采用全零覆写物理页的方式进行。
第三方面,所述基于固态盘阵列的数据安全读取方法,包括下述步骤:
根据秘密共享算法和纠删码算法的重构能力k,分别读取固态盘阵列中至少k个固态盘上的数据包;
对所有数据包中的子编码数据通过纠删码算法encode(n,k)对应的解码算法decode(n,k),重构得到加密数据;
对所有数据包中的子秘密通过秘密共享算法share(n,k)对应的合并算法combine(n,k),重构得到随机秘钥;
用重构得到的所述随机秘钥对所述加密数据进行反向解密,得到源数据,完成数据读取过程。
第四方面,所述基于固态盘阵列的数据安全写入装置包括:
加密单元,用于生成一个随机秘钥,对待处理的源数据通过所述随机秘钥进行加密,得到加密数据;
共享处理单元,用于通过秘密共享算法share(n,k)将所述随机秘钥进行冗余编码,得到n个子秘密,这里k为重构能力,即为可进行重构的子秘密的份额数量,任意k-1个子秘密无法恢复所述随机秘钥,n>k>0;
纠删码单元,用于采用纠删码算法encode(n,k)对所述加密数据进行冗余编码,得到n个编码子数据,这里k为重构能力,即为可进行重构的编码子数据的份额数量,任意k-1个编码子数据无法恢复所述加密数据,n>k>0;
数据存储单元,用于将n个所述子秘密和n个所述编码子数据一一对应组合,得到n个数据包,每个数据包包含一个子秘密和一个编码子数据,将所述n个数据包一一对应存放至固态盘阵列的n个固态盘中。
第五方面,所述基于固态盘阵列的数据安全删除装置包括:
安全删除单元,用于将破坏冗余能力的至少n-(k-1)个固态盘上的数据包删除,即可完成源数据的安全删除。
进一步的,所述固态盘上的数据包删除采用全零覆写物理页的方式进行。
第六方面,所述基于固态盘阵列的数据安全读取装置,包括:
数据读取单元,用于根据秘密共享算法和纠删码算法的重构能力k,分别读取固态盘阵列中至少k个固态盘上的数据包;
第一重构单元,用于对所有数据包中的子编码数据通过纠删码算法encode(n,k)对应的解码算法decode(n,k),重构得到加密数据;
第二重构单元,用于对所有数据包中的子秘密通过秘密共享算法share(n,k)对应的合并算法combine(n,k),重构得到随机秘钥;
反向解密单元,用于用重构得到的所述随机秘钥对所述加密数据进行反向解密,得到源数据,完成数据读取过程。
本发明的有益效果是:本发明利用固态盘阵列中固态盘可并行操作的特点,采用秘密共享算法对密钥进行分割,利用纠删码算法对数据进行编码,当固态盘阵列中单个或多个固态盘上的部分数据丢失时,通过执行数据重构程序,对丢失的数据进行重构恢复,提升了固态盘阵列中数据的可靠性,通过结合使用秘密共享算法和纠删码算法保障数据可靠性和安全性,大大提升了存储空间利用率;同时,利用冗余编码的特性,对数据的删除不再需要对整个数据进行覆盖写,而是删除部分数据块来保证数据无法恢复,破坏了数据的完整性,删除过程减小了擦除开销以及对固态盘的磨损,残余数据被加密保护,即使攻击者得到数据,也不能获取明文,达到数据安全删除的目的。
附图说明
图1是固态盘阵列的硬件结构图;
图2是本发明第一实施例提供的基于固态盘阵列的数据安全写入方法的流程图;
图3是本发明第一实施例提供的基于固态盘阵列的数据安全读取方法的流程图;
图4是密钥分割及数据编码过程示意图;
图5是本发明第二实施例提供的的基于固态盘阵列的数据安全写入装置的结构方框图;
图6是本发明第二实施例提供的的基于固态盘阵列的数据安全读取装置的结构方框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明方法基于如图1所示的固态盘阵列的硬件结构实现,包括主机、阵列控制器以及固态盘阵列,其中阵列控制器在各个固态盘之间进行总线调度,对固态盘进行直接控制,多个固态盘之间相互独立。从硬件结构上看,固态盘阵列可以通过多个固态盘并行操作,来达到极高的数据吞吐率,并且在各固态盘内部可以通过对多个数据通道进行并行操作,使数据传输率接近通道的最大传输速度。
为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
实施例一:
图2示出了本发明实施例提供的基于固态盘阵列的数据安全写入方法的流程,为了便于说明仅示出了与本发明实施例相关的部分。
如图2所示,本实施例提供的述基于固态盘阵列的数据安全写入方法包括下述步骤:
步骤s21、生成一个随机秘钥,对待处理的源数据通过所述随机秘钥进行加密,得到加密数据。
假设随机秘钥是key,即key=generatesecretkey();源数据为x,本实施例不限定具体的加密算法,如aes加密算法,假设加密函数为e,最后得到的加密数据e=e(x,key)。
步骤s22、通过秘密共享算法share(n,k)将所述随机秘钥进行冗余编码,得到n个子秘密,这里k为重构能力,即为可进行重构的子秘密的份额数量,任意k-1个子秘密无法恢复所述随机秘钥,n>k>0。
秘密共享算法(secretsharing)将输入数据秘密(secret)转换成编码后的输出数据份额(shares),目的在于保障秘密的容错性和保密性。秘密共享算法通过两个参数(w,p)进行定义:该算法将秘密编码为w个份额(s>p>0),(i)秘密可以通过任何p个份额进行重构,(ii)秘密不能通过任何(p-1)个份额推断出来。秘密共享算法的安全性通常由每个份额所包含的秘密的信息以及(p-1)个份额所包含的信息保证。当(p-1)个份额没有提供任何关于隐藏的秘密的信息时,就是一个完备的秘密共享方案。在完备的秘密共享方案中,任意恶意的用户拥有(p-1)个份额时,猜出秘密的可能性和没有任何份额时是一样的。
因此根据上述秘密共享算法思想,本发明通过秘密共享算法所述随机秘钥key进行冗余编码,假设秘密共享算法为share(n,k),n,k为参数,总共得到n个子秘密,分别为s1,s2,…,sn;这里k为重构能力,即为可进行重构的子秘密的份额数量,因此任意k-1个子秘密无法恢复所述随机秘钥,n>k>0。
步骤s23、采用纠删码算法encode(n,k)对所述加密数据进行冗余编码,得到n个编码子数据,这里k为重构能力,即为可进行重构的编码子数据的份额数量,任意k-1个编码子数据无法恢复所述加密数据,n>k>0。
纠删码算法主要是将原始的数据进行编码得到冗余,并将数据和冗余一并存储起来,以达到容错的目的。其基本思想是将r块原始的数据元素通过一定的计算,得到m块冗余元素(校验块)。对于这r+m块的元素,当其中任意的m块元素出错(包括原始数据和冗余数据)时,均可以通过对应的重构算法恢复出原来的r块数据。生成校验的过程被成为编码(encoding),恢复丢失数据块的过程被称为解码(decoding)。磁盘利用率为r/(r+m)。基于纠删码的方法与多副本方法相比具有冗余度低、磁盘利用率高等优点。
因此根据上述纠删码算法思想,本发明通过纠删码算法对所述加密数据进行冗余编码,得到n个编码子数据,分别为v1,v2,…,vn,假设纠删码算法为encode(n,k),n,k为参数,这里k为重构能力,即为可进行重构的编码子数据的份额数量,即任意k-1个编码子数据无法恢复所述加密数据,n>k>0。
步骤s24、将n个所述子秘密和n个所述编码子数据一一对应组合,得到n个数据包,每个数据包包含一个子秘密和一个编码子数据,将所述n个数据包一一对应存放至固态盘阵列的n个固态盘中。
n个所述子秘密和n个所述编码子数据一一对应组合后的数据包为(si,vi),其中i为第i个数据包,i=1,2,…,n。然后将这n个数据包一一对应存放在n个固态盘上,即数据包(si,vi)存放在第i个固态盘上。
因此,根据这种数据存储模式,当需要读取数据时,如图3所示,具体过程如下:
步骤s31、根据秘密共享算法和纠删码算法的重构能力k,分别读取固态盘阵列中至少k个固态盘上的数据包;
步骤s32、对所有数据包中的子编码数据通过纠删码算法encode(n,k)对应的解码算法decode(n,k),重构得到加密数据e;
步骤s33、对所有数据包中的子秘密通过秘密共享算法share(n,k)对应的合并算法combine(n,k),重构得到随机秘钥key;
步骤s34、用重构得到的所述随机秘钥对所述加密数据进行反向解密,得到源数据x=d(e,key),完成数据读取过程。
当所述固态盘阵列中单个或多个固态盘的部分数据丢失时,只要剩下固态盘的数据冗余能力n-(k-1)没被破坏,也就是说,n个固态盘中,只要少于n-(k-1)个固态盘的数据被破坏,可选择执行数据重构程序,对丢失的数据进行重构恢复。
当需要删除固态盘上数据时,根据所述秘密共享算法和纠删码技术的冗余能力n-(k-1),将达到破坏冗余能力n-(k-1)的固态盘数目上的数据包删除,即可完成源数据的安全删除。即将不少于n-(k-1)个固态盘的数据包删除,对固态盘上数据的删除可采取全零覆写物理页的方式进行。
本发明将秘密共享算法和纠删码算法的基本原理引入其中,分别用于分割密钥和数据信息,通过破坏固态盘阵列中各固态盘数据的冗余能力,结合数据转换处理操作,在破坏数据完整性后,剩余数据均已加密,即使攻击者得到部分编码数据,也不能获取明文,从而达到安全删除数据的目的,相应地可有效解决现有技术中由于固态盘的异地更新特性导致数据无法安全删除,固态盘阵列的数据存储安全问题,以及大量覆盖写影响闪存寿命及磨损平衡等问题。本实施例打破常规思维,传统方案中冗余技术是用来保障数据可靠性,在本发明中利用其数据冗余能力被破坏后数据不可获取的特性,实现了数据安全删除。
为了便于理解,下面列举一具体实例,如图4所示,实施例中,以n=4,k=3为例。利用密钥key加密(如aes加密算法)源数据x,对加密后的数据e使用纠删码技术(如reed-solomon码)编码,产生n个子编码数据v1、v2、v3、v4,对密钥key使用秘密共享算法(如shamir)进行分割,得到n个子密码s1、s2、s3、s4,而v1s1、v2s2、v3s3和v4s4代表每一个组合后的数据包,它们分别由一个子编码数据和一个子密码组成。将所有数据包分发到固态盘阵列的n个固态盘上,根据该实例的特性,通过2个份额是无法推断出源数据的,故当执行数据安全删除时,破坏其中两个份额即可,剩下的份额已被加密保护,达到数据安全删除的目的。在这里描述的是一个源数据分割为4份的情况,只是一个实例,实际上源数据可以分割为n份,也可以采用其他加密算法、纠删码技术和秘密共享机制。
实施例二:
图5示出了本发明实施例提供的述基于固态盘阵列的数据安全写入装置的结构,为了便于说明仅示出了与本发明实施例相关的部分。
本实施例提供的基于固态盘阵列的数据安全写入装置,如图5所示,包括:
加密单元501,用于生成一个随机秘钥,对待处理的源数据通过所述随机秘钥进行加密,得到加密数据;
共享处理单元502,用于通过秘密共享算法share(n,k)将所述随机秘钥进行冗余编码,得到n个子秘密,这里k为重构能力,即为可进行重构的子秘密的份额数量,任意k-1个子秘密无法恢复所述随机秘钥,n>k>0;
纠删码单元503,用于采用纠删码算法encode(n,k)对所述加密数据进行冗余编码,得到n个编码子数据,这里k为重构能力,即为可进行重构的编码子数据的份额数量,任意k-1个编码子数据无法恢复所述加密数据,n>k>0;
数据存储单元504,用于将n个所述子秘密和n个所述编码子数据一一对应组合,得到n个数据包,每个数据包包含一个子秘密和一个编码子数据,将所述n个数据包一一对应存放至固态盘阵列的n个固态盘中。
上述各功能单元501-504对应了实施例一种的步骤s21-s24,具体实现时,通过加密单元生成一个随机秘钥,并对源数据加密,共享处理单元通过秘密共享算法对随机秘钥进行冗余编码,纠删码单元通过纠删码技术对加密后的数据进行冗余编码,最后数据存储单元将子秘密和编码子数据一一对应组合生成多个数据包,每个数据包存储在对应的一个固态盘中。
当需要读取数据时,通过固态盘阵列的数据安全读取装置实现,如图6所示,具体包括:
数据读取单元601,用于根据秘密共享算法和纠删码算法的重构能力k,分别读取固态盘阵列中至少k个固态盘上的数据包;
第一重构单元602,用于对所有数据包中的子编码数据通过纠删码算法encode(n,k)对应的解码算法decode(n,k),重构得到加密数据;
第二重构单元603,用于对所有数据包中的子秘密通过秘密共享算法share(n,k)对应的合并算法combine(n,k),重构得到随机秘钥;
反向解密单元604,用于用重构得到的所述随机秘钥对所述加密数据进行反向解密,得到源数据,完成数据读取过程。
上述各个功能单元601-604对应实现了实施例一中的步骤s31-s34,数据读取是数据写入的反向过程,这里不再赘述。
当需要删除数据时,通过基于固态盘阵列的数据安全删除装置实现,改装置包括:
安全删除单元,用于将破坏冗余能力的至少n-(k-1)个固态盘上的数据包删除,即可完成源数据的安全删除。所述固态盘上的数据包删除采用全零覆写物理页的方式进行。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。