Security+ Academy · 课时

密钥交换与混合加密

了解 Diffie-Hellman 密钥交换和 TLS 如何结合对称与非对称方法,同时实现高性能与安全性。

第 4 / 4 课13 个步骤

密钥交换与混合加密 是 CoddyKit 上的免费 Security+ Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Security+ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Security+ Academy 课程共包含 4 节课。

密钥交换问题

对称加密要求双方在进行安全通信之前共享同一个密钥。但是,如果双方还没有安全信道,应该如何安全地共享该密钥呢?这个密钥分发问题直到 1976 年才被解决,当时 Whitfield Diffie 和 Martin Hellman 发表了一篇具有革命性意义的论文。他们提出的解决方案——Diffie-Hellman 密钥交换——允许双方通过不安全信道建立共享密钥,而无需传输密钥本身,即使窃听者可以看到整个通信过程也无法获取密钥。

Diffie-Hellman 密钥交换概念

Diffie-Hellman(DH)利用了基于离散对数问题的巧妙数学方法。双方先就两个公开值达成一致(一个较大的质数 p 和一个生成元 g)。每一方生成一个私有随机数,根据该随机数计算出一个公开值,然后交换公开值。此后,每一方都可以利用自己的私有数和对方的公开值计算出相同的共享密钥;但只能看到公开值的窃听者,必须解决离散对数问题才能计算共享密钥,而对于较大的数,这在计算上是无法实际完成的。

# Diffie-Hellman conceptual flow:
# 1. Agree on public parameters: prime p=23, generator g=5
# 2. Alice picks private a=6:  computes A = g^a mod p = 5^6 mod 23 = 8
# 3. Bob picks private b=15:   computes B = g^b mod p = 5^15 mod 23 = 19
# 4. Alice sends A=8 to Bob;   Bob sends B=19 to Alice
# 5. Alice: s = B^a mod p = 19^6 mod 23 = 2
# 6. Bob:   s = A^b mod p = 8^15 mod 23 = 2
# Shared secret = 2 (without either party transmitting it!)

ECDH:椭圆曲线 Diffie-Hellman

椭圆曲线 Diffie-Hellman(ECDH)是 Diffie-Hellman 密钥交换的现代高效变体。它使用椭圆曲线数学,而不是模幂运算,以更小的参数实现相同级别的安全性。256 位 ECDH 密钥提供的安全性相当于 3072 位 DH 密钥。ECDHE(其中的“E”代表 Ephemeral)会为每个会话生成新的密钥对,从而提供完美前向保密。TLS 1.3 强制要求使用 ECDHE 进行密钥交换,使其成为现代 Web 安全中占主导地位的密钥交换机制。

完美前向保密(PFS)

完美前向保密(PFS)可以确保即使服务器的长期私钥日后被窃取,会话密钥也不会因此泄露。PFS 通过在每次会话的密钥交换中使用临时密钥对来实现——会话密钥由一个临时密钥对派生而来,会话结束后该密钥对会被丢弃。如果没有 PFS(而是使用 RSA 密钥交换),攻击者可以先记录今天的加密流量,日后再窃取私钥,然后追溯解密所有过去的流量。有了 PFS,即使密钥遭到泄露,过去的会话仍然安全。

# Check if a website uses Perfect Forward Secrecy
openssl s_client -connect google.com:443 2>/dev/null | grep 'Cipher'
# Cipher    : TLS_AES_256_GCM_SHA384 (TLS 1.3 - always has PFS)
# Or look for ECDHE in cipher name:
# Cipher : ECDHE-RSA-AES256-GCM-SHA384 (TLS 1.2 with PFS)
# DHE-RSA-AES256-GCM-SHA384 (DHE = also PFS)
# RSA-AES256-SHA (NO PFS - static RSA key exchange)

混合加密:兼具两者优势

Hybrid 加密结合非对称密码学与对称密码学,同时实现非对称加密在key 管理方面的优势和对称加密的性能优势。具体过程如下:(1) 生成一个随机的对称会话 key;(2) 使用此对称 key 加密大量数据(速度快);(3) 使用接收方的公钥加密该对称 key(确保 key 传输安全);(4) 同时发送加密数据和加密后的 key。接收方使用自己的私钥解密对称 key,然后使用恢复出的对称 key 解密数据。

# Hybrid encryption example with OpenSSL
# 1. Generate a random AES-256 session key
openssl rand -out session.key 32

# 2. Encrypt the large file with the symmetric session key
openssl enc -aes-256-cbc -pbkdf2 -in largefile.tar -out largefile.enc -pass file:session.key

# 3. Encrypt the session key with recipient's RSA public key
openssl rsautl -encrypt -inkey recipient_public.pem -pubin -in session.key -out session.key.enc

# Send: largefile.enc + session.key.enc

TLS Handshake:混合加密的实际应用

TLS Handshake 是现实世界中最常见的混合加密实现。在 TLS 1.3 中:(1) 客户端发送所支持的密码套件和 key 共享值(ECDHE 公共值);(2) 服务器返回自己的 key 共享值、certificate(其中包含其公钥)以及签名;(3) 双方通过 ECDH 计算出相同的共享密钥;(4) 后续所有流量都使用由共享密钥派生出的对称 key 进行加密(AES-256-GCM)。整个过程只需一次往返即可建立加密通道,而且不会直接传输对称 key。

# Observe the TLS 1.3 handshake
openssl s_client -connect example.com:443 -tls1_3
# You'll see:
# TLSv1.3, Handshake [length 0002], ServerHello
# Cipher    : TLS_AES_256_GCM_SHA384
# Session-ID: (no session ID in TLS 1.3, uses PSK)
# Verify return code: 0 (ok)

key 封装机制(KEM)

现代密码学使用 Key Encapsulation Mechanisms (KEM),以一种比直接使用非对称加密加密会话 key 更正式、更安全的方式进行密钥交换。KEM 允许一方生成一个对称 key,并使用接收方的公钥对其进行“封装”,使得只有接收方能够将其解封装(恢复出来)。NIST 的后量子标准 CRYSTALS-Kyber 是一种基于格问题而非整数分解或椭圆曲线的 KEM,因此能够抵抗量子计算机攻击。

RSA 密钥交换与 ECDHE

在 TLS 1.3 之前,RSA 密钥交换很常见:客户端生成预主密钥,使用服务器的 RSA 公钥加密后发送给服务器。问题在于:这种方式不提供前向保密。如果服务器的私钥之后遭到泄露,以这种方式加密的所有历史会话都可能被解密。TLS 1.3 完全移除了 RSA 密钥交换(只允许使用 ECDHE),目的正是确保所有连接都具备前向保密。这也是为什么禁用仍允许静态 RSA 的 TLS 1.0 和 1.2,并强制使用 TLS 1.3,能够提升安全性。

会话 key 派生

Diffie-Hellman 交换产生的共享密钥不会直接用作加密 key。相反,它会被输入Key Derivation Function (KDF),以生成实际的加密 key 和初始化向量。TLS 1.3 使用 HKDF (HMAC-based Key Derivation Function),为两个方向的加密分别派生独立的 key。KDF 会增加计算成本(使暴力破解更加困难)、将较短的密钥扩展为所需数量的 key 字节,并确保派生出的 key 具备适合用作对称 key 的良好统计特性。

PGP 电子邮件加密:电子邮件中的混合加密

Pretty Good Privacy (PGP) 及其开源等价实现 OpenPGP 使用混合加密来保护电子邮件。当 Alice 向 Bob 发送加密邮件时:PGP 生成一个随机的对称会话 key,使用该 key 加密邮件正文(AES),使用 Bob 的 RSA 或 ECC 公钥加密会话 key,然后将两者一起发送。对于已签名的邮件,PGP 对消息进行哈希处理,并使用 Alice 的私钥对哈希值进行签名,从而提供不可否认性。PGP 的信任网模型(用户相互签署对方的 key)是基于证书颁发机构的 PKI 的一种替代方案。

# Encrypt and sign an email file with GPG (OpenPGP)
# Encrypt to Bob using his public key, sign with Alice's private key
gpg --encrypt --sign --recipient bob@example.com --armor message.txt

# Decrypt (Bob uses his private key)
gpg --decrypt message.txt.asc

# List available keys
gpg --list-keys
gpg --list-secret-keys

密钥交换中的中间人风险

Diffie-Hellman 密钥交换能够抵御被动窃听者,但如果通信双方没有相互验证身份,就容易受到主动中间人(MITM)攻击。攻击者可以截获 Alice 的公共值,替换成自己的值,并分别与 Alice 和 Bob 建立独立的 DH 会话,使双方都误以为自己正在与对方通信。这就是 TLS 将 DH 密钥交换与certificate 身份验证结合起来的原因:由受信任 CA 签署的服务器 certificate 能够证明服务器身份,从而防止攻击者在 Handshake 期间替换公钥。

快速检查

测试您对本课中 CompTIA Security+ (SY0-701) 知识点的理解。

课程回顾

在本课中,您学习了:Diffie-Hellman 通过让通信双方在不安全通道上派生共享密钥,解决了密钥交换问题;临时密钥交换算法 ECDHE 提供Perfect Forward Secrecy;混合加密结合非对称密钥交换与对称大批量数据加密,以提高效率;TLS 1.3 要求所有连接使用 ECDHE。接下来,我们将学习Certificate Authorities and Trust Chains。

免费开始

用 AI 导师学习 Security+ Academy — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「密钥交换与混合加密」课时是免费的吗?

是的 — 「密钥交换与混合加密」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Security+ Academy 课程的其余内容,请升级到 CoddyKit PRO。 Security+ Academy 课程共包含 4 节课。

「密钥交换与混合加密」这节课中我会学到什么?

了解 Diffie-Hellman 密钥交换和 TLS 如何结合对称与非对称方法,同时实现高性能与安全性。 你通过在浏览器中直接运行的动手代码来练习 Security+ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Security+ Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Security+ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「密钥交换与混合加密」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Security+ Academy 课中编写并运行代码吗?

能。每节 Security+ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 对称加密算法
  2. 非对称加密与密钥对
  3. 哈希与数据完整性
  4. 密钥交换与混合加密
← 返回 Security+ Academy