1.本发明涉及计算机数据存储领域,特别是指一种在加密情境下减少非易失性内存写放大方法。
背景技术:
2.当前,非易失性存储器由于具有非易失性、字节寻址、良好的扩展性等特性而得到工业界和学术界的广泛关注,非易失性内存是下一代计算机内存系统不可或缺的组成部分。虽然非易失性内存有着众多优势,但是其有限的写耐久次数和高的写入延迟成为了计算机整体系统性能提高的瓶颈,同时相对于传统的内存,由于非易失性内存的非易失性(即在系统掉电后,数据并不会丢失,攻击者很容易就可以得到内存当中的数据),非易失性内存系统存在严重的数据安全问题。
3.为了解决非易失性内存中数据持久性引起的数据安全问题,数据加密方法被广泛应用。而如果直接对内存数据进行加密会导致读取数据、读取密文和解密过程只能串行执行,导致性能的下降。因此,现在业界主要使用计数器模式加密,使用这种加密方法可以使得读取密文和解密流程并行执行,大大提升了系统的性能。虽然通过数据加密方法保证了数据的安全性,却进一步加剧了非易失性内存的写磨损,这对写耐久次数本就有限的非易失性存储器来说是不能接受的。而且计数器模式加密虽然提升了性能,但是在计数器溢出时,需要对整个页(一般是4kb)进行重新加密,这也加剧了写磨损,缩短了非易失性内存的使用寿命。非易失性存储器,例如pcm(相变存储器)的写耐久次数只有107~108,当存储器经历了一定的写次数之后,存储器老化,就容易造成数据错误,而当写次数达到最大值时,存储器的寿命也会随之结束。
技术实现要素:
4.本发明的主要目的在于克服现有技术中的上述缺陷,提出一种在加密情境下减少非易失性内存写放大方法,在不影响缓存行数据的可靠性的前提下,通过将加密计数器融入到缓存行的纠删码中,减轻在加密情境下由于需要额外写入加密元数据导致的写放大问题,同时通过扩大加密计数器的大小来减少重新加密的频率,提高非易失性内存的使用寿命,降低读写延迟和使用能耗。
5.本发明采用如下技术方案:
6.一种在加密情境下减少非易失性内存写放大方法,包括:
7.计数器产生步骤:采用双计数器混合模式或采用唯一计数器模式;
8.所述双计数器混合模式中包括第一计数器和第二计数器,对于所写入的缓存行数据,将该缓存行的第二计数器加一;若加一之后,第二计数器溢出,则将第二计数器置零并将第一计数器加一;唯一计数器模式中,对于每次缓存行数据写入,唯一计数器加一;
9.纠删码产生步骤:对于一个缓存行,采用sec-ded码和bch码两种纠删码编码;
10.加密步骤:根据缓存行的地址和计数器使用高级加密标准产生与缓存行数据大小
ded,将该sec-ded与原有的汉明码进行对比,若匹配成功,则数据恢复成功,终止数据恢复过程;否则,进行下一个数据比特修改,直至匹配成功;
26.若采用bch码来产生纠删码,则直接进行bch解码恢复准确数据。
27.由上述对本发明的描述可知,与现有技术相比,本发明具有如下有益效果:
28.本发明在不影响原有纠删码纠错检错功能的前提下,通过将加密计数器存放到相应缓存行的纠删码的部分空间当中,将缓存行数据写和加密计数器写融合成一次写,避免了缓存行数据写和加密计数器写双写带来的写放大问题,其中纠错功能通过穷举计算来恢复。此外,通过将双计数器混合模式中的第二计数器的大小扩大一倍来降低内存重新加密的频率,和将唯一计数器模式中的唯一计数器的大小提升到设备的最大磨损次数来彻底规避内存重新加密,同时在计数器缓存当中使用基量加增量的数据组织方式,从而提高了非易失性内存的使用寿命,降低了读写延迟和使用能耗。
附图说明
29.图1为本发明实施例提供的方法流程示意图;
30.图2为本发明双计数器混合模式下纠删码加密计数器组织结构的示意图;
31.图3为本发明主要唯一计数器模式下纠删码加密计数器组织结构的示意图;
32.图4为本发明计数器缓存中计数器组织结构的示意图;
33.图5为本发明数据写入过程的示意图;
34.图6为本发明数据读取过程的示意图。
35.以下结合附图和具体实施例对本发明作进一步详述。
具体实施方式
36.本发明提出一种在加密情境下减少非易失性内存写放大方法,在不影响缓存行数据的可靠性的前提下,通过将加密计数器融入到缓存行的纠删码中,减轻在加密情境下由于需要额外写入加密元数据导致的写放大问题,同时通过扩大加密计数器的大小来减少重新加密的频率,提高非易失性内存的使用寿命,降低读写延迟和使用能耗。
37.图1为本发明实施例的总体示意图,根据整个系统的读写请求进行相应的读写操作,当处理完所有读写请求之后,进入结束步骤。
38.一种在加密情境下减少非易失性内存写放大方案,其特征在于,包括如下步骤:
39.(1)计数器产生步骤,使用两种计数器组织模式,分别对应两种纠删码模式,若使用sec-ded码(汉明码),则进行过程(1.1);若使用bch码,则进行过程(1.2):
40.(1.1)使用双计数器混合模式,其中第一计数器为主要计数器,第二计数器为次要计数器,在本发明中,主要计数器的大小为64比特,取值范围为0~2
64-1,次要计数器的大小为8比特,取值范围为0~2
8-1。每个缓存行有私有的次要计数器,每个页(由64个缓存行组成)共享一个主要计数器。使用这种模式,对于所写入的缓存行数据,将该缓存行的次要计数器加一。若加一之后,次要计数器溢出,则将次要计数器置零并将主要计数器加一。
41.(1.2)使用唯一计数器模式,每个缓存行有私有的唯一计数器,在本发明中,唯一计数器的大小为28比特,取值范围为0~2
28-1。对于每次缓存行数据写入,唯一计数器加一。
42.(2)纠删码产生步骤,对于一个缓存行,使用两种纠删码编码方式,进行下列过程:
43.(2.1)使用sec-ded码来保证数据的准确性,对应过程(1.1)中的双计数器混合模式。本发明使用普通汉明码来实现双检错功能将一个64字节的缓存行分为8个8字节的数据块,针对每个数据块产生对应的汉明码,只实现双检错功能,普通汉明码需要7比特的纠删码空间,其中纠错功能通过穷举遍历来实现,具体见步骤(8),数据验证纠错步骤。
44.(2.2)使用bch码来保证数据的准确性,对应过程(1.2)中的唯一计数器模式。在本发明中,使用bch(548,512)来保证数据准确性,即使用36个检验位来纠4个比特错误。
45.(3)加密步骤,进行下列过程:
46.根据缓存行的地址、计数器使用高级加密标准(advanced encryption standard,简称aes)产生与缓存行数据大小相同的一次性密码本(one-time pad,简称otp),然后将缓存行数据与otp进行异或操作实现数据加密操作。
47.(4)加密计数器纠删码融合步骤,进行下列过程:
48.(4.1)若使用过程(1.1)中的双计数器混合模式,由于每个缓存行有64比特纠删码空间,而使用普通汉明码只需要56比特空间,因此每个缓存行有8比特的纠删码空间空闲,可以将次要计数器存放到这一部分空间当中,使得次要计数器和纠删码有机结合,从而规避写入数据时需要额外写入次要计数器带来的写放大问题。此外,8比特的次要计数器也将次要计数器溢出的频率降低了一倍,降低了内存重加密次数。
49.(4.2)若使用过程(1.2)中的唯一计数器模式,由于每个缓存行有64比特纠删码空间,而使用bch码只需要36比特空间,因此每个缓存行有28比特的纠删码空间空闲,可以将唯一计数器存放到这一部分空闲空间当中,从而避免数据写入和计数器写入带来的写放大问题。此外,28比特的唯一计数器可以彻底避免计数器溢出问题,从而彻底避免了重加密问题。
50.图2为本发明双计数器混合模式下纠删码加密计数器组织结构的示意图,该模式下将计数器分为主要计数器和次要计数器,而次要计数器和纠删码融合在一起。具体为:将整个缓存行数据分成大小相同的8个数据块,分别计算出这8个数据块的汉明码,总共占据56比特,并且将次要计数器存放在剩下的8比特的纠删码空间当中。
51.图3为本发明唯一计数器模式下纠删码加密计数器组织结构的示意图,该模式下使用bch码来保证数据正确性。针对整个缓存行数据产生一个bch码,该bch码占据36比特的纠删码空间,而唯一计数器存放在剩下的28比特空间当中。
52.(5)数据写入步骤,进行下列过程:
53.(5.1)若缓存行数据命中数据缓存,则直接在数据缓存当中进行数据更新,同时在计数器缓存当中更新相应的计数器。若采用唯一计数器模式,则计数器缓存中每个页的计数器以基量加增量的方式存在,即每个缓存行都有其私有的增量且共享整个页的基量。唯一计数器模式中,每个缓存行的计数器大小为28比特,其中基量大小为21比特,由该缓存行所属页当中的所有缓存行共享,而增量大小为7比特,为该缓存行私有。图4为本发明计数器缓存中计数器组织结构的示意图,在唯一计数器模式下,在计数器缓存中采用基量加增量的方式来组织计数器以提高缓存利用率。在计数器缓存中,64个缓存行组成一个页,该页内的所有缓存行共享一个21比特的基量,然后私有7比特的增量。对计数器缓存进行更新时,首先将增量加一,若增量溢出的话,则将该缓存行所属页当中所有缓存行的计数器进行扫描,将当中最小值作为新的增量,并更新该页当中所有的缓存计数器的增量。
54.对计数器缓存进行更新时,首先将增量加一,若增量溢出的话,则将该缓存行所属页当中所有的缓存行的计数器进行扫描,并将当中最小值作为新的增量,并更新该页当中所有缓存计数器的增量。然后使用更新之后的计数器产生新的otp,对缓存行数据进行加密。
55.(5.2)若缓存行数据未命中数据缓存,则根据lru算法进行缓存替换,并使用更新之后的计数器产生新的otp,对缓存行数据进行加密。被替换出去的缓存行、纠删码、加密计数器被一起写入内存系统当中。
56.图5为数据写入过程的示意图,进行下述操作:
57.接收数据写入请求,将该缓存行数据的对应加密计数器加一;判断该计数器是否溢出,若是,则将第二计数器置零并将第一计数器加一,否则只将第二计数器加一;然后采用磨损均衡算法对写入数据进行重映射,将频繁被写的缓存行映射到相对不频繁被写的缓存行位置;判断是否使用汉明码进行纠删码编码,若是,将该缓存行数据分为大小相等的8个数据块,并对每个数据块进行汉明码编码产生校验码,否则对整个缓存行数据进行bch码编码;根据缓存行数据的计数器,地址等元数据信息使用aes算法产生与缓存行数据大小相等的otp(一次性密码本);将缓存行数据和otp执行异或操作进行数据加密;进行加密计数器纠删码融合;将加密后的缓存行数据以及计数器纠删码等元数据写入系统。
58.(6)数据读取步骤,进行下列过程:
59.根据读取请求到内存系统当中相应的地址读取密文数据、纠删码数据等,同时并行进行步骤(7)。
60.图6为本发明数据读取过程的示意图,进行下述操作:
61.接收数据读取请求,在系统相应位置读取密文和元数据;根据读取到的元数据信息重新生成otp;将密文和otp进行异或操作得到明文数据;判断是否使用了汉明码进行纠删码编码,若是,将该缓存行数据分为大小相等的8个数据块,并对每个数据块进行汉明码编码产生校验码,判断新生成的汉明码与读取到的旧汉明码是否一致,若是,则完成数据读取,否则,对数据块进行按位修改并重新计算汉明码,再次与读取到的旧汉明码进行比对;若不是使用汉明码进行纠删码编码则表示采用了bch编码,对整个缓存行数据进行bch编码产生纠删码,判断新生成的bch码与读取到的旧bch码是否一致,若是,则完成数据读取,否则,根据bch解码方法进行解码得到准确数据。
62.(7)密文解密步骤,进行下列过程:
63.根据读取请求到计数器缓存当中读取相应的计数器,使用aes算法产生otp,待步骤(6)完成读取数据,将otp与密文数据进行异或操作得到明文。
64.(8)数据验证纠错步骤,进行下列过程:
65.(8.1)根据步骤(7)得到的明文数据计算新的纠删码,并与原有的纠删码进行对比,若比对结果相一致,说明数据没有出现错误,读取完成;否则,转过程(8.2)。
66.(8.2)若使用过程(2.1)中的汉明码来产生纠删码,则通过穷举方法进行数据恢复。具体为:将64字节的缓存行数据分为8个8字节的数据块,对每个数据块进行比对恢复。对于每个8字节的数据块(64比特),通过改变该数据块第k个位置上的比特数据(k的取值范围为1~64),若原有第k位置上的比特数据为“1”,则将其改变为“0”,否则将其改变为“1”,然后计算改变了一个比特位后的数据块的汉明码,将该汉明码与原有的汉明码进行对比,
若匹配成功,则数据恢复成功,终止数据恢复过程;否则,进行下一个数据比特修改,直至匹配成功。若使用过程(3.2)的bch码来产生纠删码,则直接进行bch解码恢复准确数据。
67.本发明在不影响原有纠删码纠错检错功能的前提下,通过将加密计数器存放到相应缓存行的纠删码的部分空间当中,将缓存行数据写和加密计数器写融合成一次写,避免了缓存行数据写和加密计数器写双写带来的写放大问题,其中纠错功能通过穷举计算来恢复。此外,通过将双计数器混合模式中的第二计数器的大小扩大一倍来降低内存重新加密的频率,和将唯一计数器模式中的唯一计数器的大小提升到设备的最大磨损次数来彻底规避内存重新加密,同时在计数器缓存当中使用基量加增量的数据组织方式,从而提高了非易失性内存的使用寿命,降低了读写延迟和使用能耗。
68.上述仅为本发明的具体实施方式,但本发明的设计构思并不局限于此,凡利用此构思对本发明进行非实质性的改动,均应属于侵犯本发明保护范围的行为。
转载请注明原文地址:https://tc.8miu.com/read-345.html