应用密码学-2016-(第9讲)的AES基础
- 格式:pptx
- 大小:285.32 KB
- 文档页数:20
AES算法详解AES算法简介 AES的全称是Advanced Encryption Standard,意思是⾼级加密标准。
AES密码分组⼤⼩和密钥⼤⼩可以为128位、192位和256位。
然⽽AES只要求分组⼤⼩为128位。
本⽂只对分组⼤⼩128位,密钥长度也为128位的Rijndael算法进⾏分析。
密钥长度为192位和256位的处理⽅式和128位的处理⽅式类似,只不过密钥长度每增加64位,算法的循环次数就增加2轮,128位循环10轮、192位循环12轮、256位循环14轮。
AES算法使⽤逻辑就是:发送⽅将要发送的明⽂数据X使⽤秘钥K进⾏AES加密后会得到密⽂Y,将密⽂进⾏⽹络传输,接受⽅在收到密⽂Y后使⽤秘钥K进⾏AES解密后技能得到明⽂X,这样即使密⽂Y在⽹络上传输时被截获了,没有秘钥也难以破解其真实意思。
AES算法相关数学知识 在AES算法中的MixColumn层中会⽤到伽罗⽡域中的乘法运算,⽽伽罗⽡域的运算涉及⼀些数学知识如下:素域: 有限域有时也称伽罗⽡域,它指的是由有限个元素组成的集合,在这个集合内可以执⾏加、减、乘和逆运算。
⽽在密码编码学中,我们只研究拥有有限个元素的域,也就是有限域。
域中包含元素的个数称为域的阶。
只有当m是⼀个素数幂时,即m=p n(其中n为正整数是p的次数,p为素数),阶为m的域才存在。
p称为这个有限域的特征。
也就是说,有限域中元素的个数可以是11(p=11是⼀个素数,n=1)、可以是81(p=3是⼀个素数,n=4)、也可以是256(p=2是⼀个素数,n=8).....但有限域的中不可能拥有12个元素,因为12=2·2·3,因此12也不是⼀个素数幂。
有限域中最直观的例⼦就是阶为素数的域,即n=1的域。
的元素可以⽤整数0、1、...、p-1l来表⽰。
域的两种操作就是模整数加法和整数乘法模p。
加上p是⼀个素数,整数环Z表⽰为GF(p),也成为拥有素数个元素的素数域或者伽罗⽡域。
AES算法的数学理论基础分析AES(高级加密标准)算法是一种对称加密算法,它是目前最广泛使用的加密算法之一、它基于复杂的数学运算和理论,确保了在合理的时间内无法破解加密的数据。
以下是对AES算法的数学理论基础进行的分析。
1. 替代(Substitution): AES算法的第一步是通过S盒进行字节替代。
S盒是一个固定的字节替换表,由非线性变换构成。
通过将输入字节映射到S盒中的对应字节,混淆了输入数据的字节分布。
这种替代运算是通过复杂的代数方程实现的,并经过深入的数学分析和推导,确保了S 盒的性质具有良好的扩散和混淆性。
2. 置换(Permutation): 在替代步骤之后,AES还进行了行和列的置换。
行置换通过以特定的位移移动每一行中的字节,对输入数据进行重新排列。
列置换则涉及将每一列的字节与固定矩阵进行线性变换。
这些行和列置换操作旨在增加密码算法的扩散性和复杂性,通过混淆和扩散确保了密钥和明文之间的高度关联性。
3. 扩展(Expansion): AES算法使用了密钥扩展机制,根据输入密钥生成多个轮密钥,用于每一轮的轮函数。
轮密钥的生成涉及线性变换和非线性变换,通过使用密钥扩展算法生成的轮密钥能够尽可能地隐藏原始密钥的信息,并为每一轮提供不同的子密钥。
4. 混合(MixColumns): AES算法的一部分是MixColumns操作,它是一个字节级别的线性变换。
通过与固定多项式的有限域乘法进行混合,MixColumns操作改变了每个列的字节,并增加了密码算法的复杂性和扩散效果。
5. 轮函数(Round Function): AES算法的核心是轮函数,它应用于每一轮的加密和解密过程中。
轮函数包含了替代、置换、混合和轮密钥添加的组合操作。
通过反复使用轮函数,AES算法对数据进行多次迭代,从而增加了加密的复杂性和安全性。
以上是对AES算法的数学理论基础进行的分析。
AES算法通过结合替代、置换、扩展、混合和轮函数等操作,确保加密数据的安全性和隐私性。
AES算法的数学理论基础分析AES (Advanced Encryption Standard)是一种对称加密算法,它基于数学理论和算法设计来保证数据安全性。
下面将详细分析AES算法的数学理论基础。
1. 替代置换:AES使用了替代置换(S-Box)和逆替代置换(S-Box)。
这是通过有限域上的矩阵运算实现的。
有限域是一个特殊的数学结构,它定义了一组有限元素的运算规则。
在AES中,有限域GF(2^8)被用于字节代换(S-Box)和逆字节代换(S-Box)。
这些置换操作是AES算法中不可或缺的数学基础。
2.混淆操作:AES使用了混淆操作来提高数据的扩散性。
混淆操作包括行移位操作和列混淆操作。
行移位操作将每个字节进行循环位移,列混淆操作使用矩阵乘法来对每一列进行混淆。
这些操作通过使数据在变换后更加随机地分布在整个加密数据块中,增强了AES算法的安全性。
3.密钥扩展:AES使用密钥扩展算法来生成轮密钥。
密钥扩展算法使用有限域上的矩阵运算和置换操作来根据初始密钥生成一系列轮密钥。
这些轮密钥用于对加密数据块进行轮数次的加密和解密操作。
密钥扩展算法的设计基于置换运算和有限域上的数学原理。
4. 线性和非线性运算:AES算法中的运算涉及到线性和非线性操作。
线性运算包括矩阵乘法和位运算等,这些运算是在有限域上定义的。
非线性运算包括字节代换(S-Box)和逆字节代换(S-Box),这些运算通过表格查找实现非线性变换。
通过结合线性和非线性运算,AES实现了强大的加密变换。
5.约束条件和安全性证明:AES算法的设计考虑了多个约束条件和安全性要求。
AES的安全性要求包括对不同类型的攻击(如差分攻击、线性攻击、相关攻击等)的抵抗能力。
AES算法的设计者通过数学证明和分析,证明了算法在满足这些要求时的安全性。
这些证明基于密码学的数学理论和概率论等相关领域的理论。
综上所述,AES算法的数学理论基础包括有限域理论、矩阵运算、置换操作、线性和非线性运算等。
淮海工学院计算机工程学院实验报告书课程名:《网络安全技术》题目:常见的密码算法(DES、AES、RSA、MD5)班级:学号姓名:【实验目的】●理解对称加密算法的原理和特点●了解非对称加密机制●理解DES、AES算法的加密原理●理解RSA算法的加密原理【实验人数】每组1人【系统环境】Windows【网络环境】交换网络结构【实验工具】VC++6.0密码工具【实验步骤】一、DES算法1.DES加密解密(1)本机进入“密码工具”|“加密解密”|“DES加密算法”|“加密/解密”页签,在明文输入区输入明文:hello,world(2)在密钥窗口输入8(64位)个字符的密钥k,密钥k= 19940725 。
单击“加密”按钮,将密文导出到DES文件夹(D:\Work\Encryption\DES\)中,通告同组主机获取密文,并将密钥k告诉同组主机。
(3)单击“导入”按钮,从同组主机的的DES共享文件夹中将密文导入,然后在密钥窗口输入被同组主机通告的密钥k,点击“解密”按钮进行DES解密。
(4)将破解后的明文与同组主机记录的明文比较。
2.DES算法本机进入“密码工具”|“加密解密”|“DES加密算法”|“演示”页签,向64位明文中输入8个字符(8*8bit=64),向64位密钥中输入8个字符(8*8bit=64)。
点击“加密”按钮。
完成加密操作,分别点击“初始置换”、“密钥生成演示”、“十六轮加密变换”和“终结置换”按钮,查看初始置换、密钥生成演示、十六轮加密变换和终结置换的详细加密操作流程。
二、AES1.AES加密解密(1)本机进入“密码工具”|“加密解密”|“AES加密算法”|“加密/解密”页签,在明文输入区输入明文:hello,world(2)在密钥窗口输入16(128位)个字符的密钥k,要记住这个密钥以用于解密,密钥k=lijinyi123456789。
单击“加密”按钮,将密文导出到AES文件夹(D:\Work\Encryption\AES\)中,通告同组主机获取密文,并将密钥k告诉同组主机。
AES基本原理AES(Advanced Encryption Standard)是一种对称加密算法,用于保护敏感数据的机密性。
它是目前最常用的加密算法之一,被广泛应用于各种领域,包括网络通信、金融交易和数据存储等。
1. 对称加密算法简介对称加密算法是一种使用相同的密钥进行加密和解密的算法。
在加密过程中,明文通过一个数学函数(即加密算法)和一个秘钥进行变换,生成密文。
而在解密过程中,通过相同的数学函数和相同的秘钥对密文进行变换,得到原始明文。
对称加密算法具有高效性能和较低的计算成本,因此被广泛应用。
然而,由于加解密使用相同的秘钥,秘钥管理成为一个重要问题。
2. AES历史背景在1997年之前,美国政府一直采用DES(Data Encryption Standard)作为标准对称加密算法。
然而,在计算能力不断提升的情况下,DES逐渐暴露出安全性不足的问题。
为了替代DES,并提供更高级别的安全性能,美国国家标准技术研究所(NIST)在1997年发起了一个公开的竞赛,邀请全球加密专家参与设计新的加密算法。
由比利时密码学家Joan Daemen和Vincent Rijmen设计的Rijndael算法被选为AES。
2001年,AES正式成为美国政府采用的标准对称加密算法,并逐渐在全球范围内得到广泛应用。
3. AES基本原理AES是一种分组密码(block cipher),它将明文和密钥都划分为固定长度的块,并通过多轮迭代来实现加密和解密过程。
AES算法支持128位、192位和256位三种不同长度的秘钥。
3.1 初始轮AES算法开始时会对输入的明文进行一次初始处理。
将明文划分为若干个固定长度(128位)的块。
将每个块与一个固定长度(128位)的秘钥进行异或运算。
3.2 轮函数在每一轮中,AES算法使用一个称为”轮函数”(round function)的操作来处理上一轮输出或初始输入。
该操作包括四个步骤:字节代换、行移位、列混淆和轮秘钥加。
AES算法⾼级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信⼩程序加密传输就是⽤这个加密算法的)。
对称加密算法也就是加密和解密⽤相同的密钥,具体的加密流程如下图:明⽂P密钥KAES加密函数设AES加密函数为E,则 C = E(K, P),其中P为明⽂,K为密钥,C为密⽂。
也就是说,把明⽂P和密钥K作为加密函数的参数输⼊,则加密函数E会输出密⽂C。
密⽂CAES的基本结构AES为分组密码,分组密码也就是把明⽂分成⼀组⼀组的,每组长度相等,每次加密⼀组数据,直到加密完整个明⽂。
在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。
密钥的长度可以使⽤128位、192位或256位。
密钥的长度不同,推荐加密轮数也不同,如下表所⽰:轮数在下⾯介绍,这⾥实现的是AES-128,也就是密钥的长度为128位,加密轮数为10轮。
上⾯说到,AES的加密公式为C = E(K,P),在加密函数E中,会执⾏⼀个轮函数,并且执⾏10次这个轮函数,这个轮函数的前9次执⾏的操作是⼀样的,只有第10次有所不同。
也就是说,⼀个明⽂分组会被加密10轮。
AES的核⼼就是实现⼀轮中的所有操作。
AES的处理单位是字节,128位的输⼊明⽂分组P和输⼊密钥K都被分成16个字节,分别记为P = P0 P1 … P15 和 K = K0 K1 … K15。
如,明⽂分组为P = abcdefghijklmnop,其中的字符a对应P0,p对应P15。
⼀般地,明⽂分组⽤字节为单位的正⽅形矩阵描述,称为状态矩阵。
在算法的每⼀轮中,状态矩阵的内容不断发⽣变化,最后的结果作为密⽂输出。
该矩阵中字节的排列顺序为从上到下、从左⾄右依次排列,如下图所⽰:现在假设明⽂分组P为"abcdefghijklmnop",则对应上⾯⽣成的状态矩阵图如下:类似地,128位密钥也是⽤字节为单位的矩阵表⽰,矩阵的每⼀列被称为1个32位⽐特字。
aes数学基础AES (Advanced Encryption Standard) 是一种常用的对称加密算法,广泛应用于保护计算机系统和网络通信的安全性。
要理解 AES 的数学基础,我们首先需要了解一些基本的数学概念和算法。
在 AES 中,主要使用了数论和线性代数的基本原理。
其中,有两个重要的数论概念是质数和有限域。
质数是只能被 1 和自身整除的整数。
在 AES 中,使用了有限域上的运算,而这个有限域的大小正好是一个质数。
有限域上的加法和乘法运算与我们熟悉的实数加法和乘法有些不同,但具有类似的性质。
有限域上的加法运算是模质数的加法,即对两个元素进行相加后再进行模质数的操作。
例如,在 8 个元素的有限域上进行加法运算时,如果结果超过了 8,就需要对结果进行模 8 的运算。
这种运算方式被称为“模加”。
有限域上的乘法运算是模质数的乘法,类似于加法运算。
不同之处在于,当结果超过了有限域的大小时,需要进行一系列的模运算和异或运算来保证结果仍在有限域内。
这种运算方式被称为“模乘”。
在 AES 中,还使用了一种特殊的代换盒(S-Box)来增加密码算法的安全性。
代换盒是一种非线性函数,它将一个字节映射为另一个字节。
这个映射关系是由一个有限域上的多项式来定义的。
具体来说,每个字节都被看作是有限域上的一个元素,通过代换盒中的多项式计算得到一个新的字节。
线性代数也在 AES 的数学基础中扮演了重要的角色。
AES 使用了矩阵运算来进行加密和解密操作。
具体来说,在加密过程中,明文被分块处理,每个块被表示为一个矩阵。
然后,通过一系列的矩阵变换和轮函数来加密数据。
这些变换和函数使用了线性代数中的矩阵乘法、向量加法和异或运算等。
总之,AES 的数学基础涉及了数论、有限域运算和线性代数等数学概念和算法。
理解这些基础知识对于深入理解 AES 加密算法的工作原理和安全性至关重要。
AES基本原理简介AES(Advanced Encryption Standard,高级加密标准)是一种对称加密算法,也是目前使用最广泛的加密算法之一。
AES算法的基本原理是通过将明文分块进行多轮的替换和置换操作,从而得到密文。
AES算法具有高度的安全性和效率,适用于各种应用场景,如数据加密、网络传输、身份验证等。
基本原理AES算法的基本原理可以分为四个主要步骤:字节替换、行移位、列混淆和轮密钥加。
1. 字节替换(SubBytes)字节替换是AES算法的第一步,它通过一个固定的S盒(Substitution Box)将明文分块中的每个字节替换为另一个字节。
S盒是一个16x16的字节矩阵,其中每个字节都有一个预定义的替换值。
字节替换的目的是增加密文的随机性,使攻击者难以破解密文。
字节替换的过程可以用以下公式表示:C[i,j] = S[M[i,j]]其中,C[i,j]是替换后的字节,M[i,j]是明文分块中的字节,S是S盒。
2. 行移位(ShiftRows)行移位是AES算法的第二步,它将明文分块中的每一行进行循环左移操作。
行移位的目的是增加密文的复杂性,使攻击者难以找到明文和密文之间的关联性。
行移位的过程可以用以下公式表示:C[i,j] = M[i,(j+i) mod N]其中,C[i,j]是移位后的字节,M[i,j]是明文分块中的字节,N是明文分块的列数。
3. 列混淆(MixColumns)列混淆是AES算法的第三步,它通过一系列的矩阵运算对明文分块中的每一列进行混淆。
列混淆的目的是增加密文的扩散性,使攻击者难以通过分析密文来还原明文。
列混淆的过程可以用以下公式表示:C[i,j] = (02 * M[i,j]) ⊕ (03 * M[i+1,j]) ⊕ M[i+2,j] ⊕ M[i+3,j]其中,C[i,j]是混淆后的字节,M[i,j]是明文分块中的字节,⊕表示异或操作。
4. 轮密钥加(AddRoundKey)轮密钥加是AES算法的最后一步,它将一个与当前轮数相关的轮密钥与明文分块进行异或操作。
AES算法的数学理论基础分析一、AES算法随着计算机技术和通信技术的深入发展,解密技术的快速演进已经严重影响了DES 密码系统的安全性, 用户对信息的安全存储、安全处理和安全传输的需求越来越高。
Rijndael 算法以它在广泛的计算环境中硬件和软件实现都能表现出的良好性能、建立密钥时间短, 灵敏性高以及能够抵抗强力攻击和时间选择攻击被NIST 不加修改的作为AES 的唯一算法。
AES 是一种迭代分组加密算法。
二、AES的数学基础1.有限域GF(28):特征为2的具有28元素的有限域有限域中的元素表示方法:①二进制表示法(字节表示):字节B=b7b6b5b4b3b2b1b0=01010111②十六进制表示法:“57”③多项式表示法:b7x7b6x6b5x5b4x4b3x3b2x2b1x1b0x0 “57”表示为x6+x4+x2+x+12.字节运算:有限域GF(28)上的运算在多项式表示中,GF(28)上两个元素的和仍然是一个次数不超过7的多项式,其系数等于两个元素对应系数的模2加(比特异或)。
由于每个元素的加法逆元等于自己,所以减法和加法相同。
要计算GF(28)上的乘法,必须先确定一个GF(2) 上的8次不可约多项式;GF(28)上两个元素的乘积就是这两个多项式的模乘(以这个8次不可约多项式为模)。
在Rijndael密码中,这个8次不可约多项式确定为m(x)= x8+x4+x3+x+1十六进制表示为‘11B’。
3.AES的字表示与运算AES处理的单位是字节和字,字是4个字节构成的向量。
一个字表示为系数在GF(28)上的次数小于4的多项式。
字加法:两多项式系数按位模2 加;字乘法:设ac是两个字,a(x)和c(x)是其字多项式,乘积为a(x)c(x)mod(x4+1)三、AES算法实现1.加密算法过程实现以分组长度为128bit, 密钥长度为128bit 介绍AES 算法实现。
因Nb=4,Nk=4, 所以与之相应的Nr=10, 每一轮的循环过程中都有一个初始的循环密钥, 在每一轮中的输入位与输出位相同, 都为128 位。
对称加密算法之AES加密对称加密算法之AES加密简介前世今⽣AES全称Advanced Encryption Standard,也就是⾼级加密标准。
在DES的安全性被发现存在明显缺陷后,亟需有另⼀种算法来替代DES。
DES的56bit的密钥长度太⼩,虽然三重DES解决了密钥长度的问题,但是三重DES还是存在⼀些明显的缺陷。
1997年4⽉15⽇,NIST发起征集AES算法的活动,⽬的是确定⼀个⾮保密的,公开披露的,全球免费使⽤的加密算法,来保护隐私,也能够替代DES。
其基本要求就是:执⾏性能⽐三重DES快、⾄少和三重DES⼀样安全、数据分组长度为128bit、密钥长度为128/192/256bit。
由⽐利时的Joan Daemen和Vincent Rijmen所设计的“Rijndael数据加密算法”最终获胜。
经过时间的检验,⾄少到到⽬前为⽌,AES的安全性能是良好的。
经过这么多年的分析和测试,⾄今没有发现AES的明显缺点,也没有找到明显的安全漏洞。
如今,⽣活的很多领域也都⽤到了AES算法,如IPsec所使⽤的加密算法等。
⼀些特性AES加密算法的分组长度只能为128bit,但是其密钥长度是可以变动的,分别可以为128bit/196bit/256bit三种类型。
⽽根据不同的密钥长度,其加密轮数也会得到变化。
如表所⽰。
但⽬前⽐较⼴泛使⽤的是128bit长度的密钥。
AES密钥长度(32位⽐特字)分组长度(32位⽐特字)加密轮数AES-1284410AES-1926412AES-2568414在初始状态会将明⽂和密钥分组中的128位再分为16组,每组⼀个字节。
密钥虽然只有4个字(32bit,在任何条件都认为1字=4字节是不严谨的,会根据系统位数⽽产⽣差异,计算机进⾏数据处理时,⼀次存取、加⼯和传送的数据长度称为字),但是会根据此密钥产⽣额外40个字,分别⽤在⼗轮的加密过程中。
具体过程过程总览如上图所⽰,加密的第⼀轮到第九轮的函数是⼀样的,都经过过字节代换、⾏移位、列混合、轮密钥加的四个阶段,但有两个特殊点,第⼀点是在第⼀轮之前,先要进⾏⼀次轮密钥加,先将明⽂和原始密钥进⾏⼀次轮密钥加的操作;第⼆是在第⼗轮时,没有列混合这⼀步骤。
第一章 基本概念1. 密钥体制组成部分:明文空间,密文空间,密钥空间,加密算法,解密算法2、一个好密钥体制至少应满足的两个条件:(1)已知明文和加密密钥计算密文容易;在已知密文和解密密钥计算明文容易;(2)在不知解密密钥的情况下,不可能由密文c 推知明文3、密码分析者攻击密码体制的主要方法:(1)穷举攻击(解决方法:增大密钥量)(2)统计分析攻击(解决方法:使明文的统计特性与密文的统计特性不一样)(3)解密变换攻击(解决方法:选用足够复杂的加密算法)4、四种常见攻击(1)唯密文攻击:仅知道一些密文(2)已知明文攻击:知道一些密文和相应的明文(3)选择明文攻击:密码分析者可以选择一些明文并得到相应的密文(4)选择密文攻击:密码分析者可以选择一些密文,并得到相应的明文【注:✍以上攻击都建立在已知算法的基础之上;✍以上攻击器攻击强度依次增加;✍密码体制的安全性取决于选用的密钥的安全性】第二章 古典密码(一)单表古典密码1、定义:明文字母对应的密文字母在密文中保持不变2、基本加密运算设q 是一个正整数,}1),gcd(|{};1,...,2,1,0{*=∈=-=q k Z k Z q Z q q q(1)加法密码✍加密算法:κκ∈∈===k X m Z Z Y X q q ;,;对任意,密文为:q k m m E c k m od )()(+== ✍密钥量:q(2)乘法密码✍加密算法:κκ∈∈===k X m Z Z Y X q q ;,;*对任意,密文为:q km m E c k m od )(==✍解密算法:q c k c D m k mod )(1-==✍密钥量:)(q ϕ(3)仿射密码✍加密算法:κκ∈=∈∈∈===),(;},,|),{(;21*2121k k k X m Z k Z k k k Z Y X q q q 对任意;密文✍解密算法:q k c k c D m k mod )()(112-==- ✍密钥量:)(q q ϕ(4)置换密码✍加密算法:κσκ∈=∈==k X m Z Z Y X q q ;,;对任意上的全体置换的集合为,密文✍密钥量:!q ✍仿射密码是置换密码的特例3.几种典型的单表古典密码体制(1)Caeser 体制:密钥k=3(2)标准字头密码体制:4.单表古典密码的统计分析(1)26个英文字母出现的频率如下:频率 约为0.12 0.06到0.09之间 约为0.04 约0.015到0.028之间小于0.01 字母 e t,a,o,i.n,s,h,r d,l c,u,m,w,f,g,y,p,b v,k,j,x,q ,z【注:出现频率最高的双字母:th ;出现频率最高的三字母:the 】(二)多表古典密码1.定义:明文中不同位置的同一明文字母在密文中对应的密文字母不同2.基本加密运算(1)简单加法密码✍加密算法:κκ∈=∈====),...,(,),...,(,,11n n n n q n q n n k k k X m m m Z Z Y X 对任意设,密文:✍密钥量:n q(2)简单乘法密码✍密钥量:n q )(ϕ1.简单仿射密码✍密钥量:n n q q )(ϕ2.简单置换密码✍密钥量:n q )!((3)换位密码✍密钥量:!n(4)广义置换密码✍密钥量:)!(n q(5)广义仿射密码✍密钥量:n n r q3.几种典型的多表古典密码体制(1)Playfair 体制:✍密钥为一个5X5的矩阵✍加密步骤:a.在适当位置闯入一些特定字母,譬如q,使得明文字母串的长度为偶数,并且将明文字母串按两个字母一组进行分组,每组中的两个字母不同。
密码算法详解——AES0 AES简介我们知道数据加密标准(Data Encryption Standard: DES)的密钥长度是56比特,因此算法的理论安全强度是256。
但二十世纪中后期正是计算机飞速发展的阶段,元器件制造工艺的进步使得计算机的处理能力越来越强,DES将不能提供足够的安全性。
1997年1月2号,美国国家标准技术研究所(National Institute of Standards and Technology: NIST)宣布希望征集高级加密标准(Advanced Encryption Standard: AES)[3],用以取代DES。
AES得到了全世界很多密码工作者的响应,先后有很多人提交了自己设计的算法。
最终有5个候选算法进入最后一轮:Rijndael,Serpent,Twofish,RC6和MARS,下图分别为其中的5位作者。
最终经过安全性分析、软硬件性能评估等严格的步骤,Rijndael算法获胜。
Rijndael由比利时两位非常著名的密码学家Joan Daemen和Vincent Rijmen设计。
Rijndael是一个分组密码算法族,其分组长度包括128比特、160比特、192比特、224比特、256比特,密钥长度也包括这五种长度,但是最终AES只选取了分组长度为128比特,密钥长度为128比特、192比特和256比特的三个版本。
本文主要结合AES-128进行介绍,AES-196和AES-256的思路基本一样,只是密钥扩展算法的过程会稍有不同,加解密的轮数会适当增加,但加解密的操作都是一样的。
另外,本文只对AES算法的各个模块、基本原理进行介绍,旨在加深对算法流程、密码算法实现的了解。
在正式软件运用中并不推荐自己编写代码,很多开源项目如Linux,OPENSSL,SRTP等都有非常高效的实现。
由于数学知识的缺陷,本文不介绍算法安全性分析相关的知识,有兴趣的读者可以自行阅读相关文献。