2021SC@SDUSC
这周主要是对AES算法进行理论上的了解与分析。
一、AES简介
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法。对称加密算法也就是加密和解密使用相同的密钥。
首先介绍密码学的一些术语概念:
明文:没有经过加密的数据。
密钥:用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在 络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过 络传输给对方,或者直接面对面商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取机密数据。
密文:经加密函数处理后的数据
AES加密函数
设AES加密函数为E,则 C = E(K, P),其中P为明文,K为密钥,C为密文。也就是说,把明文P和密钥K作为加密函数的参数输入,则加密函数E会输出密文C。
AES解密函数
设AES解密函数为D,则 P = D(K, C),其中C为密文,K为密钥,P为明文。也就是说,把密文C和密钥K作为解密函数的参数输入,则解密函数会输出明文P。
简单来说只要知道算法和密钥就能进行明密文转换。
二、AES加密算法分析
2.1 简要概括
AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。根据密钥的长度不同,推荐加密轮数也不同,这里主要分析的是AES-128,也就是密钥的长度为128位,加密轮数为10轮。
上面说到,AES的加密公式为C = E(K,P),在加密函数E中,会执行一个轮函数,并且执行10次这个轮函数,这个轮函数的前9次执行的操作是一样的,只有第10次有所不同。也就是说,一个明文分组会被加密10轮。AES的核心就是实现一轮中的所有操作。下图是AES执行的全部流程,下面会继续简要分析。
2.2 具体分析
2.2.1 密钥(128位)扩充
128位密钥用字节为单位的矩阵表示,矩阵的每一列被称为1个32位比特字。通过密钥编排函数该密钥矩阵被扩展成一个44个字组成的序列W[0],W[1], … ,W[43],该序列的前4个元素W[0],W[1],W[2],W[3]是原始密钥,后面40个字分为10组,每组4个字(128比特)分别用于10轮加密运算中的轮密钥加。
简而言之,需要将密钥扩充,得到40个新列,分组得到10个轮密钥。
当W[I]中的i为4的倍数时,取经过T函数变换的w[i-1]和w[i-4]进行异或操作得到新的w[i]
当i不是4的倍数时,只需将w[i-1]和w[i-4]进行异或得到新的w[i]
重复上述操作就能得到新扩展的40列,也就是10组轮密钥
2.2.2 字节代换
S盒将明文中的分组进行逐一替换,如图中a1经过S盒变为b1
具体如下:假设如下图明文中第一个字节“19”,对比S盒,找到第“1”行,第“9”列对应的进行替换即可。
替换全部明文后,就完成了字节代换,如下图:
2.2.3 行位移
简而言之就是简单的左位移,第n行就左位移n个字节,最终结果如下图:
第0行无需位移:d4 e0 b8 1e
第1行左位移1位:bf b4 41 27 其中27因为左移顺移到最右边
接下来的两行以此类推
2.2.4 列混合
简而言之就是矩阵相乘,将每一列乘以固定矩阵得到新列放置对应位置即可。
简单回顾矩阵乘法:
1×7+2×9+3×11=58
因此列混合后的最终结果如下图:
行位移与列混合为该密码系统提供了扩展性。
2.2.5 轮密钥加
将2.2.1得到的轮密钥与经过字节代换、行位移和列混合得到的明文分组矩阵进行逐列异或操作,并将得到的结果进行对应位置的替换。
因为是第一轮子循环,这里的round key是2.2.1密钥扩展图中得到的round key 1
此时第一轮子循环已经完成,接着继续重复循环即可。
从上图中可以发现最后一轮子循环没有“列混合” ,最终10轮结束得到密文。以上就是AES-128加密算法的具体分析。
参考博客:AES加密算法的详细介绍与实现_TimeShatter的博客-CSDN博客_aes加密
参考视频:5分钟搞定AES算法_哔哩哔哩_bilibili
文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览33845 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!