用于加密和解密数据块的设备和方法

文档序号:7606324阅读:179来源:国知局
专利名称:用于加密和解密数据块的设备和方法
技术领域
本发明涉及一种用于加密和解密被称为块密码的数据块的设备和方法,输入块与输出块的大小是相同的。
背景技术
所述操作是使用密钥来控制的,所述密钥或者可以具有和所述块一样的大小,或者可以具有不同的大小,通常是较大的大小。
本发明涉及与不对称方法相对的对称加密/解密方法。所述对称方法的特点在于,使用相同的密钥去加密和解密数据,而不对称方法使用第一密钥加密数据,以及使用第二密钥解密数据。
众所周知的方法是DES(56位密钥)、CAST(128位密钥)、Blowfish(448位密钥)、Twofish(256位密钥)和Rijndael(又被称为AES,256位密钥)。根据所考虑的应用,它们具有它们自己的优缺点。
已经公布了几个描述这些方法的专利。专利US 5,214,703描述了称为IDEATM的方法,其是基于对于64位块长度的8.5循环操作加密过程,每个循环使用从主密钥导出的6个子密钥。核心是由使用加法模(modulo)216、乘法模216+1和逐位异-或运算的Lai-Massey方案组成的。
对于加密方法的两个主要要求是相对于任何形式的密码分析的健壮性和计算速度。对于健壮性的一个关键因素是由扩散效应实现的,即当在输入数据中一个位改变时,以不可预测的方式影响所有输出位。
所述计算速度主要是由所需要的数学和逻辑操作的类型决定的。较复杂的操作(除法、乘法)可能延长执行加密过程的时间。

发明内容
本发明的目的是提出一种提供与高运行速度相结合的高级别安全性的新的加密方法。
这个目的是由基于主密钥R而将数据X的块加密或者解密为数据Y的方法来实现的,该方法使用几个串联连接的模块,每个模块使用从主密钥R导出的子密钥RA,并且包括以下步骤-输入至少两个初始值X0L与X0R,-混合所述至少两个值X0L与X0R以形成混合的值X1,-通过将所述子密钥RA的第一部分RAH与所述值X1混合而获得值X2,-通过把所述值X2应用到替换层(substitution layer)而获得值X3,所述替换层包括至少一个替换盒(substitution box)(sbox),每个替换盒包含至少一个常数表,对于所述常数表,输入作为指针,所指向的常数作为输出,-通过基于值X3使用多排列(multi-permutation)类型的扩散盒(diffusion box)而获得值X4,-通过将所述子密钥RA的第二部分RAL与所述值X4混合而获得值X5,-通过对所述值X5应用替换层而获得值X6,-通过将所述子密钥RA的第一部分RAH与所述值X6混合而获得值X7,-使将所述值X7与初始的至少两个值X0L与X0R混合以获得至少两个值X8L与X8R,X8L与X8R表示所述模块的输出值X8,所述方法使用至少两个模块,其中对于每个模块,新的子密钥RA是从主密钥R产生的,所述第一模块的初始值X0是所述输入数据X的部分,最后的模块的输出值X8L与X8H形成输出数据Y,并且所述方法还包括以下步骤在把所述值X8L和X8R应用到下一个模块的输入X0R与X0L之前,对所述值X8L或者X8R中的至少一个应用正形性函数(orthomorphism function)。
所述方法的两个主要部分是替换层与多排列矩阵。
所述替换层的目的是把输入值变换为没有简单代数关系的输出值。这就是为什么最快的方式是使用包含常数的查找表,其可以实现期望的混淆结果。
由于在这个实施例中输入数据具有32位的长度,因此,常数的数量将是232个值,每个值是32位长。
根据优选实施例,所述输入数据被分成8位长的组,由此将常数的数量减少到256个字节。
然后32位或者64位的输入数据被分成8位的字节,并且被应用于替换盒以获得8位的输出。所述输入数据被用作地址指针,以及所指向的常数是所述输出。
根据所述实现方法,所述常数表对于所有输入数据(32位或者64位)的组都是一样。在另一个实施例中,所述常数表对于所述输入数据的每个组是不同的。
在这个表中存储的常数是由等于表宽度的多个比特所编码的、全部不同的固定排列的数字。
所述方法的第二个主要部分是多排列矩阵。所述多排列矩阵是方阵,所述方阵具有每个可能的方形子矩阵有不同于零的行列式的属性;所述矩阵的元素是有限域的元素。所述混合操作包括用输入元素的矢量乘所述矩阵,产生被定义为所述输出的矢量。


图1示出了在64位形式中的主模块的框图;图2示出了包括具有两个模块的例子的主要过程;图3示出了在64位形式中的主模块的内部部分;图4示出了在128位形式中的主模块的框图;图5示出了正形性函数的框图;图6示出了用于产生所述替换盒的子系统;图7示出了在128位形式中的主模块的内部部分;
图8示出了在128位形式中包括具有两个模块的例子的主要过程;和图9示出了所述替换盒的另一种形式。
具体实施例方式
图1示出了所述加密(或者解密)处理的构架,其表示模块MOD。以每个为32位的两个部分X0L和X0R所表示的64位的输入数据X0首先在混合单元MX内被混合以获得X1值。所述混合单元是为了提供两倍于32位数据的32位映像(image)。这可以用不同的方法实现,例如使用异或(XOR)函数、通过模的相加、或者通过使用任何组法则。
下一步骤通过块f32说明,所述块f32具有32位输入X1和32位输出X7、以及使用子密钥RA。这个块的详细描述是参照图3给出的(见下文)。
所述块f32的输出X7被应用于和两个输入X0L和X0H相连接的两个混合块MX。
所产生的数据X8L和X8R表示所述模块MOD的两个64位输出X8。
图2示出了使用至少两个模块MOD的整个处理。所述输入数据X首先被应用于分离模块SP,所述分离模块把所述64位输入X转换为两个输出值X0L1和X0R1,每个是32位长。
所述分离模块SP的功能可以用不同的方式实现,例如选择低位的比特用于X0L1和高位的比特用于X0R1,或者每个奇比特用于X0L1和偶比特用于X0R1。可以使用对所述输入数据X进行划分的其它方法,只要X的所有位被包括在X0L1和X0R1内。
所述输出X0L1和X0R1然后用作第一模块MOD1中的输入。所述第一模块在使用第一个子密钥RA1的同时处理所述数据。对于X0L1和X0R1的处理与根据图1描述的相同。所述第一模块MOD1的输出是两个输出X8L1和X8R1。正形性函数被应用于所述输出中的一个,例如图2上示出的X8L1。由所述正形性函数得到的所述输出称为X0L2。由通过第一个模块MOD1的处理得到的另一个值X8R1以及由所述正形性函数得到的输出X0L2被用作第二处理模块MOD2中的输入。所述第二模块MOD2将基于第二个子密钥RA2处理其输入数据。所述第二模块的输出在图2上被称为X8L2和X8R2。组合这些输出以形成在组合器(assembler)模块AS内的加密数据Y。所述模块AS具有与所述分离模块SP相同的功能,但是逆向地工作。应当注意,重构输出Y的方式可以不同于所述分离模块SP,但是目的是相同的。X8L2和X8R2的所有位将出现在所述输出Y中。
图3详细地示出了图1的块f32的功能。在所述块中,32位长度数据X1是输入。所述数据通过分离块SPMU被分成8位长度的块(X1a、X1b、X1c、X1d),还在图3中被表示为X1′。所述块具有和关于图2的块SP所描述的功能相同的功能。这些8位块的每一个与所述子密钥RA的第一部分RAH混合,以获得值X2a、X2b、X2c、X2d(形成所述值X2)。这个混合操作和关于图1的块MX所描述的混合操作是相同的。
所述两个子密钥RAH和RAL的产生是通过所述分离模块SP进行的。所述模块具有与在图1中描述的模块相同的功能。
这些值X2a至X2d的每一个被应用到替换层,替换层包括至少一个替换盒(sbox),每个替换盒包含常数表,对于所述常数表,输入作为指针,所指向的常数作为输出。所述输出数据在图3上称为X3a、X3b、X3c、X3d(形成所述值X3)。
产生所述常数表的一种方法是使用伪随机发生器。其将删除所有重复的值,以使得在所述表中的每个常数是唯一的。
所述数据被输入(4,4)多排列类型的扩散盒Mu4中。所述扩散盒的输出数据分别称为X4a、X4b、X4c、X4d(形成所述值X4)。所述扩散盒包括用输入向量(X4a、X4b、X4c、X4d)乘方阵4×4Mu4,方阵4×4Mu4的元素属于具有256个元素的有限域;这些元素被表示为Mu(i,j),其中i是指行标、而j是指列标。用矢量(X4a、X4b、X4c、X4d)乘所述矩阵Mu4的结果是矢量(Y4a、Y4b、Y4c、Y4d),其中这些值如下面这样获得Y4a=Mu4(1,1)*×4a+Mu4(1,2)*×4b+Mu4(1,3)*×4c+Mu4(1,4)*×4dY4b=Mu4(2,1)*×4a+Mu4(2,2)*×4b+Mu4(2,3)*×4c+Mu4(2,4)*×4dY4c=Mu4(3,1)*×4a+Mu4(3,2)*×4b+Mu4(3,3)*×4c+Mu4(3,4)*×4dY4d=Mu4(4,1)*×4a+Mu4(4,2)*×4b+Mu4(4,3)*×4c+Mu4(4,4)*×4d这里“+”表示在有限域中加法,“* ”表示其乘法。选择Mu4的元素,以使得估计上述四个表达式所需要的计算的量是最小的。与常数“1”(此后被表示为“单位元(identity)”)相乘的数量因此被选择为尽可能地大。
所述数据然后与所述子密钥RA的第二部分RAL混合,以获得值X5a、X5b、X5c、X5d(形成所述值X5)。
这些值X5a至X5d的每个然后被应用到替换块(sbox),以获得值X6a、X6b、X6c、X6d(形成所述值X6)。这些值与所述子密钥RA的第一部分RAH混合,以获得新的值X7a、X7b、X7c、X7d(形成所述值X7)。
然后,这些值X7a、X7b、X7c、X7d被组合以在所述组合器模块AS内形成输出数据X7,如关于图2所描述的那样。所述数据对应于在图1中的块f32的输出数据X7。
在加密处理期间,所述主密钥R分为几个子密钥,每个模块MOD一个子密钥。在图3的例子中,第一子密钥RA1结合所述模块MOD1被使用,以及第二子密钥RA2结合所述模块MOD2被使用。
为了基于数据Y和密钥R获得数据X,应用与参照图3所描述的处理相同的处理,仅有的区别是以相反次序产生所述子密钥。所述子密钥RA2于是应用于第一模块MOD1,以及所述子密钥RA1应用于第二模块MOD2。
根据本发明的一般原理,串联连接的模块MOD的数量不限于两个模块。为了获得好的健壮性,经验表明,为了获得可以适用于加密处理的结果,9个循环是最佳的。为了获得更好的健壮性,所述数量可以扩大至12或者更多。
图4描述了被设计用于处理128位长度数据的模块MOD64的实施例。所述输入X0LL和X0LR在混合单元MX内被混合在一起以形成输出值X1L,并且以同样的方式,所述值X0RL和X0RR被混合在一起以形成所述值X1R。
下一步以层f64说明,所述层f64具有两个32位输入X1L和X1R,以及具有两个32位输出X7L和X7R,以及使用子密钥RA。这个块的详细描述是参照图7给出的(见下文)。
这些输出的每一个在相同的混合单元MX内与所述模块MOD64的两个输入数据混合。在本例子中,所述输出值X7L分别与输入X0LL和X0LR混合,以及所述输出值X7R分别与输入X0RL和X0RR混合。其它混合组合也是可能的,例如以交叉配置将所述输出值X7L与X0LL和X0RR混合。
图5是所述正形性函数的实施例的示例。所述输入数据标记为ZI,以及所述输出数据标记为ZO。所述数据长度对于这个功能不是个问题。所述输入数据ZI首先分为与分离模块SP相同大小的两个值ZL和ZR。然后所述两个值通过所谓的MX混合单元被混合,以及所述单元的输出被应用于所述组合器单元AS。另一个分离值ZR不用改变直接被应用于组合器模块AS。所述模块包括两个输入,以及组合这些数据以形成输出值ZO。这个模块与所述分离模块SP相反地工作。这个实施例的特殊性是,所述组合器模块的输入相对于所述分离模块SP的输出是交叉的。所述分离模块SP的右边输出ZR被应用到所述组合器模块AS的左边输入,以及在与所述分离模块SP的另一个输出混合之后,所述分离模块SP的左边输出ZL被应用到所述组合器模块AS的右边输入。
至于所考虑的替换盒,存在有执行所述功能的不同可能。我们先前已经描述了唯一基于常数表的方法。减少表大小的第一步是分离所述输入,以及把所述部分应用到更小的表中。
图3的例子示出了通过8位数据长度而工作的替换盒,由此嵌入了256个常数的表。
在某些情况下,特别是其中存储器大小成问题的情况下,要寻求其它的选择。这种选择参考图6和9被描述。
图3示出了所述替换盒的子系统Cbox,所述子系统包括被分为两个输入CL和CR的一个输入C、以及两个输出CL′和CR′。
所述子系统的中心是所述模块TA,其包括2(n/2)个元素的常数表,每个元素具有n/2个位,其中n是输入值C的长度。
对于具有8位长度的输入,常数表包括16(24)个元素,每个元素是4位长度。这些元素是在考虑每个元素有唯一值的情况下随机产生的。
图9描述了如何使用所述模块Cbox来建立替换盒。所述输入值CI首先分成两个部分CL1和CR1,以及被应用于第一模块Cboxl,如参照图3描述的那样。所述模块Cboxl的输出被发送到下一模块Cbox2。所述第一模块的其中一个输出,在此情况下是CL1′,在应用到第二模块CVBox2之前,被给到正形性函数OR。
所述替换盒的运行通常使用至少两个子系统Cbox,每个子系统具有不同的常数表TA。在所说明的例子中,所述替换盒是使用三个子系统Cbox形成的,所述最后子系统的输出不具有根据本实施例的正形性函数OR。
图7是在图3中描述的实施例的另一种形式,被设计用于64位长度的数据。设计用于32位的所述结构大部分被复制来处理64位的数据。所述输入数据X1被分成具有8位长度的元素(X1a至X1h)的矢量,以及以和关于图3描述的相同方式而被处理。主要区别在于扩散盒Mu8,所述扩散盒是具有256个元素的有限域的8×8个元素的方阵。所述矩阵的元素被表示为Mu8(i,j),其中i表示行标,j表示列标。对于输入向量(X3a,...,X3h),通过矩阵Mu8的相乘以下列方式给出了输出矢量(Y3a,...,Y3h)(“+”是加法,“*”是在有限域中的乘法)Y3a=Mu8(1,1)*×3a+Mu8(1,2)*×3b+Mu8(1,3)*×3c+Mu8(1,4)*×3d+Mu8(1,5)*×3e+Mu8(1,6)*×3f+Mu8(1,7)*×3g+Mu8(1,8)*×3h;Y3b=Mu8(2,1)*×3a+Mu8(2,2)*×3b+Mu8(2,3)*×3c+Mu8(2,4)*×3d+Mu8(2,5)*×3e+Mu8(2,6)*×3f+Mu8(2,7)*×3g+Mu8(2,8)*×3h;Y3c=Mu8(3,1)*×3a+Mu8(3,2)*×3b+Mu8(3,3)*×3c+Mu8(3,4)*×3d+Mu8(3,5)*×3e+Mu8(3,6)*×3f+Mu8(3,7)*×3g+Mu8(3,8)*×3h;Y3d=Mu8(4,1)*×3a+Mu8(4,2)*×3b+Mu8(4,3)*×3c+Mu8(4,4)*×3d+Mu8(4,5)*×3e+Mu8(4,6)*×3f+Mu8(4,7)*×3g+Mu8(4,8)*×3h;Y3e=Mu8(5,1)*×3a+Mu8(5,2)*×3b+Mu8(5,3)*×3c+Mu8(5,4)*×3d+Mu8(5,5)*×3e+Mu8(5,6)*×3f+Mu8(5,7)*×3g+Mu8(5,8)*×3h;Y3f=Mu8(6,1)*×3a+Mu8(6,2)*×3b+Mu8(6,3)*×3c+Mu8(6,4)*×3d+Mu8(6,5)*×3e+Mu8(6,6)*×3f+Mu8(6,7)*×3g+Mu8(6,8)*×3h;Y3g=Mu8(7,1)*×3a+Mu8(7,2)*×3b+Mu8(7,3)*×3c+Mu8(7,4)*×3d+Mu8(7,5)*×3e+Mu8(7,6)*×3f+Mu8(7,7)*×3g+Mu8(7,8)*×3h;Y3h=Mu8(8,1)*×3a+Mu8(8,2)*×3b+Mu8(8,3)*×3c+Mu8(8,4)*×3d+Mu8(8,5)*×3e+Mu8(8,6)*×3f+Mu8(8,7)*×3g+Mu8(8,8)*×3h;图8描述了使用所述模块MOD64的两个循环的运行的全部处理。所述分离模块SP把所述128位长度输入数据X划分为四个部分,即X0LL1、X0LR1、X0RL1和X0RR1(形成所述值X0)。然后,在被用作下一个模块MOD64-2的输入之前,所述模块MOD64-1的结果中的两个部分被应用于正形性函数OR。
关于所述模块MOD64的输出的正形性函数OR的位置不是确定的。其可以根据所述方法的实现来选择两个左输出或者两个右输出。
所述输出Y是直接从最后的模块MOD64获得的,在这些输出的一个中没有正形性函数OR。
在使用多于两个的模块MOD64的情况下,所述正形性函数OR被设置在每个模块MOD64之间。即使在优选实施例中,无论模块的数量,所述正形性函数OR的位置都是相同的,然而,在另一个实施例中,所述正形性函数OR的位置可以被改变成连接到所述模块MOD64的不同的输出。
权利要求
1.一种基于主密钥R而将数据X的块加密或者解密为数据Y的方法,所述方法使用至少两个串联连接的主模块(MOD),每个主模块(MOD)使用从所述主密钥(R)得到的子密钥(RA),包括以下步骤-输入至少两个初始值X0L与X0R,-混合所述至少两个值X0L与X0R以形成混合的值X1,-通过将所述子密钥RA的第一部分RAH与所述值X1混合而获得值X2,-通过把所述值X2应用到替换层而获得值X3,所述替换层包括至少一个替换盒(sbox),每个替换盒包含常数表,对于所述表,输入作为指针,以及所指向的常数作为输出,-通过基于值X3使用多排列类型的扩散盒而获得值X4,-通过将所述子密钥RA的第二部分RAL与所述值X4混合而获得值X5,-通过对所述值X5应用替换块而获得值X6,-通过将所述子密钥RA的第一部分RAH与所述值X6混合而获得值X7,-将所述值X7与所述初始的至少两个值X0L与X0R混合以获得至少两个值X8L与X8R,X8L与X8R表示所述模块的输出值X8,其中对于每个主模块(MOD),新的子密钥(RA)是从主密钥(R)产生的,所述第一主模块的初始值X0L和X0R是所述输入数据X的子集,所述最后的主模块的输出值X8L与X8H形成所述输出数据Y,以及所述方法还包括以下步骤在把所述值X8L和X8R应用到下一个主模块的输入X0R与X0L之前,对所述值X8L或者X8R中的至少一个应用正形性函数。
2.根据权利要求1的加密或者解密方法,其中所述输入数据是64位长度的,以及所述输入数据X被分成两个32位长度的初始值X0L与X0H,并且所述两个输出值X8L与X8H形成所述输出数据Y。
3.根据权利要求1的加密或者解密方法,其中所述输入数据是128位长度的,以及所述输入数据X被分成四个32位长度的初始值X0LL、X0LR、X0RL与X0RR,以及所述四个输出值X8LL、X8LR、X8RL与X8RR形成128位的输出数据Y,所述值X1的第一部分X1L是通过将所述值X0LL与X0LR混合而获得的,以及所述值X1的第二部分X1R是通过将所述值X0RL与X0RR混合而获得的,所述值X7的第一部分X7L与所述四个初始值X0LL、X0LR、X0RL和X0RR中的两个进行混合,以及所述值X7的第二部分X7R与所述初始值X0LL、X0LR、X0RL和X0RR中的另两个部分进行混合。
4.根据权利要求1的加密或者解密方法,其中所述替换层包括几个替换盒(sbox),每个盒具有8位输入和8位输出,所述替换层的输入被分成8位长度的部分。
5.根据权利要求4的加密或者解密方法,其中所述替换盒(sbox)的常数表(TA)包含对于给定输入的唯一输出。
6.根据权利要求4的加密或者解密方法,其中用于每个替换盒(sbox)的常数表是相同的。
7.根据权利要求4的加密或者解密方法,其中用于每个替换盒(sbox)的常数表是不同的。
8.根据权利要求4的加密或者解密方法,其中所述替换盒(sbox)的常数表是在每个主模块运行中被改变的。
9.根据权利要求1的加密或者解密方法,其中所述数据长度是64位,以及所述扩散盒是矩阵函数Y3=M*X4,所述变元M定义4*4的加法、与常数的乘法、或者单位元,所述变元M中的至少一行和一列包括三个单位元。
10.根据权利要求9的加密或者解密方法,其中所述变元M的剩余的行和剩余的列包括两个单位元。
11.根据权利要求1的加密或者解密方法,其中所述数据长度是128位,以及所述扩散盒是矩阵函数Y3=N*X3,所述变元N定义8*8的加法、与常数的乘法、或者单位元,所述变元N中的至少一行和一列包括七个单位元。
全文摘要
本发明的目的是提出一种提供与高运行速度相结合的高级别安全性的新的加密方法。这个目的是由基于主密钥R而将数据X的块加密或者解密为数据Y的方法来实现的,该方法使用几个串联连接的模块,每个模块使用从主密钥R导出的子密钥RA,并且包括以下步骤输入至少两个初始值X0L与X0R,以及混合这些值以形成混合的值X1,通过将所述子密钥RA的第一部分RAH与所述值X1混合而获得值X2,通过把所述值X2应用到替换层而获得值X3,所述替换层包括至少一个替换盒(sbox),每个替换盒包含至少一个常数表,对于所述表,输入作为指针,所指向的常数作为输出,通过基于值X3使用多排列类型的扩散盒而获得值X4,通过将所述子密钥RA的第二部分RAL与所述值X4混合而获得值X5,通过对所述值X5应用替换层获得值X6,通过将所述子密钥RA的第一部分RAH与所述值X6混合而获得值X7,将所述值X7与初始的至少两个值X0L与X0R混合以获得至少两个值X8L与X8R,X8L与X8R表示所述模块的输出值X8,所述方法使用至少两个模块,其中对于每个模块,新的子密钥RA是从主密钥R产生的,所述第一模块的初始值X0是所述输入数据X的部分,最后的模块的输出值X8L与X8H形成输出数据Y,以及所述方法还包括以下步骤在把所述值X8L和X8R应用到下一个模块的输入X0R与X0L之前,对所述值X8L或者X8R中的至少一个应用正形性函数。
文档编号H04L9/06GK1795638SQ200480014205
公开日2006年6月28日 申请日期2004年5月19日 优先权日2003年5月23日
发明者帕斯卡尔·君诺德, 瑟基·瓦登纳 申请人:媒体编码有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1