构造序列密码的方法和装置的制作方法

文档序号:7590344阅读:172来源:国知局
专利名称:构造序列密码的方法和装置的制作方法
技术领域
本发明涉及密码,特别是涉及一种构造序列密码的方法和装置。
背景技术
加密是指对数据进行变换,使之除了对目标接收者外,变得无法或者难以理解。对数字化的数据进行加密的一种方法是采用序列密码(或流密码,stream cipher)。序列密码将数据与密钥序列(或密钥流,keystream;或加密比特流,encryption bit stream)结合在一起;结合的方法通常是采用异或(exclusive-or,XOR)运算。解密则是生成与发送者同样的密钥序列的过程以及从被加密的数据中移除密钥序列。如果异或操作在发送者加密数据时被执行,则同样的异或操作也在接收者解密数据时被执行。对于一个序列密码所实施的安全的数据加密,密钥序列的生成必须是在计算上难以预测的。
序列密码中的密钥序列通常是伪随机比特序列(stream of pseudo-random bits),或伪随机数序列(stream of pseudo-random numbers)。有许多生成伪随机数序列的方法,比如基于线性反馈移位寄存器(linear feedback shift register,LFSR)的方法,或者其它方法。序列密码的安全性依赖于伪随机数序列生成的质量;最理想的状态是实现“一次一密”,即每次加密都使用不同的密钥序列。现实实现中应使密钥序列的生成质量尽可能接近于这一状态;即,对攻击者而言,密钥序列尽可能是一次性的(或,不重复的)、随机的。
序列密码在数据的安全传输与存储中有着广泛的应用。比如,在计算机系统中采用的RC4加密技术;高通公司(QUALCOMM,Incorporated)提出的用于码分多址(CDMA)无线电话系统的序列密码加密技术(美国专利,专利号6510228);等等。
随着技术的不断发展,序列密码也需要不断发展才能适应数据加密的需求;比如,获得质量更高的密钥序列以满足更高的加密强度需求。

发明内容
本发明的目的在于给出可用于构造序列密码的方法和装置。
为实现本发明的目的,本发明所采用的技术方案是选择一个数值空间作为根密钥空间;在根密钥空间中选择一个数值,作为种子的初始值;选择一个函数作为步进,其作用是将步长施加于种子上,而在根密钥空间中确定一个数值;基于种子的当前值,通过步进所得到的数值作为当前根密钥;用当前根密钥替换种子的当前值而作为种子新的当前值;对当前根密钥进行单向散列变换,变换的结果作为当前帧密钥;由当前帧密钥组成密钥序列,密钥序列异或待加密的数据而完成序列密码数据加密过程。
在为实现本发明的目的所采用的技术方案中发送者和接收者所约定的根密钥空间在计算上是足够大的,即穷举根密钥空间的所有数值在计算上是不可行的;根密钥空间的约定可以采取秘密或者非秘密的方式。种子的初始值的约定过程必须是秘密的,即发送者和接收者是通过秘密的方式在根密钥空间中选择一个具体数值来作为种子的第一个数值。步进函数可以是发送者和接收者秘密或非秘密地约定的;步进函数将一个步长施加于种子的当前值而在根密钥空间中选定一个具体的数值;所用的步长可以是指定的固定数值,也可以是随运行状态而变化的数值(包括按所描述方法进行的过程所产生的状态值);步长施加于种子当前值时可使用任何算术、逻辑运算方式(如相加、异或,等),以及其它运算方式。
在为实现本发明的目的所采用的技术方案中对当前根密钥实施单向散列变换而将变换的结果作为当前帧密钥;所用的单向散列变换可选择目前常用的单向散列函数,或者使用其它具有单向特性的变换算法,包括自定义的变换算法。
在为实现本发明的目的所采用的技术方案中不断地对种子的当前值施加步进作用并用步进的结果替换种子的当前值,从而不断产生不同的当前根密钥;不断地对所产生的当前根密钥实施单向散列变换而连续获得不同的当前帧密钥;这些连续生成的当前帧密钥用于组成密钥序列。
在为实现本发明的目的所采用的技术方案中,可以重复运用所述的技术方案并组合所获得的结果,而构成“双重”或“多重”密钥合成方法,即(1)发送者和接收者秘密地约定两个或两个以上不相关的种子初始值;或者秘密地约定两组或两组以上不相关的种子初始值、步进和根密钥空间的组合。(2)这样,基于两个或两个以上不相关的种子初始值,或基于两组或两组以上不相关的种子初始值、步进和根密钥空间的组合,可同时获得两个或两个以上当前根密钥或当前帧密钥。(3)将如此获得两个或两个以上当前根密钥或当前帧密钥的生成过程相结合;即,用一个生成过程的结果或中间状态,去影响另一个生成过程,并基于受影响的生成过程的结果得到实际用于组成密钥序列的当前帧密钥;从而使得组成密钥序列的每个当前帧密钥,都是基于两个或两个以上不相关的种子初始值,或者两组或两组以上不相关的种子初始值、步进和根密钥空间的组合,而得到的。
通过本发明所提出的方法和装置,利用根密钥空间在计算上足够大的特性和单向散列函数的特性(如,单向性、雪崩性、抗碰撞性等),可以构造高安全强度的序列密码方法和装置。


说明书包括3幅附图图1是应用本发明生成密钥序列的示例图;图2是应用本发明,以“双重”密钥合成方法生成密钥序列的示例图;图3是应用本发明实施数据加密的示例图。
具体实施例方式
本发明所考虑的,是构造序列密码的方法和装置;其主要内容是密钥序列生成的方法和装置,或者更广义地理解为是伪随机数生成的方法和装置。鉴于公知的原因,本发明对所使用的某些术语、名词和表达方式等不作显式的定义或说明,比如发送者、接收者、加密、解密、密码、异或、单向散列函数(One-way hash function)、哈希函数(Hashfunction),位、bit、数的表达方式,等等。对于某些特定的名词则遵从本发明所说明或定义的含义,比如根密钥空间、当前根密钥、当前帧密钥、根密钥、帧密钥、种子、步进、步长、“双重”或“多重”密钥合成方法,等等。
本发明中,生成密钥序列的方法和装置所需的基本步骤为1)发送者和接收者秘密或者非秘密地约定一个共同的、在计算上足够大的根密钥空间。比如,发送者和接收者约定一个足够大的整数数环作为根密钥空间。该数环的起点为0;终点为(21024-1)。
2)发送者和接收者秘密地约定一个种子。种子是根密钥空间中的一个数值;其约定是指发送者和接收者共同在根密钥空间中选择一个数值来作为种子的初始值(或,种子的第一个当前值)。种子初始值的约定过程必须是秘密的,即种子的初始值仅对于合法的发送者和接收者是确知的;约定的过程可通过公钥密码、预先共享的秘密,或者其他方法来实现。
3)发送者与接收者秘密或者非秘密地约定步进(或称步进函数)。步进将步长作用于种子的当前值,从而在根密钥空间中确定一个具体的数值;所确定的数值被用作当前根密钥,并且该数值将替换种子的当前值而作为种子新的当前值。即KEYCURRENT=FUNCSTEP(SEEDCURRENT,LENGTHSTEP)其中,SEEDCURRENT是当前用作种子的数值,或种子的当前值;LENGTHSTEP是当前施加在种子上的步长;FUNCSTEP是步进函数,决定步长施加于种子的具体方式;KEYCURRENT是由种子的当前值经步进函数作用后所得到的当前根密钥。
然后,种子的当前值被替换为当前根密钥的值;即SEEDCURRENT=KEYCURRENT其中,SEEDCURRENT是种子的新的当前值;KEYCURRENT是当前根密钥。
步进函数中所使用的步长,可以是一个指定的固定数值;比如,在约定步进函数时指定某一常数作为步长。步长也可以是随运行状态而变化的数值;比如,在约定步进函数时指明步长为(p*q),其中,p为常数,q为步进次数的计数值;再比如,步长使用上次步进的结果(即,上一个当前根密钥),或上次步进的结果经过单向散列变换后所得到的数值。
步长施加于种子当前值时可使用任何算术、逻辑运算方式;比如,步长与种子当前值相加、步长与种子当前值异或,等。也可以使用若干种算术、逻辑运算方式的组合,或者其它运算方式。
举例来说,选择整数数环(0,21024-1)作为根密钥空间,选择数值“0FFFFh”作为种子的初始值(或,种子的第一个当前值),选择“01h”为步长,选择步长与种子当前值相加作为步进函数的具体算法;那么,第一次步进的结果为(0FFFFh+01h=010000h);这样,“010000h”就是所获得的第一个当前根密钥,并且“010000h”将用作新的种子当前值以便生成第二个当前根密钥;后续者类推。这一过程使得种子沿着作为根密钥空间的数环而旋转;像由“0FFFFh”变为“010000h”的过程使得种子沿作为根密钥空间的数环向右旋转一个单位。如果种子新的当前值越过上述作为根密钥空间的整数数环的终点或起点,它将由另一端点重新进入根密钥空间。
另外,下文中以名词根密钥泛指当前根密钥和曾经作为当前根密钥而使用过的数值。
4)当前根密钥被馈入一个单向散列函数(或,哈希函数)进行变换。经单向散列函数变换后的结果称作当前帧密钥。即KEYFRAME=HASH(KEYCURRENT)其中,KEYFRAME是指当前帧密钥,KEYCURRENT是指当前根密钥,HASH是指用作变换的单向散列函数。
由于单向散列函数的特性,所得到的当前帧密钥几乎不会重复;也就是说,当前帧密钥是一次性。举例来说,当使用SHA1(SHA1 Secure Hash Algorithm)作为所用的单向散列函数(或,哈希函数)时,由当前根密钥生成长度为160位的当前帧密钥。SHA1算法具有单向性且当输入数据中有一个数据位变换时,会导致SHA1算法结果中近一半数据位发生变化。因此,当前帧密钥就像一个不断变换的随机数一样,而由当前帧密钥得出对应的当前根密钥在计算上是不可行的。
对当前根密钥施加单向散列变换时,可选择常用的单向散列函数(或,哈希函数),如目前所广泛采用的SHA1算法、MD5算法(The MD5 Message-Digest Algorithm);也可以使用其它具有单向特性的变换算法,包括自定义的变换算法。由当前根密钥而获得当前帧密钥所采用的单向散列函数(或,哈希函数)不必予以保密。
另外,下文中名词帧密钥泛指当前帧密钥和曾经作为当前帧密钥而使用过的数值。
5)当前帧密钥用于组成序列密码实施数据加密/解密所需的密钥序列。将步骤3)和步骤4),即将过程“对种子当前值实施步进而得到当前根密钥,用所得的当前根密钥替换种子当前值,对所得的当前根密钥实施单向散列变换而得到当前帧密钥”,简记为“种子—步进—变换”过程。如果加密数据所需的密钥序列长度大于当前帧密钥的长度,可通过若干次“种子—步进—变换”过程而生成若干个帧密钥(其中,每个帧密钥对相应的“种子—步进—变换”过程而言,都是当前帧密钥),然后连接这些帧密钥而得到所需长度的密钥序列。
6)在步骤1)至步骤5)中,通过如下措施,可增强所获得的密钥序列的随机性①选择更大的根密钥空间,比如选择数环(0,22048-1)作为根密钥空间,从而用更长的数据位表示种子和当前根密钥。
②选择从密码角度讲更好的单向散列函数,如SHA1算法比MD5算法更好。
③选择更复杂的步长。比如步长不取类似“01h”这样固定的或线性变化的偏差,而取其它呈现随机性特征的数值。比如,可以取上一个帧密钥(即上一次“种子—步进—变换”过程所获得的当前帧密钥)作为本次步进所用的步长。
④选择更复杂的步进函数。比如,步进函数将步长作用于种子时,能够导致种子更多的数据位,包括高数据位部分与低数据位部分都发生变化;再比如,步进函数将步长作用于种子时,能够使得种子在根密钥空间中步进的方向具有变化性。举例来说,当步长的数据位长度小于种子的数据位长度时,步进函数可以首先将步长重复k次以将步长的长度扩展,其中k=(Iht(n/m)+1),即k等于n除以m的结果取整再加1(n为种子的数据位长度,m为步长的数据位长度);然后令种子当前值与扩展长度后的步长相异或来完成步进(异或时,可以让种子当前值和扩展长度后的步长取最低位对齐,或者取最高位对齐,并舍去扩展长度后的步长的多余位);这样的步进函数,使得种子在根密钥空间中的步进所表现出来的步进距离和步进方向都呈现随机性,从而使得密钥序列的随机性更好。
7)采用“双重”或“多重”密钥合成方法。运用步骤1)至步骤6)所描述的过程,并采用如下措施秘密约定两个或两个以上不相关的种子初始值(不相关是指所约定的数值是独立的,不相互依赖的);或者,秘密地约定两组或两组以上不相关的种子初始值、步进和根密钥空间的组合(其中,至少种子初始值、或至少步进、或至少根密钥空间的约定,是秘密的和不相关的)。这样,基于两个或两个以上不相关的种子初始值(或者,基于两组或两组以上不相关的种子初始值、步进和根密钥空间的组合),可同时获得两个或两个以上当前根密钥,进而还可获得两个或两个以上当前帧密钥。将如此获得两个或两个以上当前根密钥或当前帧密钥的过程相结合;即,用基于一个种子初始值(或,用基于一组种子初始值、步进和根密钥空间的组合)生成根密钥或生成帧密钥的过程的结果或中间状态,去影响基于另一个种子初始值(或,去影响基于另一组种子初始值、步进和根密钥空间的组合)生成根密钥或生成帧密钥的过程;从而使得组成密钥序列的每个帧密钥,都是基于两个或两个以上不相关的种子初始值(或者,都是基于两组或两组以上不相关的种子初始值、步进和根密钥空间的组合)而得到的。
比如,发送者和接收者共同约定两个不相关的种子初始值,这两个不相关的种子的当前值,分别记为种子1和种子2;那么,基于种子1将生成当前根密钥1,基于种子2将生成当前根密钥2;即KEYCURRENT1=FUNCSTEP(SEEDCURRENT1,LENGTHSTEP)KEYCURRENT2=FUNCSTEP(SEEDCURRENT2,LENGTHSTEP)其中,FUNCSTEP是步进函数,LENGTHSTEP是所用的步长;SEEDCURRENT1是种子1,KEYCURRENT1是由种子1经步进函数作用后所得到的当前根密钥1;SEEDCURRENT2是种子2,KEYCURRENT2是由种子2经步进函数作用后所得到的当前根密钥2。
然后,KEYFRAME1=HASH(KEYCURRENT1)KEYFRAME2=HASH(KEYCURRENT2)其中,当前帧密钥1和当前帧密钥2(即,KEYFRAME1和KEYFRAME2)分别由当前根密钥1和当前根密钥2(即,KEYCURRENT1和KEYCURRENT2)经单向散列函数(即,HASH)实施变换而得到。
而实际用作当前帧密钥的是
KEYFRAME=KEYFRAME1KEYFRAME2即,实际组成密钥序列的当前帧密钥(即,KEYFRAME)是当前帧密钥1(即,KEYFRAME1)异或当前帧密钥2(即,KEYFRAME2)。
还可以将基于种子2所得到的当前帧密钥2(也可以将先前基于种子2所得到的帧密钥),作为对种子1实施步进时所使用的步长。也就是,将种子1和作为步长的当前帧密钥2一起送入步进函数;然后,所得到的当前根密钥1经过单向散列函数变换而得到实际用于组成密钥序列的当前帧密钥。即KEYCURRENT2=FUNCSTEP(SEEDCURRENT2,LENGTHSTEP)KEYFRAME2=HASH(KEYCURRENT2)KEYCURRENT1=FUNCSTEP(SEEDCURRENT1,KEYFRAME2)KEYFRAME1=HASH(KEYCURRENT1)KEYFRAME=KEYFRAME1其中,KEYCURRENT2是基于种子2(即,SEEDCURRENT2)经过步进(即,FUNCSTEP)所得到的当前根密钥2,LENGTHSTEP作为对种子2实施步进的步长(可以是某个指定的常数或其它);KEYFRAME2是由当前根密钥2经单向散列变换(即,HASH)后所得到的当前帧密钥2;KEYCURRENT1是基于种子1(即,SEEDCURRENT1)所得到的当前根密钥1,其中,对种子1实施步进时所用的步长是当前帧密钥2;KEYFRAME1是由当前根密钥1经单向散列变换所得到的当前帧密钥1,且用作实际组成密钥序列的当前帧密钥(即,KEYFRAME)。
其它方法也可用于此“双重”或“多重”密钥合成方法的目的。比如,让由种子1经步进所得到的当前根密钥1与由种子2经步进所得到的当前根密钥2进行异或;异或的结果再经过单向散列变换而得到实际用于组成密钥序列的当前帧密钥。
采用“双重”或“多重”密钥合成方法,所约定的两个或两个以上种子初始值是不相关的,或所约定的两组或两组以上种子初始值、步进和根密钥空间的组合是不相关的。因此,基于一个种子初始值(或,基于一组种子初始值、步进和根密钥空间的组合)生成帧密钥的结果中可能存在的相关性,被另一个种子初始值(或,被另一组种子初始值、步进和根密钥空间的组合)所破坏,从而使最终得到的帧密钥具有更强的随机性,也即组成的密钥序列具有更高的质量。这一增强安全性的方法称为“双重”密钥合成方法或“多重”密钥合成方法,简称“双重”或“多重”密钥合成方法;其中,“多重”是指约定三个或三个以上不相关的种子初始值,或约定三组或三组以上不相关的种子初始值、步进和根密钥空间的组合。
所获得的密钥序列与待加密数据结合在一起,如实施异或运算,即可得到密文而完成序列密码加密过程。
从上述描述可看出,依赖所作的约定,发送者和接收者在共同的根密钥空间内,通过秘密约定的相同的种子初始值,经相同的步进函数而得到相同的当前根密钥,并使用相同的单向散列变换而由当前根密钥得到相同的当前帧密钥,进而组成相同的用于序列密码实施数据加密/解密的密钥序列。由于发送者和接收者采取的步骤和所用的参数是一致的,因此二者所生成的密钥序列是一致的,且具有(或接近具有)“一次一密”的特征。因此,基于本发明所构造的序列密码方法和装置,具有(或接近具有)“一次性密码簿(Onetime pad)”的特性。
下面对本发明所描述的方法和装置加以示例说明。这些示例具体描述如何应用本发明的内容生成密钥序列、如何实施数据加密,以及为何具有高安全性特征。
(举例一)应用本发明生成密钥序列的示例图1中,根密钥空间100是由发送者和接收者约定的一个整数数环;其中,起点101为0,终点102为(21024-1)。种子103和步进104决定如何选择数环中下一个数值。种子103的初始值,以及步进104的具体函数表达式是由发送者和接收者所约定的。其中,种子103的初始值是秘密约定的;秘密约定的过程可通过公钥密码技术或者预先共享秘密的手段来完成。这样,当前根密钥105是由种子103的当前值经过步进104的作用而得到的,且所得到的当前根密钥105将替换种子103的原当前值而作为种子103的新当前值。
图1中,当前根密钥105经单向散列变换106后得到当前帧密钥107。取SHA1算法用作单向散列变换106;这样,当前帧密钥107的长度为160位。
图1中,不断重复过程——对种子103进行步进而得到当前根密钥105,用所得到的当前根密钥105替换种子103的当前值,并对所得到的当前根密钥105实施单向散列变换106而生成当前帧密钥107。连接所生成的这些帧密钥就组成了密钥序列。
(举例二)应用本发明,以“双重”密钥合成方法生成密钥序列的示例图2中,根密钥空间100是由发送者和接收者约定的一个整数数环;其中,起点101为0,终点102为(21024-1)。种子103和种子203的初始值是由发送者和接收者所秘密约定的,且所作的约定是不相关的。步进104决定如何基于种子的当前值来选择数环中下一个数值。当步进104作用于种子103的当前值时,得到对应的当前根密钥105,且所得到的结果作为种子103的新的当前值;当步进104作用于种子203的当前值时,得到对应的当前根密钥205,且所得到的结果作为种子203的新的当前值。
图2中,当前根密钥105经单向散列变换106而得到当前帧密钥107。取SHA1算法用作单向散列变换106;这样,对应种子103所得到的当前帧密钥107的长度为160位。同样的单向散列变换106还对当前根密钥205实施变换;这样,对应种子203也得到长度为160位的另一当前帧密钥207。
图2中,当前帧密钥107和另一当前帧密钥207,通过作用函数208而结合在一起。取作用函数208是实施异或操作;这样,实际用来组成密钥序列的当前帧密钥209是当前帧密钥107和另一当前帧密钥207相异或的结果。
从图1和图2的所描述的示例可以看到,应用本发明所生成的密钥序列,或所构成的序列密码,实施数据加密而能够保护数据机密性。其原因在于(a)攻击者首先面临的困难是如何获得构成密钥序列的帧密钥。
(b)假定攻击者获得了某一正确的帧密钥,第二个困难在于由帧密钥推出生成该帧密钥的根密钥。由于单向散列函数的特性,这在计算上是不可行的。
(c)假设攻击者真的找到一个数值,其散列值与帧密钥相同。第三个困难在于攻击者必须在根密钥空间中确定所找到的数值是否是正确的根密钥。由于单向散列变换在这里起到了一个“压缩”的作用,如图1中将一个1024位的根密钥“压缩”为一个160位的帧密钥;因此,攻击者必须搜索整个根密钥空间,而结果将发现太多可能的位置能够得到同样的散列值。攻击者必须判断这些位置中哪一个是正确的。错误的判断将使得攻击者无法得到用于生成下一个帧密钥的正确的根密钥位置,因而也无法得到正确的下一个帧密钥。
(d)即使攻击者能够猜中帧密钥对应的根密钥的正确位置,如果步进函数是秘密约定的,或者根密钥空间起点和终点是秘密约定的;那么,被秘密约定的步进函数,乃至根密钥空间起点和终点也需要先被破解,才能使得攻击者得到正确的下一个根密钥的位置。更重要的是,发送者和接收者可通过重新秘密约定一个新的种子并基于该新约定的种子来生成密钥序列,从而解决这一问题。由于根密钥空间是如此之大,新种子与原种子之间的距离可以取得足够大而使得攻击者无法计算出来,也很难再次被攻击者猜中。
(e)另外,“双重”或“多重”密钥合成方法使得攻击基于本发明所构造的序列密码更加困难。原因在于基于一个种子初始值(或,基于一个种子初始值、步进和根密钥空间的组合)所生成的密钥序列中可能存在的能够被用于密码分析的相关性,被另外的不相关的种子初始值(或,被另外的种子初始值、步进和根密钥空间的组合)干扰或者破坏。
(举例三)应用本发明实施数据加密的示例图3中,根密钥空间100是由发送者和接收者约定的一个整数数环;其中,起点101为0,终点102为(21024-1)。种子103和步进104决定如何选择数环中下一个数值。种子103初始值的确定必须是秘密的。当前根密钥105是由种子103的当前值经过步进104的作用而得到,且所得到的结果作为种子103的新的当前值。当前根密钥105经单向散列变换106变换后得到当前帧密钥107。取SHA1算法用作单向散列变换106,则当前帧密钥107的长度为160-bit。
图3中,待传送的为消息112,取其长度为480-bit。为校验完整性,消息112可通过完整性校验模块111生成对应的消息认证码(message authentication code,MAC)。消息认证码,或MAC,可基于单向散列函数得到;比如,选择SHA1算法作为完整性校验模块111而为消息112生成160-bit的MAC。待加密的数据包109由消息112及其对应的MAC组成;这样,数据包109的长度为(480b+160b=640bits)。
图3中,由当前根密钥105所生成的当前帧密钥107的长度为160-bit。由连续的4次“种子—步进—变换”过程可得到连续的4个长度为160-bit的帧密钥;连续的4个帧密钥相连接后,得到长度为(160b*4=640bits)的密钥序列108,且与当前待加密的数据包109长度相等。当前待加密的数据包109与密钥序列108通过异或逻辑110实施异或运算。那么,异或逻辑110的输出结果即构成被加密的数据包。
图3中,加密更多消息的过程与消息112的加密过程相似,不同的是由于不断的“种子—步进—变换”过程而使用不断变化的密钥序列来加密不同的数据包。
对于图3对应的接收者而言,由于接收者将产生与发送者相同的密钥序列,因此,接收者通过将接收到的密文形式数据包与密钥序列进行异或运算,可将密文还原为明文。然后依据解密后的明文消息重新计算对应的MAC,并将所得到的MAC值与直接从密文形式数据包中解密出来的MAC值相比较,即可判断数据接收是否正确。
从图3的示例所描述的过程可以看到,应用本发明对数据包(含消息及其对应的消息认证码)实施加密后,能够对抗各种形式的数据完整性攻击。其原因在于(a)数据完整性可由消息所附着的MAC直接校验。由于攻击者不知道数据包所对应的密钥序列,因此,攻击者不可能伪造一对(密文消息,密文MAC)配对而使得解密后的(消息,MAC)配对保持匹配。
(b)另外,通过拷贝传送给接收者R2的数据包给接收者R1来破坏完整性是不可能的。原因在于不同的(发送者,接收者)配对所使用的密钥序列是不同的;比如,不同的(发送者,接收者)配对所约定的种子初始值不同,从而使用不同的密钥序列。这样,拷贝发送给接收者R2的(密文消息,密文MAC)配对给接收者R1,会使得接收者R1解密后得到的(消息,MAC)配对不匹配。
(c)还有,通过将拷贝的旧的数据包发送给接收者来实施重放攻击也是不可能的。原因在于帧密钥的不断变化,使得旧的数据包所对应的密钥序列与新的数据包所对应的密钥序列不相同。因此,旧的(密文消息,密文MAC)配对在接收者处被解密后,无法得到匹配的(消息,MAC)配对。
本发明并不局限于上述具体示例所描述的构造或实现。基于本发明所描述的内容以及所给出的示例,可以推出多种变化的形式。比如,实现可以是软件的、硬件的以及软硬件相结合的形式;根密钥空间可以取更长或者更短的数据位长度;保持根密钥空间起点和终点值可采用程序变量、硬件寄存器或者内存缓冲区;保持种子、当前根密钥、当前帧密钥、密钥序列,可使用程序变量、硬件寄存器或者内存缓冲区;秘密约定的参数可以是种子,或者是种子、步进和根密钥空间的组合;实施单向散列变换或其它形式的单向变换,可使用软件功能模块或者硬件功能模块;具体的步进函数,可由设计者选定,包括它们的实现方式;“双重”或“多重”密钥合成方法可基于种子的不同,或基于种子、步进和根密钥空间的组合的不同,而合成时可以采用多种相结合的途径;“多重”可采用“三重”或其他;还有,形式上将种子作为步长,而将步长作为种子;等等。另外,所描述的生成帧密钥或密钥序列的方法和装置也可用作其它用途;比如用作随机数发生器,等等。
本发明适用于所有的依据本发明的内容而构造的方法和装置,以及不需其它创造性质的能力而可获得的变化形式。因此,本发明适用于同这里所描述的原理与特征相一致的最广的范围。
权利要求
1.一种构造序列密码的方法,其特征在于选择一个数值空间作为根密钥空间;在根密钥空间中选择一个数值,作为种子的初始值;选择一个步进,其作用是将步长施加于种子上,而在根密钥空间中确定一个数值;基于种子的当前值,通过步进而得到的数值作为当前根密钥;用当前根密钥替换种子的当前值而作为种子的新的当前值;对当前根密钥进行单向散列变换,变换的结果作为当前帧密钥;由当前帧密钥组成密钥序列。
2.根据权利要求1所述的根密钥空间,该根密钥空间在计算上是足够大的,即穷举根密钥空间的所有数值在计算上是不可行的。
3.根据权利要求1所述的种子,其初始值,或其第一个当前值,是通过秘密的方式在根密钥空间中所选择的一个具体数值。
4.根据权利要求1所述的步进,所使用的步长可以是指定的定值,或者是随运行状态而变化的数值。
5.根据权利要求1所述的步进,步长施加于种子上可以是指步长与种子进行算术运算,或者步长与种子进行逻辑运算,或者步长与种子进行其它运算。
6.根据权利要求1所述的单向散列变换,可以使用目前常用的单向散列函数,或者使用其它具有单向特性的变换算法。
7.根据权利要求1所述的由当前帧密钥组成密钥序列,是不断地将步进作用于种子的当前值,并用步进的结果替换种子的当前值,从而得到一系列当前根密钥;对所得到的一系列当前根密钥中的每个当前根密钥实施单向散列变换,而得到一系列当前帧密钥;所得到的一系列当前帧密钥组成密钥序列。
8.根据权利要求1所述的方法,采用“双重”或“多重”密钥合成方法选择两个或两个以上不相关的种子初始值,或者选择两组或两组以上不相关的种子初始值、步进和根密钥空间的组合;基于两个或两个以上不相关的种子初始值,或基于两组或两组以上不相关的种子初始值、步进和根密钥空间的组合,可同时获得两个或两个以上当前根密钥;基于如此获得的两个或两个以上当前根密钥,可获得两个或两个以上当前帧密钥;在如此获得两个或两个以上当前根密钥或当前帧密钥的过程中,用一个当前根密钥或当前帧密钥生成过程的结果或中间状态,去影响另一个当前根密钥或当前帧密钥的生成过程,并基于受影响的生成过程的结果获得实际用于组成密钥序列的当前帧密钥。
9.根据权利要求1至权利要求8中任一权利要求所述的方法,采用这些方法所构造的装置。
全文摘要
构造序列密码的方法和装置。本发明涉及加密或密码中的序列密码技术,其主要内容是如何生成密钥序列。所采用的技术要点是约定一个足够大的根密钥空间,秘密地选定种子以及约定步进;基于当前的种子,通过步进的作用而确定当前根密钥,并将当前根密钥作为新的种子值;对当前根密钥进行单向散列变换,得到当前帧密钥;不断重复这一生成帧密钥的过程而获得所需的密钥序列;并可以通过“双重”或“多重”密钥合成方法,进一步增强所生成的密钥序列的随机性。本发明所提出的方法和装置可适用于那些需要序列密码的应用场合,或用于伪随机数发生器,等等。
文档编号H04L9/18GK1694397SQ20041002316
公开日2005年11月9日 申请日期2004年5月8日 优先权日2004年5月8日
发明者侯方勇 申请人:侯方勇
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1