aes解密流程图_AES对称密码算法介绍(1)——AES的内部结构

AES密码是目前使用最广泛的对称密钥算法。作为AES密码算法的第一讲,我们将从AES的内部结构开始讲解。本篇将涵盖足够读者自己编写等效程序的全部细节,但不包含数学证明、安全性证明、抵抗各种攻击之类的内容。本文中一些部分可能需要一定的数学背景知识,如果您在阅读本文过程中对其感到困难,可以参考本系列的第零讲——必需数学知识简介,强烈建议先看,即使我知道看数学这种东西非常让人头疼,不然可能看不懂本文。请...
摘要由CSDN通过智能技术生成

AES密码是目前使用最广泛的对称密钥算法。

作为AES密码算法的第一讲,我们将从AES的内部结构开始讲解。本篇将涵盖足够读者自己编写等效程序的全部细节,但不包含数学证明、安全性证明、抵抗各种攻击之类的内容。

本文中一些部分可能需要一定的数学背景知识,如果您在阅读本文过程中对其感到困难,可以参考本系列的第零讲——必需数学知识简介,强烈建议先看,即使我知道看数学这种东西非常让人头疼,不然可能看不懂本文。

请注意:在密码学实践中,我们并不建议用户自己设计密码学算法或自己编写程序实现(已经被更专业的团体更完善的实现过了的)密码学算法——因为你自己并不能保证避免各种纰漏或错误,这可能会引起非常严重的安全问题——除非你有非常专业的团队来严格审计你的算法或代码。

但是,如果一个学习者能够自己编写程序实现算法的核心功能,那么这对他/她的算法学习会有很大的帮助。因此,如果您按照本文自己编写了AES的等效程序:请勿在生产环境,或其他对信息安全性有要求的场景中使用!

在未注明“本代码未经过安全性审计”或类似警示内容的前提下,请勿上传至开源网站或以其他方式公开。

请遵守您所在地区的各项法律法规,禁止用于非法用途。

AES处理数据的方式是一长段数据,分为多个长度为16字节(128 bits)的组(也叫块,英文中多用block一词),然后依次处理每一个块。因此AES不是流密码(stream cipher),而是分组密码(block cipher)。

(当今的AES,是AES竞赛优胜者Rijndael的精简版,相比于原版的Rijndael,其block size即块大小被限定为了128 bits,而192 bits和256 bits块大小不再被支持)

AES通过密钥来加密、解密信息,并且加密和解密过程使用的密钥完全相同,加密过程和解密过程具有一定的对称性,因此AES属于密码学中的对称密钥算法(symmetric-key algorithm)。AES支持三种密钥大小(key size):128 bits、192 bits和256 bits。一般认为其加密强度随密钥长度的增大而增大。图1 AES的输入与输出:AES分组处理一长段数据(图中只画出了第一块)

AES的内部结构由多个层(Layer)构成,每一层都是对整个处理块16字节的操作,并且循环多轮进行处理。如下图所示,加密过程中,AES使用了四种不同类型的层:密钥加法层(Key Addition Layer)、字节代换层(Byte Substitution Layer)、ShiftRows层(行位移)和MixColumn层(列混合)。

(后面这两个通常不翻译,使用原文,所以我把中文写到了括号里。合称:扩散层,Diffusion Layer)

而在解密过程中,使用的是密钥加法层(Key Addition Layer)、逆向字节代换层(Inverse Byte Substitution Layer)、逆向ShiftRows层和逆向MixColumn层。密钥加法层不需要使用逆向的是因为其本质是按位异或运算(XOR)——“加”一次,再“加”一次即可复原。图2 AES流程框图,左侧为加密(从上往下),右侧为解密(从下往上),中间为密钥编排(从上往下)

AES的内部并不直接使用提供的密钥

equation?tex=k ,而是通过密钥编排(Key Schedule)来产生子密钥(subkeys)

equation?tex=k_0%2Ck_1%2Ck_2%2C...%2Ck_r ,子密钥的数量比操作轮数

equation?tex=r 多1。操作轮数

equation?tex=r 仅由密钥

equation?tex=k 的长度(即key size)决定:

ifkey_size==128{r=10;}elseifkey_size==192{r=12;}elseifkey_size==256{r=14;}

对于加密过程而言:字节代换层、ShiftRows层、MixColumn层和密钥加法层依次组成了一轮操作。但是请注意:在第一轮开始前,还要先进行依次密钥加法操作。而且在最后一轮中,不做MixColumn操作。这两个特殊的地方,在解密过程中也需要特别留意。

从图中可见,加密解密过程确实具有非常强的对称性——解密过程就是加密的逆过程。一般而言,解密过程操作轮的划分与加密过程保持相同,但顺序是密钥加法层、逆向MixColumn层、逆向ShiftRows层和逆向字节代换层。所以通常说解密先经历了缺少MixColumn操作的最后一轮,然后依次经历倒数第二轮、倒数第三轮……直至正数第一轮,最后还要进行一次密钥加法操作。(但是在一些实践中,为了方便会有不同的划分方式,这并不影响结果,因为只是一个概念上的划分)

接下来我们把操作中具体的一轮单独拿出来看看细节。图3 加密过程中的一个完整的操作轮

字节代换层

首先128 bits的数据对应16个字节,即图中的

equation?tex=A_0%2CA_1%2CA_2%2C...%2CA_%7B15%7D ,每一个字节都首先经过字节代换层,产生

equation?tex=B_0%2CB_1%2CB_2%2C...%2CB_%7B15%7D 。字节代换层又被称为S盒(S-Box)。S盒将每一个元素都使用具有特殊数学属性的查找表进行非线性变换。这种变换向数据中引入了混淆。S盒的数学描述如下图。图4 S盒(S-Box)的数学描述

一个字节正好对应了伽罗瓦域

equation?tex=GF%282%5E8%29 中的一个元素。在

equation?tex=GF%282%5E8%29 上求元素

equation?tex=A_i 的乘法逆元,得到

equation?tex=M_i 。(因为

equation?tex=0

equation?tex=GF%282%5E8%29 上没有乘法逆元,这里我们补充定义

equation?tex=0 的乘法逆元还是

equation?tex=0 )

然后对

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值