【密码学】三、AES

news2024/11/16 7:56:09

AES

  • 1、AES产生
  • 2、数学基础
    • 2.1有限域GF(2^8^)
      • 2.1.1加法运算
      • 2.1.2乘法运算
      • 2.1.3x乘运算
      • 2.1.4系数在GF(2^8^)上的多项式
  • 3、AES算法描述
    • 3.1字节代换
    • 3.2行移位
    • 3.3列混合
    • 3.4轮密钥加
    • 3.5密钥扩展

1、AES产生

征集AES算法的活动,目的是确定一个非保密的、公开的、全球免费使用的加密算法。对AES的基本要求:执行性能比三重DES快、至少与三重DES一样安全、数据分组长度是128bit、密钥长度是129/192/256bit。
原型是Squsre算法,优点:
可以给出算法的最佳差分特征的概率以及最佳线性逼近的偏差的界
使用非线性结构的S盒,足够安全;
有很高的灵活性;由防御特性。

2、数学基础

2.1有限域GF(28)

将b7b6b5b4b3b2b1b0构成的一个字节看成多项式b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x1+b0x0,其中b∈GF(2)。如十六进制的57=01010111=x6+x4+x2+x1+x0

2.1.1加法运算

对应元素的系数进行模2加。
如’57’+‘83’
‘57’=01010111=x6+x4+x2+x1+x
‘83’=10000011=x7+x+1
二者相加=11010100=x7+x6+x4+x2

2.1.2乘法运算

乘法运算就是两个多项式的模乘,其中8次不可约多项式:m(X)=x8+x4+x3+x+1
例如:‘57’·‘83’
‘57’=01010111=x6+x4+x2+x1+x0
‘83’=10000011=x7+x+1
‘57’·‘83’=(x6+x4+x2+x1+x0)·(x7+x+1)
=x13+x11+x9+x8+x6+x5+x4+x3+1
(x13+x11+x9+x8+x6+x5+x4+x3+1)mod m(x):
①x5m(x)=x13+x9+x8+x6+x5
剩余:x11+x4+x3+1
②x3m(x)=x11+x7+x6+x4+x3
剩余x7+x6+1
所以最终结果是x7+x6+1

2.1.3x乘运算

b(x)x计算的结果模m(x)求余得到x·b(x),若b7=0,则结果就是x·b(x);若b7=1,则先将结果减去m(x),结果是x·b(x).
xtime():
若最高位是0,则只需要左移一位,末尾补0;
若最高位是1,则左移之后还要与‘1b’='00011011’进行模2 加运算。

2.1.4系数在GF(28)上的多项式

规定多项式的乘法必须要取模M(x)=x4+1,这样使得次数小于4的多项式的乘积仍然是一个次数小于4的多项式。
c(x)=a(x)✖b(x)=c3x3+c2x2+c1x+c0
公式

3、AES算法描述

AES分为:
①线性混合层:确保多轮之上的高度扩散;
②非线性层:将具有最优的“最坏情况非线性特性”的S盒并行使用
③密钥加层:单轮子密钥简单地异或到中间状态上,实现一次性掩盖。
详细视频: link

如下的AES参数:

AES算法密钥长度(32bit)分组长度(32bit)加密和解密轮数
AES-1284410
AES-1926412
AES-2568414

AES的处理单位是字节,128bit的的输入明文组P和输入密钥K都被分成16个字节。
状态矩阵:描述明文分组,在算法的每一轮状态矩阵的内容都不断发生变化,最后的结果作为密文输出C。
输入矩阵和输出矩阵如图:
矩阵
密钥的转换是以字节为单位的矩阵,通过密钥编排程序,该密钥矩阵被扩展成一个由44个字(32bit)组成的序列w[0],w[1]…w[43],该序列的前四个元素(128Bit)是原始密钥,用于加密运算中的初始密钥加;后面40个元素被分成10组,一组4个也就是128bit,每一组作为一个子密钥参与每一轮的加密。
过程如下:
加密的时候:
在初始将明文和原始密钥进行一次轮密钥加操作;后续1-9轮都有四个操作字节代换、行移位、列混合和轮密钥加,最后一轮不进行列混合。
解密的时候:
在初始进行一次轮密钥加操作,后续第一轮是顺序执行逆行移位、逆字节变换、轮密钥加和逆列混合
加解密过程

3.1字节代换

字节代换是一个关于字节的非线性变换,独立地对状态的每个字节进行代换。字节代换是可逆的,可以由两个可逆变换复合而成。
将所有结果裂成表格就可以得到S盒,以高四位为行,第四位为列,取出S盒中对应的元素作为输出。
S盒如下:
S盒

3.2行移位

行移位是将状态矩阵的各个行进行循环移位,不同状态行的位移量不一样。
第0行不移动,第1行循环左移1个字节,第2行循环左移2个字节,第3行循环左移3个字节。如下图所示:
行移位

3.3列混合

列混合变换是一个替代操作,是AES算法中最具技巧性的部分。列混合在最后一轮不适用,是通过矩阵相乘实现的,经行移位后的状态矩阵与固定的矩阵相乘,得到混淆后的状态矩阵。
在这里插入图片描述
则:
在这里插入图片描述
其中a(x)={03}x3+{01}x2+{01}x+{02},其中是模x4+1乘法
也可以将其表示为矩阵乘法:
在这里插入图片描述
也就是:
在这里插入图片描述
列混合的逆运算是每一列都用一个特定的多项式d(x)相乘,其中a(x)d(x)=‘01’,所以
d(x)={0B}x3+{0D}x2+{09}x+{0E}
在这里插入图片描述

3.4轮密钥加

128bit地sate按位与128Bit地密钥逐位异或,可以影响状态sate中地每一位。
密钥加

3.5密钥扩展

输入:4字密钥
输出:44字的一维线性数组

为初始轮密钥扩展阶段和算法中的其他10轮每一轮提供了一个16字节的轮密钥。
AES在加密和解密算法中使用了一个由种子密钥字节数组生成地密钥调度表,称为密钥扩展,从一个原始密钥中生成多重密钥以代替使用单个密钥,大大增加了比特位的扩散。
①首先将128bit的密钥输入一个4x4的矩阵中,每一列是一个32bit的字,依次为w[0],w[1],w[2],w[3],构成数组w,然后每次用数组w填充扩展密钥数组剩下的部分:w[i]的值依赖于w[i-1]和w[i-4] (i≥4):
①若元素下标不是4的倍数,则只进行简单的异或:w[i]=w[i-1]异或w[i-4]
②若元素下标是4的倍数,则w[i]=w[i-4]异或T(w[i-1]);其中T(w[i-1])=ByteSub(RotByte(w[i-1]))异或Rcon[i]
-----1)字循环RotByte():将1个字的4个字节循环左移1个字节,即将字B0,B1,B2,B3变成B1,B2,B3,B0
-----2)字节代换ByteSub():基于S盒对输入字中的每个字节进行S代替
-----3)轮常量异或:将上述1和2的结果再与轮常量Rcon[i]进行异或,i表示轮数。轮常量Rcon[i]是一个32Bit的字,这个字的右边3个字节总为0。

i12345678910
Rcon[i]01000000020000000400000008000000100000002000000040000000800000001b00000036000000

密钥扩展设计标准如下:
1)知道密钥或者轮密钥的部分位不能计算出轮密钥的其他位
2)可逆变换:知道扩展密钥中任何连续Nk个字能够重新产生整个扩展密钥(Nk是构成密钥所需要的字数)
3)能在各种处理器上有效执行;能利用轮常量排除对称性;
4)密钥的每一位能影响到轮密钥的一些位
5)足够的非线性以防止轮密钥的差完全由密钥的差所决定
6)易于描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/799478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cesium态势标绘专题-直角箭头(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

国产化 | 记一次基于达梦创建数据库模式思考过程

开篇 首先,我们先来了解一下达梦数据库中用户与模式的概念,以及用户与模式之间的关系。 用户:主要是用来登录连接数据库,以及操作数据库对象等等。 模式:数据库中相关对象的集合。 关系:用户&#xff0…

测评7大热门订房APP,用好结尾这三点,分分钟帮你省掉好多钱

出去旅行预订酒店的时候,相信大家都有过纠结,那么多订房渠道到底应该选哪家。难道要把每个APP都下载下来试一遍吗? 所以,今天笔者给大家带来各大订房APP的测评。 先说结论:仅从性价比来看,民宿优于酒店&a…

Cesium态势标绘专题-燕尾箭头(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

LeetCode | Bit Manipulation, heap | 190. 191. 136. 137. 201.215.

190. Reverse Bits 191. Number of 1 Bits 一个一个数就行了。比较简单。 136. Single Number XOR的点在于,两个一样的数字a^a,结果是0. 且XOR是可以换位置的,所以把所有东西XOR在一起,剩下的就是单呗的。 137. Single Number I…

Python GDAL为具有多个波段的大量栅格图像绘制像素随时间变化走势图

本文介绍基于Python中的gdal模块,对大量长时间序列的栅格遥感影像文件,绘制其每一个波段中、若干随机指定的像元的时间序列曲线图的方法。 在之前的文章Python中GDAL批量绘制多时相栅格遥感影像的像元时间序列曲线图(https://blog.csdn.net/z…

wireshark导出H264裸流

导出H264裸流 安装wireshark下载rtp_h264_extractor.lua脚本配置lua脚本重启wireshark筛选 安装wireshark 下载抓包工具:首先,您需要下载并安装一个网络抓包工具,例如Wireshark(https://www.wireshark.org)或tcpdump&…

开源数据库 | 记一次在麒麟操作系统上适配openGauss进阶之旅

引入 适配 | 认证-Kylin V10 ARM 麒麟操作系统openGauss数据库 开篇 1、数据库架构 百度百科:openGauss 是一款全面友好开放,携手伙伴共同打造的企业级开源关系型数据库。openGauss采用木兰宽松许可证v2发行,提供面向多核架构的极致性能、全…

linux安装nginx遇到的报错

1、Linux如何修改只读文件(以设置自动连网为例) vim /etc/sysconfig/network-scripts/ifcfg-ens33 然后提示 E45:已设定选项“readonly”(请加!强制执行) 如果需要强制修改,可以使用&#xff0…

关于idea如何成功运行web项目

导入项目 如图 依次选择 file - new - Project from Existing Sources 选择存放的项目目录地址 如图 导入完成 点击ok 如图 依次选择 Create project from existing sources 点击next如图 ,此处默认即可 点击 next如图 点击next有该提示 是因为之前导入过…

抖音seo源码开发源代码开发技术分享

一、 抖音SEO源码开发,需要掌握以下技术: 抖音API接口:抖音提供了丰富的API接口,包括用户信息、视频信息、评论信息等。 数据爬取技术:通过抓包分析抖音接口的数据结构,可以使用Python等编程语言编写爬虫程…

Elasticsearch Query DSL

Elasticsearch Query DSL 这里使用的 Elasticsearch 的版本为 7.12.1。 1、基本概念 1.1 文档(Document) ElasticSearch 是面向文档的,文档是所有可搜索数据的最小单位,例如 MySQL 的一条数据记录。 文档会被序列化成为 json 格式,保存在…

B076-项目实战--宠物上下架 展示 领养 收购订单

目录 上下架功能提供后台宠物列表实现 前台展示前台宠物列表和详情展示店铺展示 领养分析前台后端PetControllerPetServiceImpl 订单需求分析可能产生订单的模块订单模块额外功能 订单设计表设计流程设计 集成基础代码收购订单创建订单前端后端 上下架功能提供 后台宠物列表实…

生成虚拟淘宝购买记录截图图片制作

大家都知道,淘宝购买记录截图在某些情况下非常重要,但手动制作却非常繁琐,耗费时间和精力。如果你也遇到了这个问题,那么不妨试试淘宝订单生成器,它能够帮助你轻松生成淘宝购买记录截图,提升工作效率。 虚拟…

Docker 容器高级操作

Docker容器高级操作 Docker容器创建、停止、启动、删除等基础操作上篇已述,然Docker容器被广大开发者青睐,不可能只有如此简单的功能,必有高阶功法。那么接下来 让我们一同走进容器操作的高级篇,领略其高级操作的魅力。 查看容器 docker ps -a | grep tomcat [root@tudou…

【数据结构】实验十:哈夫曼编码

实验十 哈夫曼编码 一、实验目的与要求 1)掌握树、森林与二叉树的转换; 2)掌握哈夫曼树和哈夫曼编码算法的实现; 二、 实验内容 1. 请编程实现如图所示的树转化为二叉树。 2. 编程实现一个哈夫曼编码系统,系统功能…

PingCAP 陈煜琦:深耕中国市场,构建客户成功生态

在 PingCAP 用户峰会 2023 上,PingCAP 副总裁陈煜琦分享了“激流入海,PingCAP 中国业务发展策略”的演讲,介绍了 PingCAP 在技术层面的发展方向,强调了 PingCAP 服务于中国企业客户的重要性,并介绍了 PingCAP 助力 客户…

Pytest学习教程_基础知识(一)

前言 pytest是一个用于编写和执行Python单元测试的框架。它提供了丰富的功能和灵活性,使得编写和运行测试变得简单而高效。 pytest的一些主要特点和解释如下: 自动发现测试:pytest会自动查找以"test_"开头的文件、类和函数&#x…

TEE GP(Global Platform)功能认证方案

TEE之GP(Global Platform)认证汇总 一、功能认证介绍 二、功能认证测试套和测试工具 1、“测试套件”是指由GlobalPlatform测试文档、测试脚本和/或其他材料组成的套件,基于给定的GlobalPlatform规范和相关配置,由GlobalPlatform发布,目的是…

【C++】类和对象-对象特性

1.构造函数和析构函数 2.函数的分类以及调用 以后采用括号法 int main() { /******************************************///test01();//test02();Person p;/******************************************/system("pause");return 0; }(1&#xff09…