4. 常见密码算法与安全性分析

这一章我们聊聊密码算法的"真实面目"。教科书上总爱讲数学原理,但实战中,没人关心黎曼猜想——只关心你用的算法能不能挡住攻击。

我个人习惯把算法分成三类:对称加密、非对称加密、哈希算法。别搞复杂了,记住它们的强弱项就行。

重要前提:算法本身往往是安全的,不安全的是实现方式和应用场景。嗯,这句话你可以记在笔记本扉页上。

4.1 对称加密:又快又脆?

对称加密是密码学里最"老实"的一类算法。加密和解密用同一把密钥,速度快,适合处理大数据量。但问题也很明显——密钥分发。

你在网上下载了一个同事加密过的文件,打电话问他"密码是多少?"这电话记录要是被监听了,整个加密就白费。

我当年做过一个内网渗透项目,目标单位用AES-256加密了所有敏感配置。听起来很安全对吧?结果呢?他们用同一个密钥加密了两年,密钥就写在运维共享盘的"密码表.xlsx"里。我直接扫到就破防了。

算法 密钥长度 特点 实战坑点
AES 128/192/256位 标准加密算法,硬件加速友好 ECB模式不能用于多块数据,Iv复用导致可预测性
DES 56位 老古董,已被破解 密钥太短,暴力破解可做
3DES 112位或168位 DES的补救版本,但慢 有中间相遇攻击,效率低,已被NIST废弃

AES模式选择建议:我推荐GCM或者CCM模式,因为自带认证加密,能同时防窃听和篡改。不要用ECB模式,那玩意儿会让你的图片加密后还能看出原图轮廓。

4.2 非对称加密:公钥私钥,谁是谁?

非对称加密的出现,是为了解决对称密钥分发的死穴。它有两把钥匙——公钥和私钥。公钥可以随便发,私钥自己藏好。

RSA是这里面名气最大的"老前辈",基于大整数分解难题。但问题呢?慢,真的很慢。加密一段几KB的消息还行,要加密一个大文件?你会等到想哭。

实战里没人用RSA直接加密数据,都是混合加密——用RSA传AES的会话密钥,再用AES加密实际数据。

ECC(椭圆曲线加密)是近年的宠儿。同样的安全级别,ECC用的密钥长度短得多。256位的ECC大概相当于3072位的RSA。

避坑指南:我曾经见过一个项目,用RSA-OAEP但随机数不足,导致每次生成的密钥有规律可循。你想想看,如果你能预测公私钥对,那还防个啥?

还有一个常见的非对称算法——DSA和ECDSA,主要用于数字签名。我对ECDSA的态度是:能用,但要小心随机数。随机数重复就会导致私钥泄露。这不是开玩笑,著名的Sony PS3签名漏洞就是这原因。

4.3 哈希算法:不可逆的"指纹"

哈希算法不是加密,是"压缩+固定长度"。你输入任意长,它输出固定长。而且理论上不能反向推出原始输入。

常见的MD5和SHA-1已经从"可以信任"变成"建议退役"了。MD5被撞过太多次,SHA-1也有实际碰撞案例。我用SHA-256或者SHA-3会放心一些。

哈希在渗透测试中的价值在哪里?

  • 密码存储验证:数据库里存哈希,不存明文。攻破了也拿不到原密码。
  • 文件完整性校验:下载文件后比哈希值,看有没有被篡改。
  • 数字签名的基础:先哈希消息,再对哈希值签名。

重点提醒:哈希算法不能直接用作用户密码存储!必须加盐(Salt)。我见过一个金融App,直接用MD5哈希用户密码。结果数据库被拖后,我用彩虹表5分钟就还原了80%的密码。那感觉就像看对方穿了防弹衣但没拉拉链。

讲个小知识:彩虹表是一种空间换时间的破解技术。你可以预计算大量密码与哈希值的映射,存到表里。一旦拿到哈希,直接查表就能还原密码。盐的作用就是破坏这种预计算

4.4 算法实战对比指南

在渗透测试中,你经常需要判断对方系统用了什么算法,以及这个算法是否安全。下面这张表是我自己用的速查表:

场景 推荐算法 不推荐 理由
传输加密(TLS/SSL) ECDHE + AES-GCM RSA密钥交换、RC4 前向安全、抗碰撞
静态存储加密 AES-256-GCM ECB模式、DES 防重放、防推断
数字签名 ECDSA或Ed25519 DSA(密钥太长) 效率高、密钥短
密码哈希 bcrypt / scrypt / Argon2 MD5 / SHA-1 / SHA-256 加盐+慢哈希,暴力破解成本高

一句话总结:别自己造轮子,别用已被废弃的算法,别用弱密钥。我做了十年渗透测试,见到的90%的密码漏洞都出在这三个"别"上。

4.5 密码算法安全分析框架

你可以用下面这个框架来判断某个密码实现是否安全:

  1. 算法强度:密钥长度够吗?有没有已知攻击?
  2. 模式正确性:用了适当的模式吗?ECB?CTR?GCM?
  3. 密钥管理:密钥怎么生成的?怎么存储的?怎么轮换的?
  4. 随机数质量:IV或nonce生成时是否用了足够的熵?
  5. 常量比较:验证时用了不恒定的时间比较?那可以侧信道攻击。
密码算法安全分析框架 密码改造与安全分析 对称加密 非对称加密 哈希算法 密钥强度 模式/IV安全 随机数质量 侧信道防御 结论:算法安全 = 正确算法 + 安全实现 + 有效密钥管理 从算法选择到实现细节,每一层都需要渗透测试的验证

4.6 实战中的总结

说回渗透测试本身。你检查一个系统密码改造是否到位时,可以走这个最简单的检查清单:

  • 检查一:数据库里的用户密码是明文还是哈希?如果看到明文,直接写漏洞报告。
  • 检查二:TLS配置用的是什么加密套件?有没有弱算法(如RC4、CBC模式的TLS)
  • 检查三:有没有硬编码的密钥或证书?我扫过不少项目,密钥就配在git仓库里。
  • 检查四:系统是否存在随机数预测问题?比如js里用Math.random()直接做加密用途。
  • 检查五:有没有使用不安全的自定义加密方案?自己造轮子,通常是漏洞的温床。

一句实在话:如果你现在还在用MD5或者SHA-1做密码存储,趁早换。不是开玩笑,我每次看到这类系统,都觉得是"定时炸弹"——早晚会出事。

嗯,这一章的内容差不多就到这。记住,算法只是原料,正确的实现和配置才是菜。配方错了,再高级的原料也会变成失败的作品。