族谱网 头条 人物百科

高级加密标准

2017-10-16
出处:族谱网
作者:阿族小谱
浏览:730
转发:0
评论:0
沿革Rijndael是由Daemen和Rijmen早期所设计的Square改良而来;而Square则是由SHARK发展而来。不同于它的前任标准DES,Rijndael使用的是代换-置换网络,而非Feistel架构。AES在软件及硬件上都能快速地加解密,相对来说较易于实现,且只需要很少的存储器。作为一个新的加密标准,目前正被部署应用到更广大的范围。密码说明严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中两者可以互换),因为Rijndael加密法可以支持更大范围的区块(英语:blocksize(cryptography))和密钥长度:AES的区块长度固定为128比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度均可以是128,192或256比特。加密过程中使用的密钥是由Rijndael密钥生成方案产生。大多数AES计算是在一个特别的有...

沿革

Rijndael是由Daemen和Rijmen早期所设计的Square改良而来;而Square则是由SHARK发展而来。

不同于它的前任标准DES,Rijndael使用的是代换-置换网络,而非Feistel架构。AES在软件及硬件上都能快速地加解密,相对来说较易于实现,且只需要很少的存储器。作为一个新的加密标准,目前正被部署应用到更广大的范围。

密码说明

严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中两者可以互换),因为Rijndael加密法可以支持更大范围的 区块 ( 英语 : block size (cryptography) ) 和密钥长度:AES的区块长度固定为128比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度均可以是128,192或256比特。加密过程中使用的密钥是由Rijndael密钥生成方案产生。

大多数AES计算是在一个特别的有限域完成的。

AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。(Rijndael加密法因支持更大的区块,其矩阵行数可视情况增加)加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:

MixColumns —为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每内联的四个字节。

SubBytes —通过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。

ShiftRows —将矩阵中的每个横列进行循环式移位。

AddRoundKey —矩阵中的每一个字节都与该次回合密钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。

在第一轮前,whitening AK 操作被执行;最后一个加密循环中省略 MixColumns 步骤,而以另一个 AddRoundKey 替换。

AddRoundKey 步骤

高级加密标准

  在 AddRoundKey 步骤中,将每个状态中的字节与该回合密钥做异或(⊕)。

AddRoundKey 步骤,回合密钥将会与原矩阵合并。在每次的加密循环中,都会由主密钥产生一把回合密钥(通过Rijndael密钥生成方案产生),这把密钥大小会跟原矩阵一样,以与原矩阵中每个对应的字节作异或(⊕)加法。

SubBytes 步骤

高级加密标准

  在 SubBytes 步骤中,矩阵中各字节被固定的8位查找表中对应的特定字节所替换, S ; b ij = S(a ij ) .

在 SubBytes 步骤中,矩阵中的各字节通过一个8位的S-box进行转换。这个步骤提供了加密法非线性的变换能力。S-box与 GF ( 2 )上的乘法反元素有关,已知具有良好的非线性特性。为了避免简单代数性质的攻击,S-box结合了乘法反元素及一个可逆的仿射变换矩阵建构而成。此外在建构S-box时,刻意避开了 固定点 ( 英语 : fixed point ) 与 反固定点 ( 英语 : opposite fixed point ) ,即以S-box替换字节的结果会相当于错排的结果。此条目有针对S-box的详细描述: Rijndael S-box ( 英语 : Rijndael S-box )

ShiftRows 步骤

高级加密标准

  在 ShiftRows 步骤中,矩阵中每一行的各个字节循环向左方位移。位移量则随着行数递增而递增。

ShiftRows 描述矩阵的行操作。在此步骤中,每一行都向左循环位移某个 偏移量 ( 英语 : Offset (computer) ) 。在AES中(区块大小128位),第一行维持不变,第二行里的每个字节都向左循环移动一格。同理,第三行及第四行向左循环位移的偏移量就分别是2和3。128位和192比特的区块在此步骤的循环位移的模式相同。经过 ShiftRows 之后,矩阵中每一竖列,都是由输入矩阵中的每个不同列中的元素组成。Rijndael算法的版本中,偏移量和AES有少许不同;对于长度256比特的区块,第一行仍然维持不变,第二行、第三行、第四行的偏移量分别是1字节、3字节、4位组。除此之外, ShiftRows 操作步骤在Rijndael和AES中完全相同。

MixColumns 步骤

高级加密标准

  在 MixColumns 步骤中,每个直行都在modulo x 4 + 1 {\displaystyle x^{4}+1} 之下,和一个固定多项式c(x)作乘法。

在 MixColumns 步骤,每一列的四个字节通过线性变换互相结合。每一列的四个元素分别当作 1 , x , x 2 , x 3 {\displaystyle 1,x,x^{2},x^{3}} 的系数,合并即为 GF ( 2 )中的一个多项式,接着将此多项式和一个固定的多项式 c ( x ) = 3 x 3 + x 2 + x + 2 {\displaystyle c(x)=3x^{3}+x^{2}+x+2} 在modulo x 4 + 1 {\displaystyle x^{4}+1} 下相乘。此步骤亦可视为 Rijndael有限域 ( 英语 : Finite field arithmetic ) 之下的矩阵乘法。 MixColumns 函数接受4个字节的输入,输出4个字节,每一个输入的字节都会对输出的四个字节造成影响。因此 ShiftRows 和 MixColumns 两步骤为这个密码系统提供了 扩散性 ( 英语 : diffusion(cryptograohy) ) 。

以下条目有对 MixColumns 更加详细的描述: Rijndael mix columns ( 英语 : Rijndael mix columns )

加密算法优化

使用32或更多比特定址的系统,可以事先对所有可能的输入创建对应表,利用查表来实现 SubBytes , ShiftRows 和 MixColumns 步骤以达到加速的效果。这么作需要产生4个表,每个表都有256个格子,一个格子记载32位的输出;约占去4KB(4096字节)存储器空间,即每个表占去1KB的存储器空间。如此一来,在每个加密循环中,只需要查16次表,作12次32位的XOR运算,以及 AddRoundKey 步骤中4次32位XOR运算。

若使用的平台存储器空间不足4KB,也可以利用循环交换的方式一次查一个256格32位的表。

安全性

截至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 ( 英语 : distributed.net ) 针对64位密钥RC5所作的攻击。(该攻击在2002年完成。根据摩尔定律,到2005年12月,同样的攻击应该可以破解66比特密钥的 RC5 ( 英语 : RC5 ) 。)

其他的争议则着重于AES的数学结构。不像其他区块加密系统,AES具有相当井然有序的代数结构。 虽然相关的代数攻击尚未出现,但有许多学者认为,把安全性创建于未经透彻研究过的结构上是有风险的。Ferguson,Schroeppel和Whiting因此写道:“...我们很担心Rijndael [AES]算法应用在机密系统上的安全性。”

2002年, Nicolas Courtois ( 英语 : Nicolas Courtois ) 和 Josef Pieprzyk ( 英语 : Josef Pieprzyk ) 发表名为 XSL攻击 ( 英语 : XSL attack ) 的理论性攻击,试图展示AES一个潜在的弱点。但 几位密码学专家 发现该攻击的数学分析有点问题,推测应是作者的计算有误。因此,这种攻击法是否对AES奏效,仍是未解之谜。就现阶段而言,XSL攻击AES的效果不十分显著,故将之应用于实际情况的可能性并不高。

旁道攻击(又称旁路攻击、侧信道攻击)

旁道攻击不攻击密码本身,而是攻击那些基于不安全系统(会在不经意间泄漏信息)上的加密系统。

2005年4月, D.J. Bernstein ( 英语 : D.J. Bernstein ) 公布了一种缓存时序攻击法,他以此破解了一个装载OpenSSLAES加密系统的客户服务器 。为了设计使该服务器公布所有的时序信息,攻击算法使用了2亿多条筛选过的明码。对于需要多个跳跃的国际互联网而言,这样的攻击方法并不实用 。 Bruce Schneier称此攻击为“好的时序攻击法” 。

2005年10月,Eran Tromer和另外两个研究员发表了一篇论文,展示了数种针对AES的缓存时序攻击法 。

参考文献

书目

Nicolas Courtois, Josef Pieprzyk, "Cryptanalysis of Block Ciphers with Overdefined Systems of Equations". pp267–287, ASIACRYPT 2002.

Joan Daemen, Steve Borg and Vincent Rijmen, "The Design of Rijndael: AES - The Advanced Encryption Standard." Springer-Verlag, 2002. ISBN 3-540-42580-2.

实现

参考代码

65+种AES硬件实施方案

A Javascript AES calculator showing intermediate values

Brian Gladman"s BSD licensed implementations of AES

Paulo Barreto公布的AES的C语言算法

D.J. Bernstein所写的开放版权AES实施代码

The GPL-licensed Nettle library also includes an AES implementation

Compact AES implementation in hardware by IP Cores

AES加密在Windows系统的实现 (自由公开源码)

LGPL授权的AES实现的C语言源代码

广泛的AES硬件实施方案,Helion Technology

FPGA Based AES Implementation using Nios-II Processor

参见

高级加密系统甄选流程 ( 英语 : Advanced Encryption Standard process )

 


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱

更多文章

更多精彩文章
评论 {{commentTotal}} 文明上网理性发言,请遵守《新闻评论服务协议》
游客
发表评论
  • {{item.userName}} 举报

    {{item.content}}

    {{item.time}} {{item.replyListShow ? '收起' : '展开'}}评论 {{curReplyId == item.id ? '取消回复' : '回复'}}

    回复评论
加载更多评论
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回
打赏
私信

推荐阅读

· 数据加密标准
DES的历史DES最初出现在1970年代早期。1972年,在一个对美国政府的计算机安全需求的研究得出结果后,NBS(国家标准局,现在的NIST)开始征集用于加密政府内非机密敏感信息的加密标准。因此1973年5月15日,在咨询了美国国家安全局(NSA)之后,NBS向公众征集可以满足严格设计标准的加密算法。然而,没有一个提案可以满足这些要求。因此在,1974年8月27日,NBS开始了第二次征集。这一次,IBM提交了一种在1973-1974年间发展的算法,这份提案被有限度的接受了。这种算法是基于早先霍斯特·费斯妥(HorstFiestel)提出的Lucifer算法的。费斯妥,沃尔特·塔克曼(WalterTuchman),道·科柏密斯(DonCoppersmith),艾伦·康海姆(AlanKonheim),卡尔·梅尔(CarlMeyer),迈克·马加什(MikeMatyas),罗伊·阿德勒(Roy...
· 加密
历史虽然加密作为通信保密的手段已经存在了几个世纪,但是只有那些对安全要求特别高的组织和个人才会使用它。在1970年代中期,“强加密”(StrongEncryption)的使用开始从政府保密机构延伸至公共领域,并且目前已经成为保护许多广泛使用系统的方法,比如因特网电子商务、手机网络和银行自动取款机等。应用加密可以用于保证安全性,但是其它一些技术在保障通信安全方面仍然是必须的,尤其是关于数据完整性和信息验证。例如,信息验证码(MAC)或者数字签名。另一方面的考虑是为了应付流量分析。相关软件加密或软件编码隐匿(CodeObfuscation)同时也在软件版权保护中,用于对付反向工程,未授权的程序分析,破解和软件盗版及数字内容的数字版权管理(DRM)等。加密算法加密算法就是加密的方法。加密算法可以分为两类:对称加密和非对称加密在密码学中,加密是将明文信息隐匿起来,使之在缺少特殊信息时不可读。对称加...
· 流加密
概述伪随机密钥流(keystream)由一个随机的种子(seed)通过算法(称为:PRG,pseudo-randomgenerator)得到,k作为种子,则G(k)作为实际使用的密钥进行加密解密工作。为了保证流加密的安全性,PRG必须是不可预测的。弱算法包括glibcrandom()函数,线性同余生成器(linearcongruentialgenerator)等。线性同余生成器线性同余生成器中,令r[0]为seed,r[i]=(a*r[i-1]+b)modp,其中a,b,p均为常数,则可轻易顺次推出整个密钥流,从而进行解密。一次性密码本流加密攻击多次使用同一密码本一种严重的错误即反复使用同一密码本对不同明文进行加密。攻击者可利用这种方式对密文进行解密。用m表示明文,c表示密文,k表示种子,PRG表示密钥流生成算法,则:C1=m1xorPRG(k)C2=m2xorPRG(k)攻击者监听到此段...
· 对等加密
参见密码学经典密码ROT13阿特巴希密码哑谜机异或密码博福特密码瓦茨亚亚那加密参考文献
· 加密货币
参考资料

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信