CRYPTOGRAPHY · TRUST BY DESIGN

密码学:把信任写进数学

密码学不只是将明文转换为密文,更是在不可信网络中提供机密性、完整性、身份认证与真实性保障

明文 + 密钥 → 密文 + 正确密钥 → 明文

如果传输链路和沿途节点都不可信,Alice 如何确保消息安全抵达 Bob?

互联网通信通常需要经过多个中间节点。聊天消息、订单和登录请求,可能依次经过路由器、运营商网络、云服务与公共网络。密码学的目标,是让传输链路可以不可信,通信过程仍具备可信保障

👩🏻‍💻Alice发送者
🔒8F A2 1C 7B
👀Eve 只能看到密文
👨🏻‍💻Bob接收者
首先需要明确:密码学并不承诺脱离条件的“绝对不可破解”,而是通过计算复杂度与密钥空间,将攻击所需的时间和资源提高到现实中难以承受的水平。

从信息保密到真实性验证

现代密码系统通常要同时完成四项任务。只实现其中一项,往往还不够安全。

CONFIDENTIALITY

机密性

防止未授权主体获取内容。它回答:哪些主体可以访问?

典型工具:加密
INTEGRITY

完整性

任何未授权改动都应能够被检测。它回答:数据是否保持完整?

典型工具:MAC、哈希、签名
AUTHENTICATION

身份认证

验证通信实体的身份。它回答:对方是否为其声称的主体?

典型工具:证书、签名、挑战响应
NON-REPUDIATION

不可否认性

在密钥得到妥善管理的前提下,为签名行为的归属提供可验证证据。

典型工具:数字签名
一个关键区别

编码是为了表示数据,任何人都能还原;加密依赖密钥,只有授权者能还原;哈希通常是单向摘要,设计目标就不是还原。

秘密应该放在密钥里,而不是算法里

古典密码常用替换、移位或重排隐藏文字。凯撒密码把每个字母向后移动固定位置:当位移为 3 时,A → DHELLO → KHOOR

Kerckhoffs 原则
即使敌人知道系统如何工作,只要密钥仍然保密,系统也应该安全。

公开算法可以接受全世界检验;真正需要保护的是更短、更易更换的密钥。自行设计并依赖算法保密,通常只会形成安全性幻觉。

实验 01

调整参数,观察凯撒密码

3
密文 PHHW PH DW QLQH

位移只有 26 种可能,穷举即可恢复明文。古典密码适合用于理解基本原理,但无法满足现代数据安全需求。

共享密钥完成加密与解密

对称加密中,发送方和接收方共享同一把秘密密钥。它的计算效率较高,适合保护文件、磁盘、数据库以及网络传输中的大量数据。

Alice
转账 100 元
🔑 K 加密
A7·2F·91·C0
解密 🔑 K
Bob
转账 100 元
01

仅有算法并不足够

现代系统常使用 AES 等标准算法,但在工程实现中还需要选择安全的工作模式,并验证数据的完整性。

02

Nonce 不是密钥

Nonce 可以公开,但在许多模式下绝不能与同一密钥重复使用。它的作用是让相同明文产生不同密文。

03

密钥安全分发

如果 Alice 和 Bob 此前没有建立共享秘密,如何安全获得同一密钥?这是非对称密码学解决的重要问题之一。

C = Encrypt(K, P, Nonce) 加密 P = Decrypt(K, C, Nonce) 解密

公钥可以公开,私钥必须严格保管

非对称密码使用一对数学相关、功能不同的密钥:公钥可以公开,私钥必须保密。公钥不是“较弱的密码”,私钥也无法在可行的计算成本内由公钥推导出来。

PUBLIC KEY

公钥

可以公开分发,其他人可用它加密发送给你的消息,或验证由对应私钥生成的签名。

数学关系
数学相关,但在可行计算资源内难以反向推导
PRIVATE KEY

私钥

应由持有者严格保管,用于解密或签名;一旦泄露,通信机密性和身份可信度都可能受到破坏。

工程实践中的组合方案

混合加密:非对称机制建立密钥,对称机制保护数据

1建立身份用证书与公钥确认对方
2协商会话密钥安全建立短期共享秘密
3高速加密通信用对称加密保护后续数据

该方案既解决了通信双方缺少预共享密钥的问题,也避免使用计算开销较高的非对称运算处理全部数据。

将任意长度数据映射为固定长度摘要

哈希函数把任意长度输入压缩为固定长度摘要。好的密码学哈希应当难以逆推、难以寻找相同摘要,并对微小变化极其敏感。

固定长度

无论输入是一个字符还是大体积文件,SHA-256 的输出始终是 256 位。

单向性

从输入算摘要容易,从摘要反推出原文在计算上极难。

抗碰撞

很难找到两份不同数据,让它们产生完全相同的摘要。

雪崩效应

输入只发生一个字符的变化,输出摘要通常也会显著改变。

实验 02

观察 SHA-256 的雪崩效应

修改一个字符,观察摘要的变化程度。计算完全在浏览器本地完成。

A 的摘要等待计算…
B 的摘要等待计算…

点击按钮,比较两组十六进制摘要。

哈希不是加密:加密为了让授权者日后解密;哈希的目的通常是比较、校验或构造其他密码机制,不存在通用的“解密哈希”操作。

内容可以公开,来源与完整性必须可验证

数字签名不负责隐藏内容,而是用于验证签名是否由对应私钥生成,以及内容在签名后是否被修改。

发送方 · 签名
消息合同.pdf
↓ 哈希
摘要5B9A…E21C
↓ 私钥签名
数字签名SIGNATURE
发送
消息+签名
接收方 · 验证
重新计算消息摘要5B9A…E21C
=
用公钥验证签名5B9A…E21C
✓ 签名有效,内容未被篡改
✦ DIGITAL CERTIFICATE

example.com

主体
example.com
公钥
30 82 01 0A …
签发者
可信 CA
有效期
一段明确时间
CA 数字签名
证书解决公钥归属问题

否则,攻击者可以用自己的公钥替换 Bob 的公钥

数字证书把域名、组织或设备身份与公钥绑定,并由受信任的证书颁发机构签名。浏览器或操作系统维护一组信任根,再沿证书链逐级验证。

证书不是网站的“加密密码”,而是一份可验证的数字身份凭证。

加密连接并不等同于已确认对端身份

如果公钥交换没有经过身份认证,攻击者 Mallory 可以处于浏览器与服务器的通信路径上,并分别与两端建立加密连接。双方看到的都是“密文”,但攻击者仍能解密、读取、修改,再重新加密转发——这就是中间人攻击(Man-in-the-Middle,MITM)。

💻 ALICE · 浏览器 我要访问 Bob 请求网站公钥
🎭 MALLORY · 攻击者 替换双方公钥 解密 → 修改 → 重加密
🖥️ BOB · 真服务器 以为是正常客户端 正常处理请求
!

核心风险不在于是否使用加密,而在于能否确认公钥的真实归属。没有可靠身份认证时,两条加密通道反而可能让 Alice 和 Bob 都产生安全错觉。

数字证书包含哪些信息

数字证书由“身份信息+公钥+签发者签名”构成

网站证书通常采用 X.509 格式。它可以公开传输,因为证书的任务不是保密,而是让浏览器能够验证公钥归属和签发关系。

SUBJECT / SAN

证书为谁服务

主体信息以及允许使用该证书的域名列表。浏览器主要检查访问域名是否出现在 SAN 中。

PUBLIC KEY

网站公钥

用于验证服务器签名或参与密钥建立;与之配对的私钥必须由服务器严密保管。

ISSUER

谁签发了证书

记录签发该证书的 CA。浏览器会继续寻找签发者证书,直到连接到可信根。

VALIDITY

生效与失效时间

证书只在明确的时间窗口内有效,过期或尚未生效都会触发浏览器警告。

SERIAL / USAGE

序列号与用途

序列号帮助唯一识别证书;密钥用途约束它能否用于服务器认证、签名等场景。

CA SIGNATURE

签发者数字签名

CA 对证书中的待签名数据进行签名。受保护字段被修改后,签名验证就会失败。

Certificate Issuance

一张网站证书是怎样被颁发的?

CA 不会向网站提供所谓的“万能密钥”,而是在完成验证后,通过数字签名确认某个公钥与特定域名或组织之间存在经过核验的绑定关系。

  1. 01
    网站生成密钥对

    服务器本地生成公钥和私钥。私钥应留在受控环境中,不应提交给 CA。

  2. 02
    创建并提交 CSR

    CSR(证书签名请求)携带公钥、申请域名和相关信息,并由申请者私钥签名以证明持有私钥。

  3. 03
    CA 验证申请资格

    最常见的是通过 DNS 记录或网站指定文件验证域名控制权;根据证书类型,还可能核验组织身份。

  4. 04
    中间 CA 签发证书

    验证通过后,CA 通常使用中间 CA 的私钥对网站证书签名,并把证书及中间证书交给申请者。

  5. 05
    服务器部署证书链

    网站安装自己的服务器证书和中间证书,保管对应私钥;之后在 TLS 握手中把服务器证书和必要的中间证书发送给浏览器。

Chain of Trust

浏览器信任 CA 的依据是什么?

操作系统或浏览器预装并维护一组根证书信任库。根 CA 通常不直接大量签发网站证书,而是签发并约束中间 CA,再由中间 CA 签发服务器证书,以降低根密钥暴露风险并便于分工和撤销。

信任锚根 CA 证书已在系统或浏览器信任库中
签名授权 ↓
签发机构中间 CA 证书由根 CA 签名并限制用途
签发证明 ↓
最终实体example.com 证书绑定域名与网站公钥
浏览器收到证书后

通常需要完成六项检查

  • 域名是否匹配?访问的域名必须被证书的 SAN 覆盖。
  • 有效期是否符合要求?证书不能过期,也不能尚未生效。
  • 签名是否有效?逐级使用签发者公钥验证证书签名。
  • 能否构建到可信根的证书链?证书链最终必须落到本机信任库认可的根证书。
  • 密钥用途是否符合要求?证书用途、算法和安全参数必须满足服务器认证要求。
  • 是否已失效或被撤销?浏览器与系统会结合有效期、更新机制以及 CRL、OCSP 等撤销信息作出判断。
证书也有生命周期: 到期前需要续期;私钥泄露、错误签发或控制权变化时应撤销并重新签发。公开信任的 TLS 证书还会借助证书透明度日志,让异常或未经授权的签发更容易被发现。

浏览器的安全连接标识,依赖多种密码机制协同工作

当你访问 HTTPS 网站,浏览器与服务器会先完成一次握手,再开始传输网页和业务数据。证书认证负责确认服务器身份,密钥交换负责建立会话秘密;简化后可以理解为四步。

01
🌐

协商参数

双方声明支持的协议与算法,并交换随机信息。

02
🪪

验证证书

浏览器检查域名、有效期、签名与证书链,确认服务器证书对应当前访问的域名。

03
🤝

协商密钥

双方通过密钥交换得到相同的会话秘密,却不直接在网络上传送该秘密。

04

加密通信

后续数据使用快速的对称认证加密,同时获得机密性与完整性。

🛡️
证书如何阻断中间人攻击

攻击者可以转发流量,但难以伪造受信任的证书链

普通攻击者即使替换服务器公钥,也无法为目标域名生成一个能通过可信 CA 签名验证的证书。浏览器会因域名不匹配、签名链不可信或证书异常而阻止连接并显示警告。

前提是用户没有忽略证书警告,设备没有被植入恶意根证书,CA、服务器私钥和终端本身也没有失陷。

HTTPS 能保护
  • 传输内容具备机密性
  • 能够检测传输过程中的篡改
  • 在证书体系内验证网站身份
HTTPS 不能保证
  • 网站自身可信且不存在安全漏洞
  • 你的终端没有木马或恶意插件
  • 登录后提交的数据永远不被滥用

不应保存明文,也不应保存“可解密的密码”

服务端验证密码时,不需要存储用户的原始密码。更安全的做法是保存经过随机盐值+专用密码哈希函数处理后的结果。

用户密码correct horse …
随机盐值9f31a7…
慢速 KDFArgon2 / scrypt / bcrypt / PBKDF2提高计算与内存成本
数据库只存参数+盐+结果
盐值不需要保密

它负责让相同密码得到不同结果

每位用户使用独立随机盐值,可以破坏预先计算好的彩虹表,也避免通过摘要直接识别哪些用户设置了相同密码。

慢是一种安全属性

普通哈希计算过快,不适合密码存储

密码专用 KDF 会刻意提高单次猜测所需的计算与内存成本。合法登录通常只需计算一次,而攻击者进行大规模尝试时将承担显著成本。

普通用户应优先采取三项措施:
  1. 每个重要网站使用不同的长密码,交给密码管理器生成和保存。
  2. 开启多因素认证;条件允许时,优先使用抗钓鱼的通行密钥或安全密钥。
  3. 密码泄露后立即更换,但不要用固定规律在旧密码后面加数字。

算法强度不能代表系统整体安全

真实安全事件通常并非密码算法在数学层面被直接攻破,而是由密钥管理、随机数质量、参数配置、边界处理或错误使用引发。

01

自行设计密码算法

“别人看不懂”不等于安全。优先使用经过公开分析的标准方案与成熟库。

02

在代码中硬编码密钥

代码会进入仓库、日志、镜像和备份。密钥应由专门的密钥管理系统托管与轮换。

03

重复使用 Nonce

某些加密模式在 Nonce 重复时会泄露明文关系,甚至破坏认证能力。

04

只加密,不校验完整性

攻击者可能无法读懂内容,却仍能篡改密文。现代系统应优先使用认证加密。

05

使用非密码学安全随机数

可预测的随机数会直接削弱密钥和令牌的安全性。安全场景必须使用密码学安全随机源。

06

忽略密钥生命周期

密钥管理应覆盖生成、授权、使用、轮换、吊销、备份和销毁;仅考虑存储位置并不足够。

工程原则

不要自行设计密码算法或组合密码协议。应优先采用高层、带认证且默认安全的成熟接口,并由专业人员审查整体威胁模型。

量子计算不会让现有体系瞬间失效,但必须提前规划算法迁移

受影响更直接

部分公钥密码体系

足够强大的容错量子计算机,理论上可利用 Shor 算法高效解决某些整数分解和离散对数问题,从而威胁 RSA、经典椭圆曲线等体系。

需要增加安全余量

对称加密与哈希

Grover 算法带来的是平方级加速,不是瞬间破解。通过采用更大的密钥或摘要长度,可以恢复足够的安全余量。

迁移方向

后量子密码学

使用在经典与量子计算机上都被认为难解的数学问题构造新算法,并逐步替换容易受量子攻击的公钥组件。

迁移原则

先盘点密码资产,再制定算法替换计划

  1. 识别哪些系统、证书、协议和数据正在使用哪些密码算法?
  2. 分级哪些数据需要保密十年、二十年,存在“现在收集、未来解密”的风险?
  3. 敏捷使算法和参数具备可升级能力,避免将单一方案永久固化在系统中。
  4. 迁移采用经过标准化与充分评估的方案,分阶段兼容、验证和切换。

面对安全需求时,先明确需要实现哪种安全属性

工具核心输入主要目标能否还原典型场景
对称加密共享密钥保密+完整性持密钥可还原文件、磁盘、网络数据
非对称加密公钥 / 私钥密钥建立、保密相应私钥可还原建立安全通道、数字信封
哈希任意数据生成摘要设计上不可逆校验、签名的基础组件
消息认证码消息+共享密钥完整性+来源认证不用于还原接口请求、协议报文
数字签名消息+私钥身份认证+完整性验证,不是解密软件发布、合同、证书
数字证书身份+公钥+CA 签名绑定身份与公钥可公开,不用于还原HTTPS、代码签名、设备认证
密码 KDF密码+盐+参数提高猜测成本不还原,重新计算比较用户密码存储

密码学保护的不是一串字符,而是数字世界里的信任关系

加密让秘密只对授权者可见,哈希使数据变化能够被检测,签名让身份能够验证,证书让陌生人之间建立信任。它们共同支撑了登录、支付、软件更新、云服务和现代通信。

可靠的安全并非单纯依赖某种高强度算法,而是需要选择合适的密码机制、保护密钥、采用成熟协议,并持续管理其完整生命周期

安全系统 = 可靠算法 × 正确实现 × 密钥管理 × 人与流程

密码学是信任的数学基础,它默默支撑着现代数字社会的每一处安全细节。
从凯撒密码到后量子密码,人类对信任的追求从未停止。