专利名称:高效块加密方法
技术领域:
本发明涉及数据操作;更具体地,涉及数据加密码或加密。
数据块加密或加密码涉及输入数据块或串并且产生对应的加密或加密码的数据块或串。用密码的分组加密为利用易于截取的通信如蜂窝通信时提供数据安全。
过去采用Luby-Rackoff方法加密数据块。在
图1中说明该方法。在步骤100输入要加密的含有“2n”个位的数据块。在步骤102,把该“2n”输入数据块或串分成2个“n”位的块,各用L0和R0标记。在步骤104,数据块R0充当伪随机函数f1的操作数。伪随机函数f1可能是例如RIPE-MD伪随机函数、GGM伪随机函数或MD5伪随机函数的一个函数。步骤104的输出和来自步骤102的位串L0进行“异或”运算。步骤106的输出进入步骤108,在步骤108来自步骤106的输出作为具有“n”个位的R1并把L1置成和“n”位的R0相等。在步骤110,R1充当第二伪随机函数f2的操作数。伪随机函数f2和伪随机函数f1不同。在步骤112,步骤110产生的结果和L1进行“异或”运算。在步骤114,把步骤112的输出存储成“n”位的串R2,并且把串L2置成等于“n”位的串R1。在步骤116,R2充当伪随机函数f3的操作数。伪随机函数f3不同于伪随机函数f1、f2。在步骤118,伪随机函数f3的输出和值L2进行“异或”运算。在步骤120,把步骤118的输出存储成“n”位的串R3,并且串L3置成等于“n”位的串R2。在步骤122,伪随机函数f4把串R3作为操作数以生成步骤124使用的输出。伪随机函数f4不同于伪随机函数f1至f3。在步骤124,伪随机函数f4的输出和串L3进行“异或”运算。在步骤126,把步骤124的输出存储成“n”位的串R4,并把串L4置成等于“n”位的串R3。在步骤128,把串L4和R4输出成该图所说明的加密方法的“2n”位的输出。
图1中所说明的方法使用四个不同的伪随机函数,并造成一种计算密集式方法。
图2说明现有技术的第二种加密数据块或串的方法。该方法被称为Naor-Reingold加密法。在步骤140输入要加密的“2n”个位的数据块。在步骤142,这“2n”个数据位充当如式(1)的散列函数的操作数以产生“2n”个位输出。
h(m)=(ma+b)modn(1)在步骤144,把步骤142产生的“2n”个位分成各由“n”个位组成的块L0和R0。在步骤146,伪随机函数f1把数据块R0用作操作数以生成步骤148使用的输出。伪随机函数f1例如可以是参照图1讨论的伪随机函数中的一种。在步骤148,步骤146的输出和数据块或串L0进行“异或”运算。在步骤150,把步骤148的输出存储为“n”位的串R1,并把“n”位的串L1置成等于“n”位的串R0。在步骤152,伪随机函数f2把数据串R1当作操作数以生成用于步骤154的输出。伪随机函数f3不同于伪随机函数f1。在步骤154,步骤152的输出和数据串L1进行模为“n”的“异或”运算。在步骤156,把步骤154的输出存储为“n”位的串R2,并把串L2置成等于“n”位的串R1。在步骤158,第二散列函数利用“n”位串L2和“n”位串R2的“2n”个位作为操作数以生成在步骤160中输出的“2n”个位的输出。
图2所说明的现有技术的加密方法也是计算密集型的。它使用二个不同的伪随机函数和二个低效的散列函数。诸如式(1)的散列函数涉及某密钥(“A”)和数据串的相乘。该相乘是计算密集的,并涉及W2次运算,其中“W”是数据串的字数。例如,若数据块为160位长,并且处理机执行使用32位字的方法,则5个字构成该串,而且为进行相乘需要52或25次运算。
本发明通过提供一种使用同一个伪随机函数二次以代替二个不同的伪随机函数的加密或加密码方法,解决上述的低效率。此外,本发明采用高效的散列函数。本发明的散列函数是平方散列函数,它们对密钥和数据串之和取平方,而不是相乘。它们仅需要
次运算,而不是现有技术中所使用的低效散列函数所需要的W2次运算。此外,本发明用模为“n”的加法运算代替现有技术的“异或”运算。
图1说明现有技术的Luby-Rackoff加密方法;图2说明现有技术的Naor-Reingold加密方法;图3说明采用平方散列函数的高效加密方法;图4说明采用平方散列函数的高效解密方法;图5概要说明生成密钥K1至K4的方法;图6说明如何为SHA函数选择操作数以生成S1;图7说明如何为SHA函数选择操作数以生成S2至S11;以及图8说明如何使用串X1至X11的最低有效位以提供充当密钥K1至K4的832个位。
图3说明一种高效加密方法,其采用平方散列函数并采用一种类型的伪随机函数。在步骤200,输入要加密的数据块或串。在步骤202,把该“2n”个位的串分成各由“n”个位组成的串“L”和“R”。在步骤204,使用例如如式(2)的平方散列函数。
h(m)=(m+a)2modn(2)该散列函数利用密钥K1和数据块“R”作为操作数以生成“n”位的输出。在步骤206,来自步骤204的“n”位输出和数据块“L”按模“n”相加。在步骤208,把步骤206的输出存储成“n”位串“S”,并且再次把串“R”存储为“n”位串块“R”。在步骤210,带有密钥K2的伪随机函数“f”把“n”位的块“S”用作操作数以生成步骤212中所使用的“n”位输出。伪随机函数“f”可以是参照图1和“图2”讨论过的伪随机函数中的一种,但最好是周知的标准的并且在题目为“SECUREHASH STANDARD”的附录中所说明的SHA伪随机函数。在步骤212,来自步骤210的输出和数据串“R”按模“n”相加,以生成“n”位的输出。在步骤214,把步骤212的“n”位输出存储成“n”位的串“T”,并把来自步骤208的“n”位的串再次存储成“n”位的块“S”。在步骤216,在步骤210中使用过的同一伪随机函数在带有相同的密钥K2下被重新使用,以在数据串“T”上运算产生一个“n”位的串。在步骤218,来自步骤216的“n”位输出和“n”位的串“S”按模“n”相加。在步骤220,把步骤218的“n”位输出存储成“n”位的串“V”,并且再次把“n”位的串“T”存储为串“T”。在步骤222,步骤204中使用过同一平方散列函数在带有密钥K3下被使用,以运算数据串“V”生成“n”位的输出。在步骤224,步骤222的输出和“n”位串“T”按模“n”相加。在步骤226,把步骤224的输出存储为“n”位的串“W”,并再次把“n”位串“V”存储为“n”位的串“V”。在步骤228,数据串“V”和“W”作为“2n”个位的输出,它是输入块或串的加密表示。
图4说明和图3所说明的加密或加密码方法关联的解密或解密码方法。在步骤240输入要解密的“2n”位的输入。在步骤242,把该“2n”个位的输入分成各由“n”位组成的串或块“V”和“W”。在步骤244,把“n”位串“V”作为带有密钥K3的由式(2)说明的平方散列函数的操作数。步骤244产生步骤246使用的“n”位输出,步骤246利用模为“n”的运算从串“W”减去步骤244的输出。在步骤248,把步骤246的输出存储为“n”位串“T”,并再次把“n”位的串“V”存储为串“V”。在步骤250,在带有密钥K2下利用加密处理中使用过的同一伪随机函数在串“T”上运算,以生成一个“n”位的输出。在步骤252,利用模为“n”的运算从数据串“V”减去步骤250的输出,以生成“n”位的输出。在步骤254,把步骤252的输出存储成“n”位的串“S”,并再次把“n”位的串“T”存储成串“T”。在步骤256,用和步骤250相同的带有相同密钥的伪随机函数运算串“S”以产生“n”位的输出。在步骤258,利用模为“n”的运算从串“T”减去步骤256的输出,以生成“n”位的串。在步骤260,把来自步骤258的“n”位的串存储成“n”位的串“R”,并再次把“n”位的串“S”存储成串“S”。在步骤262,利用带有密钥K1的由式(2)说明的平方散列函数对数据串“R”运算,以生成“n”位的输出。在步骤264,利用模为“n”的运算从数据串“S”减去步骤262的“n”位的输出。在步骤266,把步骤264的“n”位输出存储成“n”位的串“L”,并再次把“n”位的串“R”存储成串“R”。在步骤268,把“n”位的串“L”和“R”输出为一个“2n”位的块,其对应于输入块或串的解密形式。应注意,也可能用其它散列函数代替图3的步骤204和222以及图4的步骤244和262的散列函数。请注意,步骤204和262中采用的散列函数应该相同,而且步骤222和244中采用的散列函数也应相同。也可能对图3的步骤210和216的伪随机函数采用的不同的密钥或伪随机函数,而且也可能对图4的步骤250和256的伪随机函数采用不同的密钥或伪随机函数。请注意,步骤216和250采用的密钥和伪随机函数应相同,并且步骤210和256采用的密钥和伪随机函数应相同。
在本发明的一种实施例中,位“n”的数量等于160。从而,平方散列函数使用的密钥K1和K3各为160位长。此外,伪随机SHA函数使用2个密钥。第一密钥为160位长,第二密钥为352位长。SHA函数是一种密码散列函数,其把512位减少至160位。如式(3)中所示,SHA函数的操作数是密钥K2和数据块“B”的串联,其中数据块“B”是“n”位的充当图3和图4中讨论过的伪随机函数的操作数的块或串。
fK2=SHA(K4,(K2,B)) (3)密钥K4为160位长,它是用户加密数据和以后解密该数据共用的一个秘密值。
各密钥是利用用户所知的由用于加密和解密的一个初始伪随机数生成的。图5-8说明利用初始数种S0生成密钥K1至K4的处理。图5说明生成这些密钥的处理的概要。把数种S0、公用常数PC和公用密钥PK送入伪随机函数SHA(安全散列函数)。
Si=SHA(PK,(PC’,Si-1))i=1-11 (4)在步骤302 以迭代方式执行式(4)说明的SHA函数以生成值S1至S11。值S1至S11中的每个为160位长。在步骤304,把值S1至S11送入多项式计算306。
Xi=(ASi+B)modQi=1-11 (5)其中Q是一个阶数为160的不可约多项式。
在步骤306,执行式(5)以生成各包含160个位的值X1至X11。式(5)表示后面跟着多项式相加的多项式相乘,其中操作数Si对应于式(4)的输出Si。多项式“A”和“B”是任意二个随机的单变量(160位)二进制多项式。对每个Si值执行式(5)以生成值X1至X11。每个值Xi最初为320位长,但用一个二进制不可约多项式简化成160位。多项式计算以及不可约多项式是周知的,并在例如“Mathematics for ComputerAlgebra”作者Maurice Mignotte,1991,Springer-Verlag,New York的文献中讨论。在步骤310,利用串X1至X10的76个最低有效位(LSB)和X11的72个LSB生成一个832位的群。步骤310中生成的832个位对应于密钥K1至K4。
图6和图7说明推导SHA函数的操作数的方法。请回忆SHA函数使用一个160位的密钥和一个512位的操作数以生成160位的输出。SHA函数利用该160位的密钥把512位的操作数散列成或缩短成一个160位的输出。图6示出通过把160位的公用密钥PK作为SHA函数的密钥和把数种S0和公用常数PC的一部分的串联作为SHA函数的操作数,生成串S1。典型地,数种S0可包含从40到512个位,而SHA函数的操作数需要512个位。结果是,当S0少于512个位时,使用公用常数PC的LSB以提供为生成SHA函数的512位操作数所需的位。例如,若数种S0具有“x”个位,把公用常数PC的512-“x”个最低有效位和S0的各位串联起来。S0的各个位充当用于SHA函数的512位操作数的最低有效位。图6中示出的运算生成具有160位的串S1。图7说明产生其余的Si(“i”=2至11)的处理。再次,SHA函数需要一个160位的密钥以及一个要被缩短的512位的串。公用密钥PK充当图7的SHA函数的160位的密钥,要缩短的512位的串是前一个160位的串Si-1和公用常数PC的352个LSB的串联。请注意,因为Si-1提供160个位,需要来自公用常数PC的352个最低有效位以产生用于SHA函数的总计为512的位。和Si-1对应的160个位充当要被散列的串的LSB,而公用常数PC的352个LSB充当要被散列的串的最高有效位。
回到图5,在生成串S1至S11之后,它们各作为式(5)定义的多项式运算的一个操作数生成长度各为160位的串X1至X11。图8说明如何利用串X1至X11的集合生成和密钥K1至K4对应的832位的串。串X1至X10的76个最低有效位和串X11的72个最低有效位相串联生成用来产生密钥K1至K4的832个位。该832位的串的最低有效位是串X1的76个最低有效位,然后是串X2的76个最低有效位,并依次类推,最后用串X11的72个最低有效位完成该832个位的串。接着把得到的832位的串划分成密钥K1至K4,其中160个最低有效位对应于密钥K1,后352个位对应于密钥K2,下160个位对应于密钥K3,而最后160个位对应于密钥K4。
权利要求
1.一种加密第一n位的串和第二n位的串的方法,包括步骤利用第一密钥进行第一n位的串的平方散列,生成第一散列结果;对第一散列结果和第二n位的串进行模为n的相加,生成第一和;利用第一和作为带有第二密钥的某伪随机函数的操作数,生成第一伪随机结果;对第一伪随机结果和第一n位的串进行模为n的相加,生成第二和;利用第二和作为该带有第二密钥的伪随机函数的操作数,生成第二伪随机结果;对第二伪随机结果和第一和进行模为n的相加,生成第三和;利用第四密钥进行第三和的平方散列,生成第二散列结果;对第二和和第二散列结果进行模为n的相加,生成第四和;以及把第四和和第三和作为第一n位的串和第二n位的串的加密表示。
2.权利要求1的方法,其中第二和第三密钥相同。
3.权利要求1的方法,其中伪随机函数是SHA伪随机函数。
4.权利要求3的方法,其中第二和第三密钥相同。
5.一种加密第一n位的串和第二n位的串的方法,包括步骤利用第一散列函数对第一n位的串用第一密钥进行散列,生成第一散列结果;对第一散列结果和第二n位的串进行模为n的相加,生成第一和;利用第一和作为带有第二密钥的某伪随机函数的操作数,生成第一伪随机结果;对第一伪随机结果和第一n位的串进行模为n的相加,生成第二和;利用第二和作为带有第三密钥的该伪随机函数的操作数,生成第二伪随机结果;对第二伪随机结果和第一和进行模为n的相加,生成第三和;利用第二散列函数对第三和用第四密钥进行散列,生成第二散列结果;对第二和和第二散列结果进行模为n的相加,生成第四和;以及把第四和和第三和作为第一n位的串和第二n位的串的加密表示。
6.权利要求5的方法,其中第一和第二散列函数相同。
7.权利要求5的方法,其中伪随机函数是SHA伪随机函数。
8.一种加密第一n位的串和第二n位的串的方法,包括步骤利用第一密钥进行第一n位的串的平方散列,生成第一散列结果;对第一散列结果和第二n的串进行模为n的相加,生成第一和;利用第一和作为带有第二密钥的第一伪随机函数的操作数,生成第一伪随机结果;对第一伪随机结果和第一n位的串进行模为n的相加,生成第二和;利用第二和作为带有第三密钥的第二伪随机函数的操作数,生成第二伪随机结果;对第二伪随机结果和第一和进行模为n的相加,生成第三和;利用第四密钥进行第三和的平方散列,生成第二散列结果;对第二和和第二散列结果进行模为n的相加,生成第四和;以及把第四和第三和作为第一n位的串和第二n位的串的加密表示。
全文摘要
本发明通过提供一种使用同一个伪随机函数二次以代替不同的伪随机函数的加密或加密码方法解决低效率问题。此外,本发明采用高效的散列函数。本发明的散列函数是平方散列函数,其对密钥和数据串之和进行平方,以替代相乘。从而散列运算只需要(W
文档编号H04L9/06GK1251444SQ9912312
公开日2000年4月26日 申请日期1999年10月19日 优先权日1998年10月20日
发明者萨瓦尔·帕特尔, 祖尔非卡·阿明·兰姆鲁, 加纳帕西·苏布拉马南·桑德兰 申请人:朗迅科技公司