0Pricing
Cryptology Academy · 课时

站到站协议(STS)

学习 STS 这一经过修正的认证密钥交换协议,以及它在 SSH 和 IKE 中的应用。

站到站协议(STS) 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。

STS 的动机

站到站(STS)协议(Diffie、van Oorschot、Wiener,1992 年)旨在提供无需可信第三方的身份认证密钥协商。纯 DH 密钥交换没有身份认证——中间人可以替换双方的 DH 值,分别与两方建立会话,而双方都以为彼此共享同一个密钥。STS 将 DH 与数字签名和公钥证书结合起来,提供相互身份认证。双方通过对 DH 交互记录签名来完成身份认证,将会话密钥绑定到各自的身份。STS 直接影响了 IKE(IPsec 的互联网密钥交换)和 SSH 的设计。

STS 协议步骤

STS 协议按以下步骤进行。Alice 和 Bob 先约定一个 DH 群(素数 p、生成元 g)。(1) Alice 向 Bob 发送 g^a mod p。(2) Bob 向 Alice 发送 g^b mod p、Cert_B、Sig_B{g^b, g^a}。Bob 使用自己的私钥,对两个 DH 值的连接结果进行签名。(3) Alice 验证 Bob 的证书和签名,然后发送 Cert_A、Sig_A{g^a, g^b},并使用会话密钥 K = (g^ab mod p) 加密这些内容。Alice 的身份和签名经过加密,从而保护 Alice 的身份——被动窃听者无法将 Alice 与此会话关联起来。双方都计算 K = g^ab mod p,并通过签名完成相互身份认证。

STS 与未经过身份认证的 DH

将 STS 与未经过身份认证的 DH 进行比较,可以看出身份认证带来了什么。在普通 DH 中,Mallory 截获 g^a 和 g^b,分别向 Alice 和 Bob 发送替代值 g^m,从而建立 K1 = g^am 和 K2 = g^bm。Mallory 可以解密所有流量。在 STS 中,Bob 会对 {g^b, g^a} 进行签名——该签名针对本次会话中的确切 DH 值。即使 Mallory 用 g^m 替换 g^b,也无法伪造由 Bob 的证书密钥生成的有效签名。Alice 会拒绝该会话。关键在于:密钥交换中的身份认证必须覆盖 DH 交互记录,而不能只覆盖身份声明。

STS 中的前向保密

STS 能够实现完美前向保密(PFS),因为会话密钥源自临时 DH 值(g^a、g^b),这些值会在会话结束后丢弃。即使 Bob 的长期签名密钥后来遭到泄露,以前记录的 STS 会话也无法被解密——攻击者需要临时 DH 指数 a 和 b,而它们从未被保存。这与 TLS 使用 ECDHE 密码套件时所具备的特性相同。如果不使用临时 DH(例如使用 RSA 密钥传输,让会话密钥通过服务器的静态 RSA 密钥加密),长期密钥一旦泄露,所有过去的会话都会被解密。

身份保护

STS 在第 3 步中加密 Alice 的证书和签名,从而针对被动窃听者提供响应方身份保护。被动观察者只能看到 Alice 的 DH 值和 Bob 的证书(Bob 在第 2 步以明文发送证书)。被动窃听者无法得知 Alice 的身份。发起 MITM 攻击的主动攻击者会因签名验证失败而被发现。这种不对称性(发起方身份会暴露给主动攻击者,而响应方身份受到被动窃听者保护)是有意的设计取舍——若要让双方身份都受到主动攻击者的保护,则需要更复杂的协议(例如预先共享 DH 值,或使用匿名群元素)。

STS 在 IKEv1 和 IKEv2 中的应用

IKE(互联网密钥交换)是用于 IPsec 的密钥管理协议,直接源自 STS。IKEv1(RFC 2409)在其主模式中实现了 STS 风格的签名身份认证。IKEv2(RFC 7296)是更简洁的重新设计,包含四个消息交换流程:IKE_SA_INIT(DH 交换、随机数)、IKE_AUTH(身份、证书,以及针对 IKE_SA_INIT 交互记录的签名)。对于 PSK,签名格式为 AUTH = PRF(SK_pi, 交互记录);对于证书身份认证,则是针对 IKE_SA_INIT 字节序列的数字签名。IKEv2 还支持可扩展身份认证协议(EAP),用于传统的基于密码的身份认证,这类似于 STS 对各种身份认证方法的支持。

STS 在 SSH 中的应用

SSH 密钥身份认证使用了类似 STS 第 3 步的机制。DH 密钥交换完成后(SSH_MSG_KEXDH_REPLY 包含服务器的公钥、DH 值,以及针对交换哈希值的签名),客户端会验证服务器的主机密钥。对于客户端身份认证(使用 publickey 方法发送 SSH_MSG_USERAUTH_REQUEST),客户端会使用自己的私钥对 {session_id, username, service, method, key_algo, public_key} 进行签名。session_id 源自 DH 交互记录,将身份认证绑定到这一特定会话,从而防止曾困扰 NS 的跨会话伪造。SSH 默认不使用证书,但在大型部署中可以通过 ssh-keygen -s(证书签名)支持证书。

SIGMA 协议族

STS 属于 SIGMA(SIGn-and-MAc)身份认证密钥交换(AKE)协议族,该协议族由 Hugo Krawczyk 进行形式化。SIGMA 在 STS 中加入 MAC:双方都对交互记录签名,并使用会话密钥对自己的身份计算 MAC:MAC(K, identity)。MAC 将身份绑定到会话密钥,从而防止攻击者关联来自不同会话的签名。SIGMA-I(保护发起方身份)、SIGMA-R(保护响应方身份)和 SIGMA-0(不提供身份保护)是其不同变体。IKEv2 和 Signal 的 X3DH 都属于 SIGMA 协议族。SIGMA 形式化为类似 STS 的设计提供了严格的安全性证明。

KCI 攻击与 STS 变体

STS 容易受到密钥泄露冒充(KCI)攻击:如果 Alice 的长期密钥遭到泄露,攻击者就能在新会话中冒充任意一方与 Alice 通信(因为攻击者可以伪造 Alice 针对任意交互记录的签名)。这意味着,一方的密钥遭到泄露后,攻击者就能向该方冒充其他人。KCI 是基于签名的 AKE 协议固有的问题——要防御它,必须让会话密钥以一种依赖双方贡献的方式生成,从而阻止被攻破的一方进行替换。HMQV(Hashed Menezes-Qu-Vanstone)和 NAXOS 能够抵抗 KCI,但代价是增加复杂性。

可否认性与非记录消息

STS 提供不可否认性:签名能够以密码学确定性证明是谁说了什么。这有时并不理想——在私人对话中,参与者可能不希望自己的言论能够产生可提交法庭的密码学证据。非记录(OTR)消息和 Signal 的双棘轮提供可否认性:它们不对消息进行签名,而是使用发送者和接收者共同持有的 MAC 密钥。对话结束后,双方都可以声称是对方伪造了消息,因为双方都持有能够生成这些 MAC 的密钥。这里的取舍是:可否认性牺牲了不可否认性。需要追责时适合采用类似 STS 的设计;重视可否认性时则适合采用 OTR/Signal。

STS 安全性证明

STS 的安全性最初只在原论文中进行非正式分析,后来 Bellare 和 Rogaway 在 1993 年和 1994 年提出的具有里程碑意义的 AKE 安全模型中对其进行了形式化证明。他们定义了密钥交换协议安全的含义:即使攻击者可以注册参与方、泄露会话密钥、泄露长期密钥(目标会话除外)并控制网络,会话密钥仍应与随机值不可区分。这种基于模拟的安全模型后来由 Canetti-Krawczyk 扩展,并进一步发展为 UC(通用可组合性),如今已成为证明 AKE 协议安全性的标准模型。TLS 1.3、Signal 和 Noise 都已在这一模型的不同变体中得到形式化证明。

STS 签名绑定测验

为什么 STS 要求将两个 DH 值(g^a 和 g^b)都纳入签名记录?

STS 协议回顾

STS 将临时 DH 密钥交换与数字签名相结合,在没有 TTP 的情况下提供经认证的密钥协商。双方都对 DH 交换记录签名,将身份认证绑定到会话。STS 实现了前向保密(临时 DH)、双向认证(签名)以及响应方身份保护(Alice 的数据在发送前已加密)。STS 直接影响了 IKEv2 和 SSH 密钥认证。SIGMA 使用身份消息认证码和安全性证明将 STS 形式化。KCI 是 STS 固有的弱点,可通过 HMQV/NAXOS 缓解。可否认性(如 Signal 中的可否认性)要求用消息认证码替代签名,以提供消息级真实性。

常见问题解答

「站到站协议(STS)」课时是免费的吗?

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

「站到站协议(STS)」这节课中我会学到什么?

学习 STS 这一经过修正的认证密钥交换协议,以及它在 SSH 和 IKE 中的应用。 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

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

「站到站协议(STS)」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. Needham-Schroeder 协议与攻击
  2. 站到站协议(STS)
  3. Noise 协议框架
  4. 安全协议设计原则
← 返回 Cryptology Academy