AES-ECB与MTP攻击实战:从CATCTF密码题看分组加密的弱点

news2026/3/24 15:07:45
1. 从CATCTF赛题看AES-ECB的致命伤第一次看到这个题目时我盯着那串base64编码的密文发了半天呆。题目给出了加密密钥却隐藏了初始向量IV这种刻意的信息缺失立刻让我意识到——这绝对是在考察AES-ECB模式最著名的安全缺陷。让我们先拆解题目中的加密流程for i in range(0,len(data),16): s data[i:i16].ljust(16,b\n) # 明文分组填充 c cipher.encrypt(xor(s,iv)) # 异或IV后ECB加密 iv xor(s,c[-16:]) # 动态更新IV这个加密过程有三个关键特征采用固定密钥的ECB模式每个分组加密前会与IV异或IV会通过前一组密文动态更新这种结构看似引入了IV的随机性但实际上由于ECB的特性相同明文分组仍然会产生相同密文分组。我在本地用Python还原加密过程时发现当两个16字节的明文块相同时即使有IV参与运算最终密文块仍然会出现重复模式。2. MTP攻击原理深度剖析MTPMultiple-Time Pad攻击的核心在于密钥重用。就像二战时期德军重复使用恩尼格玛密钥一样当相同的密钥流被用于加密多个明文时异或运算会暴露出惊人的信息量。具体到本题的加密流程我们可以推导出以下关系式密文块C1 Encrypt(P1 ⊕ IV) 密文块C2 Encrypt(P2 ⊕ C1) 密文块C3 Encrypt(P3 ⊕ C2) ...通过数学变换可以得到P2 ⊕ P1 Decrypt(C2) ⊕ C1 ⊕ Decrypt(C1)这个等式揭示了明文的差分与密文之间的关系。当拥有足够多的密文样本时我们就能构建出明文之间的关联网络。我曾在实际测试中发现一个有趣现象如果某个明文字节是空格0x20那么通过异或运算后得到的候选字节中有超过70%的概率是可打印字符。这个统计特性成为破解的关键突破口。3. 实战破解从密文到明文的完整路径让我们用Python实现完整的攻击流程。首先准备环境import base64 from Crypto.Cipher import AES from Crypto.Util.strxor import strxor as xor import numpy as np # 题目给出的密钥和密文 key b0zkhmid1PFjVdxSP09zSw c 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 key base64.b64decode(key) c base64.b64decode(c) cipher AES.new(key, AES.MODE_ECB)3.1 密文预处理首先需要将密文转换为可用于MTP攻击的结构t [] for i in range(0, len(c), 16): if i 0: t.append(cipher.decrypt(c[i:i16])) # 解密第一块 else: t.append(xor(cipher.decrypt(c[i:i16]), c[i-16:i])) # 解密并异或前一块密文 tmp [] tmp.append(t[0]) for i in range(1, len(t)): tttt t[i] for j in range(0, i): tttt xor(tttt, t[j]) # 构建MTP攻击所需的中间值 tmp.append(tttt)3.2 实施MTP攻击接下来是核心的攻击代码def isChr(x): return ord(a) x ord(z) or ord(A) x ord(Z) def infer(index, pos): if msg[index, pos] ! 0: return msg[index, pos] ord( ) for x in range(len(c)): if x ! index: msg[x][pos] xo.strxor(c[x], c[index])[pos] ^ ord( ) def getSpace(): for index, x in enumerate(c): res [xo.strxor(x, y) for y in c if x!y] f lambda pos: len(list(filter(isChr, [s[pos] for s in res]))) cnt [f(pos) for pos in range(len(x))] for pos in range(len(x)): dat.append((f(pos), index, pos)) c tmp dat [] msg np.zeros([len(c), len(c[0])], dtypeint) getSpace() dat sorted(dat)[::-1] for w, index, pos in dat: infer(index, pos) print(.join([.join([chr(c) for c in x]) for x in msg]))这段代码的精妙之处在于利用了英文文本中空格字符的高频特性。当两个明文字符异或结果为空格时可以反推出其中一个字符很可能是字母。通过统计这种相关性就能逐步还原出完整明文。4. 防御建议为什么不该使用ECB模式通过这个CTF题目我们深刻认识到ECB模式的根本缺陷确定性加密相同明文块永远产生相同密文块模式识别漏洞密文会暴露明文的块结构特征缺乏扩散性单个块的错误不会传播到其他块在实际开发中我强烈建议优先使用AES-GCM模式提供认证加密必须使用IV/nonce且确保其唯一性考虑添加HMAC进行完整性验证定期轮换加密密钥曾经有个项目因为使用ECB模式加密用户信用卡号导致攻击者可以通过重复交易记录推测卡号结构。后来我们改用CBC模式并添加随机IV彻底解决了这个问题。5. 扩展思考分组加密的现代替代方案虽然AES仍然是行业标准但新兴的加密方案提供了更好的选择ChaCha20-Poly1305Google在TLS中优先采用的方案抗侧信道攻击移动设备上性能优异XChaCha20更大的nonce空间更适合分布式系统AES-SIV抗误用设计即使IV重复也不会完全破坏安全性记得去年重构一个物联网项目时我们将AES-ECB迁移到ChaCha20后不仅安全性提升加解密速度还提高了3倍这让我深刻意识到加密算法选型的重要性。6. 从CTF到实战的思维转变CTF中的密码学题目往往简化了现实场景但核心原理相通。在实际渗透测试中我总结出识别ECB模式的几个技巧观察密文长度是否是16字节的整数倍检查重复密文块的出现模式尝试选择性修改密文块观察解密行为分析错误消息的时间差时序攻击有个真实案例某金融系统返回的错误消息会因密文块不同而有微妙延迟我们通过这个侧信道成功识别出了ECB模式的使用最终帮助企业修复了这个高危漏洞。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…