AES算法分析与实现

Protocol Buffers协议逆向与AES解密实战指南 Protocol Buffers作为一种高效的二进制序列化协议,广泛应用于微服务通信和数据存储场景。其核心原理通过tag-length-value编码实现紧凑数据传输,配合.proto文件定义可生成跨语言代码。在安全领域,协议逆向工程常需处理加密的protobuf数据流,典型场景包括渗透测试中的流量分析和CTF竞赛挑战。以AES-CBC为代表的对称加密算法常被用于保护敏感字段,通过分析魔数值、数据块长度等特征可识别加密模式。本文以SpiderDemo项目为例,详解从流量捕获、protobuf结构重建到密钥派 阅读详情

                                    AUTHOR:   Jeffrey.zhu

                                    BLOG:http://blog.youkuaiyun.com/gueter/

 

 

 

 

 

 

 

AES算法的主要数学基础是抽象代数,其中算法中的许多运算是按单字节(8bits)和4字节(32bits)定义的,单字节可看成有限域GF(28)中的一个元素,而4字节则可以看成系数在GF(28)中并且次数小于4的多项式(亦可以理解为:GF(2564)),单字节上的运算有两种:有限域GF(28)上一个8次不可约多项式的模加、点乘(为方便代码实现,推出了X乘的概念),其中,这个不可约多项式为:m(x)= x8+x4+x3+x+1,类似地,4字节运算也分为两种:模加、乘法(为方便代码实现,推出了模乘的概念),而此时使用的模取M(x)=x4+1,由于x4+1=( x2+1)( x2+1)= ( x+1) ( x+1) ( x+1) ( x+1),即非不可约,导致非0多项式乘法逆元(逆元求取主要用到了欧几里德(Euclid)算法)不一定存在,所以在AES算法中,只限于乘一个固定的有逆元的多项式:a(x)={03}x3+{01}x2+{01}x+{02}。

AES(128bits密钥)主要加解密流程如下图所示:

AES算法加解密流程

 

 

 

图中左边是加密流程,右边是解密流程,其中,Plaintext为明文,Ciphertext为密文,密钥长度可变,可指定为128、192、256比特,不同密钥长度决定了加解密算法的轮数(128位:10轮,192位:12轮,256位:14轮),算法征集之初,6轮迭代便可抵抗当时世界上已知的所有攻击,AES标准中至少留了4轮余量,按照这种说法,可以推知轮数越多,AES破解难度越大,也就是密钥越长越安全,所以今年8月份有人说256bits密钥长度的AES算法被破解,而128bits未被破解是没有根据的。

理解AES需要知道以下两个概念:

l  状态:算法中间的结果也需要分组,称之为状态,状态可以用以字节为元素的矩阵阵列表示,该阵列有4行,列数Nb为分组长度除32;

l  种子密钥:以字节为元素的矩阵阵列描述,阵列为4行,列数Nk为密钥长度除32,其中根据种子密钥,可以推导出各轮子密钥w[ , ],此过程亦称作密钥扩展,针对不同密钥长度的密钥扩展算法可以参照阅读AES算法标准发布文档。

    1)下面简单分析一下AES(128bits密钥)的加密流程:

    AESEncrypt (State, ExpandedKey)

    {

        AddRoundKey (State, ExpandedKey); //种子密钥加,实际已经进行过子密钥扩展

        for (i=1; i <Nr; i ++)            //Nr根据密钥长度进行取值   

            Round (State, ExpandedKey+Nb* i);//加密轮函数

        FinalRound (State, ExpandedKey+Nb*Nr);//加密最后一轮轮函数

}

l  加密轮函数:

Round (State, RoundKey)

{

    ByteSub (State); //字节替代变换

    ShiftRow (State);//行移位变换

    MixColumn (State);//列混合变换

    AddRoundKey (State, RoundKey)//子密钥加(其实是一个简单的逐比特模2加)

}

l  加密最后一轮轮函数:

FinalRound (State, RoundKey)

{

    ByteSub (State);//字节替代变换

    ShiftRow (State);//行移位变换

    AddRoundKey (State, RoundKey);//子密钥加

}

以上加密过程具体算法可参照AES标准发布文档,需要注意的地方有以下几点:

l  字节替代变换是一种非线性变换,主要有两个可逆变换组成:求逆元、仿射变换,在具体实现中,根据两个过程的特点,逐一计算00~FF共256种字节替代变换结果,可以推导出一个固定的、加密用的S盒表;

l  列混合变换,即将状态的每一列视为有限域GF(28)上的一个多项式,并将此多项式与一个具有逆元的多项式进行多项式乘法,这个具有逆元的多项式即为前述的a(x)={03}x3+{01}x2+{01}x+{02},它的逆元为:a-1(x)={0b}x3+{0d}x2+{09}x+{0e};

l  基于种子密钥的子密钥扩展过程必须发生在调用加密函数之前,且加密完之后,传送到解密方的是种子密钥,也就是说,在调用解密函数之前也必须基于种子密钥进行子密钥扩展,此外,针对不同的密钥长度有不同的子密钥扩展算法,具体参照AES标准发布文档;

l  最后一轮轮函数之所以去掉列混合,是因为最后一轮的列混合并未增加AES算法的安全性,反而增加其实现难度,降低算法效率。

    2)下面简单分析一下AES(128bits密钥)的解密流程:

   

AESDecrypt (State, ExpandedKey)

{

    AddRoundKey (State, ExpandedKey+Nb*Nr);//子密钥加

    for (i= Nr-1; i >=1; i --)             // Nr根据密钥长度进行取值

        InvRound (State, InvMixColumn (ExpandedKey+Nb* i));//解密轮函数

    InvFinalRound (State, ExpandedKey);    //解密最后一轮轮函数

}

l  解密轮函数:

InvRound (State, RoundKey)

{

    InvShiftRow (State);//逆移位变换

    InvByteSub (State);//逆字节替代变换

    AddRoundKey (State, RoundKey);//子密钥加

    InvMixColumn (State); //逆列混合变换

}

l  解密最后一轮轮函数:

InvFinalRound (State, RoundKey)

{  

    InvShiftRow (State);//逆移位变换

    InvByteSub (State);//逆字节替代变换

    AddRoundKey (State, RoundKey);//逆列混合变换

}

以上解密过程具体算法可参照AES标准发布文档,需要注意的地方有以下几点:

l  加密过程中的子密钥加的逆变换即为同一子密钥继续加,所以的解密算法调用之前要对扩展后的子密钥进行逆序;

l  加解密是使用同一个S盒表?还是分别采用各自的S盒表?是一个时间复杂度和空间复杂度的权衡(作者在实现中将加解密S盒表分开做);

l  逆移位变换与逆字节替代变换之间是可以相互调换位置的。

 

 

 

源代码: 

 

 

 

对称密码学之现代密码学-AES算法分析 AES算法分析 1.AES的结构 AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。 明文分组的长度为128位即16个字节,密钥长度可以是128位(16字节)、192位(24字节)、256位(32字节)。密钥长度不同,加密轮数也不相同。根据密钥的长度,算法被称为AES-128、AES-192或AES-256。具体关系如表1所示: 表1 本...... 阅读详情

相关推荐

别再硬编码了!Flowable工作流动态审批人配置全解析(Spring Boot集成版)

本文深入解析Flowable工作流在Spring Boot中的动态审批人配置技术,通过角色、部门等变量实现审批流程的灵活设计。文章详细介绍了架构原理、前端配置映射、动态候选组解析及查询优化方案,帮助企业提升审批流程的适应性和维护效率。

weixin_30919571的博客 134

【0408】AES

AES 数学基础 1.多项式加法 系数异或 2.多项式乘法 不可约多项式=既约多项式 这里的不可约多项式X^8+ X4+X3+X+1 3.系数在GF(X^8)上的多项式计算 乘法 在AES中,使用的模数多项式取:M(x)=x^4+1,M(x)是可约多项式,不是所有多项式都有对应可逆多项式,但AES选择了一个有逆元的固定多项式:(03,01,01,02) 总体描述 1991年开始试用EES:不公开算法,只提供芯片;新密码设计要求:算法是安全的,但通过法律允许可破译监听;民众要求公开算法,并去掉法律监督 AE

weixin_44164249的博客 1454

别让PEX和后仿真拖后腿:Calibre与Virtuoso ADE联调的那些‘坑’与最佳实践

本文深入探讨了Calibre与Virtuoso ADE在PEX寄生参数提取和后仿真联调中的常见问题与解决方案。针对DRC/LVS验证通过后出现的网表导入错误和仿真波形异常,提供了七大典型场景的实战经验,包括PEX提取模式选择、CalibreView生成细节、环境变量配置等关键环节的最佳实践,助力工程师高效完成芯片设计验证。

weixin_33695450的博客 392

AES加密算法之列混合变换

在AES算法中,需要模多项式m(x)=x^8+x^4+x^3+x+1。列混合即是用一个常矩阵乘以第二步变换后的矩阵,以达到矩阵中每一个元素都是该元素原所在列所有元素的加权和。 附上自己敲的C语言源码: #include using namespace std; void PrintfMatrix(unsigned char m[4][4]) { for(int i=0;i<4;i

﹎厡.唻 3万+

【NVIDIA Jetson Orin系列 - 安装NVIDIA SDK Manager】

NVIDIA Jetson Orin - 安装NVIDIA SDK Manager

dally2的博客 2690

解锁PyCharm+Deepseek:本地部署AI编程超能力

在本次探索中,我们成功地在 PyCharm 中实现了 DeepSeek 的本地化部署,这一过程虽然涉及多个步骤,但每一步都为我们开启 AI 编程大门奠定了基础。从安装最新版 PyCharm,确保我们拥有一个功能强大且兼容性良好的开发环境,到注册 DeepSeek 账号并获取 API Key,这是连接我们与强大 AI 能力的关键纽带。接着,在 PyCharm 中安装 Continue 插件并进行精细配置,让 DeepSeek 能够深度融入我们的编程流程。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 5548

AES算法的实现与分析

随着现代密码分析水平、芯片处理能力和计算技术的不断进步,高级加密标准AES的Rijndael算法将在各行业各部门获得广泛的应用,成为虚拟专用网、SONET、远程访问服务器、高速ATM/以太路由器、移动通信、卫星通信、电子金融业务等的加密算法,并逐渐取代DES在IPSec、SSL和ATM中的加密功能。目前,IEEE 802.11i草案已经定义了AES加密的两种不同运行模式,成功解决了无限局域网标准中的诸多安全问题。在这种情形下,AES算法的安全性及其快速实现问题显得格外突出,本文对此进行了全面...

FPGA/MATLAB学习教程/源码/项目合作开发 1万+

Lammps实现Ar的沸腾过程(包含in文件)

Lammps实现简单的沸腾过程

Rockyoung 3503

AES加密(1):AES基础知识和计算过程

AES加密算法(也称为Rijndael算法)是一种对称分块密码算法,以块为单位对数据进行加密,一个块的大小为128位。而AES的密钥则可以为128、192和256位。不同的密钥长度对应着不同的加密轮数:128位为10轮、192位为12轮、256位为14轮。AES基于替代-置换网络,也称为SP网络。它由一系列链接操作组成,包括将输入替换为特定的输出(替代)以及涉及位排序(置换)的其他操作。SP网络:与DES算法中的Feistel密码结构不同,它采用了SP网络结构。

主要分享嵌入式软件、人工智能部分知识 8576

【查找单入口空闲区域】-python实现-附ChatGPT解析

时间限制:1s 空间限制: 256MB 限定语言:不限题目描述:给定一个 m x n 的矩阵,由若干字符X’和 O构成,"X表示该处已被占据,O表示该处空闲,请找到最大的单入口空闲区域。空闲区域是由连通的O组成的区域,位于边界的O可以构成入口,单入口空闲区域即有且只有一个位于边界的o作为入口的由连通的O组成的区域如果两个元素在水平或垂直方向相邻,则称它们是“连通”的。第一行输入为两个数字,第一个数字为行数m,第二个数字列数n,两个数字以空格分隔,1

sinat_29950703的博客 242

探索gtwr of mgtwr in python

代码】探索gtwr of GWmodel in python。

m0_46268055的博客 3388

AES加密算法原理

AES(Advanced Encryption Standard)密码学中的高级加密标准,又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijdael之名命之。 特点: 针对差分分析和线性分析而提出来的 具有128位数据分组长度和可变密钥长度128、192、256位 ...

qq_43065505的博客 2207

微信小程序 - {errCode: 10008, errno: 1500104, errMsg: “writeBLECharacteristicValue:fail write characteris

微信小程序errCode: 10008, errno: 1500104, errMsg: "writeBLECharacteristicValue:fail write characteristics error. 10008, errMsg=The value's length is invalid.",uni-app微信小程序报错,uniApp小程序调用蓝牙api报错,向低功耗蓝牙设备的某个特征写入数据时错误,UniApp微信小程序蓝牙API调用报错10008解决方案,蓝牙设备进行通信时,向设备写入数据

🏆 前端领域优质创作者 4431

响应逆向|解密案例-1、AES-福建省公共资源交易平台

1、访问观察目标网站2、分析目标逆向需求3、快速生成请求代码4、定位关键逆向位置5、加密解密算法分析6、数据加密解密实操。

2504_90439617的博客 1417

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

加密强度矩阵:算法与密钥长度评估

加密强度评估需从算法、密钥、实现三个维度构建矩阵模型。算法维度(权重40%)需评估抗量子能力、标准化程度等指标;密钥维度(权重50%)包含生命周期管理和安全阈值计算;实现维度(权重10%)关注实际应用缺陷。通过加密强度指数(ESI)量化风险等级,并建立量子计算威胁应对时间表。该动态评估体系能有效发现当前加密方案的潜在缺陷(如密钥管理薄弱、算法实现漏洞等),为金融科技、医疗数据等领域提供面向未来的安全测试框架,需持续更新以应对算力发展带来的新威胁。

2501_94480392的博客 248

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

AES算法分析

其中,i 是要扩充的第几个密钥数组,例如 128Bit的子密钥,是16个字节,每个4个字节分成一个组,有w(0), w(1), w(2), w(3),那么,开始扩展的时候,第一个w(i) 就是 i = 4。其中,i 是要扩充的第几个密钥数组,例如 128Bit的子密钥,是16个字节,每个4个字节分成一个组,有w(0), w(1), w(2), w(3),那么,开始扩展的时候,第一个w(i) 就是 i = 4。所以,执行XOR操作有可逆的运算。那么,总的密钥长度是加上初始提供的16个字节,就有192个字节。

LC的专栏 1536

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Go-AES算法详解与代码

AES 发展史 概述 AES的Go实现 func NewCipher(key []byte) (cipher.Block, error)

关注网络安全、云原生安全 1万+
上一篇: 基于LMS算法的自适应滤波收敛性的Matlab仿真
下一篇: 802.11概述及帧结构分析
Jeffrey.zhu
博客等级 码龄20年 618粉丝 6原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值