3、密码学基础:对称加密、非对称加密、哈希函数与数字签名

密码学是信息安全工程师必须掌握的核心地基。本章围绕四大支柱展开:对称加密(DES/AES)、非对称加密(RSA/ECC)、哈希函数(MD5/SHA)以及数字签名与密钥管理。理解这些算法的数学原理、工程实现、适用场景与常见误区,是后续学习PKI、SSL/TLS、IPSec等协议的前提。本章将结合实战案例,帮助你在真实系统中做出正确的密码学选型与配置决策。

密码学四大支柱与密钥管理关系图 对称加密 DES / 3DES / AES 加密密钥 = 解密密钥 速度快,适合大数据量 密钥分发困难 非对称加密 RSA / ECC / SM2 公钥加密,私钥解密 速度慢,适合小数据量 解决密钥分发问题 哈希函数 MD5 / SHA-1 / SHA-256 单向不可逆,定长输出 完整性校验 / 口令存储 抗碰撞性要求高 数字签名 RSA签名 / ECDSA 私钥签名,公钥验签 完整性 + 不可否认性 哈希 + 非对称加密结合 密钥管理 生成 / 分发 / 存储 / 轮换 HSM / KMS / 密钥分层 密钥生命周期管理 安全策略核心 安全 实际系统通常混合使用:对称加密加密数据,非对称加密保护密钥,哈希校验完整性,数字签名提供认证

3.1 对称加密:DES与AES

3.1.1 核心原理

对称加密使用同一个密钥进行加密和解密。发送方用密钥K加密明文得到密文,接收方用同一密钥K解密密文恢复明文。其安全性完全依赖于密钥的保密性。DES(Data Encryption Standard)诞生于1977年,使用56位有效密钥,分组长度64位,采用Feistel网络结构,经过16轮迭代运算。由于密钥空间仅有2^56,1999年已被分布式攻击在22小时内破解,不再安全。3DES是对DES的改进,使用三个56位密钥(K1、K2、K3),有效密钥长度112位,但速度较慢。AES(Advanced Encryption Standard)于2001年由NIST标准化,分组长度128位,支持128/192/256位密钥,采用SPN(Substitution-Permutation Network)结构,通过字节代换、行移位、列混合和轮密钥加四步操作完成10/12/14轮迭代。

算法密钥长度分组长度结构轮数状态
DES56位64位Feistel16已废弃
3DES112/168位64位Feistel48过渡期
AES-128128位128位SPN10推荐
AES-256256位128位SPN14推荐

3.1.2 操作流程与工作模式

实际使用AES时,除了选择密钥长度,还必须选择工作模式。ECB模式将明文分成独立块分别加密,相同明文块产生相同密文块,容易泄露模式信息,不推荐使用。CBC模式引入前一个密文块与当前明文块异或后再加密,需要初始化向量IV,推荐用于文件加密。GCM模式(Galois/Counter Mode)同时提供加密和完整性校验,是当前TLS 1.3的首选。CTR模式将计数器加密后与明文异或,支持并行计算,适合高速场景。

# OpenSSL中使用AES-256-GCM加密示例
openssl enc -aes-256-gcm -in plaintext.txt -out ciphertext.bin -K 0123456789abcdef0123456789abcdef -iv 0123456789abcdef

3.1.3 案例拆解:数据库字段加密

某金融系统需要对用户手机号进行加密存储。初始方案使用AES-128-ECB,上线后发现相同手机号产生相同密文,攻击者可通过频率分析推断用户行为。整改方案:改用AES-256-GCM,每次加密生成随机12字节IV,将IV与密文一起存储。同时引入密钥管理服务(KMS)定期轮换密钥。改造后密文随机性显著提升,通过渗透测试验证无法从密文推断任何明文信息。

常见误区:不要使用ECB模式加密结构化数据;不要硬编码密钥在代码中;不要忽略IV的随机性要求。IV重复使用会导致GCM模式安全性完全丧失。

3.2 非对称加密:RSA与ECC

3.2.1 核心原理

非对称加密使用公钥-私钥对。公钥公开分发,私钥严格保密。RSA基于大整数因子分解难题,密钥长度通常为2048位或3072位。加密时使用接收方公钥,解密时使用接收方私钥。ECC(Elliptic Curve Cryptography)基于椭圆曲线离散对数难题,在相同安全强度下密钥长度远小于RSA:256位ECC约等于3072位RSA的安全性。ECC计算效率更高,适合移动设备和物联网场景。

安全强度RSA密钥长度ECC密钥长度推荐场景
112位2048位224位一般业务
128位3072位256位金融/政务
256位15360位512位长期机密

3.2.2 混合加密方案

实际系统中很少直接用RSA加密大量数据,因为非对称加密速度慢(比AES慢100-1000倍)。标准做法是混合加密:使用AES随机生成会话密钥加密数据,再用RSA公钥加密该会话密钥。TLS协议正是采用这种方案。例如HTTPS握手过程中,客户端生成48字节预主密钥,用服务器公钥加密后发送,双方再通过密钥派生函数生成会话密钥。

3.2.3 案例拆解:API签名认证

某开放平台需要为第三方应用提供API访问认证。方案设计:为每个应用分配一对RSA密钥,应用使用私钥对请求参数(时间戳+随机数+业务参数)进行签名,平台使用公钥验签。关键参数:时间戳有效期5分钟防止重放攻击,随机数防止相同请求重复提交。实施中发现部分应用使用1024位RSA密钥,已不满足安全要求,强制升级至2048位。同时增加签名算法协商机制,支持RSA-PSS和ECDSA。

经验提醒:ECC在同等安全强度下密钥更短、计算更快,但RSA生态兼容性更好。新系统建议优先考虑ECC(如P-256曲线),存量系统逐步迁移。

3.3 哈希函数:MD5与SHA家族

3.3.1 核心原理与安全要求

哈希函数将任意长度输入映射为固定长度输出,具备三个核心特性:抗原像性(无法从哈希值反推原文)、抗第二原像性(给定原文和哈希值,无法找到另一个原文产生相同哈希)、抗碰撞性(无法找到两个不同原文产生相同哈希)。MD5输出128位,1996年发现碰撞漏洞,2004年王小云教授团队实现MD5快速碰撞,已完全不可用于安全场景。SHA-1输出160位,2017年Google与CWI研究所联合宣布SHAttered碰撞攻击。SHA-2家族(SHA-224/256/384/512)目前安全,SHA-3(Keccak)作为备选标准。

算法输出长度碰撞状态推荐用途
MD5128位已破解仅用于非安全校验
SHA-1160位已破解禁止用于签名
SHA-256256位安全数字签名/证书
SHA-512512位安全高安全场景

3.3.2 口令存储方案

直接使用SHA-256存储用户口令存在严重风险:攻击者可通过彩虹表快速反查。正确做法是使用加盐哈希(Salt):为每个用户生成随机盐值,将盐值与口令拼接后计算哈希。更推荐使用专门的口令哈希算法如bcrypt、scrypt或Argon2,这些算法内置盐值生成和计算强度调节功能,可有效抵御暴力破解。

# Python中使用bcrypt存储口令示例
import bcrypt
password = b"SecurePass123!"
salt = bcrypt.gensalt(rounds=12)
hashed = bcrypt.hashpw(password, salt)
# 验证时:bcrypt.checkpw(password, hashed)

3.3.3 案例拆解:文件完整性校验

某软件分发平台需要确保用户下载的安装包未被篡改。方案:发布时计算安装包SHA-256哈希值,在官网公布。用户下载后自行计算哈希并比对。但攻击者可能同时篡改安装包和官网哈希值,因此更安全的方案是使用代码签名证书对哈希值进行数字签名。实际实施中,平台使用HSM(硬件安全模块)存储签名私钥,确保证书私钥无法被导出。

风险提示:MD5和SHA-1已不适合任何安全场景,包括文件校验。即使是非安全场景,也建议使用SHA-256替代,避免合规风险。

3.4 数字签名与密钥管理

3.4.1 数字签名原理

数字签名结合哈希函数和非对称加密,提供完整性、认证性和不可否认性。签名过程:发送方计算消息哈希值,用私钥加密哈希值得到签名,将消息和签名一起发送。验证过程:接收方用发送方公钥解密签名得到哈希值,再计算消息哈希值,两者比对一致则验证通过。RSA签名和ECDSA是两种主流方案。实际应用中,签名算法还包含填充方案(如RSA-PSS)和哈希算法协商。

3.4.2 密钥管理生命周期

密钥管理是密码学应用中最薄弱的环节。完整生命周期包括:密钥生成(使用密码学安全随机数)、密钥分发(通过安全通道或公钥加密)、密钥存储(使用HSM或KMS)、密钥使用(限定用途和次数)、密钥轮换(定期更换)、密钥撤销(泄露时紧急作废)、密钥销毁(安全删除)。密钥分层策略:主密钥加密数据密钥,数据密钥加密业务数据,降低单点风险。

生命周期阶段关键操作安全要求
生成使用CSPRNG不可预测,足够熵源
分发TLS/SSH通道防窃听、防篡改
存储HSM/KMS加密存储,访问控制
轮换定期更换90天-1年,紧急立即
销毁安全擦除不可恢复,审计记录

3.4.3 案例拆解:企业PKI体系建设

某大型企业需要为内部系统部署数字证书。初始方案:使用自签名证书,但无法统一管理,证书过期导致服务中断。整改方案:搭建企业级PKI,部署根CA和二级CA,通过AD域自动下发证书。关键设计:根CA离线存储,二级CA在线签发;证书有效期设为2年,提前30天自动续期;私钥存储在HSM中,设置双人控制访问。实施后证书管理效率提升80%,安全事件为零。

总结复盘:密码学选型应遵循"够用、不过度"原则。对称加密选AES-256-GCM,非对称加密选ECC P-256或RSA-3072,哈希选SHA-256及以上,口令存储用bcrypt/Argon2。密钥管理必须制度化、流程化,使用HSM/KMS等专业工具。定期进行密码学算法审查,及时淘汰不安全算法。