Skip to content

密码学基础知识

1. 密码学到底在解决什么问题

密码学不是单纯“把内容变乱”,它主要解决 4 类问题:

  • 机密性:不让别人看懂内容。
  • 完整性:发现内容有没有被改。
  • 身份认证:确认对方是谁。
  • 不可否认性:事后不能否认自己做过某次签名或发布。

不同技术解决的问题不同,这也是面试里最容易混淆的地方。比如:

  • 加密主要解决机密性
  • 哈希摘要主要解决完整性基础
  • 数字签名主要解决身份认证 + 完整性 + 不可否认性

2. 常见基础概念

2.1 明文、密文、密钥

  • 明文:原始数据。
  • 密文:加密后的数据。
  • 密钥:控制加密和解密过程的核心秘密参数。

如果算法公开、但没有密钥就无法恢复明文,这才是现代密码学的基本设计思路。也就是说,真正需要保密的是密钥,不是算法本身。

2.2 编码、加密、摘要不是一回事

这三个概念经常被混着说,但差别很大:

概念 是否可逆 主要目的 常见例子
编码 可逆 便于传输或表示 Base64、URL 编码
加密 可逆 防止未授权查看 AESRSA
摘要 不可逆 生成固定长度指纹 SHA-256

结论很简单:

  • Base64 不是加密。
  • 哈希摘要不是加密。
  • 签名也不是加密。

3. 对称加密

3.1 什么是对称加密

对称加密指的是:加密和解密使用同一把密钥

常见算法包括:

  • AES
  • ChaCha20
  • 早期的 DES3DES(现在通常不建议新系统使用)

3.2 优点和缺点

优点:

  • 速度快。
  • 适合加密大量数据。
  • CPU 和带宽开销相对低。

缺点:

  • 密钥分发困难。
  • 通信双方必须先安全地共享同一把密钥。

3.3 常见使用场景

对称加密通常用于:

  • HTTPS 中真正加密 HTTP 数据。
  • 数据库透明加密。
  • 文件加密。
  • 磁盘加密。
  • 消息体加密。

一句话概括:对称加密负责“高效传大数据”。

4. 非对称加密

4.1 什么是公钥和私钥

非对称加密会生成一对密钥:

  • 公钥(Public Key):可以公开给别人。
  • 私钥(Private Key):只能自己保管。

这两个密钥在数学上相关,但不能从公钥轻易反推出私钥。

4.2 非对称加密能做什么

非对称密码体系主要有两类能力:

  1. 公钥加密,私钥解密
  2. 私钥签名,公钥验签

这两种用途经常共用“公钥/私钥”这组概念,但目的完全不同。

4.3 常见算法

常见非对称算法包括:

  • RSA
  • ECC / ECDSA
  • Ed25519
  • SM2(国内场景常见)

4.4 优点和缺点

优点:

  • 解决了密钥分发的一部分难题。
  • 能支持数字签名。

缺点:

  • 计算成本高。
  • 不适合直接加密大体积业务数据。

所以工程上通常不会“全程只用非对称加密”,而是和对称加密配合使用。

5. 公钥私钥到底怎么理解

5.1 加密场景

如果你要给服务端发一段只有它能看到的数据,可以:

  1. 用服务端公钥加密。
  2. 服务端用自己的私钥解密。

这样别人即使拿到密文,没有私钥也解不开。

5.2 签名场景

如果服务端要证明“这条消息确实是我发的,而且没被改过”,可以:

  1. 用自己的私钥签名。
  2. 别人用服务端公钥验签。

所以:

  • 公钥加密 / 私钥解密 关注的是保密。
  • 私钥签名 / 公钥验签 关注的是证明身份和防篡改。

5.3 为什么公钥可以公开

因为公钥的设计目标本来就是给别人使用:

  • 别人需要它来加密发给你的消息。
  • 别人需要它来验证你的签名。

真正敏感的是私钥。私钥一旦泄露,加密和签名体系都会出问题。

6. 数字签名与验签

6.1 数字签名在解决什么问题

数字签名主要解决:

  • 这份内容是不是某个私钥持有者发的。
  • 内容中途有没有被改。
  • 签名者事后能不能轻易否认。

6.2 签名和验签的基本过程

典型过程不是“直接对整段原文做私钥运算”,而是:

  1. 先对原文计算摘要。
  2. 再用私钥对摘要做签名。
  3. 接收方收到原文和签名后,用公钥验签。
  4. 接收方再对原文重新计算摘要并比对。

如果一致,说明:

  • 内容没被改。
  • 签名大概率来自对应私钥持有者。

6.3 签名和加密的区别

维度 加密 签名
主要目标 保密 身份认证、防篡改
谁来操作 通常用接收方公钥加密 发送方私钥签名
谁来恢复/验证 接收方私钥解密 接收方用发送方公钥验签

一句话记忆:

  • 加密是“怕别人看”。
  • 签名是“怕别人改,怕别人冒充”。

7. 哈希摘要

7.1 什么是哈希摘要

哈希摘要是把任意长度输入,映射成固定长度输出的过程。它的目标不是“保密”,而是生成数据指纹。

常见算法:

  • SHA-256
  • SHA-3
  • 早期的 MD5SHA-1(安全敏感场景不再推荐)

7.2 摘要有什么特点

  • 输出固定长度。
  • 原文稍微变化,摘要就会明显变化。
  • 不能高效地从摘要反推原文。
  • 会有碰撞,但好的算法会让碰撞极难构造。

7.3 摘要常用在哪里

  • 文件完整性校验。
  • 数字签名输入。
  • 证书签名输入。
  • 内容指纹。
  • 区块链、Merkle Tree 等结构。

8. MAC 和 HMAC

8.1 为什么光有摘要还不够

如果只是把内容和摘要一起发出去,攻击者完全可以:

  1. 改内容。
  2. 重新计算一个新摘要。
  3. 把两者一起替换。

所以光靠普通摘要,不能证明“这份摘要是可信发送方生成的”。

8.2 HMAC 是什么

HMAC(Hash-based Message Authentication Code)可以理解成:

  • 带密钥的摘要校验。

它把共享密钥和消息一起参与计算,因此只有知道密钥的双方才能生成正确结果。

8.3 HMAC 解决什么问题

HMAC 主要解决:

  • 消息完整性。
  • 对称场景下的身份认证。

常见场景:

  • API 请求签名。
  • JWT 的 HS256
  • 服务间共享密钥的请求校验。

9. 密钥交换

9.1 为什么需要密钥交换

对称加密很快,但前提是双方已经有同一把密钥。问题在于:

  • 这把密钥怎么安全地传给对方?

密钥交换就是用来解决这个问题的。

9.2 Diffie-Hellman 的核心思想

Diffie-Hellman(以及更常见的 ECDHE)的核心是:

  • 双方各自保留私密参数不外传。
  • 交换公开参数。
  • 最终各自在本地算出同一份共享秘密。

这样共享密钥就不需要明文传输。

9.3 现代 HTTPS 中怎么用

现代 TLS 很常使用 ECDHE

  • 证书负责认证服务端身份。
  • ECDHE 负责协商本次连接的临时会话密钥。
  • 会话密钥再交给对称加密算法去保护业务数据。

10. 证书和 CA

10.1 证书是什么

证书本质上是:

  • 某个公钥属于某个主体的一份带签名证明。

主体可以是:

  • 域名。
  • 组织。
  • 个人。
  • 设备。

10.2 CA 在做什么

CA(Certificate Authority,证书颁发机构)的职责是:

  • 审核身份。
  • 签发证书。
  • 用自己的私钥给证书签名。

客户端之所以相信站点证书,是因为它能一路验证到本地信任的根 CA。

10.3 证书常用在哪里

  • HTTPS
  • mTLS
  • VPN
  • 代码签名
  • 邮件签名
  • 电子签章

11. 密码学在工程里通常怎么组合使用

11.1 HTTPS

HTTPS 不是只靠一种算法,而是多种能力组合:

  • 证书:证明服务端身份。
  • 非对称密码学:支撑签名验证和部分握手过程。
  • 密钥交换:协商会话密钥。
  • 对称加密:真正加密 HTTP 数据。
  • 摘要 / AEAD:保证完整性。

11.2 JWT

JWT 常见有两类:

  • HS256:基于共享密钥的 HMAC。
  • RS256 / ES256:基于公私钥的签名。

它们主要解决的是:

  • Token 是否被篡改。
  • Token 是否由可信签发方生成。

JWT 默认不是加密令牌,而是签名令牌

11.3 API 请求签名

开放平台常见做法是:

  • 请求参数按规则拼接。
  • 加入时间戳、nonce。
  • 用 HMAC 或私钥签名。

这样可以防止:

  • 参数篡改。
  • 请求伪造。
  • 一部分重放攻击。

12. 常见误区

12.1 “加密就能防篡改”

不完全对。单纯加密主要保证机密性,完整性通常还要结合:

  • MAC / HMAC
  • 数字签名
  • AEAD 模式

12.2 “签名就是把内容加密一遍”

不对。签名的重点不是保密,而是证明来源和完整性。

12.3 “有公钥就能解密私钥签名的内容”

这是一种很容易误导的说法。验签不是“把签名解密成原文”,而是通过密码学算法验证:

  • 该签名是否由对应私钥生成。
  • 原文摘要是否一致。

12.4 “哈希摘要可以拿来存密码”

不能简单这么做。密码存储不能只用快速摘要,如 MD5SHA-256 直接裸算,而应该用:

  • bcrypt
  • scrypt
  • Argon2

因为密码场景的重点是抗暴力破解,而不是只做一般完整性校验。

12.5 “有 HTTPS 就绝对安全”

不对。HTTPS 主要保护传输链路,它不能自动解决:

  • XSS
  • SQL 注入
  • 业务越权
  • 弱口令
  • 服务端代码漏洞

13. 面试里可以怎么回答

如果面试官问“密码学基础知识有哪些”,可以按这个顺序答:

  1. 先说密码学主要解决机密性、完整性、身份认证、不可否认性。
  2. 再区分对称加密和非对称加密:对称快但密钥分发难,非对称慢但能支持签名和更灵活的密钥体系。
  3. 然后解释公钥私钥两种用途:公钥加密私钥解密,私钥签名公钥验签。
  4. 再补摘要、HMAC、证书、CA、密钥交换各自解决什么问题。
  5. 最后结合 HTTPS、JWT、API 签名讲工程落地。

一句收尾可以是:

密码学不是只有“加密”一个动作,而是一套围绕保密、认证、完整性和信任传递的工具箱。工程上通常不是单独使用某个算法,而是把对称加密、非对称加密、签名、摘要、证书和密钥交换组合起来使用。