高级加密标准

title: 沿革.
content: Rijndael是由Daemen和Rijmen早期所设计的Square改良而来;而Square则是由SHARK发展而来。  不同于它的前任标准DES,Rijndael使用的是代换-置换网络,而非Feistel架构。
title: 密码说明.
content: 严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中两者可以互换),因为Rijndael加密法可以支援更大范围的区块和密钥长度:AES的区块长度固定为128位元,密钥长度则可以是128,192或256位元;而Rijndael使用的密钥和区块长度均可以是128,192或256位元。加密过程中使用的密钥是由Rijndael密钥生成方案产生。  大多数AES计算是在一个特别的有限域完成的。  AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为「体(state)」,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。(Rijndael加密法因支援更大的区块,其矩阵的「列数(Row number)」可视情况增加)加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:
title: AddRoundKey步骤.
content: AddRoundKey步骤,回合金钥将会与原矩阵合并。在每次的加密循环中,都会由主密钥产生一把回合金钥(透过Rijndael密钥生成方案产生),这把金钥大小会跟原矩阵一样,以与原矩阵中每个对应的字节作异或(⊕)加法。
title: SubBytes步骤.
content: 在SubBytes步骤中,矩阵中的各字节透过一个8位元的S-box进行转换。这个步骤提供了加密法非线性的变换能力。S-box与formula_1上的乘法反元素有关,已知具有良好的非线性特性。为了避免简单代数性质的攻击,S-box结合了乘法反元素及一个可逆的仿射变换矩阵建构而成。此外在建构S-box时,刻意避开了固定点与反固定点,即以S-box替换字节的结果会相当于错排的结果。此条目有针对S-box的详细描述:Rijndael S-box
title: ShiftRows步骤.
content: ShiftRows描述矩阵的列操作。在此步骤中,每一列都向左循环位移某个偏移量。在AES中(区块大小128位元),第一列维持不变,第二列里的每个字节都向左循环移动一格。同理,第三列及第四列向左循环位移的偏移量就分别是2和3。128位元和192位元的区块在此步骤的循环位移的模式相同。经过ShiftRows之后,矩阵中每一竖行,都是由输入矩阵中的每个不同行中的元素组成。Rijndael算法的版本中,偏移量和AES有少许不同;对于长度256位元的区块,第一列仍然维持不变,第二列、第三列、第四列的偏移量分别是1字节、2字节、3字节。除此之外,ShiftRows操作步骤在Rijndael和AES中完全相同。
title: MixColumns步骤.
content: 在MixColumns步骤,每一行的四个字节透过线性变换互相结合。每一行的四个元素分别当作formula_2的系数,合并即为formula_1中的一个多项式,接着将此多项式和一个固定的多项式formula_4在模formula_5下相乘。此步骤亦可视为Rijndael有限域之下的矩阵乘法。MixColumns函数接受4个字节的输入,输出4个字节,每一个输入的字节都会对输出的四个字节造成影响。因此ShiftRows和MixColumns两步骤为这个密码系统提供了扩散性。 以下条目有对MixColumns更加详细的描述:Rijndael mix columns
title: 加密算法优化.
content: 使用32或更多位元寻址的系统,可以事先对所有可能的输入建立对应表,利用查表来实作SubBytes,ShiftRows和MixColumns步骤以达到加速的效果。这么作需要产生4个表,每个表都有256个格子,一个格子记载32位元的输出;约占去4KB(4096字节)内存空间,即每个表占去1KB的内存空间。如此一来,在每个加密循环中,只需要查16次表,作12次32位元的XOR运算,以及AddRoundKey步骤中4次32位元XOR运算。若使用的平台内存空间不足4KB,也可以利用循环交换的方式一次查一个256格32位元的表。  然而,实际实作中应避免使用这样的对应表,否则可能因为产生快取命中与否的差别而使旁道攻击成为可能。
title: 安全性.
content: 截至2006年,针对AES唯一的成功攻击是旁道攻击或社会工程学攻击。美国国家安全局审核了所有的参与竞选AES的最终入围者(包括Rijndael),认为他们均能够满足美国政府传递非机密文件的安全需要。2003年6月,美国政府宣布AES可以用于加密机密文件:  (译:AES加密算法(使用128,192,和256位元密钥的版本)的安全性,在设计结构及密钥的长度上俱已到达保护机密资讯的标准。最高机密资讯的传递,则至少需要192或256位元的密钥长度。用以传递国家安全资讯的AES实作产品,必须先由国家安全局审核认证,方能被发放使用。)  这标志着,由美国国家安全局NSA批准在最高机密资讯上使用的加密系统首次可以被公开使用。许多大众化产品只使用128位元密钥当作默认值;由于最高机密文件的加密系统必须保证数十年以上的安全性,故推测NSA可能认为128位元太短,才以更长的密钥长度为最高机密的加密保留了安全空间。  通常破解一个区块加密系统最常见的方式,是先对其较弱版本(加密循环次数较少)尝试各种攻击。AES中128位元密钥版本有10个加密循环,192位元密钥版本有12个加密循环,256位元密钥版本则有14个加密循环。至2006年为止,最著名的攻击是针对AES 7次加密循环的128位元密钥版本,8次加密循环的192位元密钥版本,和9次加密循环的256位元密钥版本所作的攻击。  由于已遭破解的弱版的AES,其加密循环数和原本的加密循环数相差无几,有些密码学家开始担心AES的安全性:要是有人能将该著名的攻击加以改进,这个区块加密系统就会被破解。在密码学的意义上,只要存在一个方法,比穷举法还要更有效率,就能被视为一种「破解」。故一个针对AES 128位元密钥的攻击若「只」需要2计算复杂度(少于穷举法 2),128位元密钥的AES就算被破解了;即便该方法在目前还不实用。从应用的角度来看,这种程度的破解依然太不切实际。最著名的暴力攻击法是distributed.net针对64位元密钥RC5所作的攻击。  其他的争议则着重于AES的数学结构。不像其他区块加密系统,AES具有相当井然有序的代数结构。虽然相关的代数攻击尚未出现,但有许多学者认为,把安全性建立于未经透彻研究过的结构上是有风险的。Ferguson,Schroeppel和Whiting因此写道:「...我们很担心Rijndael [AES]算法应用在机密系统上的安全性。」  2002年,Nicolas Courtois和Josef Pieprzyk发表名为XSL攻击的理论性攻击,试图展示AES一个潜在的弱点。但该攻击的数学分析有点问题,推测应是作者的计算有误。因此,这种攻击法是否对AES奏效,仍是未解之谜。就现阶段而言,XSL攻击AES的效果不十分显著,故将之应用于实际情况的可能性并不高。
title: 旁道攻击.
content: 旁道攻击,又称旁路攻击、侧信道攻击,是一种基于从密码系统的物理实现中获取的信息的攻击方式。它不攻击加密算法本身,而是攻击那些基于不安全系统(会在不经意间泄漏资讯)上的加密系统。  2005年4月,D.J. Bernstein公布了一种缓存时序攻击法,他以此破解了一个装载OpenSSL AES加密系统的客户服务器。为了设计使该服务器公布所有的时序资讯,攻击算法使用了2亿多条筛选过的明码。对于需要多个跳跃的国际互联网而言,这样的攻击方法并不实用。Bruce Schneier称此攻击为「好的时序攻击法」。  2005年10月,Eran Tromer和另外两个研究员发表了一篇论文,展示了数种针对AES的缓存时序攻击法。

Summary: 进阶加密标准(英语:Advanced Encryption Standard,缩写:英语:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,进阶加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。现在,进阶加密标准已然成为对称密钥加密中最流行的算法之一。