AES编码实验
一、实验目的
掌握 AES 算法的原理及实现和加密过程。
二、实验目标
査看 AES 加密的源码,执行程序,进行 AES 加密和解密,分析安全性。
三、实验环境
l 操作系统:Centos 7
l 其它:python 3
四、实验原理
1、AES 介绍:
1)密码说明:
AES 的区块长度固定为 128 比特,密钥长度则可以是 128,192 或 256 比特。
大多数 AES 计算是在一个特别的有限域完成的。
AES 加密过程是在一个 4x4 的字节矩阵上运作,这个短阵又称为“状态(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个 Byte)。(Riindael 加密法因支持更大的区块,其矩阵行数可视情况增加)加密时,各轮AES 加密循环(除最后一轮外)均包含4个步骤:
AddRoundKey-矩阵中的每一个字节都与该次轮秘钥(round key)做 XOR 运算;每个子密钥由密钥生成方案产生。
SubBytes-通过非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。
ShiftRows-将矩阵中的每个横列进行循环式移位。
MixColumns-为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每列的四个字节。
最后一个加密循环中省略 MixColumns 步骤,而以另一个 AddRoundKey 取代。
2)加密标准
对称密码体制的发展趋势将以分组密码为重点。分组密码算法通常由密钥扩展算法和加密(解密)算法两部分组成。密钥扩展算法将b字节用户主密钥扩展成r个子密钥。加密算法由一个密码学上的弱函数f与r个子密钥迭代r次组成。混乱和密钥扩散是分组密码算法设计的基本原则。抵御己知明文的差分和线性攻击,可变长密钥和分组是该体制的设计要点。AES 是美国国家标准技术研究所 NIST 旨在取代 DES 的 21 世纪的加密标准。
AES 的基本要求是,采用对称分组密码体制,密钥的长度最少支持为128、192、256分组长度 128 位,算法应易于各种硬件和软件实现。1998 年 NIST 开始 AES 第一轮分析、测试和征集,共产生了 15 个候选算法。1999 年3 月完成了第二轮 AES2 的分析、测试。2000年10月2日美国政府正式宣布选中比利时密码学家Joan Daemen 和 Vincent Riimen 提出的一种密码算法 RIJNDAEL 作为 AES。
在应用方面,尽管 DES 在安全上是脆弱的,但由于快速 DES 芯片的大量生产,使得 DES 仍能暂时继续使用,为提高安全强度,通常使用独立密钥的三级 DES。但是 DES 迟早要被 AES 代替。流密码体制较之分组密码在理论上成熟且安全,但未被列入下一代加密标准。AES 加密数据块分组长度必须为 128 比特,密钥长度可以是 128 比特、192 比特、256比特中的任意一个(如果数据块及密钥长度不足时,会补齐)。AES 加密有很多轮的重复和变换。大致步骤如下:1、密钥扩展(KeyExpansion),2、初始轮(Initial Round),3、重复轮(Rounds),每一轮又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最终轮(Final Round),最终轮没有 MixColummns。
AES 原理:
AES 加密算法涉及4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。
AES 加解密流程如下:

字节代替的主要功能是通过S盒完成一个字节到另外一个字节的映射。行移位是一个 4x4 的矩阵内部字节之间的置换,用于提供算法的扩散性列混淆:利用 GF(28)域上算术特性的一个代替,同样用于提供算法的扩散性轮密钥加:其依据的原理是“任何数和自身的异或结果为0”。加密过程中,每轮的输入与轮子密钥异或一次;因此,解密时再异或上该轮的轮子密钥即可恢复。
以上4种操作涉及大量的字节替换和计算,这里就不再详细介绍了。
五、实验过程
登录系统后查看目录"/root/cryptography/"下的 aes.py。
#_*_ coding:UTF-8 _*_
from Crypto.Cipher import AESfrom binascii import b2a hexfrom binascii import a2b hex1补全字符def align(str, isKey=False):
if isKey.
if len(str)> 16.
W如果是密码,需确保其长度为 16
return str[0:16]
else.
return align(str)
else:
zerocount = 16-len(str)% 16 \如果是被加密字符串长度或长度不足的密码,则确保其长度为16 的整数倍
for i in range(0,zerocount)
str = sir + 'O
retum str
def encrypt ECB(str, key):str = align(str)key= align(key, True)
AESCipher = AES.new(keY, AES.MODE ECB)
cipher= AESCipher.encrypt(str)
retum b2a hex(cipher)
def decrypt ECB(str, key):
key= align(key,True)
AESCipher = AES new(key, AES.MODE ECB)
paint= AESCipher.decrypt(a2b hex(str))
paint = paint.rstrip( 0')
retum paint
def encrypt CBC(str, key)
str= align(str)
key= align(key, True)AESCipher = AES new(keY, AES.MODE CBC,'1234567890123456')
cipher= AESCipher.encrypt(str)
retum b2a hex(cipherdef decrypt CBC(str, key)
key= align(key, True)AESCipher= AESnew(keY, AES.MODE CBC,'1234567890123456’)
AESpaint = AESCipher.decrypt(a2b hex(str)paint = paint.rship("0')
retumn paint
def encrypt CFB(str, key):
key= align(key, True)
AESCipher= AES neW(keY, AES MODE CFB,"1234567890123456)\
cipher = AESCipher.encrypt(str)
retum b2a hex(cipher)
def decrypt CFB(str, key):
key= align(key, True)
AESCipher = AES.ewkeY, AES.MODE CFB,'1234567890123456)
paint= AESCipher.decrypt(a2b hex(str))
paint = paint.rstrip("0')
retum paint
def encrypt OFB(str, key):
str = align(str)
key= align(key, True)



其中设置的明文和密码是可以改变的。执行命令 python2 cryptography/aes.py 进行 AES 加密和解密。

从执行结果中看出 AES 四种模式的加密结果。
六、安全性分析
AES 算法作为 DES 算法和 MD5 算法的替代产品,10 轮循环到目前为止还没有被破解一般多数人的意见是:它是目前可获得的最安全的加密算法。AES 与目前使用广泛的加密算法-DES 算法的差別在于,如果一秒可以解 DES,则仍需要花費 1490000 亿年才可破解 AES,由此可知 AES 的安全性。AES 已被列为比任何现今其它加密算法更安全的一种算法。目前针对 AES 的破解主要可以从以下几个方面着手:
1、暴力破解。如果不针对所有可能的 256 位密钥使用强力搜索,任何已知的密码分析学攻击都无法对 AES 密码进行解密,就这一点来说,用 AES 加密的数据是牢不可破的。如SONY 的 PSP 和 WINRAR 采用 AES128 位数据加密,一台 128 颗 POWER 处理器的巨型计算器破解 128BIT 的 AES 需要 225 年。要破解 AES 加密过的数据,需要当今最强大的计算机计算 1010 年时间。如果密钥长度为 256 位,还没有已知的攻击可以在一个可接受的时间内破解 AES。
2、时间选择攻击。针对 AES 密码最可能成功的攻击来自一个允许时间选择攻击的弱实现。攻击者用不同的密钥并精确地测量出加密例程所需的时间。如果加密例程被粗心编码因此执行时间便依赖于密钥值,它就有可能推导出有关密钥的信息。在 AES 中,这种事情最可能发生在 MixColumns 例程中,因为有域乘。针对这种攻击的两个安全措施是加入虚指令,以便所有乘法都需要相同数量的指令,或者将域乘实现为一个查询表
3、旁道攻击。针对 AES 唯一的成功攻击是旁道攻击。旁道攻击不攻击密码本身,而是攻击那些实作于不安全系统(会在不经意间泄漏资讯,如Cache 等)上的加密系统。
4、数学结构攻击:不像其他区块加密系统,AES 具有相当井然有序的代数结构。虽然相关的代数攻击尚未出现,但有许多学者认为,把安全性建立于未经透彻研究过的结构上是有风险的。
5、能量攻击法:与软件加密相比,硬件加密具有运行速度更快,保密性更强的优点所以硬件加密设备已在通信、金融和信息安全等领域中得到广泛的应用。但是硬件加密设备运行时必须消耗能量,整个能量消耗过程可以通过电流或电压的变化反映出来。这种能量消耗包含了设备当前正在处理的数据的信息,而这些数据又与加密密钥有关,所以攻击者可以通过测量并分析能量消耗数据破解密钥,突破硬件加密系统,这种攻击被称为能量分析攻击它是一种强有力的密码分析新方法。如边频攻击:通过观测电路中的物理量如能量耗散、申磁辐射和执行时间的变化规律,攻击者能够分析系统中的加密数据或者干扰系统的加密行为.这即是边频攻击(Side-channel Attacks)。PA 攻击是目前应用最为广泛的,成本较低的一种。
6、基于 AES 对称性的攻击方法:该思想利用了 AES 的对称性,并在此基础上把逆序Square 攻击扩展到7轮,同时提出逆序碰撞攻击的概念,并以此对 7轮 AES 进行分析.结果表明该方法的效率是相当高的,其复杂度大约是 2,需选择2组密文。但对7轮以后的攻击结果不明。
7、远程侵入:由于目前 AES 技术上是“安全的”,可以考虑从远程侵入想要攻击的对象,以获取相应的明码或密钥,或在其网络传输过程中进行窃获。如不能得到其数据,可考虑在传输过程中想办法破坏其数据,也可达到一定的目的,或许更实用。