当前位置: 首页 > article >正文

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

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模式的使用最终帮助企业修复了这个高危漏洞。

相关文章:

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

1. 从CATCTF赛题看AES-ECB的致命伤 第一次看到这个题目时,我盯着那串base64编码的密文发了半天呆。题目给出了加密密钥,却隐藏了初始向量IV,这种刻意的信息缺失立刻让我意识到——这绝对是在考察AES-ECB模式最著名的安全缺陷。 让我们先拆解题…...

Matlab逻辑回归实战:从Sigmoid函数到车辆故障预测(附完整代码)

Matlab逻辑回归实战:从Sigmoid函数到车辆故障预测(附完整代码) 在工业质量控制和预测性维护领域,准确判断设备故障概率能显著降低运维成本。Matlab作为工程计算领域的标准工具,其内置的统计和机器学习工具箱为逻辑回归…...

UE5.3与Colosseum环境配置实战:从编译到问题解决

1. 环境准备:搭建UE5.3与Colosseum的基础舞台 如果你正在尝试在Windows系统下配置UE5.3与Colosseum环境,首先需要确保你的开发环境满足基本要求。我最近刚完成这个配置过程,踩过不少坑,这里分享一些实战经验。 硬件要求方面&#…...

计量经济学实战指南:从模型选择到结果解读的完整流程

1. 计量经济学实战入门:从数据到决策的完整链条 当你第一次拿到一份经济数据集时,可能会被密密麻麻的数字和变量搞得头晕眼花。我刚开始做数据分析时,常常对着电脑屏幕发呆——这些数据到底能告诉我们什么?计量经济学就是帮我们回…...

StructBERT模型AI面试官系统原型:答案语义评分与题库管理

StructBERT模型AI面试官系统原型:答案语义评分与题库管理 最近在跟几个做HR的朋友聊天,他们都在抱怨同一个问题:面试技术岗位,尤其是那些需要开放式回答的题目,实在是太费劲了。比如问候选人“描述一次解决技术难题的…...

PowerPaint-V1实用案例:从环境准备到界面操作,完整实现图像修复全流程

PowerPaint-V1实用案例:从环境准备到界面操作,完整实现图像修复全流程 你是否遇到过这样的烦恼?一张完美的风景照里,偏偏有个路人甲闯入了镜头;精心拍摄的产品图,背景里却有个碍眼的杂物;或者&…...

Android开发避坑指南:使用fat-aar-android插件合并第三方aar的正确姿势

Android SDK开发实战:fat-aar-android插件深度解析与避坑指南 在Android SDK开发过程中,如何优雅地处理第三方依赖一直是个令人头疼的问题。特别是当我们需要将多个模块打包成一个完整的aar交付给客户时,传统的打包方式往往会导致依赖丢失或资…...

绝了,我用Python写了个大乐透号码生成器,居然中了50元

1. 从双色球到大乐透:Python随机选号的奇妙之旅 那天晚上刷朋友圈,看到朋友晒出用Python写的双色球选号程序中奖的截图,我盯着屏幕愣了三秒——这玩意儿真能中奖?作为一个常年写代码却从没中过奖的"非酋"程序员&#xf…...

Verilog实现超前进位加法器:为什么比串行进位快3倍?附完整代码

Verilog实现超前进位加法器:为什么比串行进位快3倍?附完整代码 在数字电路设计中,加法器是最基础也最关键的运算单元之一。无论是简单的计数器还是复杂的DSP处理器,高效的加法运算都是提升整体性能的关键。传统串行进位加法器虽然…...

YOLOv12网络协议交互:处理403 Forbidden等常见网络错误

YOLOv12网络协议交互:处理403 Forbidden等常见网络错误 部署YOLOv12模型服务时,我们常常需要和外部世界打交道。比如,从远程服务器拉取待检测的图片,或者将检测结果上报到某个管理平台。这时候,网络就成了整个流程里最…...

深入QS100的SDR架构:除了NB-IoT,它如何通过‘可扩展协议’支持LoRa等自定义通信?

深入解析QS100的SDR架构:从NB-IoT到多协议融合的技术突破 在物联网设备爆炸式增长的今天,通信协议的多样性成为开发者面临的主要挑战之一。不同地区、不同场景对无线通信的需求差异巨大——有的需要NB-IoT的广覆盖和低功耗,有的则依赖LoRa的长…...

RMBG-2.0效果惊艳:同一张图在不同分辨率下保持边缘一致性验证

RMBG-2.0效果惊艳:同一张图在不同分辨率下保持边缘一致性验证 背景去除是图像处理中的常见需求,但不同分辨率下的边缘一致性一直是技术难点。RMBG-2.0作为轻量级AI图像背景去除工具,在这方面表现如何?本文将带您一探究竟。 1. 认识…...

Gemma-3-12b-it企业AI助手构建:基于本地多模态能力的私有知识库问答

Gemma-3-12b-it企业AI助手构建:基于本地多模态能力的私有知识库问答 1. 引言:为什么企业需要本地多模态AI助手? 想象一下,你的团队每天都要处理大量的产品手册、设计图纸、会议纪要和客户反馈。当有人问“上周会议上提到的那个产…...

JavaScript反混淆利器:基于AST解析的代码还原工具深度剖析

JavaScript反混淆利器:基于AST解析的代码还原工具深度剖析 【免费下载链接】obfuscator-io-deobfuscator A deobfuscator for scripts obfuscated by Obfuscator.io 项目地址: https://gitcode.com/gh_mirrors/ob/obfuscator-io-deobfuscator 在现代前端开发…...

BGE-Reranker-v2-m3合规检查:敏感词过滤与排序联动部署

BGE-Reranker-v2-m3合规检查:敏感词过滤与排序联动部署 1. 环境准备与快速部署 BGE-Reranker-v2-m3是一个专为提升RAG系统检索精度而设计的高性能重排序模型。本镜像已经预装了完整的运行环境,只需简单几步即可开始使用。 1.1 系统要求与依赖检查 在…...

告别‘盲打’!用pybind11_stubgen为你的C++扩展自动生成pyi文件(附VSCode/PyCharm配置)

告别‘盲打’!用pybind11_stubgen为你的C扩展自动生成pyi文件(附VSCode/PyCharm配置) 在Python与C混合编程的世界里,pybind11无疑是一座高效的桥梁。但当你在IDE中调用那些精心封装的功能时,是否经常遇到这样的场景&am…...

为什么程序员都爱用MobaXterm?这些隐藏功能让你的SSH效率翻倍

为什么MobaXterm成为SSH工具链中的瑞士军刀? 在远程服务器管理的世界里,效率工具的选择往往决定了开发者的工作节奏。当大多数用户还在Xshell和PuTTY之间徘徊时,一群"效率极客"已经悄悄转向了一个看似朴实却内藏乾坤的工具——Moba…...

OmenSuperHub终极指南:释放惠普游戏本隐藏性能的免费开源神器

OmenSuperHub终极指南:释放惠普游戏本隐藏性能的免费开源神器 【免费下载链接】OmenSuperHub 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还在为官方OMEN Gaming Hub的臃肿体积和频繁弹窗烦恼吗?OmenSuperHub这款纯净硬件控制工…...

SlopeCraft:突破像素艺术边界,轻松打造Minecraft立体地图画(从图片到游戏场景的无缝转换方案)

SlopeCraft:突破像素艺术边界,轻松打造Minecraft立体地图画(从图片到游戏场景的无缝转换方案) 【免费下载链接】SlopeCraft Map Pixel Art Generator for Minecraft 项目地址: https://gitcode.com/gh_mirrors/sl/SlopeCraft …...

Windows苹果设备连接难题?Apple-Mobile-Drivers-Installer通过智能脚本实现驱动安装效率提升80%

Windows苹果设备连接难题?Apple-Mobile-Drivers-Installer通过智能脚本实现驱动安装效率提升80% 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows!…...

OnmyojiAutoScript:2025年阴阳师自动化脚本终极解放双手指南

OnmyojiAutoScript:2025年阴阳师自动化脚本终极解放双手指南 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 还在为阴阳师每日重复任务而烦恼吗?OnmyojiA…...

Flowable定时器事件实战:3个真实业务场景配置详解(含Cron表达式)

Flowable定时器事件实战:3个真实业务场景配置详解(含Cron表达式) 在业务流程自动化领域,定时器事件是实现"时间驱动型业务逻辑"的关键组件。不同于传统需要人工干预的流程节点,定时器事件允许系统在预设时间…...

上位机知识篇---etson Nano上配置PyTorch GPU环境

在Jetson Nano上配置PyTorch GPU环境,核心逻辑虽然和普通电脑(x86架构)一样,但因为硬件架构(ARM vs x86)和软件生态(JetPack vs 手动安装CUDA)的根本不同,具体的安装步骤…...

如何快速保护QQNT聊天记录:终极防撤回插件完全指南

如何快速保护QQNT聊天记录:终极防撤回插件完全指南 【免费下载链接】LiteLoaderQQNT-Anti-Recall LiteLoaderQQNT 插件 - QQNT 简易防撤回 项目地址: https://gitcode.com/gh_mirrors/li/LiteLoaderQQNT-Anti-Recall QQNT防撤回插件LiteLoaderQQNT-Anti-Reca…...

Oracle vs MySQL:SYSDATE函数使用差异全解析(附实战避坑指南)

Oracle vs MySQL:SYSDATE函数使用差异全解析(附实战避坑指南) 数据库开发中,时间戳处理是高频操作场景。Oracle和MySQL作为两大主流关系型数据库,其SYSDATE函数的实现差异常成为跨平台迁移的"暗礁"。本文将深…...

SAP S/4HANA银行账户管理新姿势:Fiori App全流程操作指南

SAP S/4HANA银行账户管理新姿势:Fiori App全流程操作指南 在数字化转型浪潮中,SAP S/4HANA的Fiori界面正重塑企业财务管理的操作体验。想象一下:曾经需要记忆数十个事务代码的银行账户管理工作,现在只需在直观的磁贴界面点击几下就…...

基于R语言vegan包的方差分解实战:环境因子与空间因素对生物群落的影响解析

1. 方差分解分析入门:生态学家的数据解剖刀 第一次接触方差分解分析时,我正为一个湿地微生物群落项目头疼。面对20多个环境变量和复杂的空间分布数据,完全理不清哪些因素真正影响着菌群组成。直到实验室前辈推荐了vegan包的varpart函数&#…...

RyzenAdj:解锁AMD锐龙处理器的隐藏性能开关,你真的会用吗?

RyzenAdj:解锁AMD锐龙处理器的隐藏性能开关,你真的会用吗? 【免费下载链接】RyzenAdj Adjust power management settings for Ryzen APUs 项目地址: https://gitcode.com/gh_mirrors/ry/RyzenAdj 还在为AMD锐龙处理器的功耗和温度控制…...

PaddleOCR-VL-WEB场景应用:企业文档批量识别与解析实战

PaddleOCR-VL-WEB场景应用:企业文档批量识别与解析实战 1. 从痛点出发:企业文档处理的真实困境 想象一下,你是一家跨国公司的IT负责人,每天需要处理来自全球各地分公司的海量文档——财务报告、合同、产品手册、客户反馈表&…...

生产者消费者模型详解

一、什么是生产者消费者模型?生产者消费者模型的核心逻辑很简单:存在两类线程(生产者线程、消费者线程),通过一个“缓冲区”(也叫“消息队列”)实现通信,生产者线程负责生成数据并放…...