分组密码(四)AES算法① — 密码学复习(七)
介绍完S-PN型结构之后,下面介绍AES算法。由于内容比较多所以将其分为两篇来介绍,本篇主要讲AES的历史时间节点、产生背景、与DES的对比、算法框图(粗略)以及一些数学基础。
7.1 AES的历史时间节点及产生背景
7.1.1 AES的历史时间节点
1997年,美国政府(NIST)向社会公开征集高级数据加密标准(AES):
第一轮:1998年8月20日从应征的21个算法中选出15个算法。
第二轮:1999年8月又选中其中5个算法。
第三轮:2000年10月2日再选出1个算法。
2001年11月26日,NIST接受其为标准。
7.1.2 AES的产生背景
① 1984年12月,里根总统下令由国家安全局(NSA)研制新密码标准,以取代DES.
② 1991年新密码开始试用并征求意见。但其有如下特点:
·不公开算法,只提供芯片;
·新密码设计成双刃剑,它是安全的。但通过法律允许可破译监听;
·民众要求公开算法,并去掉法律监督。
③ 1994年,颁布新密码标准EES.
④ 1995年5月,贝尔实验室博士生M.Blaze在PC机上用45分钟攻击法律监督字段获得成功。
⑤ 1995年7月,美国政府放弃用EES加密数据。
⑥ 1997年,美国政府向社会公开征集AES.
⑦ 从DES到AES反映了美国商用密码政策的变化。
公开征集DES(成功) -> 秘密设计EES(不成功) -> 公开征集AES(成功)
这说明:① 商用密码应当坚持公开设计、公布算法的政策,这是商用密码的客观规律。
② 群众的力量是伟大的。
7.1.3 AES的设计要求
① 安全性:可以抵抗目前所有的已知攻击。
② 实用性:适应各种应用环境,加解密速度快。
③ 扩展性:分组长度和密钥长度可扩展,可以适应社会对保密性不断提高的需求。
7.2 AES与DES的对比
在讲述具体的算法之前,让我们来看一下AES和DES的对比。

7.3 AES算法框图
接下来让我们看一下AES算法的框图,可以看到AES算法中也有S盒,但要注意这里的S盒和DES算法中的S盒并不一样,具体内容将在后面详细阐述。

7.4 数学基础
由于AES中涉及到一些计算需要一些简单的数学基础,下面将对其进行简单讲解。
7.4.1 AES的基础域是有限域GF(28)
- 一个字节的全体256种取值构成一个GF(28)
- 一个GF(2)上的8次既约多项式可以生成一个GF(28)
- GF(28)的全体元素构成加法交换群
- GF(28)的非零元素构成乘法交换群 (这意味着有生成元)
- GF(28)中的元素有多种表示:
字节:GF(28)={(a7,a6,a5,...,a1,a0)|ai∈GF(2)}
多项式形式:GF(28)={a7x7+a6x6+a5x5+...+a1x+a0|ai∈GF(2)}
指数形式:GF(28)*={α0,α1,...,α254},α是一个本原元。(去掉零元素是乘法循环群,其余元素都可以用生成元来表示)
对数形式:GF(28)*={0,1,2,...,254}
- GF(28)的特征为2.
7.4.2 AES的GF(28)表示
AES采用GF(2)上既约多项式m(x)生成GF(28):
m(x)=x8+x4+x3+x+1
- GF(28)的元素采用GF(2)上的多项式表示:
字节B=b7b6b5b4b3b2b1b0可表示成GF(2)上的多项式:b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0.
例:57 = 0101 0111 多项式表示为:x6+x4+x2+x+1.
- 加法:两个元素多项式的系数按位模2加
例:57 + 83 = D4
(x6+x4+x2+x+1)+(x7+x+1) = x7+x6+x4+x2
而x7+x6+x4+x2对应1101 0100,即D4.
- 乘法:两个元素多项式相乘,模m(x)
例:57 × 83 = C1
(x6+x4+x2+x+1)×(x7+x+1) = x13+x7+x6+x11+x5+x4+x9+x3+x2+x8+x2+x+x7+x+1
= x13+x11+x9+x8+x6+x5+x4+x3+1
= x7+x6+1 mod x8+x4+x3+x+1
- 乘法单位元:字节01 多项式表示为:1
- 乘法逆元
设a(x)的逆元为b(x),则a(x)b(x)=1 mod m(x)
可根据Euclid算法可求出b(x).
- x乘法xtime:用x乘GF(28)的元素
例:xtime(57) = x (x6+x4+x2+x+1) = x7+x5+x3+x2+x
xtime(83) = x(x7+x+1)= x8+x2+x mod m(x) = x7+x4+x3+1
若x7的系数为0,则为简单相乘,系数左移;若x7的系数为1,则乘后取模m(x),即乘后减去x8+x4+x3+x+1.
- 多项式求逆
下面通过一个例子来说明多项式求逆的方法:

在求解后还可以将两者相乘看结果是否mod m(x)与1同余,如果是则所求结果正确。这个写法是参考:手动推导计算AES中的s盒的输出。
7.4.3 AES的字表示与运算
- AES数据处理单位是字节和字。
一个字 = 4个字节 = 32比特
一个字可以表示为系数取自GF(28)上的次数低于4次的多项式。
例:字 57 83 4A D1 -> 57x3+83x2+4Ax+D1
- 字加法:两多项式系数按位模2加(不进位)
例:(57x3+83x2+4Ax+D1)+(Ax3+B3x2+EF)=5Dx3+30x2+4Ax+3F.
- 字乘法:设a和c是两个字,a(x)和c(x)是其字多项式。AES定义a和c的乘积b为
b(x) = a(x)c(x) mod x4+1
设:a(x)=a3x3+a2x2+a1x+a0
c(x)=c3x3+c2x2+c1x+c0
b(x)=b3x3+b2x2+b1x+b0
则 b(x) = a(x)c(x) mod x4+1为:
b0 = a0c0+a3c1+a2c2+a1c3
b1 = a1c0+a0c1+a3c2+a2c3
b2 = a2c0+a1c1+a0c2+a3c3
b3 = a3c0+a2c1+a1c2+a0c3
写成矩阵的形式:

注意:①x4+1是可约多项式,字c(x)不一定有逆。
②但AES选择的c(x)有逆,c(x)=03x3+01x2+01x+02.(0多1少,速度快)
③c(x)有逆的条件是(x4+1,c(x))=1
- 字的x乘法:设b(x)是一个字,p(x)=xb(x) mod x4+1
写成矩阵的形式:

注意:因为模x4+1,字的x乘法相当于按字节循环移位。
7.4.4 AES的数据处理方式
AES的数据处理方式有:按字节处理、按字处理 和 按状态处理。
状态:
- 加解密过程中的中间数据
- 以字节为元素的矩阵或二维数组
- 符号:Nb——明密文所含的字数;Nk——密钥所含的字数;Nr——迭代轮数。

参考博客:
[1] 手动推导计算AES中的s盒的输出
分组密码(四)AES算法① — 密码学复习(七)的更多相关文章
- 分组密码(五)AES算法② — 密码学复习(八)
在上一篇简单复习了AES的历史时间节点.产生背景.与DES的对比.算法框图(粗略)以及一些数学基础,如果不记得的话点击这里回顾.下面将介绍AES算法的细节. 下面给出AES算法的流程,图片来源:密码算 ...
- 分组密码(三)DES 算法— 密码学复习(六)
在介绍完Feistel结构之后,接下来进入到著名的DES算法. 6.1 DES算法的意义 在正式介绍DES之前,首先介绍几个重要的历史时间节点. ① 1973年,美国国家标准局(NBS)向社会公开征集 ...
- AES算法,DES算法,RSA算法JAVA实现
1 AES算法 1.1 算法描述 1.1.1 设计思想 Rijndael密码的设计力求满足以下3条标准: ① 抵抗所有已知的攻击. ② 在多个平台上速度快,编码紧凑. ③ 设计 ...
- 写给开发人员的实用密码学(七)—— 非对称密钥加密算法 RSA/ECC
本文部分内容翻译自 Practical-Cryptography-for-Developers-Book,笔者补充了密码学历史以及 openssl 命令示例,并重写了 RSA/ECC 算法原理.代码示 ...
- AES算法简介
AES算法简介 一. AES的结构 1.总体结构 明文分组的长度为128位即16字节,密钥长度可以为16,24或者32字节(128,192,256位).根据密钥的长度,算法被称为AES-128,AES ...
- #微码分享#AES算法的C++包装类
AES为Advanced Encryption Standard的缩写,中文名:高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准,用来替代DES.基于std:: ...
- Delphi与JAVA互加解密AES算法
搞了半天终于把这个对应的参数搞上了,话不多说,先干上代码: package com.bss.util; import java.io.UnsupportedEncodingException; imp ...
- 支持向量机原理(四)SMO算法原理
支持向量机原理(一) 线性支持向量机 支持向量机原理(二) 线性支持向量机的软间隔最大化模型 支持向量机原理(三)线性不可分支持向量机与核函数 支持向量机原理(四)SMO算法原理 支持向量机原理(五) ...
- 使用python进行加密解密AES算法
使用python进行加密解密AES算法-代码分享-PYTHON开发者社区-pythoner.org 使用python进行加密解密AES算法 TY 发布于 2011-09-26 21:36:53,分类: ...
随机推荐
- SQL查询对分数进行排名
编写SQL查询以对分数进行排名. 如果两个分数之间存在平局,则两者应具有相同的排名. 请注意,在平局之后,下一个排名数应该是下一个连续的整数值. 换句话说,等级之间不应该存在"漏洞" ...
- Socket编程 Tcp和粘包
大多数程序员都要接触网络编程,Web开发天天和http打交道.稍微底层一点的程序员,就是TCP/UDP . 对程序员来说,Tcp/udp的核心是Socket编程. 我的浅薄的观点---------理解 ...
- AOP的底层实现-CGLIB动态代理和JDK动态代理
AOP是目前Spring框架中的核心之一,在应用中具有非常重要的作用,也是Spring其他组件的基础.它是一种面向切面编程的思想.关于AOP的基础知识,相信多数童鞋都已经了如指掌,我们就略过这部分,来 ...
- 工具库用久了,你还会原生操作 Cookie 吗?
用得好了,工具库和框架确实是一大助力,但就怕我们会因此习惯了走捷径,而忘了自己的根本依靠是什么. 前言 前端技术的飞速发展,给从业人员不可避免地带来了"疲劳"感,我们常常会感叹学不 ...
- FXGL游戏开发-JavaFX游戏框架
FXGL 是一个JavaFX 游戏开发的框架,这个框架有两个版本,其中基于JDK1.8的版本已经不再维护,目前最新的是基于JDK11的版本,也就是Openjfx的版本. FXGL 提供了各种游戏范例: ...
- PC微信多开
1.桌面上面新建一个 多开.txt . 2.将下面的内容拷贝进去 TASKKILL /F /IM wechat.exestart "" "E:\wechat\WeCha ...
- YOLO V3 原理
基本思想V1: 将输入图像分成S*S个格子,每隔格子负责预测中心在此格子中的物体. 每个格子预测B个bounding box及其置信度(confidence score),以及C个类别概率. bbox ...
- Linux与Windows文件同步
Linux与Windows文件同步 本次采用的同步方式是rsync,Rsync是一款免费且强大的同步软件,可以镜像保存整个目录树和文件系统,同时保持原来文件的权限.时间.软硬链接.第一次同步时会复制全 ...
- 数据库CPU 100%处理记录
问题描述 2020年7月13日一大早收到告警,测试环境数据库CPU告警. 登录aws查看监控如下图 问题分析 出现这种cpu 100%的问题,都是因为sql性能问题导致的, 主要表现于 cpu 消 ...
- pluto中监听各个网口的500端口处理逻辑
1. pluto中监听各个网口的500端口处理逻辑 whack_handle() find_ifaces() find_raw_ifaces4() socket.setsockopt.bind.ioc ...