保护数据存储的机密性与完整性的方法和装置的制作方法

文档序号:7614022阅读:570来源:国知局
专利名称:保护数据存储的机密性与完整性的方法和装置的制作方法
技术领域
本发明涉及数据安全技术,特别是指为数据存储提供机密性与完整性保护的方法和装置。
背景技术
数据安全涉及诸多方面的技术;其中,重要的一点在于为数据存储提供机密性和完整性保护。其目的在于抗拒攻击行为,包括抗拒借助特殊硬件手段所实施的物理攻击行为。这里,数据泛指计算机系统中所存储的数据、代码等内容;而数据的存储场合可以是计算机系统所装配的处理器片外随机访问存储器或简称为存储器(也称内存、主存等),可以是多处理器系统中的共享存储器,可以是外围存储设备如磁盘,还可以是经网络由远程存储服务器所提供的远程存储空间,等等。
数据的机密性(Confidentiality)是指必须限定能够观看数据的合法对象,或者说,数据的内容不是容易理解的。数据的完整性(Integrity)是指防止对信息非授权的改动,且这种恶意修改包括借助特殊硬件手段所实施的行为。换言之,完整性保护的目的就是为系统提供一个抗攻击(包括抗硬件攻击)的篡改证明环境。
对于存储器而言,保护数据机密性往往依赖于数据加密技术。实施完整性检验可以通过为存储器块创建MAC(Message Authentication Code,消息认证码;即,散列一个消息而得到该消息的定长的密码指纹;另外,可以将地址等信息合并计算在MAC中)来实施。但基于MAC的方法无法探测到重放攻击;即,攻击者可以使用同一地址处先前所拷贝的(数据,MAC)配对来替换当前的(数据,MAC)配对而不会被系统所探测到。为了对抗重放攻击对完整性的破坏,需要采用哈希树(Hash Tree,或Merkle Tree;参阅“R.C.Merkle.Protocols for public key cryptography.In IEEE Symposium on Security and Privacy,pages 122-134,1980”和“M.Blum,W.S.Evans,P.Gemmell,S.Kannan,and M.Naor.Checking the correctness ofmemories.IEEE Symposium on Foundations of Computer Science,San Juan,Puerto Rico,1991,pp.90-99.”)这样的检验方案。
存在若干现有的技术/系统,致力于存储器的机密性与完整性保护。例如,XOM(eXecute Only Memory;参阅“David Lie,et al.Architectural support for copy and tamperresistant software.In Proceedings of the 9th International Conference Architectural Support forProgramming Languages and Operating Systems,2000,pp.168-177.”)加密所有流出处理器的数据,并为数据附加MAC来实施完整性保护。CHTree(Cached Hash Tree;参阅“B.Gassend,G.E.Suh,D.Clarke,M.van Dijk,and S.Devadas.Caches and merkle trees for efficient memoryauthentication.Ninth International Symposium on High Performance Computer Architecture,Anaheim,California,2003,pp.8-12.”)利用处理器的片内Cache(高速缓冲存储器)来提高基于哈希树的完整性校验性能。HW-HTree(Hot-Window Hash Tree;参阅“侯方勇,王志英,刘真。基于Hash树热点窗口的存储器完整性校验。计算机学报,Vol.27,No.11,pp1471~1479,2004.”)基于访问窗口的概念有效地利用存储器访问的局部性特征来优化哈希树检验过程。另外,文献“Suh,D.Clarke,B.Gassend,M.van Dijk,and S.Devadas.Efficient memory integrityverification and encryption for secure processors.The 36th International Symposium onMicroarchitecture,pp.339-350,2003.”以及“J.Yang,Y.Zhang,and L.Gao.Fast secure processorfor inhibiting software piracy and tampering.The 36th International Symposium onMicroarchitecture,2003,pp.351-360.”讨论了如何实现低延迟的数据加密。
对于存储设备而言(包括本地连接的外围存储设备,如磁盘或构建于磁盘之上的本地文件系统;还包括远程连接的存储服务器,以及构建于远程存储之上的分布式文件系统),可采取类似于保护存储器的原理实施机密性与完整性保护。一些相关的技术包括SUNDR(参阅“D.Mazieres and D.Shasha.Don′t trust your file server.In Proceedings of the 8th Workshopon Hot Topics in Operating Systems,2001.”)、Arbre(参阅“Fujita Tomonori and Ogawara Masanori.Protecting the Integrity of an Entire File System.In proceedings of the First IEEE InternationalWorkshop on Information Assurance(IWIA),2003.”),等等。在文献“Paul Stanton.Securing Datain StorageA Review of Current Research.ACM Computing Research Repository(CoRR),TechnicalReport 0409034,September 2004.”中,综述了存储设备安全的研究与应用现状。
虽然存在很多相关的系统或技术,但数据存储的机密性和完整性保护依然存在着如安全性不够充分、性能不够良好等问题。因此,有必要提供更有效的数据存储机密性和完整性保护方法与装置,以满足数据安全存储的需求。

发明内容
本发明的目的在于给出一种方法和装置,使得在保护数据存储的机密性与完整性时,能够使得保护过程具有足够的安全性,同时是高性能的。
为实现本发明的目的,本发明所采用的技术方案是写数据时,基于唯一的时间戳,加密数据及其完整性检验码,并将加密的结果与加密所使用的时间戳一起写向目标存储位置;读数据时,读出与所读数据被一起存储的时间戳,基于所读出的时间戳,解密所读出的被加密的数据及其完整性检验码,随后,重新为解密所得的数据计算完整性检验码并与解密所得的完整性检验码相比对,依据比对的结果是否一致来判断所读数据是否合法;读数据时,检验所读出的时间戳是否保持完整性,并在所读时间戳未保持完整性的情况下指示数据不合法;读数据时,用于解密被加密的数据及其完整性检验码的时间戳,是与被校验是否保持完整性的时间戳相一致的,不一致则导致数据不合法。
在为实现本发明所采用的技术方案中,检验所读出的时间戳是否保持完整性可以依赖于哈希树而实施,为此在时间戳存储空间上创建哈希树,哈希树的叶节点来自被存储的时间戳;写时间戳时,依据所写的时间戳更新相应的哈希树节点;
读时间戳时,依据哈希树校验所读时间戳的完整性。
在为实现本发明所采用的技术方案中,加密数据及其完整性校验码,是采取基于唯一的时间戳,获得序列密码加密所用的密钥流,使用此密钥流加密数据及其完整性校验码;加密所用的密钥流可以先于待加密的数据及其完整性检验码就绪而预先准备就绪,从而在实施加密时只需将预先准备就绪的密钥流与待加密的数据及其完整性校验码实施运算。
在为实现本发明所采用的技术方案中,解密所读出的被加密的数据及其完整性检验码,是先于校验所读时间戳是否保持完整性的过程结束之前而开始的。
在为实现本发明所采用的技术方案中,解密所读出的被加密的数据及其完整性检验码,是采取基于所读出的时间戳,获得序列密码解密所用的密钥流,使用此密钥流解密所读出的被加密的数据及其完整性检验码;解密所用的密钥流可以先于读被加密的数据及其完整性检验码就绪而预先准备。
在为实现本发明所采用的技术方案中,基于唯一的时间戳加密数据及其完整性检验码,以及基于所读出的时间戳解密被加密的数据及其完整性检验码,是将时间戳结合一个不为攻击者所知的密钥而实现的。
在为实现本发明所采用的技术方案中,将加密所使用的时间戳写向目标存储位置,是写时间戳的明文形式。
在为实现本发明所采用的技术方案中,将加密所使用的时间戳写向目标存储位置,所使用的目标存储位置是连续的物理存储位置。
在为实现本发明所采用的技术方案中,用于解密被加密的数据及其完整性检验码的时间戳,是与被校验是否保持完整性的时间戳相一致的,在于所读时间戳能够以秘密的方式将其值在实施完整性校验的单元与执行解密的单元之间传递;所读时间戳能够以秘密的方式将其值的认证信息在实施完整性校验的单元与执行解密的单元之间传递。
依据本发明所提出的方法和装置,所实现的数据存储保护系统可以用于处理器读与写被其使用的片外存储器;多个处理器读与写被它们共享的片外存储器;计算机系统读与写本地连接的包括磁盘在内的外围存储设备;本地计算机系统读与写通过网络连接的远程存储空间;等等。
由于时间戳空间相比待保护数据存储空间而言要小得多,使得校验时间戳完整性的代价比起校验待保护数据完整性的代价要小得多。当以序列密码方法实施加密/解密时,由于加密密钥流的生成是与被加密的数据(包括数据的完整性校验码)及其目标地址无关的,从而全部加密密钥流都可以预先准备而在转换明文数据为密文形式时只需执行异或操作;解密密钥流也可以由于时间戳的先行传递而在很多时候预先准备或部分准备就绪。
总之,本发明所提出的方法和装置可以有效地提供数据存储的机密性与完整性保护。


说明书包含1幅附图,是本发明所描述的为数据存储提供机密性与完整性保护的原理图。
具体实施例方式
本发明所考虑的,是如何有效地为计算机系统的数据存储,包括单处理器系统中的片外随机访问存储器(简称为存储器,也称内存或者主存)、多处理器系统中共享的存储器、外围存储设备以及远程存储服务,提供有效的机密性与完整性保护。鉴于公知的原因,本发明对所使用的某些术语、名词和表达方式等不作显式的定义或说明,比如数据、数据块、位(bit)、字节(byte)、块、节点、连接、数的表达方式、安全、可信、非可信、哈希、Hash函数、MD5 Hash函数、SHA-1 Hash函数、SHA-2 Hash函数、密钥、加密、解密、密钥流、异或(XOR)、时间戳、处理器、多处理器、对称多处理器、片内、片外、存储器、总线、系统总线、存储器总线、存储器控制器MCH(Memory Controller Hub,或North Bridge Chip/北桥芯片)、本地、远程、服务器、文件系统,等等。
下面的内容详细描述了本发明所提出的方法与装置的具体实施。
附图中,数据使用者100是数据读与写(或更新)操作的发起者。数据保存者200实施数据的存储。数据使用者100以块访问的形式读与写数据保存者200的内容;即,读与写操作的单位都是一个数据块。
附图中,为了实施数据存储的机密性与完整性保护,数据使用者100集成有如下单元不为攻击者所知的密钥101,时间戳102,加密引擎103(生成加密/解密信息,以及实施加密/解密操作)、完整性校验码计算逻辑104。
附图中,数据保存者200包括存放被加密数据块的空间201;存放与被加密数据块相关联的、被加密的完整性校验码的空间202,存放与被加密数据块相关联的时间戳的空间203。
附图中,数据使用者100通过校验单元112来校验从数据保存者200中所读时间戳的完整性。
时间戳完整性校验可以采取基于哈希树的方案。为描述方便,将哈希树写作Hash树。此时,在存放时间戳的空间203上创建有一个Hash树;Hash树的叶节点来自于所存放的时间戳;Hash树的根节点保持可信;此时,校验单元112可以依赖可信的Hash树根节点,校验所读时间戳的完整性。
从数据访问的功能上来说,数据使用者100以块访问的形式读写数据保存者200;也就是说,数据使用者100到数据保存者200的一次访问将读或写(更新)数据保存者200的一个数据块。约定作为一个单元而在数据使用者100与数据保存者200间传递的数据块的明文形式(即未经加密)为DBlock,与DBlock关联的完整性检验码的明文形式为DMAC;DBlock与DMAC的密文形式(即经过加密)分别为SDBlock和SDMAC;为加密DBlock与DMAC而使用的时间戳为TS。记密钥101为SKey。
基本写(更新)操作.当更新一个DBlock到数据保存者200时,数据使用者100执行(a).获得新的唯一的TS(b).依据(a)中获得的TS,由加密引擎103而生成当前加密信息;该加密信息可以是分组密码所用的加密密钥,也可以是序列密码所用的加密密钥流;即KeyCURRENT_E=Cipher_KeyGeneration(TS)(c).由完整性校验码计算逻辑104为DBlock生成完整性检验码,即DMAC=Hash(DBlock)(d).由加密引擎103使用(b)中所得的加密信息加密DBlock和DMAC,得到SDBlock和SDMAC;即(SDBlock,SDMAC)=Cipher_Encryption[(DBlock,DMAC),KeyCURRENT_E](e).将(d)中得到的SDBlock和SDMAC,以及(b)中所用的TS,写向数据保存者200(f).根据(e)中所写的TS,由校验单元112实施必要的为以后校验时间戳完整性而作的操作注*如果采用Hash树方案校验所读时间戳的完整性,那么,(f)就是依据(e)中所写的TS,由校验单元112更新Hash树;一般地,更新将导致从Hash树叶节点一直到根节点的更新过程;另外,到根节点的更新过程可以是与写TS相同步的,也可以是相异步的注**(b)中由TS而获得加密信息,可以是将TS结合SKey,而完成,即KeyCURRENT_E=Cipher_KeyGeneration(SKey,TS)。
基本读操作.当从数据保存者200读数据时,数据使用者100执行(a).依据访问地址信息,读取相关联的TS、SDBlock和SDMAC(b).由校验单元112开始校验(a)中所读TS的完整性;另外,对TS的完整性校验完成与否可以不妨碍后续步骤的进行(c).由(a)所读的TS,由加密引擎103生成解密信息,即,KeyCURRENT_D=Cipher_KeyGeneration(TS)(d).由加密引擎103,使用(c)中所得的解密信息,解密(a)中所读的SDBlock与SDMAC而得到DBlock和DMAC,即(DBlock,DMAC)=Cipher_Decryption[(DBlock,DMAC),KeyCURRENT_D](e).由完整性校验码计算逻辑104为(d)中解密所得的DBlock重新计算完整性检验码,即DMACAgain=Hash(DBlock)
(f).将(e)中所得的DMACAgain与(d)中解密所得的DMAC相对比,二者不一致则表明从数据保存者200中所读取的数据是非法的(g).在(b)以及(b)之后的任何时候,当(b)完成校验过程并且校验的结果为所读TS未保持完整性时,则指示所获得的数据是非法的。
注如果采用Hash树方案校验所读时间戳的完整性,那么,(b)中由校验单元112依据Hash树校验所读时间戳是否保持完整性注**(c)中由TS而获得加密信息,可以是将TS结合SKey而完成,即KeyCURRENT_D=Cipher_KeyGeneration(SKey,TS)。
进一步地,可以1)获得当前时间戳可以有多种方式比如依据系统定时器;或者使用随机数;或者针对一个时间戳初始值,通过计数写操作而在初始值的基础上得到新的时间戳(比如,每一次写操作都使得时间戳递增“1”)。不管采用什么方法,只要对于每一次新的写(更新)操作都生成唯一的时间戳即可。
2)保存时间戳到数据保存者,可以保存时间戳的实际值,也可以保存时间戳的加密或变化结果;比如,采用一个仅为数据使用者所知的密钥加密写向数据保存者的时间戳;再比如,将时间戳实际值与时间戳初始值之间的差值写向数据保存者。
3)如果时间戳是以秘密方式(即不为攻击者所知)被存储的,那么,可以只基于时间戳而获得加密/解密信息;即,获得加密/解密信息不需要密钥SKey。
4)在每次系统重新启动时,所用的密钥SKey可以随机选定,时间戳的生成方式或者其初始值也可以随机选定。
5)如果采用序列密码的方式加密/解密 数据块及其完整性校验码,那么,由时间戳所获得的密钥流与待加密/解密 的数据块及其完整性校验码实施异或(XOR)运算,即可完成加密/解密过程。采用序列密码的方式实施加密/解密可以获得更好的运行时性能。由于加密密钥流的生成是与被加密的数据块(包括其完整性校验码)及目标地址无关的,从而全部加密密钥流都可以预先准备而在转换明文为密文时只需执行简单的异或操作;解密密钥流也可以由于时间戳的先行传递而在很多时候预先准备或部分准备就绪。为此,可以设置相应的密钥流缓冲器,当密钥流缓冲器有剩余空间时,则启动密钥流填充过程。密钥流填充过程就是生成新的时间戳(即使当前并无新的加密请求发生),然后,基于新的时间戳导出新的密钥流;将新生成的密钥流填充到密钥流缓冲器,并可以使用生成该密钥流的时间戳作为索引。如果密钥流填充过程是由被其它计算过程共享的数据使用者资源完成的(比如,使用主处理器来完成),那么,密钥流填充过程可以在共享资源空闲时进行(比如,检测主处理器当前的空闲率是否高于设定的门限);如果密钥流填充过程是由专门的部件完成的(比如,使用专门的加密协处理部件),那么,密钥流填充过程可以一直进行,直到密钥流缓冲器被填满。在加密请求发生时,如果密钥流缓冲器非空,则从中取出一个密钥流实施加密,并把相应的索引该密钥流的时间戳写向数据保存者;如果密钥流缓冲器为空,则可以旁路密钥流缓冲器而直接从加密引擎生成密钥流,或者等待有新的密钥流被填入密钥流缓冲器。
6)为了提高Hash树更新与实施校验的效率,数据保存者应将其所保存的所有时间戳物理地放置在一起;或者,至少将若干时间戳放置在一起。举例来说,如果数据保存者共保存有1M个时间戳,而每个时间戳为64bit长,那么数据保存者应当将总计(1M*64bit=8MB)的时间戳连续放置;或者,如果数据保存者的每个存储块为128byte,则至少将地址或编号连续的(128byte*64bit=16)个时间戳放置于同一存储块中。在数据保存者中,关联“某一被加密的数据块,被加密的该数据块的完整性校验码,为加密该数据块而使用的时间戳”是通过数据块的访问地址信息,包括基于地址信息的进一步编码,而实现的。地址可以是存储器的物理地址、磁盘的扇区号或者簇号、文件系统元数据(Metadata)中标识一个文件块的块编号、数据块的Hash值、远程存储空间的存储块编号,等等。
7)在使用序列密码实施读与写操作中的加密/解密时,为了有效提高读操作时数据解密的性能,可以数据使用者按照先读时间戳,再读被加密的数据块及其完整性校验码的顺序访问数据保存者;这样,时间戳可以先行到达而被数据使用者用来准备解密密钥流,从而使得解密密钥流可以在解密动作发生时预先准备就绪(或预先准备一部分)。另外,还可以让检验所读时间戳完整性的操作在后台以异步的方式进行;也就是说,所读时间戳不等待对其是否保持完整性的检验完成而立即被用于生成解密密钥流;如果随后的时间戳完整性校验完成且检验结果为所读时间戳不完整,那么,数据使用者则由此知晓对应数据是不合法的。
8)如果从校验所读时间戳完整性的校验单元到数据使用者的加密/解密单元之间存在不可信的传输路径;那么,经校验单元校验为合法的时间戳(或者时间戳的认证信息)需要以秘密的方式传递到 加密/解密 单元。而且,这一秘密传送过程必须使得攻击者无法在此路径上通过插入一个伪造的时间戳(或者一个伪造的时间戳认证信息)而让数据使用者使用攻击者所期望的时间戳来解密数据及其完整性校验码。
9)当数据使用者为多个计算实体,且这些实体之间共享数据保存者时,可以使用在这些计算实体之间保持同步的时间戳来实施加密/解密;由被多个计算实体共享的单一单元来实施对所读时间戳的完整性校验。
10)如果时间戳是被保存在可信的(指不可被篡改)存储位置中,那么,就不必实施对所读时间戳是否保持完整性的校验。
11)除了Hash树校验方案之外,任何能够校验所读时间戳是否保持完整性的方案都是可用的。
下面,给出本发明的具体应用示例,以便更清晰地说明本发明所提方法的具体实施。(示例一)通过本发明的方法保护单处理器系统中存储器的机密性与完整性在此情形下,处理器(Processor)作为数据使用者,存储器(Memory)作为数据保存者。处理器每次访问存储器的一个存储器块。
在处理器中集成有用于生成密钥流的密钥SKey,时间戳TS,以“一次一密号码簿/One-Time Pad”的方式构造的序列密码加密引擎OTPCipher(包括生成密钥流功能以及将密钥流与待加密/解密的数据实施异或操作的功能),用于缓冲预先生成的加密密钥流的缓冲器KBufferE,用于缓冲解密密钥流的KBufferD,用于为存储器块计算完整性检验码的HashLogic,Hash树根节点,以及用于实施Hash树完整性检验过程的校验机制HVerification。
存储器以存储器块的形式组织。在最基本的情况下,可以取一个存储器块的尺寸等于处理器片内二级高速缓冲器(L2-Cache)的一行。存储器中实际保存有3种类型的信息,分别是被加密的包含数据内容的存储器块,相应的被加密的完整性检验码,加密所用的时间戳。将存储所有时间戳的空间称为MemoryTS。一个Hash树创建于MemoryTS之上。为提高完整性检验的效率,时间戳应物理地连续存储。
记在处理器与存储器之间传递的一个存储器块为DChunk,与DChunk对应的完整性检验码为DMAC;DChunk和DMAC的密文为SDChunk和SDMAC;加密某DChunk和DMAC所用的时间戳为TS;加密密钥流为KeyStreamE,解密密钥流为KeyStreamD。
为便于描述,具体地取一个DChunk为128byte,应用MD5Hash函数计算完整性检验码而为每个DChunk得到128bit的DMAC;TS的长度应足够长以避免时间戳回绕(即出现重复值),为此,取TS的长度为64bit;SKey也应具有足够的长度,取其为1024bit。这样,则有DChunk和SDChunk为128byte,DMAC和SDMAC为128bit;将SDChunk、SDMAC和TS关联在一起是通过地址编制措施来实现的。
更新存储器.当处理器将一个DChunk更新存储器时,执行①递增时间戳而得到新的唯一的TS②由OTPCipher基于SKey和①中的TS获得加密密钥流KeyStreamE,即Keystreamseg1=SHA512(LeftTruncate1024(SKey‖TS‖1))Keystreamseg2=SHA512(LeftTruncate1024(SKey‖TS‖2))Keystreamseg3=SHA512(LeftTruncate1024(SKey‖TS‖3))KeystreamE=Truncate1152(KeystreamSeg1‖KeystreamSeg2‖KeystreamSeg3)③由HashLogic为DChunk计算DMAC,即DMAC=Hash(DChunk)④由OTPCipher用②中所得KeyStreamE加密(DChunk,DMAC)配对,即(SDChunk,SDMAC)=(DChunk,DMAC)KeyStreamE⑤将④中得到的(SDChunk,SDMAC)以及②中所用的TS,写向存储器⑥依据写向存储器的TS,由HVerification执行对Hash树的更新操作注*SHA512是指SHA-2(512)Hash函数,生成512bit的输出″‖″表示连接操作LeftTruncate表示左截断,下标″1024″表示截断后的结果为1024bitTruncate表示截断(可取左截断),下标″1152″表示截断后的结果为1152bit注**步骤①和②可在步骤④之前的任何时候准备就绪,并将预先得到的(TS,KeyStreamE)配对缓冲在KBufferE中;这样,步骤④就可以直接从KBufferE获得一个唯一的(TS,KeyStreamE)配对而完成加密操作注***更新Hash树可以以任何有效的方法进行,包括异步地进行更新,也包括通过缓冲部分Hash树的内部节点而提高Hash树更新过程的速度。
读存储器.当处理器从存储器读取一个DChunk时,执行①依据访问地址信息,从时间戳空间MemoryTS中读取相应的TS,也读取与访问地址相对应的SDChunk和SDMAC②由HVerification检验①中所得TS的完整性③如果检验结果表明TS为非法,即未保持完整性,则指示错误发生④依据所获得的TS,由OTPCipher生成解密所用的KeyStreamD,即KeystreamSeg1=SHA512(LeftTruncate1024(SKey‖TS‖1))KeystreamSeg2=SHA512(LeftTruncate1024(SKey‖TS‖2))KeystreamSeg3=SHA512(LeftTruncate1024(SKey‖TS‖3))KeystreamD=Truncate1152(KeystreamSeg1‖KeystreamSeg2‖KeystreamSeg3)⑤由OTPCipher用④中所得KeyStreamD解密(SDChunk,SDMAC)配对,即(DChunk,DMAC)=(SDChunk,SDMAC)KeyStreamD⑥由HashLogic为⑤中解密得到的DChunk重新计算完整性检验码,即DMACAgain=Hash(DC hunk)⑦用⑥中所得的结果与⑤中解密所得的DMAC匹配,二者不一致则表明数据非法注*SHA512是指SHA-2(512)Hash函数,生成512bit的输出″‖″表示连接操作LeftTruncate表示左截断,下标″1024″表示截断后的结果为1024bitTruncate表示截断(可取左截断),下标″1152″表示截断后的结果为1152bit注**为提高性能,步骤④可紧接在步骤①后面进行,并可预先准备解密密钥流且缓冲在KBufferD中;而步骤②和③可在任何时候完成;但只要校验结果为所读TS不完整,则表明所获得的对应数据不合法注***实施Hash树检验可以按照任何有效的方法进行,包括通过缓冲部分Hash树的内部节点而提高Hash树检验过程的速度。
这里,以OTP方式生成密钥流是将SKey、TS和数值(分别为1、2、3)相连接后作为输入馈入SHA-2(512)Hash函数;而每次输出则得到一个512bit的加密比特位序列,作为所需密钥流的一个片断;连接这样的片断(连续的3个)而得到所需的密钥流。除了SHA-2(512)Hash函数之外,任何密码安全的Hash函数都可用作此目的;但需要依据所选用的Hash函数的不同,而调整所需连接的加密比特位序列的数目。作为Hash函数输入的一部分而连接在SKey和TS上的,可以是简单的数值“1、2、3”,也可以是更复杂的函数结果,以及采用更复杂的连接方式。另外,除了使用Hash函数,任何能够由SKey和TS而得到随机比特序列的函数,都可以用在这里导出加密/解密所用的密钥流。
时间戳递增可以采用很多方式,包括最简单的方式——即在当前值的基础上“+1”/“-1”。当然,也包括其它更复杂的方式,只要能使得时间戳每次递增都获得唯一的值即可。
计算完整性检验码所用的函数可以有多种,只要该函数能够产生对输入具有完整性认证作用的结果。比如,MD5Hash函数、SHA-1Hash函数;或者是其它更复杂或更简单的校验函数,等。当然,选择密码安全性越高的Hash函数,使得完整性检验码发现错误的能力越强。
不同的存储器块尺寸,同样适用于上述过程,只是加密/解密的密钥流长度需要随着存储器块尺寸的大小而调整。处理器的L2-Cache行与存储器块是否等大小,也不影响应用上述过程;比如,一个L2-Cache行等于两个存储器块大小,只要以存储器块大小作为访问的单位而施加保护相关的处理即可。
处理器是否具有L2-Cache并不影响所述方法的使用。不管处理器片内Cache如何设置,只要考虑每次处理器访问存储器的事务即可。
还有,更新Hash树以及依赖Hash树检验时间戳完整性的过程,可以采用任何有效的方法进行。比如,采用在“背景技术”中所提及的方法。
(示例二)通过本发明的方法保护对称多处理器系统中的共享存储器在此情形下,多个对称的处理器(Symmetric Multi-Processor,SMP)作为数据使用者,为多个处理器所共享的存储器作为数据保存者。
一个对称多处理器系统的基本结构为多个处理器通过系统总线互连在一起;系统总线是侦听总线(Snoop Bus);存储器控制器MCH(Memory Controller Hub)也连接在系统总线上,并通过存储器总线为多个处理器提供一个单一的存储器。
在处理器中集成有以“一次一密号码簿/One-Time Pad”的方式构造的序列密码加密引擎OTPCipher(包括生成密钥流功能以及将密钥流与待加密/解密的数据实施异或操作的功能);用于加密/解密存储器块(及完整性校验码)目的的密钥SKey1和时间戳TS1;用于时间戳秘密传递目的的密钥SKey2和时间戳TS2;用于缓冲预先生成的用于加密存储器块(及完整性校验码)的密钥流的缓冲器,缓冲用于解密存储器块(及完整性校验码)的密钥流的缓冲器,缓冲时间戳秘密传递所用密钥流的缓冲器;用于为存储器块计算完整性检验码的HashLogic。
存储器以存储器块的形式组织。存储器中实际保存有3种类型的信息,分别是被加密的存储器块,相应的被加密的完整性检验码,加密所用的时间戳。将存储所有时间戳的空间称为MemoryTS。一个Hash树创建于MemoryTS之上。为提高完整性检验的效率,时间戳应当物理地连续存储。
存储器控制器MCH也可以视为是数据使用者的一部分。在MCH中,可信地维持有Hash树根节点,并具有用于实施Hash树完整性检验过程的校验机制HVerification。另外,MCH内部也维持有时间戳TS1,以及SKey2和TS2。
SKey1在处理器之间是共享的(即共同知道其值);TS 1在处理器之间以及处理器和MCH之间是同步的(即其值是变化的,但却维持着同样的所使用的值);SKey2在处理器与MCH之间是共享的;TS2在处理器和MCH之间是同步的。
记在处理器与存储器之间传递的一个存储器块为DChunk,与DChunk对应的完整性检验码为DMAC;DChunk和DMAC的密文为SDChunk和SDMAC;由SKey1和TS1所得到的密钥流为KeyStream1;由SKey2和TS2所得到的密钥流为KeyStream2。
在对称多处理器系统中,处理器之间为维护Cache一致性也存在数据传输;取处理器之间每次数据传输也是传递一个DChunk。
为便于描述,具体地取一个DChunk为128byte,应用MD5Hash函数计算完整性检验码而为每个DChunk得到128bit的DMAC;TS1和TS2的长度应足够长以避免时间戳回绕(即重复出现),为此,取TS1和TS2的长度都为64bit;SKey1和SKey2也应具有足够的长度,取其都为1024bit。这样,则有DChunk和SDChunk为128byte,DMAC和SDMAC为128bit;将SDChunk、SDMAC和TS关联在一起是通过存储器访问地址来实现的。
System Start.当系统初始启动时,执行①在处理器之间选定同样的SKey1,在处理器与MCH之间选定同样的SKey2,②在处理器之间以及处理器与MCH之间,选定同样的TS1的初始值,在处理器与MCH之间选定同样的TS2的初始值③在分派完密钥和时间戳初始值后,系统进入一个同步栅栏(Synchronizationbarrier),此时,所有的TS1与TS2都保持了相同;之后,TS1与TS2可以继续保持同步注*为完成①和②可以有多种实现途径;比如,令系统的启动处理器(The bootprocessor that brings up the system)随机选定所需数值,然后,以秘密的方式传送到其它处理器和MCH注**在③中,由于总线事务对所有附着在多处理器侦听总线(Snoop MP bus)上的设备都是可视的,各处理器(含MCH)保持同步的时间戳是容易作到的;比如,每一次总线事务都触发所有的时间戳递增“1”;或者,通过跟踪总线事务序列号(Bus transaction sequence number)即可让时间戳保持同步。Write DChunk.当处理器将一个DChunk逐出其片内时,该处理器执行①递增时间戳而得到新的唯一的TS1②基于SKey1和①中获得的TS1获得密钥流KeyStream1,即Keystream1Seg1=SHA512(LeftTruncate1024(SKey1‖TS1‖1))Keystream1Seg2=SHA512(LeftTruncate1024(SKey1‖TS1‖2))Keystream1Seg3=SHA512(LeftTruncate1024(SKey1‖TS1‖3))Keystream1=Truncate1152(Keystream1Seg1‖Keystream1Seg2‖Keystream1Seg3)③为DChunk计算DMAC,即DMAC=Hash(DChunk)④用②中所得KeyStream1加密(DChunk,DMAC)配对,即(SDChunk,SDMAC)=(DChunk,DMAC)KeyStream1⑤将④中得到的(SDChunk,SDMAC)送出该处理器注*SHA512是指SHA-2(512)Hash函数,生成512bit的输出″‖″表示连接操作LeftTruncate表示左截断,下标″1024″表示截断的结果为1024bitTruncate表示截断(可取左截断),下标″1152″表示截断的结果为1152bit注**步骤①和②可在步骤④之前的任何时候准备就绪,并将预先得到的(TS1,KeyStream1)配对缓冲在密钥流缓冲器中;这样,步骤④就可以直接从密钥流缓冲器获得一个唯一的(TS1,KeyStream1)配对而完成加密动作。
Accept DChunk to Cache.若是为了维护Cache一致性,目标处理器接收一个来自源处理器(指逐出DChunk的处理器)的DChunk时,目标处理器执行①保持与源处理器同步的TS1②基于SKey1和①中的TS1获得密钥流KeyStream1,即Keystream1Seg1=SHA512(LeftTruncate1024(SKey1‖TS1‖1))Keystream1Seg2=SHA512(LeftTruncate1024(SKey1‖TS1‖2))Keystream1Seg3=SHA512(LeftTruncate1024(SKey1‖TS1‖3))Keystream1=Truncate1152(Keystream1Seg1‖Keystream1Seg2‖Keystream1Seg3)③用②中所得KeyStream1解密(SDChunk,SDMAC)配对,即(DChunk,DMAC)=(SDChunk,SDMAC)KeyStream1④为③中解密所得的DChunk重新计算完整性检验码,即DMACAgain=Hash(DChunk)⑤将④中所得的结果与③中解密所得的DMAC匹配,二者一致则表明数据合法注*SHA512是指SHA-2(512)Hash函数,生成512bit的输出″‖″表示连接操作LeftTruncate表示左截断,下标″1024″表示截断的结果为1024bitTruncate表示截断(可取左截断),下标″1152″表示截断的结果为1152bit注**步骤①和②可在步骤③之前的任何时候准备就绪,并将预先得到的(TS1,KeyStream1)配对缓冲在密钥流缓冲器中;这样,步骤③就可以直接从密钥流缓冲器获得一个唯一的(TS1,KeyStream1)配对而完成解密动作。
Store DChunk to Memory.若是为了将来自源处理器(指逐出DChunk的处理器)的DChunk更新到存储器,MCH执行①保持与源处理器同步的TS1②将接收到的(SDChunk,SDMAC)配对,以及①中得到的TS1,写向存储器③依据写向存储器的TS1,由Hash树校验机制HVerification执行对Hash树的更新操作注更新Hash树可以以任何有效的方法进行,包括以异步的方式进行更新,也包括通过缓冲部分Hash树的内部节点而提高Hash树更新过程的速度。
Fetch DChunk from Memory.若处理器从存储器读取一个存储器块,首先,由MCH执行①依据地址信息,从时间戳空间MemoryTS中读取相应的先前被保存的TS1,以及SDChunk和SDMAC②由校验机制HVerification执行检验①中所得TS1完整性的过程③如果TS1为非法,即未保持完整性,则指示所读数据非法④递增时间戳而得到新的唯一的TS2⑤基于SKey2和④中获得的TS2生成安全传递时间戳所用的KeyStream2,即Keystream2=SHA512(LeftTruncate1024(SKey2‖TS2))⑥用⑤中得到的KeyStream2对①中获得的TS1作两轮加密,即TS1CIPHERTEXT1=TS1(Segment1 of KeyStream2)TS1CIPHERTEXT2=TS1CIPHERTEXT1(Segment2 of KeyStream2)⑦将⑥中对TS1两轮加密的结果,以及所读的SDChunk和SDMAC,发送到处理器注*之所以对TS1作两轮加密后再传输,是为了使攻击者无法在MCH到处理器的传输路径上,恰当地插入一个伪造的“TS1”;否则的话,攻击者可以一方面保持MCH校验所读TS1为完整(即攻击者不去破坏TS1的存储),另一方面,在MCH到处理器的传输路径上,插入先前拷贝的合法的(TS1,SDChunk,SDMAC)配对而实施重放攻击(Replay attack)。只进行一轮加密是不足够的,因为TS1是以明文形式保存的,而使得攻击者能够导出加密TS1的密钥流。进行两轮加密后,虽然攻击者依然可以篡改TS1,但已经无法让处理器恢复攻击者所期望的TS1,从而使得攻击者的篡改行为将在处理器中被检测到——因为会导致解密后的完整性校验码不匹配。
注**由一个(TS2,KeyStream2)配对可以得出512bit的密钥流,而每次秘密传递时间戳只需128bit;因此,可以每四次秘密传递时间戳只执行一次由TS2导出KeyStream2的过程。具体地,可以让每四次中的第1次,使用512bit密钥流中的第1个128bit的片断;该片断进一步分为2个64bit的子片断,从而完成两轮加密一个64bit时间戳的过程。
注***为提高性能,步骤④和⑤可在⑥之前的任何时候准备就绪,并且,可以将预先准备就绪的(TS2,KeyStream2)配对缓冲在相应的密钥流缓冲器中;这样,步骤⑥就可以直接从密钥流缓冲器获得一个唯一的(TS2,KeyStream2)配对而完成加密动作注****为提高性能,步骤②和③可在任何时候完成;只要校验完成且结果为TS1不完整,则指示数据不合法注*****实施Hash树检验可以按照任何有效的方法进行,包括以异步的校验方式,也包括通过缓冲部分Hash树内部节点而加速基于Hash树的校验过程注******SHA512是指SHA-2(512)Hash函数,生成512bit的输出″‖″表示连接操作
LeftTruncate表示左截断,下标″1024″表示截断的结果为1024bit。
Processor get DChunk fetched from Memory.对于从存储器读取的一个存储器块,处理器执行①保持与MCH同步的TS2②基于SKey2和①中的TS2获得当前安全传递时间戳所用的KeyStream2,即Keystream2=SHA512(LeftTruncate1024(SKey2‖TS2))③用②中得到的KeyStream2对由MCH传递过来的TS1的密文作两轮解密,即TS1CIPHERTEXTI=TS1CIPHERTEXT2(Segment2 of KeyStream2)TS1=TS1CIPHERTEXT1(Segment1 of KeyStream2)④基于SKey1和③中所得的TS1获得当前解密所用的KeyStream1,即Keystream1Seg1=SHA512(LeftTruncate1024(SKey1‖TS1‖1))Keystream1Seg2=SHA512(LeftTruncate1024(SKey1‖TS1‖2))Keystream1Seg3=SHA512(LeftTruncate1024(SKey1‖TS1‖3))Keystream1=Truncate1152(Keystream1Seg1‖Keystream1Seg2‖Keystream1Seg3)⑤用④中所得KeyStream1解密(SDChunk,SDMAC)配对,即(DChunk,DMAC)=(SDChunk,SDMAC)KeyStream1⑥为⑤中解密所得的DChunk重新计算完整性检验码,即DMACAgain=Hash(DChunk)⑦将⑥中所得的结果与⑤中解密所得的DMAC匹配,二者不一致则表明数据非法注*SHA512是指SHA-2(512)Hash函数,生成512bit的输出″‖″表示连接操作LeftTruncate表示左截断,下标″1024″表示截断的结果为1024bitTruncate表示截断(可取左截断),下标″1152″表示截断的结果为1152bt。
为提高性能,从存储器读数据到处理器可以按照如下的某种方式进行(1)MCH先完成校验所读时间戳的完整性;然后,将经校验保持完整性的时间戳以秘密的方式传递给处理器;处理器解密时间戳,并以解密所得的时间戳解密所读的存储器块及其完整性校验码。
(2)MCH先将所读的时间戳以秘密的方式传递给处理器,以便处理器尽快开始解密所读存储器块及其完整性校验码的过程;校验时间戳完整性则以异步的方式进行,并且在校验结果为时间戳不完整时指示数据错误。
(3)处理器直接以读出的时间戳解密所读的存储器块及其完整性校验码;MCH异步地校验时间戳完整性。若MCH完成校验且校验结果为时间戳不完整,则指示数据错误。若MCH完成校验且校验结果为时间戳保持完整性,则以秘密的方式将时间戳(或时间戳的认证信息,比如时间戳的完整性校验码)传递给处理器;处理器将以秘密方式收到的时间戳(或其认证信息)与解密存储器块及其完整性校验码所用的时间戳(或其认证信息)相比对,二者不一致则指示数据错误。
以OTP方式生成密钥流是将(SKey1,TS1)、(SKey2,TS2)和数值(分别为1、2、3)相连接后作为输入馈入SHA-2(512)Hash函数;而每次输出则得到一个512bit的加密比特位序列,作为所需密钥流的一个片断;连接这些片断(连续的3个)而得到所需的密钥流。除了SHA-2(512)Hash函数之外,任何密码安全的Hash函数都可用作此目的;但需要依据所选用的Hash函数的不同,而调整所需连接的加密比特位序列的数目。作为Hash函数输入的一部分而连接在(SKey1,TS1)和(SKey2,TS2)上的,可以是简单的数值“1、2、3”,也可以是更复杂的函数结果,还可以采用更复杂的连接方式。另外,除了使用Hash函数,任何能够由(SKey1,TS1)和(SKey2,TS2)而得到随机比特序列的函数,都可以用在这里导出加密/解密所需的密钥流。
SKey1和SKey2可以是同一个数值。TS1和TS2也可以是来自于同一个时间戳,只要从不使用已出现过的值。TS1和TS2也可以使用同一个时间戳初始值;比如,TS1以按照每-总线事务“+1”的方式在时间戳初始值上获得,TS2则取“-1”变化。当然,时间戳递增可以采用很多方式,包括最简单的方式——即计数总线事务而“+1”/“-1”。
计算完整性检验码(即生成DMAC)所用Hash函数也可以是任何函数,如MD5 Hash函数、SHA-1 Hash函数;只要该函数能够产生对输入具有完整性认证作用的结果。
不同的存储器块尺寸,同样适用于上述过程。只是加密/解密的密钥流长度需要随着存储器块尺寸的大小而调整。处理器的L2-Cache行与存储器块是否等大小,也不影响应用上述过程;比如,一个L2-Cache行等于两个存储器块大小,只要以存储器块大小作为访问的单位而施加保护措施即可。
处理器是否具有L2-Cache并不影响所述方法的使用。不管处理器片内Cache如何设置,只要考虑每次处理器访问存储器的事务(以及处理器之间传递数据的事务)即可。
还有,更新Hash树以及依赖Hash树检验时间戳完整性的过程,可以采用任何有效的方法进行。比如,采用在“背景技术”中所提及的方法。
实际上,本示例所描述的对称处理器系统中共享存储器的保护过程,也适于于单处理器系统,以及适用于包含其它协处理器的多/单处理器系统。
本发明并不局限于上述具体描述的实现形态,而是适用于所有的依据本发明的内容可获得的能够保护数据机密性与完整性的系统。这包括软件的、硬件的以及软件硬件相结合的实现形态,以及不需其它发明性的能力而可直接获得的变化形态。实质上,只要存储数据的器件、芯片、电路模块、场所、设备、服务、空间等,能够抽象为“块访问”的读写模式,就都可以利用本发明的内容实施对数据的保护。因此,像磁盘设备,就可以将磁盘的扇区作为访问的块,而实施对磁盘中所存储数据的机密性与完整性保护。类似地,还可以用文件系统的簇(Cluster)或者文件块来作为“块访问”的对象。同样的道理,远程存储服务器也可以抽象为块服务器(Block Server)而以“块访问”的模式施加保护措施;此时,可以将Hash树检验机制实现于远程存储服务器的可信内核(如远程存储服务器的处理器)中,并将所读取并校验的时间戳(或其认证信息)秘密地传递给本地计算机系统。因此,本发明可用于保护计算机系统的存储器与共享存储器,磁盘与其它外围存储设备,远程存储的数据,等等。
本发明适用于所有的依据本发明的内容而构造的方法和装置,以及不需其它创造性质的能力而可获得的变化形式。因此,本发明适用于同这里所描述的原理与特征相一致的最广的范围。
权利要求
1.一种保护数据存储的机密性与完整性的方法,其特征在于写数据时,基于唯一的时间戳,加密数据及其完整性检验码,并将加密的结果与加密所使用的时间戳一起写向目标存储位置;读数据时,读出与所读数据被一起存储的时间戳,基于所读出的时间戳,解密所读出的被加密的数据及其完整性检验码,随后,重新为解密所得的数据计算完整性检验码并与解密所得的完整性检验码相比对,依据比对的结果是否一致来判断所读数据是否合法;读数据时,检验所读出的时间戳是否保持完整性,并在所读时间戳未保持完整性的情况下指示数据不合法;读数据时,用于解密被加密的数据及其完整性检验码的时间戳,是与被校验是否保持完整性的时间戳相一致的,不一致则导致数据不合法。
2.根据权利要求1所述的方法,检验所读出的时间戳是否保持完整性可以依赖于哈希树而实施,为此在时间戳存储空间上创建哈希树,哈希树的叶节点来自被存储的时间戳;写时间戳时,依据所写的时间戳更新相应的哈希树节点;读时间戳时,依据哈希树校验所读时间戳的完整性。
3.根据权利要求1所述的方法,加密数据及其完整性校验码,是采取基于唯一的时间戳,获得序列密码加密所用的密钥流,使用此密钥流加密数据及其完整性校验码;加密所用的密钥流可以先于待加密的数据及其完整性检验码就绪而预先准备就绪,从而在实施加密时只需将预先准备就绪的密钥流与待加密的数据及其完整性校验码实施运算。
4.根据权利要求1所述的方法,解密所读出的被加密的数据及其完整性检验码,是先于校验所读时间戳是否保持完整性的过程结束之前而开始的。
5.根据权利要求1所述的方法,解密所读出的被加密的数据及其完整性检验码,是采取基于所读出的时间戳,获得序列密码解密所用的密钥流,使用此密钥流解密所读出的被加密的数据及其完整性检验码;解密所用的密钥流可以先于读被加密的数据及其完整性检验码就绪而预先准备。
6.根据权利要求1所述的方法,基于唯一的时间戳加密数据及其完整性检验码,以及基于所读出的时间戳解密被加密的数据及其完整性检验码,是将时间戳结合一个不为攻击者所知的密钥而实现的。
7.根据权利要求1所述的方法,将加密所使用的时间戳写向目标存储位置,是写时间戳的明文形式。
8.根据权利要求1所述的方法,将加密所使用的时间戳写向目标存储位置,所使用的日标存储位置是连续的物理存储位置。
9.根据权利要求1所述的方法,用于解密被加密的数据及其完整性检验码的时间戳,是与被校验是否保持完整性的时间戳相一致的,在于所读时间戳能够以秘密的方式将其值在实施完整性校验的单元与执行解密的单元之间传递;所读时间戳能够以秘密的方式将其值的认证信息在实施完整性校验的单元与执行解密的单元之间传递。
10.根据权利要求1至权利要求9中任一权利要求所述的方法,采用这些方法所构造的装置。
全文摘要
保护数据存储的机密性与完整性的方法和装置。本发明涉及数据安全技术,其主要内容是为数据存储提供机密性与完整性保护。所采用的技术要点是写数据时,基于唯一的时间戳,将每一被存储的数据及其完整性校验码进行加密,并将加密的结果与时间戳一起存储;读数据时,校验所存储的时间戳是否保持完整性,依赖所存储的时间戳解密所存储的数据及其完整性校验码,并通过匹配完整性校验码来判断数据的合法性。本发明所提出的方法和装置可适用于为数据存储提供机密性与完整性保护的应用场合。
文档编号H04L9/00GK1841255SQ200510031388
公开日2006年10月4日 申请日期2005年3月30日 优先权日2005年3月30日
发明者侯方勇 申请人:侯方勇
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1