Skip to content

密码学基础

哈希、对称/非对称加密、TLS 应用、密钥管理。

Updated View as Markdown
For humans

密码学基础

后端安全的地基:哈希存密码、对称加密数据、非对称交换密钥。面试主线:三类算法怎么用、密码怎么存、密钥怎么管。

三类算法

类别 代表 用途 特点
哈希 SHA-256、bcrypt 完整性、密码存储 不可逆
对称加密 AES 数据加密 快,密钥分发难
非对称 RSA、ECC 密钥交换、签名 慢,公钥公开

密码存储(高频)

方案 评价
明文 灾难
MD5/SHA1 可彩虹表破解
加盐哈希(单盐) 弱:同盐同哈希
bcrypt/scrypt/argon2 标准:内置盐 + 慢哈希抗暴力
# 正确姿势 (见 FastAPI 鉴权篇)
password_hash = bcrypt.hashpw(pw.encode(), bcrypt.gensalt())
bcrypt.checkpw(pw.encode(), password_hash)   # 恒定时间比较

要点:每用户独立盐 + 慢哈希 + 恒定时间比较。别自己发明哈希算法。

对称 vs 非对称

  • 对称(AES):同一密钥加解密。快,适合大量数据。密钥怎么安全传给对方是问题
  • 非对称(RSA/ECC):公钥加密私钥解密。慢,用于小数据(密钥交换、签名)
  • 混合:非对称交换对称密钥,对称加密数据(TLS 就是,见 HTTPS 与 TLS 篇)
  • 签名:私钥签名公钥验签(防篡改 + 认证来源),JWT 就是签名应用

常见错误

错误 后果
自己设计加密 必被攻破(用标准库)
ECB 模式 模式泄露(用 GCM)
密钥硬编码 源码泄露即数据泄露
明文存敏感数据 拖库即裸奔
弱随机数 可预测(用 CSPRNG)

密钥管理

  1. 密钥分级:主密钥 + 数据密钥(信封加密)
  2. 集中管理:KMS/Vault,不落代码和配置文件
  3. 轮换:定期换密钥,支持多版本解密
  4. 环境隔离:开发/生产密钥分离
  5. 云上:云 KMS(自动轮换、审计)

面试追问

  1. 密码怎么存? bcrypt/argon2:每用户盐 + 慢哈希 + 恒定时间比较。MD5 加盐也弱
  2. 对称和非对称? 对称快(数据加密),非对称慢(密钥交换/签名)。TLS 混合使用
  3. 签名是什么? 私钥签公钥验:防篡改 + 认证来源。JWT 的 signature
  4. ECB 为什么不行? 相同明文相同密文,模式泄露。用 GCM 等认证加密
  5. 密钥放哪? KMS/Vault,环境变量都不理想(进程可见)。分级 + 轮换 + 审计
Navigation

Type to search…

↑↓ navigate↵ selectEsc close