banner
约 300 字
1 分钟

密码学入门:对称加密、非对称加密与哈希

摘要

用最小必要概念讲清对称加密、非对称加密与哈希三类密码学原语,并以 TLS 握手说明三者如何协作,补充密钥交换、HMAC、密钥管理与量子威胁。

密码学入门:对称加密、非对称加密与哈希

引言

密码学听起来高深,但底层就三块拼图:对称加密、非对称加密、哈希。理解它们,就理解了 HTTPS、数字签名、密码存储的原理。

一、对称加密:同一把钥匙

加密和解密用同一把密钥。快、适合加密大量数据。代表算法:AES(推荐 AES-256-GCM,兼具加密与完整性)。

Python
from cryptography.fernet import Fernet
key = Fernet.generate_key()          # 同一把密钥,需安全分发
token = Fernet(key).encrypt(b"secret")
plain = Fernet(key).decrypt(token)

难点:密钥怎么安全传给对方?这就是“密钥分发问题”。

二、非对称加密:公钥与私钥

一对密钥:公钥可公开,私钥自己留。用公钥加密,只有私钥能解;用私钥签名,公钥可验。代表算法:RSA、ECC(更短密钥、更高效率)。

  • 加密:别人用你的公钥加密,只有你能用私钥解开。

  • 签名:你用私钥签名,别人用公钥验证“确实是你发的、且未被篡改”。

密钥交换(解决分发问题)

Diffie-Hellman / ECDHE 让双方在不安全信道上协商出一把临时对称密钥,即使被窃听也无法推导出密钥。这是 HTTPS 握手的关键。

三、哈希:不可逆的“指纹”

把任意数据映射成固定长度摘要,单向不可逆。代表算法:SHA-256。用于完整性校验、密码存储(加盐)。

Python
import hashlib
print(hashlib.sha256(b"hello").hexdigest())

HMAC:用密钥参与哈希,既验证完整性又验证来源,常用于接口签名。

四、它们如何协作(以 HTTPS/TLS 为例)

  1. 握手:用非对称加密 / ECDHE 安全地协商出临时对称密钥(且前向安全)。

  2. 传输:之后用这把对称密钥对称加密数据(快)。

  3. 完整性:用 MAC/HMAC 防篡改。

  4. 身份:服务器用数字证书(PKI) 证明自己不是冒充者。

TLS 1.3 进一步简化为单次往返,并禁用了不安全的旧套件。

五、密码存储:别自己发明

  • argon2 / bcrypt / PBKDF2 等慢哈希 + 随机盐。

  • 盐防止彩虹表;慢因子对抗暴力破解。

  • 永远不要明文、不要用纯 MD5/SHA(太快)。

六、密钥管理

再强的算法,密钥泄露就归零。要点:密钥分环境存储、定期轮换、用 KMS/密钥库、不要把密钥写进代码仓库。

七、常见误区

  1. “Base64 是加密”——它只是编码,可逆且无密钥。

  2. “MD5 加盐就安全”——MD5 太快,仍易被暴力。

  3. “自己写加密算法”——除非你是密码学专家,否则千万别。

  4. 忽视前向安全:固定密钥被破解会牵连历史通信。

八、量子威胁(前瞻)

Shor 算法可攻破 RSA/ECC,Grover 可加速暴力破解。抗量子密码(PQC)正在标准化,长生命周期系统应开始关注。

小结

三句话记住:对称快、非对称解决密钥分发、哈希做指纹。三者 + PKI 组合,撑起了现代互联网的安全。下一篇聊身份与访问控制。

延伸

  • 《Cryptography Engineering》

  • 下一篇:《身份认证与访问控制:从密码到 MFA》

END