密码学(三):加密、签名与证书体系

发布时间:2026/9/6 4:42:29
密码学(三):加密、签名与证书体系 一、密码学基础概念1.1 什么是密码学密码学Cryptography是研究如何在不安全的通信环境中安全传输信息的科学。现代密码学主要解决四大安全目标机密性Confidentiality防止未授权访问完整性Integrity防止数据被篡改身份认证Authentication验证通信方身份不可抵赖性Non-repudiation防止发送方否认┌──────────────────────────────────────────────────┐ │ 密码学的核心技术 │ ├──────────────────────────────────────────────────┤ │ │ │ 对称加密 ──── 机密性速度快 │ │ │ │ 非对称加密 ── 机密性 密钥交换 │ │ │ │ 数字签名 ──── 完整性 身份认证 不可抵赖 │ │ │ │ 数字证书 ──── 公钥分发 信任链 │ │ │ └──────────────────────────────────────────────────┘二、对称加密Symmetric Encryption2.1 核心原理对称加密使用同一个密钥进行加密和解密。发送方和接收方必须事先共享这个密钥。明文 ──[密钥K]── 加密算法 ── 密文 ──[密钥K]── 解密算法 ── 明文 Alice 网络传输 Bob │ │ │ 共享密钥 K 共享密钥 K │ │ │ ┌───▼────┐ ┌──────▼───┐ │ 加密 │ │ 解密 │ │ E(K,M) │────── 密文 C 通过不安全通道 ───────│ D(K,C) │ └────────┘ └──────────┘ │ │ 明文 M 明文 M2.2 常见算法算法密钥长度特点应用场景AES128/192/256 bit业界标准安全高效TLS、磁盘加密、VPNDES56 bit已不安全已弃用历史遗留系统3DES168 bitDES 的加强版逐渐淘汰金融系统ChaCha20256 bit软件实现快移动端友好TLS、移动应用2.3 工作模式对称加密需要选择工作模式来处理大于一个块的数据ECB电子密码本不推荐相同明文产生相同密文CBC密码块链接需要 IV初始化向量常用CTR计数器模式可并行适合高性能场景GCM伽罗瓦计数器模式带认证的加密TLS 1.3 首选AES-GCM 示例TLS 1.3 常用 明文块 M₁ M₂ M₃ │ │ │ IV Nonce │ │ │ ▼ ▼ ▼ ┌───┐ ┌───┐ ┌───┐ 密钥 K──│AES│ │AES│ │AES│ └─┬─┘ └─┬─┘ └─┬─┘ │ │ │ ▼ ▼ ▼ 密文块 C₁ C₂ C₃ 认证标签Tag2.4 优缺点✅ 优点加密速度极快硬件加速后可达 GB/s适合大量数据加密算法成熟实现简单❌ 缺点密钥分发问题如何安全地让通信双方共享密钥密钥管理复杂n 个人两两通信需要 n(n-1)/2 个密钥无法实现数字签名三、非对称加密Asymmetric Encryption3.1 核心原理非对称加密使用一对密钥公钥Public Key公开任何人都可以获取私钥Private Key保密只有所有者持有数学特性公钥加密的内容只能用私钥解密私钥加密的内容只能用公钥解密从公钥无法推导出私钥计算上不可行Alice Bob │ │ ┌───────┴────────┐ ┌───────┴────────┐ │ 私钥 Kₐ_priv │ │ 私钥 Kᵦ_priv │ │ 公钥 Kₐ_pub │ │ 公钥 Kᵦ_pub │ └───────┬────────┘ └───────┬────────┘ │ │ │ 1. Alice 用 Bob 的公钥加密 │ │ E(Kᵦ_pub, M) C │ │─────────────────────────────────│ │ │ │ 2. Bob 用自己的私钥解密 │ │ D(Kᵦ_priv, C) M │ │ ◄───3.2 常见算法算法密钥长度特点应用场景RSA2048/3072/4096 bit应用最广可加密可签名TLS、SSH、代码签名ECC椭圆曲线256/384/521 bit短密钥高安全移动端友好比特币、TLS 1.3DSA2048/3072 bit仅用于签名PGP、SSHDiffie-Hellman2048 bit密钥交换专用TLS、IPsec3.3 RSA 加密示例# 1. 生成密钥对fromCrypto.PublicKeyimportRSA keyRSA.generate(2048)private_keykey.export_key()public_keykey.publickey().export_key()# 2. 加密用公钥fromCrypto.CipherimportPKCS1_OAEP cipherPKCS1_OAEP.new(RSA.import_key(public_key))ciphertextcipher.encrypt(bHello Bob)# 3. 解密用私钥decipherPKCS1_OAEP.new(RSA.import_key(private_key))plaintextdecipher.decrypt(ciphertext)3.4 优缺点✅ 优点解决了密钥分发问题公钥可以公开传输密钥管理简单n 个人只需 n 对密钥可以实现数字签名❌ 缺点速度慢比对称加密慢 100-1000 倍不适合加密大量数据密钥长度较长RSA 2048 bit vs AES 256 bit四、混合加密系统实际应用实际通信中结合对称加密和非对称加密TLS/SSL 握手过程简化版 Client Server │ │ │ 1. Client Hello支持的加密套件 │ │ ─────────────────────────────────────────── │ │ │ │ 2. Server Hello 证书包含公钥 Kₛ_pub │ │ ─────────────────────────────────────────── │ │ │ │ 3. 客户端验证证书生成随机数 Pre-Master │ │ 用 Kₛ_pub 加密 Pre-Master │ │ ─────────────────────────────────────────── │ │ │ │ 4. 双方用 Pre-Master 推导出会话密钥 K_session │ │ 对称密钥 │ │ │ │ 5. 后续通信用 K_sessionAES-GCM加密 │ │ ══════════════════════════════════════════ │关键点非对称加密仅用于握手阶段交换对称密钥对称加密用于实际数据传输高效五、数字签名Digital Signature5.1 核心原理数字签名用于验证消息来源和消息完整性类似现实世界的手写签名。工作流程发送方用私钥对消息摘要进行签名接收方用发送方的公钥验证签名签名过程Alice 发送消息给 Bob Alice 端 消息 M │ ▼ [Hash] ──── 消息摘要 H(M) │ ▼ [私钥签名]── 数字签名 S Sign(Kₐ_priv, H(M)) │ ▼ (M, S) 发送给 Bob Bob 端 收到 (M, S) │ ├── [Hash] ──── H(M) ─────┐ │ │ └── [公钥验证] ─ H(M) ─────┤ 比较 用 Kₐ_pub │ Verify(Kₐ_pub, S) │ ▼ H(M) H(M) ? ✓ 签名有效 ✗ 签名无效5.2 为什么要先 Hash直接对消息签名的问题消息可能很大几 GB签名慢RSA 只能签名小于密钥长度的数据解决方案用 Hash 函数SHA-256将消息压缩成固定长度摘要32 字节只对摘要签名消息 (1 GB) ── SHA-256 ── 摘要 (32 bytes) ── RSA 签名 ── 签名 (256 bytes)5.3 常见签名算法算法基础特点应用RSA-PSSRSA抗碰撞攻击HTTPS、邮件签名ECDSA椭圆曲线短签名高效比特币、以太坊EdDSAEdwards 曲线安全性好无随机数SSH、PGP5.4 数字签名的安全保证完整性消息被篡改后签名验证失败身份认证只有持有私钥的人能生成有效签名不可抵赖发送方无法否认发送过该消息攻击场景示例中间人尝试篡改 Alice 发送M 转账 100 元, S Sign(Kₐ_priv, H(M)) │ ▼ 攻击者篡改M 转账 10000 元 │ ▼ Bob 验证Verify(Kₐ_pub, S, M) ── H(M) ! H(M) ✗ 验证失败六、数字证书Digital Certificate6.1 为什么需要数字证书问题如何确认公钥真的属于 Alice而不是被中间人替换中间人攻击没有证书的情况 Alice 攻击者 Eve Bob │ │ │ │ 公钥 Kₐ_pub │ │ │ ─────────X │ │ │ 替换成自己的公钥 Kₑ_pub │ │ │ ────────────────── │ │ │ │ │ Bob 误以为 Kₑ_pub 是 Alice 的公钥解决方案引入可信第三方Certificate Authority, CA颁发证书。6.2 数字证书的结构数字证书是一个经过 CA 签名的数据结构包含┌─────────────────────────────────────────┐ │ X.509 数字证书 │ ├─────────────────────────────────────────┤ │ • 版本号V3 │ │ • 序列号唯一标识 │ │ • 签名算法如 RSA-SHA256 │ │ • 颁发者CA 的名称 │ │ • 有效期起始 - 结束时间 │ │ • 持有者域名/组织信息 │ │ • 持有者公钥Kₐ_pub │ │ • 扩展字段如 SAN - 备用域名 │ │ • CA 的数字签名 │ │ Sign(CA_priv, Hash(证书内容)) │ └─────────────────────────────────────────┘6.3 证书验证流程浏览器验证 example.com 的证书 1. 服务器发送证书 ┌───────────────────────────┐ │ 持有者: example.com │ │ 公钥: Kₛ_pub │ │ 颁发者: DigiCert CA │ │ CA 签名: S_CA │ └───────────────────────────┘ │ ▼ 2. 浏览器检查证书字段 ✓ 域名匹配 ✓ 有效期内 ✓ 证书未被吊销 │ ▼ 3. 验证 CA 签名 用 DigiCert CA 的公钥内置于浏览器/操作系统 Verify(CA_pub, S_CA, 证书内容) │ ▼ 4. 验证通过 ✓ example.com 的公钥 Kₛ_pub 可信6.4 证书链Certificate Chain实际应用中证书形成信任链┌──────────────────────────────────────────────────┐ │ 根证书Root CA │ │ 自签名内置于操作系统/浏览器 │ │ 例如DigiCert Global Root CA │ └─────────────────┬────────────────────────────────┘ │ 签名 ▼ ┌──────────────────────────────────────────────────┐ │ 中间证书Intermediate CA │ │ 由根 CA 签名减少根证书的暴露风险 │ │ 例如DigiCert SHA2 Secure Server CA │ └─────────────────┬────────────────────────────────┘ │ 签名 ▼ ┌──────────────────────────────────────────────────┐ │ 叶子证书End-Entity │ │ 实际网站的证书 │ │ 例如example.com │ └──────────────────────────────────────────────────┘ 验证过程从叶子证书逐级向上验证到根证书6.5 证书的生命周期申请 ── 颁发 ── 部署 ── 更新 ── 吊销 │ │ │ │ │ │ │ │ │ └─ CRL/OCSP 查询 │ │ │ └─ Lets Encrypt 自动续期 │ │ └─ 配置到 Web 服务器 │ └─ CA 验证域名所有权HTTP/DNS └─ 生成 CSRCertificate Signing Request七、公钥基础设施PKI7.1 PKI 体系架构┌───────────────────────────────────────────────┐ │ PKI 生态系统 │ ├───────────────────────────────────────────────┤ │ │ │ 根 CA ──┬── 中间 CA 1 ── 证书 A、B、C │ │ │ │ │ └── 中间 CA 2 ── 证书 D、E │ │ │ │ 证书存储库Repository │ │ • 证书下载 │ │ • CRL证书吊销列表 │ │ │ │ 验证服务 │ │ • OCSP在线证书状态协议 │ │ • 实时验证证书是否被吊销 │ │ │ └───────────────────────────────────────────────┘7.2 常见 CA 机构Let’s Encrypt免费自动化90 天有效期DigiCert商业 CAEV 证书绿色地址栏GlobalSign全球通用Symantec已被 DigiCert 收购八、完整交互流程示例HTTPS 通信8.1 TLS 1.2 完整握手客户端浏览器 服务器example.com 1. Client Hello ├─ 支持的 TLS 版本 ├─ 支持的加密套件 └─ 随机数 ClientRandom ──────────────────────────────────────────── 2. Server Hello ├─ 选择的 TLS 版本1.2 ├─ 选择的加密套件如 ECDHE-RSA-AES128-GCM-SHA256 ├─ 随机数 ServerRandom ├─ 证书包含服务器公钥 Kₛ_pub └─ Server Hello Done ──────────────────────────────────────────── 3. 客户端验证证书 ├─ 检查证书链到根 CA ├─ 检查证书有效期 ├─ 检查域名匹配 └─ 检查证书是否被吊销OCSP 4. Client Key Exchange ├─ 生成 Pre-Master Secret48 字节随机数 ├─ 用 Kₛ_pubRSA或 ECDHE 交换 ├─ [Change Cipher Spec] └─ Encrypted Handshake Message ──────────────────────────────────────────── 5. 服务器解密 Pre-Master Secret ├─ 用私钥 Kₛ_priv 解密RSA ├─ 或完成 ECDHE 密钥协商 ├─ [Change Cipher Spec] └─ Encrypted Handshake Message ──────────────────────────────────────────── 6. 双方推导会话密钥 K_session PRF(Pre-Master, ClientRandom, ServerRandom) 7. 加密通信开始 ════════════════════════════════════════════ 所有数据用 AES-128-GCM K_session 加密 ════════════════════════════════════════════8.2 密钥推导过程输入 • Pre-Master Secret48 字节 • ClientRandom32 字节 • ServerRandom32 字节 PRF伪随机函数: Master Secret PRF(Pre-Master, master secret, ClientRandom ServerRandom) 再次推导 Key Block PRF(Master Secret, key expansion, ServerRandom ClientRandom) 从 Key Block 中提取 • Client Write Key客户端加密密钥 • Server Write Key服务器加密密钥 • Client Write IV初始化向量 • Server Write IV8.3 数据传输阶段发送 HTTP 请求 明文GET /index.html HTTP/1.1 │ ▼ [AES-GCM 加密] 用 Client Write Key │ ▼ 密文 MAC认证标签 │ ▼ [TLS 记录] ├─ 类型Application Data ├─ 版本TLS 1.2 ├─ 长度 └─ 加密内容 │ ▼ 发送到服务器 服务器接收后 [AES-GCM 解密] 用 Client Write Key 验证 MAC │ ▼ 恢复明文九、安全性分析与最佳实践9.1 常见攻击及防御攻击类型原理防御措施中间人攻击截获并篡改通信证书验证、HSTS重放攻击重复发送旧消息时间戳、序列号降级攻击强迫使用弱算法禁用旧协议SSL 3.0心脏滴血OpenSSL 内存泄露及时更新库9.2 最佳实践服务器端✅ 使用 TLS 1.3禁用 TLS 1.0/1.1✅ 配置强加密套件AEAD 优先✅ 启用 HSTS强制 HTTPS✅ 证书使用 2048 位以上 RSA 或 ECC P-256✅ 配置 OCSP Stapling减少客户端查询客户端✅ 验证证书链完整性✅ 检查证书吊销状态✅ 固定公钥Certificate Pinning✅ 拒绝自签名证书生产环境9.3 性能优化优化策略 1. 会话复用Session Resumption ├─ Session ID └─ Session TicketTLS 1.3 0-RTT 2. 硬件加速 ├─ AES-NI 指令集 └─ SSL 卸载硬件 3. 选择高效算法 ├─ ChaCha20-Poly1305移动端 └─ ECDHE比 RSA 握手快 4. OCSP Stapling └─ 服务器代为查询证书状态十、总结核心技术关系图密码学体系 │ ┌───────────────┼───────────────┐ │ │ │ 对称加密 非对称加密 Hash 函数 机密性 密钥交换 完整性 │ │ │ └───────┬───────┴───────┬───────┘ │ │ 混合加密 数字签名 TLS 通信 身份认证 │ │ └───────┬───────┘ │ 数字证书 信任体系 │ PKI 公钥基础设施关键要点对称加密速度快但密钥分发困难非对称加密解决密钥分发但速度慢混合加密结合两者优点实际应用的标准做法数字签名保证完整性和不可抵赖性数字证书解决公钥信任问题PKI 体系构建完整的信任链实际应用场景HTTPSWeb 安全通信SSH安全远程登录VPN企业网络安全区块链数字货币交易代码签名软件分发安全Email 加密PGP/S/MIME掌握这些核心概念是理解现代网络安全的基础延伸阅读RFC 5246 - TLS 1.2RFC 8446 - TLS 1.3RFC 5280 - X.509 证书标准NIST Special Publications密码学标准