渗透测试与功能验证密码改造案例 - 第2节
一、对称加密:一把钥匙开一把锁
对称加密,说白了就是加密和解密用同一把钥匙。你想想看,就像你用一把锁锁上门,同一把钥匙又能打开它。这个模型简单直接,但在实际攻防中,坑可不少。
我刚开始做渗透测试那会儿,遇到过一家公司,他们的内部通信还在用 DES。当时我用了不到两小时就把密钥跑出来了。嗯,从那天起我就养成了一个习惯——先看对方用的什么加密算法。
对称加密的核心流程很简单:
发送方用密钥把明文变成密文,接收方用同一把密钥把密文还原成明文。中间如果有人截获了密文,没有密钥就只能干瞪眼。
关键要记住两点:
- 密钥必须安全传递——这是对称加密最大的软肋
- 算法强度决定安全水位——算法弱了,密钥再长也没用
下面这张图,是我梳理的对称加密算法核心体系。它把三种主流算法的结构、参数和安全状态都串起来了。你对着图看后面的讲解,会更清楚。
二、DES 算法:曾经的一代霸主
DES 是 1977 年发布的。那个年代,56 位的密钥长度觉得挺够用。但现在回头看,简直弱不禁风。
原理:经典的 Feistel 结构
DES 把 64 位数据分成左右两半,每轮用子密钥处理右边一半,再和左边一半做异或。这样重复 16 轮。结构很精巧,但密钥长度是硬伤。
- 分组大小:64 位
- 密钥长度:56 位有效(实际 64 位,含 8 位奇偶校验)
- 轮数:16 轮 Feistel 迭代
弱点:56 位密钥在今天是裸奔
1999 年,EFF 的 Deep Crack 机器用了 22 小时就把 DES 密钥跑出来了。现在你用普通 GPU,几天之内也能搞定。
我在一次金融系统审计中遇到过——某老旧交易接口还在用 DES。客户说"这么多年都没出事",结果我用一台笔记本跑了不到 48 小时,密钥就出来了。嗯,那天他们连夜出了整改方案。
三、3DES:过渡期的 "补丁"
3DES 说白了就是对同一个数据块用 DES 加密三次。它解决的是密钥长度问题,而不是算法本身的问题。
两种常见模式
- EDE 模式:加密 → 解密 → 加密(用两个或三个独立密钥)
- 密钥选项:双密钥(112 位有效)或三密钥(168 位有效)
弱点:慢得不忍直视
3DES 的速度只有 AES 的几分之一。你要加密一个大文件,3DES 能让你等到怀疑人生。
为什么会这样?因为 3DES 本质上是拿 DES 凑了三遍,结构没变,只是把轮数乘以 3。它从根儿上就不是为现代性能设计的。
四、AES:当今的王者
AES 是 2001 年 NIST 公开征集后选定的标准。它不是 Feistel 结构,而是 SPN(代换-置换网络)。
核心参数
| 版本 | 密钥长度 | 轮数 | 安全等级 |
|---|---|---|---|
| AES-128 | 128 位 | 10 轮 | 商用级安全 |
| AES-192 | 192 位 | 12 轮 | 高安全 |
| AES-256 | 256 位 | 14 轮 | 顶级安全(推荐) |
SPN 结构好在哪?
SPN 每轮都会对全部 128 位数据进行混淆和扩散。不像 Feistel 结构一拆两半,SPN 的扩散效率高得多。说白了就是——更难被密码分析攻击。
代码示例:Python 中实现 AES-256 加密
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
key = get_random_bytes(32) # AES-256 密钥
nonce = get_random_bytes(12) # GCM 模式推荐 12 字节
cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
plaintext = b"渗透测试中的敏感数据"
ciphertext, tag = cipher.encrypt_and_digest(plaintext)
print(f"密文:{ciphertext.hex()}")
print(f"认证标签:{tag.hex()}")
我个人习惯用 GCM 模式。它不光加密,还带认证,能防篡改。你想想看,在渗透测试中,如果密文被改了你都不知道,那后面的分析全白搭。
五、三种算法核心对比
| 维度 | DES | 3DES | AES |
|---|---|---|---|
| 密钥长度 | 56 位 | 112 / 168 位 | 128 / 192 / 256 位 |
| 分组大小 | 64 位 | 64 位 | 128 位 |
| 核心结构 | Feistel | Feistel(三重) | SPN |
| 安全状态 | 已破解 | 逐步淘汰 | 当前标准 |
| 相对速度 | 慢 | 极慢 | 快 |
| 典型场景 | 遗留系统(需替换) | 合规过渡期 | 所有新系统 |
六、实战避坑指南
🔑 核心原则:不要自己造算法,不要自己实现标准算法,不要用已废弃的算法。
我曾经帮一家医疗科技公司做安全评估。他们的数据库加密字段用的是 3DES,密钥写死在配置文件里,还是 base64 编码的。我当时整个人都不好了——这等于把锁挂在门上,钥匙插在锁孔里。
三个我建议你记住的要点:
- 新系统一律用 AES-256。这是目前性价比和安全性的最佳平衡点。
- 密钥管理比算法本身更重要。用再强的算法,密钥被拖走了也没用。
- 渗透测试时要先识别算法。看到 DES 或 3DES,直接往深挖,大概率能找到突破口。
对称加密这块,说白了就是四个字——选对、用好。选对算法,用好密钥。别在 DES 上浪费时间了,直接上 AES-256,省心又安全。