高级加密标准aes外文翻译翻译外文译文aes外文翻译aes加密_第1页
高级加密标准aes外文翻译翻译外文译文aes外文翻译aes加密_第2页
高级加密标准aes外文翻译翻译外文译文aes外文翻译aes加密_第3页
高级加密标准aes外文翻译翻译外文译文aes外文翻译aes加密_第4页
高级加密标准aes外文翻译翻译外文译文aes外文翻译aes加密_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

加密它用新的高级加密标准(AES)保持你的数据安全JAMESMCCAFFREY摘要AES(THEADVANCEDENCRYPTIONSTANDARD)是美国国家标准与技术研究所用于加密电子数据的规范。它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法。本文展示了AES的概貌并解析了它使用的算法。包括一个完整的C实现和加密NET数据的举例。在读完本文后你将能用AES加密、测试基于AES的软件并能在你的系统中使用AES加密。美国国家标准与技术研究所NIST在2002年5月26日建立了新的高级数据加密标准AES规范。本文中我将提供一个用C编写的的能运行的AES实现,并详细解释到底什么是AES以及编码是如何工作的。我将向您展示如何用AES加密数据并扩展本文给出的代码来开发一个商业级质量的AES类。我还将解释怎样把AES结合到你的软件系统中去和为什么要这么做,以及如何测试基于AES的软件。AES是一个新的可以用于保护电子数据的加密算法。明确地说,AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(PERMUTATIONS)和替换SUBSTITUTIONS)输入数据。FIGURE1显示了AES用192位密钥对一个16位字节数据块进行加密和解密的情形。AES算法概述AES算法是基于置换和代替的。置换是数据的重新排列,而代替是用一个单元数据替换另一个。AES使用了几种不同的技术来实现置换和替换。为了阐明这些技术,让我们用FIGURE1所示的数据讨论一个具体的AES加密例子。下面是你要加密的128位值以及它们对应的索引数组00112233445566778899AABBCCDDEEFF0123456789101112131415192位密钥的值是000102030405060708090A0B0C0D0E0F101112131415161701234567891011121314151617181920212223FIGURE2S盒(SBOX)当AES的构造函数(CONSTRUCTOR)被调用时,用于加密方法的两个表被初始化。第一个表是代替盒称为S盒。它是一个1616的矩阵。S盒的前五行和前五列如FIGURE2所示。在幕后,加密例程获取该密钥数组并用它来生成一个名为W的密钥调度表,FIGURE3所示。FIGURE3密钥调度表(KEYSCHED)W最初的NK6行被作为种子,用原始密钥值(0X00到0X17)。剩余行从种子密钥来产生。变量NK代表以32位字为单位的种子密钥长度。稍后我分析AES实现时你将清楚地看到W是怎样产生的。关键是这里现在有许多密钥使用而不只是一个。这些新的密钥被称为轮密钥(ROUNDKEYS)以将它们与原始种子密钥区别开来。FIGURE4STATE(态)数组AES加密例程开始是拷贝16字节的输入数组到一个名为STATE(态)的44字节矩阵中。(参见FIGURE4)。AES加密算法取名为CIPHER,它操作STATE,其过程描述的伪代码参见FIGURE5。在规范中,加密算法实现的一个预备的处理步骤被称为ADDROUNDKEY(轮密钥加)。ADDROUNDKEY用密钥调度表中的前四行对STATE矩阵实行一个字节一个字节的异或(XOR)操作,并用轮密钥表WC,R异或输入STATER,C。举个例子,如果STATE矩阵的第一行保存的字节是00,44,88,CC,第一列密钥调度表是00,04,08,0C,那么新的STATE0,2值是用W2,00X08或0X80异或STATE0,20X88的结果1000100000001000XOR10000000AES算法的主循环对STATE矩阵执行四个不同的操作,在规范中被称为SUBBYTES(字节替换)、SHIFTROWS(行位移变换)、MIXCOLUMNS(列混合变换)和ADDROUNDKEY。除了每次循环ADDROUNDKEY都被调用并使用密钥调度表的下面四行外,ADDROUNDKEY与预备处理步骤中的ADDROUNDKEY相同。SUBBYTES例程是一个代替操作,它将STATE矩阵中的每个字节替换成一个由SBOX决定的新字节。比如,如果STATE0,1的值是0X40如果你想找到它的代替者,你取STATE0,1的值0X40并让X等于左边的数字4并让Y等于右边的数字0。然后你用X和Y作为索引进到SBOX表中寻找代替值,如FIGURE2所示。SHIFTROWS是一个置换操作,它将STATE矩阵中的字节向左旋转。FIGURE6示范了SHIFTROWS如何操作STATE。STATE的第0行被向左旋转0个位置,STATE的第1行被向左旋转1个位置,STATE的第2行被向左旋转2个位置,而STATE的第3行被向左旋转3个位置。FIGURE6对STATE进行SHIFTROWS操作MIXCOLUMNS是一个代替操作,它是理解AES算法时最具技巧(或者说是最需要动脑筋的部分)的部分。它用STATE字节列的值进行数学域加和域乘的结果代替每个字节。我将在下一节中详细解释专门的域加和域乘细节。假设STATE0,1的值是0X09,并且列1上的其它值分别为0X60,0XE1和0X04,那么STATE0,1的新值计算如下STATE0,1STATE0,10X01STATE1,10X02STATE2,10X03STATE3,10X010X090X010X600X020XE10X030X040X010X57此处加法和乘法是专门的数学域操作,而不是平常整数的加法和乘法。SUBBYTES、SHIFTROWS、MIXCOLUMNS和ADDROUNDKEY四个操作在一个执行NR次的循环里被调用,NR为给定密钥大小的轮数减1。加密算法使用的轮数要么是10,12,要么是14,这依赖于种子密钥长度是128位、192位还是256位。在这个例子中,因为NR等于12,则这四个操作被调用11次。该迭代完成后,在拷贝STATE矩阵到输出参数前,加密算法调用SUBBYTES、SHIFTROWS和ADDROUNDKEY后结束。大致说来,AES加密算法的核心有四个操作。ADDROUNDKEY使用从种子密钥值中生成的轮密钥代替4组字节。SUBBYTES替换用一个代替表替换单个字节。SHIFTROWS通过旋转4字节行的4组字节进行序列置换。MIXCOLUMNS用域加和域乘的组合来替换字节。有限域GF28的加法和乘法正如你所看到的,AES加密算法使用相当简单明了的技术来代替和置换,除MIXCOLUMNS例程以外。MIXCOLUMNS使用特殊的加法和乘法。AES所用的加法和乘法是基于数学(译者注近世代数)的域论。尤其是AES基于有限域GF28。GF28由一组从0X00到0XFF的256个值组成,加上加法和乘法,因此是28。GF代表伽罗瓦域,以发明这一理论的数学家的名字命名。GF28的一个特性是一个加法或乘法的操作的结果必须是在0X000XFF这组数中。虽然域论是相当深奥的,但GF28加法的最终结果却很简单。GF28加法就是异或(XOR)操作。然而,GF28的乘法有点繁难。正如你稍后将在C实现中所看到的,AES的加密和解密例程需要知道怎样只用七个常量0X01、0X02、0X03、0X09、0X0B、0X0D和0X0E来相乘。所以我不全面介绍GF28的乘法,而只是针对这七种特殊情况进行说明。在GF28中用0X01的乘法是特殊的;它相当于普通算术中用1做乘法并且结果也同样任何值乘0X01等于其自身。现在让我们看看用0X02做乘法。和加法的情况相同,理论是深奥的,但最终结果十分简单。只要被乘的值小于0X80,这时乘法的结果就是该值左移1比特位。如果被乘的值大于或等于0X80,这时乘法的结果就是左移1比特位再用值0X1B异或。它防止了“域溢出”并保持乘法的乘积在范围以内。一旦你在GF28中用0X02建立了加法和乘法,你就可以用任何常量去定义乘法。用0X03做乘法时,你可以将0X03分解为2的幂之和。为了用0X03乘以任意字节B,因为0X030X020X01,因此B0X03B0X020X01B0X02B0X01这是可以行得通的,因为你知道如何用0X02和0X01相乘和相加,同哩,用0X0D去乘以任意字节B可以这样做B0X0DB0X080X040X01B0X08B0X04B0X01B0X020X020X02B0X020X02B0X01在加解密算法中,AESMIXCOLUMNS例程的其它乘法遵循大体相同的模式,如下所示B0X09B0X080X01B0X020X020X02B0X01B0X0BB0X080X020X01B0X020X020X02B0X02B0X01B0X0EB0X080X040X02B0X020X020X02B0X020X02B0X02总之,在GF28中,加法是异或操作。其乘法将分解成加法和用0X02做的乘法,而用0X02做的乘法是一个有条件的左移1比特位。AES规范中包括大量有关GF28操作的附加信息。密钥扩展AES加密和解密算法使用了一个由种子密钥字节数组生成的密钥调度表。AES规范中称之为密钥扩展例程(KEYEXPANSION)。从本质上讲,从一个原始密钥中生成多重密钥以代替使用单个密钥大大增加了比特位的扩散。虽然不是无法抵御的困难,但理解KEYEXPANSION仍是AES算法中的一个难点。KEYEXPANSION例程高级伪代码如下所示KEYEXPANSIONBYTEKEY,BYTE4WCOPYTHESEEDKEYINTOTHEFIRSTROWSOFWFOREACHREMAININGROWOFWUSETWOOFTHEPREVIOUSROWSTOCREATEANEWROW“用前面两行来产生一个新行”(“USETWOOFTHEPREVIOUSROWSTOCREATEANEWROW”)的例程用到了两个子例程,ROTWORD和SUBWORD以及一个名为“RCON”的常数表(作为“轮常数”)。让我们先来逐个看一下这三东西,然后再回到整个KEYEXPANSION的讨论中来。ROTWORD例程很简单。它接受一个4个字节的数组并将它们向左旋转一个位置。因为轮调度表W有四列,ROTWORD将W的1行左旋。注意KEYEXPANSION使用的这个ROTWORD函数与加密算法使用的SHIFTROWS(行位移变换)例程非常相似,只是它处理的是单行密钥调度W,而不是整个加密状态表STATE。SUBWORD例程使用替换表SBOX对一给定的一行密钥调度表W进行逐字节替换。KEYEXPANSION操作中的替换实际上就像在加密算法中的替换一样。被代替的输入字节被分成X,Y对,它被当作进入替换表SBOX的索引。举例来说,0X27的代替结果是X2和Y7,并且SBOX2,7返回0XCC。KEYEXPANSION例程使用一个被称为轮常数表的数组RCON。这些常数都是4个字节,每一个与密钥调度表的某一行相匹配。AES的KEYEXPANSION例程需要11个轮常数。你可以在FIGURE7中看到这些常数清单。每个轮常数的最左边的字节是GF28域中2的幂次方。它的另一个表示方法是其每个值是前一个值乘上0X02,正如前一部分讨论GF28乘法时所描述的那样。注意0X800X020X1B是0X80左移1个比特位后紧接着与0X1B进行异或,如前所述。现在让我们更进一步看看KEYEXPANSION内幕中的循环。这里所用的伪码比以前更为详细,这个循环是FORROWNKROW操作符右移4位将得到X索引,并且与00001111进行逻辑与得到Y值。虽然有些长,但比实际代码更可读,我可以象下面这样INTXWORD04INTYWORD0BYTESUBSTITUTETHISSBOXX,YRESULT0SUBSTITUTE代替我原来用的代码RESULT0THISSBOXWORD04,WORD0总的来说,AES构造函数接受一个密钥的长度为128,192或256位和一个字节数组种子密钥值。构造函数为输入块长度,种子密钥长度以及加密算法的轮数赋值,并将种子密钥拷贝到一个名为KEY的数据成员中。构造函数还创建了四个表两个由加密和解密方法使用的替换表,一个轮常数表,和一个轮密钥的密钥调度表。用C编写的AESCIPHER方法CIPHER方法如FIGURE11所示。它真的非常简单,因为它分出了大部分的工作给私有方法ADDROUNDKEY,SUBBYTES,SHIFTROWS和MIXCOLUMNS。CIPHER方法以拷贝明文输入数组到状态矩阵STATE为开始。最初调用ADDROUNDKEY之后,CIPHER方法比总轮数少迭代一次。在最后一轮时,正如规范中所说的那样,MIXCOLUMNS调用被省略了。ADDROUNDKEY和SUBBYTES私有方法的代码如FIGURE12所示。ADDROUNDKEY方法需要知道它处在那一轮,以便它正确引用4行密钥调度数组W。请注意STATER,C是用WC,R来异或并不是WR,C。SUBBYTES方法从输入字节中提取索引,与KEYEXPANSION方法中所用的右移4位和0X0F屏蔽技术相同。SHIFTROWS方法的代码如FIGURE13所示。回想一下,SHIFTROWS(可能叫做ROTATEROWS更好)将ROW0向左旋转0个位置,将ROW1向左旋转1位置等等。把STATE拷贝到TEMP矩阵之后,然后用下面的这行代码实现转换THISSTATER,CRNBTEMPR,C这里利用操作符的优点抱合一行。MIXCOLUMNS方法FIGURE14用GF28加和乘,以字节列中所有其它值的线性组合对每一个字节进行替换。乘法所用的常量系数基于域论的,并且是0X01,0X02或0X03中的任意一个值。给定某一列C,其替代式如下STATE0,C0X02STATE0,C0X03STATE1,C0X01STATE2,C0X01STATE3,CSTATE1,C0X01STATE0,C0X02STATE1,C0X03STATE2,C0X01STATE3,CSTATE2,C0X01STATE0,C0X01STATE1,C0X02STATE2,C0X03STATE3,CSTATE3,C0X03STATE0,C0X01STATE1,C0X01STATE2,C0X02STATE3,C这些表达式稍微有些长,因此我决定编写返回GF28与0X01,0X02和0X03之乘积的私有辅助函数。这些辅助函数非常短。例如,一个字节B被0X03域乘的代码如下RETURNBYTEINTGFMULTBY02BINTB正如我前面讨论的,被0X02乘是所有GF28乘法的基本操作。我调用了我的GFMULTBY02方法,我改变了使用与规范相同的方法命名惯例,规范上称此例程为XTIME。CIPHER方法其输入反复应用四个操作来产生加密的输出。ADDROUNDKEY用源于单个原始种子密钥的多重轮密钥来替代字节。SUBBYTES用某个替换表中的值替代字节。SHIFTROWS用移动字节行置换字节,而MIXCOLUMNS用某一列的域加和乘法值来替代字节。用C编写AESINVCIPHER方法AES解密算法背后的基本原则很简单解密一个加密块,也就是以反向顺序还原(UNDO)每个操作。尽管这是基本概念,但仍有几个细节要处理。AES规范称解密例程为INVCIPHER,而不是DECIPHER或DECRYPT中的一个。这是AES背后的数学基础的反映,它基于可逆的数学操作。如果你将这个代码和CIPHER代码比较的话,你会看到它比你预期的漂亮很多,但是有两点例外。首先,在INVCIPHER方法中逆方法调用(如INVSUBBYTES)顺序并不完全与在CIPHER方法中相应调用(如SUBBYTES)的逆向顺序正好相同。其次,INVCIPHER调用的是一个ADDROUNDKEY方法而不是INVADDROUNDKEY方法。值得注意的是INVCIPHER算法用密钥调度表并不是从较高编号的索引处开始向下处理至第0行。INVSUBBYTES,INVSHIFTROWS和INVMIXCOLUMNS方法的代码和与之有关的SUBBYTES,SHIFTROWS和MIXCOLUMNS方法的代码非常接近。INVSUBBYTES方法几乎就是SUBBYTES方法,只是它用逆替换表ISBOX而不是SBOX表。正如你可能猜测到的,ISBOX就是还原任何被SBOX处理的对应操作。比如,如果你有字节B等于0X20,并在SBOX中找到其代替值,你得到0XB7。如果你在ISBOX中找到0XB7的替代值,你便可得到0X20。相似地,INVSHIFTROWS方法还原SHIFTROWS方法ROW0被右移了0个位置,ROW1被右移了1个位置,ROW2被右移了2个位置,而ROW3被右移了3个位置。INVMIXCOLUMNS方法还原MIXCOLUMNS的工作,但没有用显而易见的方法。回想一下,MIXCOLUMNS用原始字节列中的字节线性组合替换状态矩阵中的每个字节,并且系数是0X01,0X02,和0X03,域论再一次得到应用。它证明逆运算是相似的,只是被0X09,0X0B,0X0D和0X0E乘,如下所示STATE0,C0X0ESTATE0,C0X0BSTATE1,C0X0DSTATE2,C0X09STATE3,CSTATE1,C0X09STATE0,C0X0ESTATE1,C0X0BSTATE2,C0X0DSTATE3,CSTATE2,C0X0DSTATE0,C0X09STATE1,C0X0ESTATE2,C0X0BSTATE3,CSTATE3,C0X0BSTATE0,C0X0DSTATE1,C0X09STATE2,C0X0ESTATE3,C对于MIXCOLUMNS方法,我决定专门写一个辅助函数,而不是内联展开已经较长的表达式或写一个普通的乘法辅助函数。让我向你展示一下我示如何编写这个任何字节B被常数0X0E在10进制中的14乘的函数,像任何数字一样,数字14可以被表示成2的幂的和,因此,14等于248。并且4等于2的平方,8等于2的立方,你可以将14表示为22223。记住加法就是GF28中上的异或,既然我已经有了GFMULTBY02函数,我可以用它得到我的结果RETURNBYTEINTGFMULTBY02GFMULTBY02GFMULTBY02B/23/INTGFMULTBY02GFMULTBY02B/22/INTGFMULTBY02B/2/用于AES加密算法的所有的操作都是可逆的,因此解密算法本质上是加密的所有操作的倒转。使用AES类用C实现AES的特色之一就简单。看看FIGURE15,它是我用来生成输出FIGURE1的代码。声明了16字节明文输入硬代码值和24字节192位的种子密钥后,一个AES对象被初始化,加密CIPHER方法将明文加密成为密文,然后再用INVCIPHER将密文解密。非常清楚和简单。因为AES对象针对字节数组进行处理,你可以轻松地用它处理NET的其它数据类型。我创建了一个基于WINDOWS的小DEMO程序,它接受一个单纯的字符串有8个字符16BYTE,对它进行加密和解密处理。运行画面如FIGURE16。FIGURE16加密DEMO程序因为加密和解密例程都需要知道用户定义的密钥长度,我把它当作一个类范围的变量来声明,像这样PRIVATEAESKEYSIZEKEYSIZE注意种子密钥并不是由用户定义的。这个DEMO程序用一个“空密钥”(NULLKEY)作为种子密钥,通过为构造函数提供一个哑参数NEWBYTE16使得它全部由零字节组成。哑参数的长度是不相关的,因为种子密钥还是要被初始化为零。空密钥加密和解密是一个容易和有效的办法来阻止外界对数据偶然的检查。在SYSTEMTEXT中的ENCODINGUNICODEGETBYTES和ENCODINGUNICODEGETSTRING方法使得将一个NET字符串转换成一个字节数组变得非常容易,反之亦然。实现选择现在让我们看看本文AES实现中出现的一些重要的变量,本文提供的代码可能出现的扩展,以及针对AES的密码分析学攻击。和我曾经处理的任何代码一样,AES算法也可以用其它可选的途径来实现。为什么这很重要呢AES被试图广泛应用于各种系统,从只有很少内存容量的智能卡(SMARTCARDS)到大型的多处理器主机系统。在许多情况下,性能是关键因素,并且有时内存或处理器资源是有限的。事实上,AES的每个例程都能针对非常昂贵的内存资源进行性能优化,反之亦然。比如,为替换表SBOX分配256个值看起来好像很简单直白。但是,这些值是基于GF28理论的,它们都可以用编程方式来生成。逆向替换表和轮常数表也是如此。可选实现另外一个有趣的可能性是CIPHER和INVCIPHER方法所用的GF28乘法。我的实现代码是一个被0X02乘的基本函数,而后是六个调用GFMULTBY02的附加函数。另一个可能性应该是写一个一般的乘法函数,并用它代替我目前实现的七个单独函数。另一个极端是你可以用被0X01,0X02,0X03,0X09,0X0B,0X0D和0X0E乘好的所有256个可能的字节值构成的一个完整乘积表。此外,实现GF28乘法另一途径是通过在两个256个字节的数组里查找,通常称为ALOG和LOG,因为它们在GF28中基于某些类似对数的方法。虽然这里给出的AES类完全能用于加密任何形式的NET数据,你可能考虑想用各种方法扩展它。首先,因为本文的重点在于清楚地解释AES,所有错误检查被剥离掉,以我的经验,为某个象AES这样的类添加合理数量的错误检查将会产生三倍的代码量膨胀。因为AES使用了这么多的数组,需要做很多索引边界检查。例如,所给出的构造函数甚至都不检查种子密钥参数的长度。你可能还考虑通过添加更多的特性来扩展AES类。最明显的一个地方是添加加密和解密NET基本数据类型的方法,比如SYSTEMSTRING和SYSTEMINT32。更加雄心勃勃的扩展可能会是实现一个流数据加密类。AES的安全性怎样呢这是一个很难回答的问题,但是一般多数人的意见是它是目前可获得的最安全的加密算法。AES已被列为比任何现今其它加密算法更安全的一种算法。在理论和实践基础上,AES被认为是“安全的”,因为要破解它的话,唯一有效的方法是强行(BRUTEFORCE)生成所有可能的密钥。如果密钥长度为256位,还没有已知的攻击可以在一个可接受的时间内破解AES(即便在当今最快的系统上,它也要花费数年时间)。注意针对AES密码最可能成功的攻击来自一个允许时间选择攻击的弱实现。攻击者用不同的密钥并精确地测量出加密例程所需的时间。如果加密例程被粗心编码,因此执行时间便依赖于密钥值,它就有可能推导出有关密钥的信息。在AES中,这种事情最可能发生在MIXCOLUMNS例程中,因为有域乘。针对这种攻击的两个安全措施是加入虚指令,以便所以所有乘法都需要相同数量的指令,或者将域乘实现为一个查询表,就象我前面描述的那样。AES有许多种可能的实现,尤其是是使用查询表而不是计算。本文提供的AES基本类可以被用于加解密任何形式的NET数据或被扩展成一个具有更多功能的类。结束语新的AES将无疑成为加密所有形式电子信息的事实上的标准,取代DES。AES加密的数据在某种意义上是牢不可破的,因为没有已知的密码分析攻击可以解密AES密文,除非强行遍历搜索所有可能的256位密钥。我发现在MICROSOFTNETFRAMEWORK上实现AES类的主要的障碍是官方文档是以一个数学家的观点,而不是以一个软件开发者的观点来写的。尤其是该规范假定读者十分熟悉GF28域,并省略了几个正确实现AES所必需的关于GF28乘法的关键事实。我在本文中试图努力去掉AES的神秘面纱,特别是围绕在GF28域乘法部分的。以NETFRAMEWORK库的形式从MICROSOFT以及第三方供应商处获得对AES的广泛支持只是一个时间问题。然而,处于种种理由,让本文代码作为你的技能储备仍然是有价值的。这个实现尤其简单,并且是低资源开销。另外,阅读并理解源代码将使你能定制AES类且更有效地使用它的任何实现。在任何软件设计过程中安全已不再是后顾之忧。AES是一个重大进步,使用并理解它将大大增加软件系统的可靠性和安全性。ENCRYPTITKEEPYOURDATASECUREWITHTHENEWADVANCEDENCRYPTIONSTANDARDJAMESMCCAFFREYSUMMARYTHEADVANCEDENCRYPTIONSTANDARDAESISANATIONALINSTITUTEOFSTANDARDSANDTECHNOLOGYSPECIFICATIONFORTHEENCRYPTIONOFELECTRONICDATAITISEXPECTEDTOBECOMETHEACCEPTEDMEANSOFENCRYPTINGDIGITALINFORMATION,INCLUDINGFINANCIAL,TELECOMMUNICATIONS,ANDGOVERNMENTDATATHISARTICLEPRESENTSANOVERVIEWOFAESANDEXPLAINSTHEALGORITHMSITUSESINCLUDEDISACOMPLETECIMPLEMENTATIONANDEXAMPLESOFENCRYPTINGNETDATAAFTERREADINGTHISARTICLEYOUWILLBEABLETOENCRYPTDATAUSINGAES,TESTAESBASEDSOFTWARE,ANDUSEAESENCRYPTIONINYOURSYSTEMSTHENATIONALINSTITUTEOFSTANDARDSANDTECHNOLOGYNISTESTABLISHEDTHENEWADVANCEDENCRYPTIONSTANDARDAESSPECIFICATIONONMAY26,2002INTHISARTICLEIWILLPROVIDEAWORKINGIMPLEMENTATIONOFAESWRITTENINC,ANDACOMPLETEEXPLANATIONOFEXACTLYWHATAESISANDHOWTHECODEWORKSILLSHOWYOUHOWTOENCRYPTDATAUSINGAESANDEXTENDTHECODEGIVENHERETODEVELOPACOMMERCIALQUALITYAESCLASSILLALSOEXPLAINHOWANDWHYTOINCORPORATEAESENCRYPTIONINTOYOURSOFTWARESYSTEMS,ANDHOWTOTESTAESBASEDSOFTWARENOTETHATTHECODEPRESENTEDINTHISARTICLEANDANYOTHERIMPLEMENTATIONBASEDONTHISARTICLEISSUBJECTTOAPPLICABLEFEDERALCRYPTOGRAPHICMODULEEXPORTCONTROLSSEECOMMERCIALENCRYPTIONEXPORTCONTROLSFORTHEEXACTREGULATIONSAESISANEWCRYPTOGRAPHICALGORITHMTHATCANBEUSEDTOPROTECTELECTRONICDATASPECIFICALLY,AESISANITERATIVE,SYMMETRICKEYBLOCKCIPHERTHATCANUSEKEYSOF128,192,AND256BITS,ANDENCRYPTSANDDECRYPTSDATAINBLOCKSOF128BITS16BYTESUNLIKEPUBLICKEYCIPHERS,WHICHUSEAPAIROFKEYS,SYMMETRICKEYCIPHERSUSETHESAMEKEYTOENCRYPTANDDECRYPTDATAENCRYPTEDDATARETURNEDBYBLOCKCIPHERSHAVETHESAMENUMBEROFBITSTHATTHEINPUTDATAHADITERATIVECIPHERSUSEALOOPSTRUCTURETHATREPEATEDLYPERFORMSPERMUTATIONSANDSUBSTITUTIONSOFTHEINPUTDATAFIGURE1SHOWSAESINACTIONENCRYPTINGANDTHENDECRYPTINGA16BYTEBLOCKOFDATAUSINGA192BITKEYFIGURE1SOMEDATAAESISTHESUCCESSORTOTHEOLDERDATAENCRYPTIONSTANDARDDESDESWASAPPROVEDASAFEDERALSTANDARDIN1977ANDREMAINEDVIABLEUNTIL1998WHENACOMBINATIONOFADVANCESINHARDWARE,SOFTWARE,ANDCRYPTANALYSISTHEORYALLOWEDADESENCRYPTEDMESSAGETOBEDECRYPTEDIN56HOURSSINCETHATTIMENUMEROUSOTHERSUCCESSFULATTACKSONDESENCRYPTEDDATAHAVEBEENMADEANDDESISNOWCONSIDEREDPASTITSUSEFULLIFETIMEINLATE1999,THERIJNDAELPRONOUNCED“RAINDOLL“ALGORITHM,CREATEDBYRESEARCHERSJOANDAEMENANDVINCENTRIJMEN,WASSELECTEDBYTHENISTASTHEPROPOSALTHATBESTMETTHEDESIGNCRITERIAOFSECURITY,IMPLEMENTATIONEFFICIENCY,VERSATILITY,ANDSIMPLICITYALTHOUGHTHETERMSAESANDRIJNDAELARESOMETIMESUSEDINTERCHANGEABLY,THEYAREDISTINCTAESISWIDELYEXPECTEDTOBECOMETHEDEFACTOSTANDARDFORENCRYPTINGALLFORMSOFELECTRONICDATAINCLUDINGDATAUSEDINCOMMERCIALAPPLICATIONSSUCHASBANKINGANDFINANCIALTRANSACTIONS,TELECOMMUNICATIONS,ANDPRIVATEANDFEDERALINFORMATIONOVERVIEWOFTHEAESALGORITHMTHEAESALGORITHMISBASEDONPERMUTATIONSANDSUBSTITUTIONSPERMUTATIONSAREREARRANGEMENTSOFDATA,ANDSUBSTITUTIONSREPLACEONEUNITOFDATAWITHANOTHERAESPERFORMSPERMUTATIONSANDSUBSTITUTIONSUSINGSEVERALDIFFERENTTECHNIQUESTOILLUSTRATETHESETECHNIQUES,LETSWALKTHROUGHACONCRETEEXAMPLEOFAESENCRYPTIONUSINGTHEDATASHOWNINFIGURE1THEFOLLOWINGISTHE128BITVALUETHATYOUWILLENCRYPTWITHTHEINDEXESARRAY00112233445566778899AABBCCDDEEFF0123456789101112131415THE192BITKEYVALUEIS000102030405060708090A0B0C0D0E0F101112131415161701234567891011121314151617181920212223FIGURE2SBOXWHENTHEAESCONSTRUCTORISCALLED,TWOTABLESTHATWILLBEUSEDBYTHEENCRYPTIONMETHODAREINITIALIZEDTHEFIRSTTABLEISASUBSTITUTIONBOXNAMEDSBOXITISA1616MATRIXTHEFIRSTFIVEROWSANDCOLUMNSOFSBOXARESHOWNINFIGURE2BEHINDTHESCENES,THEENCRYPTIONROUTINETAKESTHEKEYARRAYANDUSESITTOGENERATEA“KEYSCHEDULE“TABLENAMEDW,SHOWNINFIGURE3FIGURE3KEYSCHEDTHEFIRSTNK6ROWSOFWARESEEDEDWITHTHEORIGINALKEYVALUE0X00THROUGH0X17ANDTHEREMAININGROWSAREGENERATEDFROMTHESEEDKEYTHEVARIABLENKREPRESENTSTHESIZEOFTHESEEDKEYIN32BITWORDSYOULLSEEEXACTLYHOWWISGENERATEDLATERWHENIEXAMINETHEAESIMPLEMENTATIONTHEPOINTISTHATTHEREARENOWMANYKEYSTOUSEINSTEADOFJUSTONETHESENEWKEYSARECALLEDTHEROUNDKEYSTODISTINGUISHTHEMFROMTHEORIGINALSEEDKEYFIGURE4STATETHEAESENCRYPTIONROUTINEBEGINSBYCOPYINGTHE16BYTEINPUTARRAYINTOA44BYTEMATRIXNAMEDSTATESEEFIGURE4THEAESENCRYPTIONALGORITHMISNAMEDCIPHERANDOPERATESONSTATEANDCANBEDESCRIBEDINPSEUDOCODESEEFIGURE5THEENCRYPTIONALGORITHMPERFORMSAPRELIMINARYPROCESSINGSTEPTHATSCALLEDADDROUNDKEYINTHESPECIFICATIONADDROUNDKEYPERFORMSABYTEBYBYTEXOROPERATIONONTHESTATEMATRIXUSINGTHEFIRSTFOURROWSOFTHEKEYSCHEDULE,ANDXORSINPUTSTATER,CWITHROUNDKEYSTABLEWC,RFOREXAMPLE,IFTHEFIRSTROWOFTHESTATEMATRIXHOLDSTHEBYTES00,44,88,CC,ANDTHEFIRSTCOLUMNOFTHEKEYSCHEDULEIS00,04,08,0C,THENTHENEWVALUEOFSTATE0,2ISTHERESULTOFXORINGSTATE0,20X88WITHW2,00X08,OR0X801000100000001000XOR10000000THEMAINLOOPOFTHEAESENCRYPTIONALGORITHMPERFORMSFOURDIFFERENTOPERATIONSONTHESTATEMATRIX,CALLEDSUBBYTES,SHIFTROWS,MIXCOLUMNS,ANDADDROUNDKEYINTHESPECIFICATIONTHEADDROUNDKEYOPERATIONISTHESAMEASTHEPRELIMINARYADDROUNDKEYEXCEPTTHATEACHTIMEADDROUNDKEYISCALLED,THENEXTFOURROWSOFTHEKEYSCHEDULEAREUSEDTHESUBBYTESROUTINEISASUBSTITUTIONOPERATIONTHATTAKESEACHBYTEINTHESTATEMATRIXANDSUBSTITUTESANEWBYTEDETERMINEDBYTHESBOXTABLEFOREXAMPLE,IFTHEVALUEOFSTATE0,1IS0X40ANDYOUWANTTOFINDITSSUBSTITUTE,YOUTAKETHEVALUEATSTATE0,10X40ANDLETXEQUALTHELEFTDIGIT4ANDYEQUALTHERIGHTDIGIT0THENYOUUSEXANDYASINDEXESINTOTHESBOXTABLETOFINDTHESUBSTITUTIONVALUE,ASSHOWNINFIGURE2SHIFTROWSISAPERMUTATIONOPERATIONTHATROTATESBYTESINTHESTATEMATRIXTOTHELEFTFIGURE6SHOWSHOWSHIFTROWSWORKSONSTATEROW0OFSTATEISROTATED0POSITIONSTOTHELEFT,ROW1ISROTATED1POSITIONLEFT,ROW2ISROTATED2POSITIONSLEFT,ANDROW3ISROTATED3POSITIONSLEFTFIGURE6RUNNINGSHIFTROWSONSTATETHEMIXCOLUMNSOPERATIONISASUBSTITUTIONOPERATIONTHATISTHETRICKIESTPARTOFTHEAESALGORITHMTOUNDERSTANDITREPLACESEACHBYTEWITHTHERESULTOFMATHEMATICALFIELDADDITIONSANDMULTIPLICATIONSOFVALUESINTHEBYTESCOLUMNIWILLEXPLAINTHEDETAILSOFSPECIALFIELDADDITIONANDMULTIPLICATIONINTHENEXTSECTIONSUPPOSETHEVALUEATSTATE0,1IS0X09,ANDTHEOTHERVALUESINCOLUMN1ARE0X60,0XE1,AND0X04THENTHENEWVALUEFORSTATE0,1ISSHOWNINTHEFOLLOWINGSTATE0,1STATE0,10X01STATE1,10X02STATE2,10X03STATE3,10X010X090X010X600X020XE10X030X040X010X57THEADDITIONANDMULTIPLICATIONARESPECIALMATHEMATICALFIELDOPERATIONS,NOTTHEUSUALADDITIONANDMULTIPLICATIONONINTEGERSTHEFOUROPERATIONSSUBBYTES,SHIFTROWS,MIXCOLUMNS,ANDADDROUNDKEYARECALLEDINSIDEALOOPTHATEXECUTESNRTIMESTHENUMBEROFROUNDSFORAGIVENKEYSIZE,LESS1THENUMBEROFROUNDSTHATTHEENCRYPTIONALGORITHMUSESISEITHER10,12,OR14ANDDEPENDSONWHETHERTHESEEDKEYSIZEIS128,192,OR256BITSINTHISEXAMPLE,BECAUSENREQUALS12,THEFOUROPERATIONSARECALLED11TIMESAFTERTHISITERATIONCOMPLETES,THEENCRYPTIONALGORITHMFINISHESBYCALLINGSUBBYTES,SHIFTROWS,ANDADDROUNDKEYBEFORECOPYINGTHESTATEMATRIXTOTHEOUTPUTPARAMETERINSUMMARY,THEREAREFOUROPERATIONSTHATAREATTHEHEARTOFTHEAESENCRYPTIONALGORITHMADDROUNDKEYSUBSTITUTESGROUPSOF4BYTESUSINGROUNDKEYSGENERATEDFROMTHESEEDKEYVALUESUBBYTESSUBSTITUTESINDIVIDUALBYTESUSINGASUBSTITUTIONTABLESHIFTROWSPERMUTESGROUPSOF4BYTESBYROTATING4BYTEROWSMIXCOLUMNSSUBSTITUTESBYTESUSINGACOMBINATIONOFBOTHFIELDADDITIONANDMULTIPLICATIONFIELDADDITIONANDMULTIPLICATIONINGF28ASYOUVESEEN,THEAESENCRYPTIONALGORITHMUSESFAIRLYSTRAIGHTFORWARDTECHNIQUESFORSUBSTITUTIONANDPERMUTATION,EXCEPTFORTHEMIXCOLUMNSROUTINETHEMIXCOLUMNSROUTINEUSESSPECIALADDITIONANDMULTIPLICATIONTHEADDITIONANDMULTIPLICATIONUSEDBYAESAREBASEDONMATHEMATICALFIELDTHEORYINPARTICULAR,AESISBASEDONAFIELDCALLEDGF28THEGF28FIELDCONSISTSOFASETOF256VALUESFROM0X00TO0XFF,PLUSADDITIONANDMULTIPLICATION,HENCETHE28GFSTANDSFORGALOISFIELD,NAMEDAFTERTHEMATHEMATICIANWHOFOUNDEDFIELDTHEORYONEOFTHECHARACTERISTICSOFGF28ISTHATTHERESULTOFANADDITIONORMULTIPLICATIONOPERATIONMUSTBEINTHESET0X000XFFALTHOUGHTHETHEORYOFFIELDSISRATHERDEEP,THENETRESULTFORGF28ADDITIONISSIMPLEGF28ADDITIONISJUSTTHEXOROPERATIONMULTIPLICATIONINGF28ISTRICKIER,HOWEVERASYOULLSEELATERINTHECIMPLEMENTATION,THEAESENCRYPTIONANDDECRYPTIONROUTINESNEEDTOKNOWHOWTOMULTIPLYBYONLYTHESEVENCONSTANTS0X01,0X02,0X03,0X09,0X0B,0X0D,AND0X0ESOINSTEADOFEXPLAININGGF28MULTIPLICATIONTHEORYINGENERAL,IWILLEXPLAINITJUSTFORTHESESEVENSPECIFICCASESMULTIPLICATIONBY0X01ING

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论