03 · 密码学基础
不造轮子、只做选型:对称 / 非对称 / 哈希 / 签名这四个原语各解决什么问题、什么时候用哪个,以及为什么"自己实现加密"几乎总是错的。
速览卡
| 项 | 内容 |
|---|---|
| 一句话定位 | 四个密码学原语的直觉与选型,以及"别自己造"的边界 |
| 核心内容 | 对称/非对称/哈希/签名、密钥交换、选型决策、防坑清单 |
| 读完能回答 | 密码哈希和加密是一回事吗?签名能代替加密吗? |
| 相关板块 | S02 认证授权 | N05 TLS | C16 安全纵深 |
一、四个原语先记一句话
| 原语 | 一句话 | 比喻 |
|---|---|---|
| 对称加密 | 一把钥匙加密+解密 | 同一把锁的钥匙 |
| 非对称加密 | 公钥加密、私钥解密 | 投信口(公钥)+ 信箱钥匙(私钥) |
| 哈希 | 内容 → 固定长度指纹,不可逆 | 指纹 / 摘要 |
| 签名 | 私钥签名、公钥验签 | 私章 + 验章 |
二、对称加密:快,但共享密钥难
| 项 | 说明 |
|---|---|
| 代表 | AES |
| 特点 | 快、适合大批量数据 |
| 难题 | 密钥怎么安全地交给对方 |
心智模型:对称加密像"同一把钥匙开同一把锁"。好用,但"怎么把钥匙安全送过去"是核心难题——于是需要非对称。
三、非对称加密:解决密钥分发
| 角色 | 能力 |
|---|---|
| 公钥 | 加密、验签,可公开 |
| 私钥 | 解密、签名,必须保密 |
| 代表 | 用途 |
|---|---|
| RSA | 老牌,加密/签名都行 |
| ECDSA | 签名(更短更快) |
| ECDH | 协商出共享密钥 |
心智模型:别人用你的公钥"投信",只有你的私钥能开。TLS 握手正是用它安全协商出对称密钥。
四、哈希:指纹不是加密
text
密码存储:hash(password) 存指纹,不存明文
完整性:hash(文件) 对比,发现是否被改| 项 | 说明 |
|---|---|
| 特性 | 定长、不可逆、雪崩效应 |
| 代表 | SHA-256(完整性)、bcrypt/argon2(密码) |
| 误区 | SHA-256 不是密码哈希,密码要用慢哈希(加盐) |
密码为什么不能存 SHA-256:它太快,暴力破解很容易。密码哈希用 bcrypt/argon2/scrypt,内置盐且故意慢。
五、签名与 MAC:防篡改 + 认证来源
| 机制 | 谁来 | 解决什么 |
|---|---|---|
| 数字签名 | 私钥签名,公钥验签 | 认证来源 + 防抵赖 |
| HMAC | 共享密钥 | 双方通信防篡改 |
区别:签名用于"我能证明这是某人发的"(公开验证),HMAC 用于"共享密钥的双方确认没被改"。
六、怎么选:一张决策表
| 需求 | 选什么 | 别用什么 |
|---|---|---|
| 传输保密 | TLS(对称+非对称组合) | 自己拼加密 |
| 密码存储 | bcrypt / argon2 | SHA-256 / 明文 |
| 文件完整性 | SHA-256 | 无 |
| 验证来源/防抵赖 | 数字签名 | 只哈希 |
| 双方防篡改 | HMAC | 对称加密裸用 |
七、为什么"别自己造"
| 风险 | 说明 |
|---|---|
| 模式错误 | ECB 模式、无 IV、固定盐… |
| 未知未知 | 你不知道你不知道什么 |
| 维护负担 | 密钥、轮换、标准演进 |
正确姿势:用标准库/成熟库(如 Node
crypto、Pythoncryptography、Java JCA)的高层 API,不手工拼原语。
八、自检清单
- [ ] 能一句话说清四个原语各解决什么
- [ ] 能解释"为什么需要非对称来解决对称的密钥分发"
- [ ] 知道密码哈希与完整性哈希的区别
- [ ] 能说出签名与 HMAC 的差异
- [ ] 面对需求能落到"选哪个库/哪个原语"
九、常见误区
| 误区 | 事实 |
|---|---|
| "哈希就是加密" | 哈希不可逆,加密可逆 |
| "SHA-256 适合存密码" | 太快,要用慢哈希+盐 |
| "签名能加密" | 签名只防篡改/认证来源,不保密 |
| "自己实现更放心" | 密码学安全靠经过审计的标准实现 |
| "公钥不能给别人" | 公钥本来就该公开,私钥才要保密 |
十、动手练习
练习 A:看标准库用法
用 Python cryptography 或 Node crypto 分别实现一次 AES 加密与一次签名,对比 API 和参数。
练习 B:验证慢哈希
对同一个密码分别用 SHA-256 与 bcrypt 哈希,对比耗时,体会"为什么密码要用慢哈希"。
练习 C:找反例
搜索一次"自研加密被破解"的公开案例,总结它踩了哪个模式/原语的坑。
相关文档
本区
- 02 · 认证授权体系 —— JWT 签名依赖的非对称体系
- 04 · 传输安全与 TLS 实践 —— 密码学在传输层的落地
其他域
- N05 · TLS 与证书 —— 握手如何组合非对称+对称
- C16 · 服务端安全纵深 —— 密码学在服务端的应用