用于自测试加密/解密循环的方法和系统转让专利

申请号 : CN201410679794.9

文献号 : CN104717059B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : C·J·肯普B·B·格兰迪G·A·杰奎特

申请人 : 国际商业机器公司

摘要 :

涉及用于自测试加密/解密循环的方法和系统。在一个实施例中,一种系统包括处理器以及与该处理器集成在一起和/或能够由该处理器执行的逻辑部件,所述逻辑部件被配置为使得所述处理器:接收包括用于加密的数据的数据流;在所述数据流的单独的数据块之间插入一个或多个测试向量;对包括所述一个或多个测试向量的数据块进行加密,以产生包括一个或多个加密测试向量的加密数据流;对包括所述一个或多个加密测试向量的加密数据流进行解密;将每一个解密测试向量与对应的插入测试向量进行比较;和报告比较的结果。根据更多实施例描述了用于自测试加密/解密循环的其他系统、方法和计算机程序产品。

权利要求 :

1.一种用于自测试加密/解密循环的系统,包括处理器以及与该处理器集成在一起和/或能够由该处理器执行的逻辑部件,所述逻辑部件被配置为使得所述处理器:接收包括用于加密的数据的数据流;

在所述数据流的单独的数据块之间插入一个或多个测试向量;

对包括所述一个或多个测试向量的数据块进行加密,以产生包括一个或多个加密测试向量的加密数据流;

对包括所述一个或多个加密测试向量的加密数据流进行解密;

将每一个解密测试向量与对应的插入测试向量进行比较;和

报告比较的结果。

2.如权利要求1所述的系统,还包括以硬件、软件或者硬件和软件的组合实现的多频带流水线加密引擎,所述加密引擎被配置为在独立的流水线级以不同的密钥对包括所述一个或多个测试向量的数据块进行加密,以产生包括一个或多个加密测试向量的加密数据流。

3.如权利要求2所述的系统,还包括以硬件、软件或者硬件和软件的组合实现的多频带流水线解密引擎,所述解密引擎被配置为使用来自所述加密引擎的对应密钥,对包括所述一个或多个加密测试向量的加密数据流进行解密。

4.如权利要求1所述的系统,其中被配置为在数据块之间插入一个或多个测试向量的逻辑部件还被配置为为了插入每一个测试向量,暂停一个流水线级的数据加密。

5.如权利要求1所述的系统,其中被配置为对包括所述一个或多个加密测试向量的加密数据流进行解密的逻辑部件还配置为为了解密每一个测试向量,暂停一个流水线级的数据解密。

6.如权利要求1所述的系统,其中所述逻辑部件还配置为从数据流中丢弃所述比较的结果指示插入测试向量和解密测试向量之间存在至少一个差异的任意数据。

7.如权利要求6所述的系统,其中被配置为报告比较的结果的逻辑部件还被配置为当所述比较的结果指示插入测试向量和解密测试向量之间存在至少一个差异时,指示加密/解密循环出现故障。

8.如权利要求1所述的系统,其中所述逻辑部件还被配置为在存储器中存储每一个插入测试向量,其中每一个解密测试向量被与存储在存储器中的对应的测试向量进行比较。

9.一种用于自测试加密/解密循环的方法,所述方法包括:

接收包括用于加密的数据的数据流;

在所述数据流的单独的数据块之间插入一个或多个测试向量;

对包括所述一个或多个测试向量的数据块进行加密,以产生包括一个或多个加密测试向量的加密数据流;

对包括所述一个或多个加密测试向量的加密数据流进行解密;

将每一个解密测试向量与对应的插入测试向量进行比较;和

报告比较的结果。

10.如权利要求9所述的方法,其中由以硬件、软件或者硬件和软件的组合实现的多频带流水线加密引擎使用一个或多个不同的密钥来对数据流进行加密。

11.如权利要求10所述的方法,其中由以硬件、软件或者硬件和软件的组合实现的多频带流水线解密引擎使用来自所述加密引擎的一个或多个对应的密钥,来对包括所述一个或多个加密测试向量的加密数据流进行解密。

12.如权利要求9所述的方法,其中在数据块之间插入一个或多个测试向量还包括为了插入每一个测试向量,暂停一个流水线级的数据加密。

13.如权利要求9所述的方法,其中对包括所述一个或多个加密测试向量的加密数据流进行解密还包括为了解密每一个测试向量,暂停一个流水线级的数据解密。

14.如权利要求9所述的方法,还包括从数据流中丢弃所述比较的结果指示插入测试向量和解密测试向量之间存在至少一个差异的任意数据。

15.如权利要求14所述的方法,其中报告比较的结果包括当比较的结果指示插入测试向量和解密测试向量之间存在至少一个差异时,指示加密/解密循环出现故障。

16.如权利要求9所述的方法,还包括在存储器中存储每一个插入测试向量,其中每一个解密测试向量被与存储在存储器中的对应的测试向量进行比较。

说明书 :

用于自测试加密/解密循环的方法和系统

技术领域

[0001] 本发明涉及数据储存系统,并且更特别地,本发明涉及多频带加密引擎和其自测试方法。

背景技术

[0002] 在数据存储中,数据可以在仅具有有限个数的可纠正的错误的情况下从存储该数据的介质被恢复是至关重要的。为了将数据存储到介质中并且从介质读取数据,当希望向介质存储加密数据时采取下面的步骤。
[0003] 首先,对将被存储的数据执行加密过程,然后将该数据存储至介质,然后可能在以后的某一时间,使用解密过程从该介质读取存储的数据。某些加密过程遵循一个或多个特定的标准,诸如高级加密标准(AES),可以基于可调分组密码(例如,XTS)、对称分组密码(例如,AES-128)等等。在加密过程、存储过程或者读取过程中可能给数据引入错误。为了检查数据在被存储时是否被破坏,使用加密自测试。然而,常规的加密自测试是资源密集的,并且导致存储操作的不必要的滞后和延迟。
[0004] 这些滞后和延迟是不希望的,特别是在资源有限性能驱动的专用集成电路(ASIC)、现场可编程门阵列(FPGA)等等中。为了克服这些滞后和延迟,可以使用多个加密与解密硬件引擎,或者与严格的硬件实现相反,可以在一个或多个软件层处理加密/解密处理。这些解决方案中的任意一个的第一个缺点是复杂性。另一个缺点是由于资源共享,加密/解密引擎不能实现全带宽。

发明内容

[0005] 在一个实施例中,一种系统包括处理器和与该处理器集成在一起和/或可由该处理器执行的逻辑部件,所述逻辑部件被配置为使得所述处理器接收包括用于加密的数据的数据流;在所述数据流的单独的数据块之间插入一个或多个测试向量;对包括所述一个或多个测试向量的数据块进行加密,以产生包括一个或多个加密测试向量的加密数据流;对包括所述一个或多个加密测试向量的加密数据流进行解密;将每一个解密测试向量与对应的插入测试向量进行比较;和报告比较的结果。
[0006] 在另一个实施例中,一种用于自测试加密/解密循环(cycle)的方法包括接收包括用于加密的数据的数据流;在所述数据流的单独的数据块之间插入一个或多个测试向量;对包括所述一个或多个测试向量的数据块进行加密,以产生包括一个或多个加密测试向量的加密数据流;对包括所述一个或多个加密测试向量的加密数据流进行解密;将每一个解密测试向量与对应的插入测试向量进行比较;和报告比较的结果。
[0007] 在另一个实施例中,一种用于自测试加密/解密循环的计算机程序产品包括其中包含有程序代码的计算机可读存储介质,可由处理器读取/执行所述程序代码,以接收包括用于加密的数据的数据流;在所述数据流的单独的数据块之间插入一个或多个测试向量;对包括所述一个或多个测试向量的数据块进行加密,以产生包括一个或多个加密测试向量的加密数据流;对包括所述一个或多个加密测试向量的加密数据流进行解密;将每一个解密测试向量与对应的插入测试向量进行比较;和报告比较的结果。
[0008] 这些实施例中的任意一个可被实现在磁数据存储系统(诸如磁带驱动器系统或者硬盘驱动器系统)中,磁数据存储系统可以包括磁头、用于在磁头之上传递磁介质(例如,记录带或者硬盘)的驱动机构,和电耦连到磁头的控制器。
[0009] 根据下面的详细说明,将明了本发明的其它方面和实施例,下面的详细说明结合附图作为例子说明了本发明的原理。

附图说明

[0010] 图1示出了根据一个实施例的网络架构。
[0011] 图2示出了根据一个实施例,可以与图1的服务器和/或客户端相关联的代表性的硬件环境。
[0012] 图3是根据一个实施例的系统的方框图。
[0013] 图4是根据一个实施例,用于自测试加密/解密循环的方法的流程图。

具体实施方式

[0014] 出于说明本发明的一般原理的目的做出以下描述,并且以下描述不意味着限制此处提出的发明构思。另外,此处描述的特定特征可被与各种可能的组合和置换中的每一个中描述的其它特征组合使用。
[0015] 除非此处另外特别地定义,所有术语被给予它们最宽泛的可能解释,包括说明书中暗示的含义以及本领域技术人员可以理解的含义和/或字典、论文等等中定义的含义。
[0016] 还必须注意,如在说明书和所附权利要求中使用的,除非另作说明,单数形成"一个",“一”和"该"包括复数对象。还要知道,“包含”一词在本说明书中使用时,指存在所陈述的特征、整数、步骤、操作、元素和/或组件,但是并不排除存在或增加一个或多个其它特征、整数、步骤、操作、元素、组件,以及/或者它们的组。
[0017] 下面的描述公开了数据存储系统的几个优选实施例,以及其操作和/或构成部分。
[0018] 根据一个实施例,可以通过增加此处公开的流水线架构的时钟速率,来解决与自测试对数据到介质的存储的加密/解密处理相关联的问题。
[0019] 在一个一般的实施例中,一种系统包括处理器和与该处理器集成在一起和/或可由该处理器执行的逻辑部件,所述逻辑部件被配置为使得所述处理器接收包括用于加密的数据的数据流;在所述数据流的单独的数据块之间插入一个或多个测试向量;对包括所述一个或多个测试向量的数据块进行加密,以产生包括一个或多个加密测试向量的加密数据流;对包括所述一个或多个加密测试向量的加密数据流进行解密;将每一个解密测试向量与对应的插入测试向量进行比较;和报告比较的结果。
[0020] 在另一个一般的实施例中,一种用于自测试加密/解密循环的方法包括接收包括用于加密的数据的数据流;在所述数据流的单独的数据块之间插入一个或多个测试向量;对包括所述一个或多个测试向量的数据块进行加密,以产生包括一个或多个加密测试向量的加密数据流;对包括所述一个或多个加密测试向量的加密数据流进行解密;将每一个解密测试向量与对应的插入测试向量进行比较;和报告比较的结果。
[0021] 在另一个一般的实施例中,一种用于自测试加密/解密循环的计算机程序产品包括其中包含有程序代码的计算机可读存储介质,可由处理器读取/执行所述程序代码,以接收包括用于加密的数据的数据流;在所述数据流的单独的数据块之间插入一个或多个测试向量;对包括所述一个或多个测试向量的数据块进行加密,以产生包括一个或多个加密测试向量的加密数据流;对包括所述一个或多个加密测试向量的加密数据流进行解密;将每一个解密测试向量与对应的插入测试向量进行比较;和报告比较的结果。
[0022] 所属技术领域的技术人员知道,本发明的各个方面可以实现为系统、方法或计算机程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明的各个方面还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
[0023] 可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0024] 计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0025] 计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
[0026] 可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0027] 下面将参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些计算机程序指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
[0028] 也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其他设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article of manufacture)。
[0029] 计算机程序指令还可被装载到计算机、其它可编程数据处理装置或其它设备上,以使得在计算机、其它可编程装置或其它设备上执行一系列操作步骤,以产生以计算机实现的处理,以使得在计算机或其它可编程装置上执行的指令提供用于实现流程图和/或方框图的一个或多个方框中指定的功能/动作的处理。
[0030] 另外,根据各种实施例的系统可以包括处理器和与处理器集成在一起和/或可由处理器执行的逻辑部件,所述逻辑部件被配置为执行此处记载的一个或多个处理步骤。集成意指该逻辑部件被作为硬件逻辑部件,诸如专用集成电路(ASIC)、现场可编程门阵列(FPGA)等等嵌入处理器。可由处理器执行意指所述逻辑部件是硬件逻辑部件、软件逻辑部件(诸如固件)、操作系统等等,或者可由处理器访问的硬件逻辑部件和软件逻辑部件的某种组合,并且被配置为在被处理器执行时,使得所述处理器执行某些功能。软件逻辑部件可被存储在本领域已知的任意存储器类型的本地和/或远程存储器上。可以使用本领域已知的任意处理器,诸如软件处理器模块和/或硬件处理器,诸如ASIC、FPGA、中央处理单元(CPU)、集成电路(IC)等等。
[0031] 图1说明了根据一个实施例的架构100。如图1所示,提供多个远程网络(remote network)102,包括第一远程网络104和第二远程网络106。网关101可被耦连在远程网络102和附近网络(proximate network)108之间。在当前架构100的背景下,网络104、106中的每一个可以采取任意形式,包括但不限于,LAN、WAN(诸如互联网)、公用交换电话网(PSTN)、内部电话网等等。
[0032] 在使用中,网关101作为远程网络102到附近网络108的进入点。因而,网关101可以作为路由器,其能够引导到达网关101的数据的给定分组,并且可以作为交换机,其提供给定分组进出网关101的实际路径。
[0033] 另外,包括耦连到附近网络108的至少一个数据服务器114,并且可以通过网关101从远程网络102访问数据服务器114。应当注意,(一个或多个)数据服务器114可以包括任意类型的计算设备/群组(groupware)。多个用户设备116耦连到每一个数据服务器114。这些用户设备116可以包括台式计算机、膝上计算机、手持式计算机、打印机或者任意其它类型的逻辑部件。应当注意,在一个实施例中,用户设备111还可以直接耦连到任意网络。
[0034] 外设120或者一系列外设120,例如,传真机、打印机、联网的和/或本地存储单元或者系统等等可被耦连到一个或多个网络104、106、108。应当注意,数据库和/或附加组件可与耦连到网络104、106、108的任意类型的网络元件一起使用,或集成到耦连到网络104、106、108的任意类型的网络元件内。在本说明书的上下文中,网络元件可以指网络的任意组件。
[0035] 根据某些方案,此处描述的方法和系统可利用和/或在虚拟系统和/或模拟一个或多个其它系统的系统(诸如模拟IBM z/OS环境的UNIX系统、虚拟地托管MICROSOFT WINDOWS环境的UNIX系统、模拟IBM z/OS环境的MICROSOFT WINDOWS系统等等)上实现。在某些实施例中,可以通过使用VMWARE软件增强这种虚拟化和/或模拟。
[0036] 在更多方法中,一个或多个网络104、106、108可以表示通常被称为"云"的系统集群。在云计算中,共享的资源,诸如处理能力、外围设备、软件、数据、服务器等等被以按需的关系提供给云内的任意系统,从而允许跨许多计算系统的服务访问和分布。云计算一般涉及在云中操作的系统之间的互联网连接,但是还可以使用连接系统的其它技术。
[0037] 图2示出了根据一个实施例,与图1的用户设备116和/或服务器114相关联的代表性的硬件环境。该图示出了具有中央处理单元210(诸如微处理器),以及通过系统总线212互连的若干其它单元的工作站的典型硬件配置。
[0038] 图2所示的工作站包括随机访问存储器(RAM)214、只读存储器(ROM)216、用于将外围设备(诸如盘存储单元220)连接到总线212的I/O适配器218、用于将键盘224、鼠标226、扬声器228、麦克风232和/或其它用户接口设备(诸如触摸屏和数字照相机(未示出))连接到总线212的用户接口适配器222、用于将工作站连接到通信网络235(例如,数据处理网络)的通信适配器234、以及用于将总线212连接到显示设备238的显示器适配器236。
[0039] 该工作站可以具有驻留在其上的操作系统,诸如Microsoft 操作系统(OS)、MAC OS、UNIX OS等等。应当理解,还可以在除提及的操作系统以外的平台和操作系统上实现优选的实施例。可以使用JAVA、XML、C和/或C++语言或者其它编程语言以及面向对象的编程方法来编写优选的实施例。可以使用被越来越多地用于开发复杂应用的面向对象编程(OOP)。
[0040] 现在参考图3,示出了根据一个实施例的系统300。作为一种选择,可以结合来自此处列举的任意其它实施例(诸如,参考其它附图描述的那些)的特征来实现当前系统300。然而,当然该系统300及此处给出的其它系统可被用于可能或者可能未在此处列举的说明性实施例中特别描述的各种应用和/或置换中。另外,可以在任意所希望的环境中使用此处给出的系统300。
[0041] 系统300被配置为以数据流308中的数据块302,将数据存储到一个或多个存储介质304和/或存储介质306。一个或多个存储介质304和/或存储介质306可以是本领域已知的任意类型的存储介质,诸如RAM、EEPROM、闪速存储器以及其它类型的非易失RAM(NVRAM)、硬盘、光盘、磁带等等。另外,一个或多个存储介质304和/或存储介质306可被分离(separate)、分开(partition)、或者以某些其它方式划分(divide)为缓冲区,以存储彼此分离的单独的数据块302。
[0042] 系统300被配置为从某外部设备、系统、应用等等接收流308,并且从流308产生数据块302。在一个实施例中,数据流308被发送给系统300,以准备将存储到最终的存储介质330(诸如硬盘、磁带、光盘等等)的数据,并且在准备将数据存储到最终的存储介质330时,一个或多个存储介质304和/或存储介质306被用作临时缓冲。
[0043] 数据流308一旦被系统300接收到,可被从最终的存储介质330或者某其它所希望的数据源读取的该数据流308被分割为数据块302,并且被存储在一个或多个存储介质304和/或存储介质306内。根据一个实施例,数据块302具有这样的大小,从而使得一个块302纳入前面所述的一个或多个存储介质304和/或存储介质306的一个部分中。在其它实施例中,多于或少于一个数据块302可以纳入一个或多个存储介质304和/或存储介质306的每一个部分中,诸如2个块302、4个块302、8个块302等等。
[0044] 然后使用加密模块或者引擎310对每个数据块302进行加密,以产生加密数据块312。加密模块310是多频带(multiband)独立流水线加密模块,并且配置为运行多个独立的流水线加密运算,从而使得每个数据块302被与任意其它数据块302无关地加密和/或解密。
这些加密数据块312可在被存储到存储介质306之前,暂时被写入到一个或多个存储介质
304、在被写入到一个或多个存储介质304之前,被写入到存储介质306、被存储在一个或多个存储介质304和/或存储介质306任意其中之一内等等。为了描述的变化,加密数据块312被示出为被存储到存储介质306,而解密数据块324被示出为被存储到一个或多个存储介质
304。当然,如本领域技术人员理解的,可以使用任意特定的布置,而不限于图3所示的布置。
[0045] 在一个其它实施例中,仅仅存在一个存储介质306,并且一个或多个存储介质304实际上可以是存储介质306的部分,从而加密数据块312(并且可能地某些加密测试向量318)被存储到与解密数据块324(并且可能地解密测试向量320)相同的存储介质306。在另一个替换实施例中,最终的存储介质330可以包括存储介质306和/或一个或多个存储介质
304,从而在加密/解密循环的每一个级期间,仅仅使用一个存储介质330来进行数据和测试向量的存储。
[0046] 根据一个实施例,解密模块或者引擎314被配置为接收包括加密数据块312(并且可能地某些加密测试向量318)的加密数据流328。根据另一个实施例,解密模块或者引擎314被配置为根据该加密数据流328提供解密数据块324(并且可能地某些解密测试向量
320)。
[0047] 如图3所示的具有独立流水线级的高效多级流水线加密与解密允许使能XTS的流式(streamed)多频带加密和/或多频带AES类加密方案(等等),以及允许给加密/解密循环添加少于大约10μs的延迟开销的近线数据传输速度。每一个流水线级在加密模块310和解密模块314两者中独立地操作,每一级表示加密处理中的单个回合(round)。
[0048] 在每一级,足够的控制数据被与加密信息一起传递,以识别应当为当前数据块使用哪个密钥,并且然后,在执行该回合操作之后,该信息被传递到下一级。通过将每一回合分到流水线级中,隔离了一个明文/密文组对下一个明文/密文组的依赖性,这允许在流水线级粒度上的上下文切换。可以使用特定于应用的控制,以确保某些类型的操作的适当优先级,从而确保在数据流的特定方向具有优先级的一致的数据流,以及总的最低延迟影响。
[0049] 例如,在一个实施例中,针对用户数据的读和/或写命令可以优先于加密/解密操作。在一个替换和优选实施例中,加密/解密操作可以优先于针对用户数据的读和/或写命令。
[0050] 为了确定加密和/或写处理是否已被以任何方式破坏或者加密之后数据是否被破坏,可以以各种方式在将加密数据块312写入到一个或多个存储介质304之后,和/或在将加密数据块312写入到存储介质306之前或之后,对加密数据块312执行自测试。为了在被存储到一个或多个存储介质304之前测试加密数据块312,可以从存储介质306访问存储在存储介质306内的加密数据块312,并且可以使用解密模块314进行解密,解密模块314被配置为翻转加密模块310中的用于加密数据的加密代码。
[0051] 取代使用附加资源(诸如附加的加密模块和/或解密模块)以验证加密模块310的正确操作,利用多频带流水线加密模块310来执行定期的加密/解密自测试检查。这种方式的小的性能牺牲允许执行可被配置为所希望的风险水平(对应于数据被破坏的可能性)的引擎自测试,而不需要专用资源和与额外的模块或者引擎相关联的固有的故障率增长。此外,对于期待数据的用户来说,不希望延缓数据的解密,这种延迟会由与共享解密模块上缺乏解密性能相关联的代价而产生。
[0052] 根据一个实施例,对于加密过的数据的每个块或者逻辑扇区,可以选择测试向量316以对其进行加密和解密,从而作为测试来验证加密模块310和解密模块314两者不具有导致以非预期的密钥执行加密的故障,或者导致将会危害数据以后从存储介质306和/或一个或多个存储介质304的恰当恢复的某些其它数据完整性问题的故障。可根据本领域已知的实践创建每个测试向量。在创建之后,每一个测试向量316被存储在缓冲区322内,以便以后与解密测试向量320进行比较,在使用解密模块314对其进行解密之后,解密测试向量320被提供于从存储介质306和/或一个或多个存储介质304读取的解密数据流332(并且可能地解密测试向量320)中。
[0053] 在一个实施例中,缓冲区322可以作为先进先出(FIFO)缓冲区操作,以确保比较在对应的测试向量之间进行。当然,如本领域技术人员所知道的,可以使用存储测试向量316的任意其它方法。此外,如本领域技术人员所理解的,可以使用任意模块、处理器、例程、应用等等进行比较326。
[0054] 使用加密模块310对测试向量316加密,以产生加密测试向量318,然后将其插在任意两个加密数据块312之间。插入加密测试向量318的位置可被随机选择,可以跨数据流308的采样来散布,可以被插在已经存储的预定数目的数据块312之后等等。然后使用解密模块314对加密数据块312和加密测试向量318进行解密,以产生解密数据块324和解密测试向量
320,并且将得到的解密测试向量320与原始测试向量316进行比较326,以确定加密/解密循环是否正确地操作。因为测试向量和数据块在相同循环内进行加密与解密,测试向量能够提供关于该加密/解密循环操作得如何的信息,而不需要附加的资源,诸如加密/解密引擎、缓冲区、存储设备等等。
[0055] 在一个实施例中,可以选择充分均匀的随机样本向量316来进行加密和解密,以作为测试来验证加密/解密循环的准确性。这可被称为概率性(probabilistic)测试,因为其以高的置信度级别确保加密/解密循环中不会发生错误,但是不测试每个操作,从而提供了较低资源密集性的测试例程。
[0056] 在若干实施例中,测试向量可被插在预定数量的数据块中的每一个之间,该预定数量的数据块可以具有大约5和大约100之间的数目,诸如大约16、20、30、32、33、48、50、64等等。
[0057] 在一个替换实施例中,一个或多个测试向量316可被设计为测试加密模块310和/或解密模块314的每一级,从而以100%的可能性确保加密模块310和/或解密模块314的正确操作。这可被称为确定性测试,因为其确保加密/解密的每一级中的每一位被浏览(flipped),以便严格测试加密/解密循环。
[0058] 根据一个方式,当加密模块310是级独立的多频带加密模块时,测试密文/明文(测试向量316)块的大小可被设置为所使用的加密算法的最小密码块大小。在其它方式中,当希望自测试检查中更大的置信度时,可以使用更长的测试密文/明文块大小,这导致降低性能的代价折衷。
[0059] 特别地,在XTS级独立的设计中,可以以极小的可观察到的性能影响插入单个密文/明文块(测试向量316);此外,调整值(tweak value)基本上同时或者接近同时运行通过加密模块310。这确保测试的结果与数据完成加密基本上接近同时地完成加密,并且允许及时判断是否应当信赖该数据。当确定数据不可靠时(被破坏或以其它方式被不正确地加密/解密/存储/恢复),在一个实施例中可以丢弃该数据。
[0060] 图3依赖各种变量,例如,i、j、k、m、n和p。根据各种方案,这些变量中的每一个可以是表示加密/解密循环内的块或者测试向量的范围或中间取值的整数。可以基于每一个数据块302的大小、所使用的数据块302的数目、数据流308中的数据的数量、所使用的测试向量316的数目等等选择各个变量的实际值。
[0061] 现在参考图4,示出了根据一个实施例的用于自测试加密/解密循环的方法400。根据本发明可以在各种环境中,尤其是,在图1-3所示的任意环境中执行方法400。当然,如本领域技术人员在阅读本说明书之后将理解的,方法400可以包括比图4特别描述的那些操作更多或更少的操作。
[0062] 可以由操作环境的任意适合的组件来执行方法400的每一个步骤。例如,在一个实施例中,方法400可被部分地或者全部由存储系统、存储网络、处理器(诸如CPU、ASIC、FPGA等等)、服务器等等,或者系统或者网络的任意其它适合的设备或组件执行。
[0063] 如图4所示,方法400可以操作402来开始,其中接收包括用于加密的数据的数据流。该数据流可以包括多个单独的数据块,诸如数据集合、文件等等。当数据被作为数据流接收而不是已经被分割为单独的数据块时,在一种方式中,数据流被划分为数据块以供进一步处理。所述数据块可以具有任意所希望的大小,并且块的大小可以与接收该数据流的系统的缓冲区和/或存储存储器/介质的大小有关。
[0064] 在操作404中,一个或多个测试向量被插在数据流的单独的数据块之间。所述数据块可从在操作402接收的数据流得到、可从所述数据流被创建等等。插入测试向量的位置可被随机选择,可以均匀地跨数据流的采样来散布、在已经存储和/或接收了预定数目的数据块之后被插入等等。
[0065] 在一个实施例中,可以选择足够均匀(uniform)的随机样本测试向量,以作为测试来检验加密/解密循环的准确性。这可以被称为概率性测试,因为其以高的置信度水平确保在加密/解密循环中不会发生错误,但是不测试每个操作,从而提供较低资源密集性的测试例程。
[0066] 在一个替换实施例中,一个或多个测试向量可被设计为测试加密处理和/或解密处理的每一级,从而以100%的可能性确保加密/解密循环的正确操作。这可被称为确定性测试,因为其确保在加密/解密的每一级中浏览每一位,以便严格测试加密/解密循环。
[0067] 为了插入一个或多个测试向量,可以选择性地暂停从数据流创建数据块,每一次暂停允许在数据块之间插入一个测试向量。
[0068] 在另一个实施例中,可以选择一个或多个测试向量,以被跨多个密钥来散布,从而提供对加密/解密循环的广泛测试。
[0069] 在一种方式中,可以为了插入每一个测试向量,暂停一个流水线级的数据加密。以这种方式,在多频带加密引擎中,测试向量的插入对数据加密引发最小的影响。
[0070] 在操作406中,根据一种加密处理对包括一个或多个测试向量的数据块进行加密,以产生包括对应于一个或多个插入测试向量的一个或多个加密测试向量的加密数据流。可以使用硬件加密引擎、软件加密例程或者应用、或者其某些组合执行所述加密。所述加密处理可以是本领域已知的任意加密处理,诸如可调分组密码、对称分组密码等等。可能的加密处理的特定例子包括XTS、AES多频带、组合XTS-AES、AES-128等等。
[0071] 在一个实施例中,可以使用以硬件、软件或者硬件和软件的组合实现的多频带流水线加密引擎对数据流进行加密,所述加密引擎被配置为在独立的流水线级以一个或多个不同的密钥或者方案对包括一个或多个测试向量的数据块进行加密,以产生包括一个或多个加密测试向量的加密数据流。
[0072] 在操作408中,使用解密处理,对包括一个或多个加密测试向量的加密数据流进行解密,以产生对应于一个或多个加密测试向量的一个或多个解密测试向量,以及解密数据流。可以使用硬件解密模块、软件解密例程或者应用、或者其某种组合来执行所述解密。
[0073] 在一个实施例中,可以使用以硬件、软件或者硬件和软件的组合实现的多频带流水线解密引擎对包括一个或多个加密测试向量的加密数据流进行解密,所述解密引擎被配置为使用来自加密引擎的一个或多个对应的密钥或者方案对包括一个或多个加密测试向量的加密数据流进行解密。
[0074] 在一个方法中,可以为了解密每一个测试向量,暂停一个流水线级的数据解密。以这种方式,在多频带解密引擎中,测试向量的解密对数据解密引发最小的影响。
[0075] 在操作410中,将每一个解密测试向量与对应的插入测试向量进行比较。可以使用硬件比较模块、软件比较例程或者应用、或者其某种组合来执行所述比较。
[0076] 在操作412中,报告比较的结果,诸如本地或者远程地公开所述结果、显示所述结果、存储所述结果、打印所述结果、传输所述结果等等。
[0077] 在某些实施例中,该结果可被解释以便尽快地确定加密/解密循环是否正确地操作。比较的结果可以包括关于插入测试向量和解密测试向量之间是否存在至少一个差异、哪些测试向量没有通过比较(在经历加密/解密循环之后不匹配)、哪些数据涉及失败的测试向量(位于失败的插入测试向量附近、之后和/或之前等等的数据)的信息,和/或本领域技术人员在阅读本说明书之后将知道的关于所述比较和所述测试向量的任意其它有用信息。
[0078] 方法400还可以包括从数据流中丢弃比较结果指示插入测试向量和解密测试向量之间存在至少一个差异的任意数据。根据各个实施例,该数据可以是数据流中的任意数据、仅仅是失败的测试向量附近的数据块、失败的测试向量周围的预定数目的数据块、被使用产生失败的测试向量的对应加密和/或解密引擎进行了加密/解密的任意数据等等。
[0079] 在另一个实施例中,报告比较的结果可以包括当比较的结果指示插入测试向量和解密测试向量之间存在至少一个差异时,指示加密/解密循环出现故障。以这种方式,该处理可被纠正,从而在试图进行更多数据加密之前,解决了与加密/解密循环有关的未来的问题。
[0080] 在另一个实施例中,方法400还可以包括在存储器中存储每一个插入测试向量。以这种方式,每一个解密测试向量可被与存储在存储器内的对应的测试向量进行比较,以确定其间是否存在一个或多个差异。
[0081] 在一个实施例中,一种系统可以包括处理器以及与该处理器集成在一起和/或可由该处理器执行的逻辑部件。该逻辑部件被配置为使得所述处理器:接收包括用于加密的数据的数据流;在所述数据流的单独的数据块之间插入一个或多个测试向量;对包括所述一个或多个测试向量的数据块进行加密,以产生包括一个或多个加密测试向量的加密数据流;对包括所述一个或多个加密测试向量的加密数据流进行解密;将每一个解密测试向量与对应的插入测试向量进行比较;和报告比较的结果。如本领域技术人员将会理解的,此处描述的任意实施例和/或方案可被以任意方式与该系统进行结合。
[0082] 在另一个实施例中,一种用于自测试加密/解密循环的计算机程序产品可以包括其中包含有程序代码的计算机可读存储介质。所述程序代码可由处理器读取/执行以:接收包括用于加密的数据的数据流;在所述数据流的单独的数据块之间插入一个或多个测试向量;对包括所述一个或多个测试向量的数据块进行加密,以产生包括一个或多个加密测试向量的加密数据流;对包括所述一个或多个加密测试向量的加密数据流进行解密;将每一个解密测试向量与对应的插入测试向量进行比较;和报告比较的结果。如本领域技术人员将会理解的,此处描述的任意实施例和/或方案可被以任意方式与该计算机程序产品进行结合。
[0083] 附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0084] 还应当理解,可以以代表用户部署的服务的形式来提供本发明的实施例。
[0085] 还应当理解,可以以代表用户部署的服务的形式来提供本发明的实施例,以按需提供服务。
[0086] 虽然上面已经描述了各个实施例,应当理解,它们仅仅被作为例子给出,而不作为限制。因此,本发明的实施例的宽度和范围不应受任意上述示例性实施例的限制,而是应当仅仅根据所附的权利要求及其等同物来限定。