第2章 密码学基础:对称加密、非对称加密与哈希函数

密码学是异常检测模型的基石。你想想看,没有加密,你的检测数据就像裸奔。我个人习惯把密码学技术分成三大类:对称加密、非对称加密和哈希函数。这一章,咱们把这三种东西讲透。

对称加密:一把钥匙开一把锁

对称加密,说白了就是加密和解密用同一把密钥。我刚开始做安全项目时,总以为这事很简单——拿到密钥,加密就完事。后来踩了坑才明白,密钥怎么分发、怎么存储,才是真正的难题。

常用的对称算法有这么几个:

  • AES(高级加密标准)——现在最主流,推荐AES-256-GCM模式,自带认证。
  • DES——老古董了,56位密钥,现在用暴力破解分分钟搞定。
  • 3DES——DES的升级版,但效率低,业界已经逐步淘汰。

我在项目中遇到过什么情况?有一回,我们要对用户上传的敏感文件做加密存储。领导说:“用AES就行。”但操作时忘记考虑IV(初始化向量)的随机性,结果相同的明文加密后得到相同的密文——这相当于给攻击者提供了统计特征。嗯,这里要注意:对称加密一定要搭配随机IV,并且IV不需要保密,但必须是唯一的。

适用场景:大数据量的加密、磁盘加密、VPN通道等。速度快,但密钥管理是痛点。

非对称加密:两把钥匙,各司其职

非对称加密是公钥/私钥体系。公钥可以公开,私钥自己藏好。你想想看,公钥像锁,谁都能拿来锁上数据;私钥像钥匙,只有你能打开。这个特性解决了对称加密里密钥分发的难题。

主流算法:

  • RSA——经典,但密钥长度要求越来越长(2048位起步)。
  • ECC(椭圆曲线)——同样安全强度下,密钥短,效率高。

我记得有一次设计API签名方案,用了RSA做数字签名。测性能时发现,服务器每秒只能签几百次,扛不住峰值。后来改成ECC,签名速度提升了近10倍。经验:非对称加密适合小数据量(比如加密对称密钥、数字签名),别拿它直接加密文件,否则性能会崩。

数字签名是反过来的逻辑:私钥签名,公钥验签。这在密码操作异常检测里非常重要——我们可以通过签名来验证操作者身份是否被篡改。

哈希函数:指纹的艺术

哈希函数把任意长度的数据变成固定长度的摘要(比如32字节)。它是单向的,不可逆。我经常用这个特性来校验数据完整性。

常见哈希算法:

  • MD5——128位,已经不安全,碰撞攻击成本极低。我在日志完整性检测中绝不会用MD5。
  • SHA-1——160位,也有理论碰撞,不再推荐。
  • SHA-256(属于SHA-2家族)——目前安全可靠,推荐用于密码存储、完整性校验。
警告: 我曾经接手过一个遗留系统,里面的密码存储用的是MD5,而且没加盐。结果泄漏后,攻击者用彩虹表瞬间破解了80%的用户密码。后来我们全部升级为bcrypt+随机盐。哈希不是加个密就完事的——对抗暴力破解需要慢哈希函数(如bcrypt、scrypt、Argon2)。

哈希函数还有个重要特性:抗碰撞性。理论上,生日攻击使碰撞概率随输出长度指数上升。SHA-256的碰撞概率在可预见的未来几乎为零,放心用。

一张表看清三者的区别

特性 对称加密 非对称加密 哈希函数
密钥数量 1个(共享密钥) 2个(公钥+私钥) 无密钥
是否可逆 可逆(解密) 可逆(解密/签名验证) 不可逆
速度 极快(Gbps级别) 慢(kbps级别) 快(可与对称加密媲美)
主要用途 数据加密、传输加密 密钥交换、数字签名 完整性校验、口令存储
典型算法 AES-256-GCM RSA-2048, ECC P-256 SHA-256, bcrypt
常见弱点 密钥分发困难 性能差,密钥长度要求高 碰撞、彩虹表攻击
实用技巧: 实际项目中,我通常混合使用三者:用非对称加密交换对称密钥,对称加密加密数据,哈希校验完整性。这就是著名的“混合加密体系”。
密码学三大基石关系图 对称加密 同一把密钥 非对称加密 公钥+私钥 哈希函数 单向、固定长度摘要 加密大量数据 AES-GCM / 磁盘加密 密钥交换 & 数字签名 RSA / ECC / TLS握手 完整性校验 SHA-256 / HMAC 混合加密体系(实战常用) 非对称加密交换对称密钥 → 对称加密加密数据 → 哈希校验完整性 密码操作异常检测模型将以上三种密码学操作作为检测对象

核心要点回顾

  • 对称加密:速度快,密钥管理是最大的敌人。实战中推荐AES-256-GCM。
  • 非对称加密:解决密钥分发,但性能瓶颈明显。ECC正逐步取代RSA。
  • 哈希函数:不是加密!用于完整性校验和密码存储,记得加盐+慢哈希。
  • 三种技术常组合使用:混合加密是工业标准。

嗯,这一章内容不少,但都是后续异常检测的基础。我做密码操作异常检测时,经常要逆向分析这些加密协议,哪一步用的是对称、哪一步是非对称、签名怎么算的、哈希值从哪里来——只有把这些门道吃透,才能写出高效的检测规则。