登录验证的深层解析:从身份验证到密钥生成的安全演进

本文深入探讨了身份验证在端点和在线环境中的关键差异,揭示了传统"通过/失败"验证模式的局限性,并提出了认证过程必须生成加密密钥的核心安全原则。

您的登录是通过还是失败?理解风险

很少有人意识到,对于IT安全而言,身份验证应该提供比"通过或失败"的裁决更多的信息。我们使用的术语——登录、登入、身份验证、验证——将这个过程框定为一个以裁决结束的决定。但仅凭裁决并不能保护任何东西。

端点现实:身份验证必须解锁

考虑您的端点——您用于工作和访问互联网及网络资源的设备(PC或手机)。一个安全的设计必须解决几个基本问题:

  • 设备的数据必须受到保护(安全加密)。攻击者可能拥有端点,并尝试读取磁盘上的原始数据——如果设备开机,甚至可能读取内存中的数据。
  • 加密密钥在用户登录前必须不可用。将密钥隐藏在"只有研发知道的地方"是隐蔽性,而不是安全性。

因此,对于端点和"静态数据",登录/身份验证必须提供一个端点登录前没有的秘密——一个密钥。

对于端点,我们称之为解锁。登录时恢复的密钥通常不是数据加密密钥本身;相反,它可能解锁一个密钥文件,该文件解锁密钥加密密钥(KEKs),依此类推——最终到达磁盘扇区加密密钥。重要的部分是转换:没有密钥,无法使用

在线现实:身份验证必须启用

解锁不适用于在线身份验证,因为服务器在登录时完全运行。理论上,登录可以解锁服务器上的用户数据,但这并不常见。此外,保护在线数据——会话交易——的密钥通常是(并且正确地是)新的,而不是现有的密钥。

问题在于:与静态数据不同,在线身份验证必须产生密钥的概念远未被广泛认识。大多数熟悉的在线用户身份验证方法——推送批准、OTP代码,甚至FIDO——都不包括为后续操作设置加密密钥的步骤。TLS确实创建密钥,但TLS不是用户的登录;它发生在之前,不是我们讨论的用户身份验证。

当身份验证停止在裁决时,就会出现一个缺口:我们决定用户是谁,但我们没有让这个决定产生保护后续交换的密钥。攻击者利用这个缺口,例如通过中间人(AiTM) 活动,将用户的登录中继到真实站点,然后在身份验证步骤之外已经建立的连接上继续交换。¹

修复方法简单明了:

在线环境中,身份验证行为必须产生保护后续内容的加密密钥。

不仅仅是裁决。一个密钥——作为身份验证的输出。

关于先例的简要说明

现实世界已经承认身份验证应该产生一个秘密使用FIDO2安全密钥的Windows登录/解锁依赖于FIDO扩展(hmac-secret),以便身份验证仪式产生一个可供Windows登录使用的秘密——包括机器不在线的情况。微软记录了Windows的FIDO2密钥登录,在其WebAuthn平台API中公开了hmac-secret,供应商将hmac-secret精确描述为获取加密/解密操作秘密的一种方式。2, 3, 4

关键点不是扩展本身;而是它所服务的原则:身份验证应该产生密钥

最佳解决方案是最简单的——但不要过于简单

更简单但不足:进行身份验证设置密钥更简单——但不足。它在身份和保护之间留下了一个缺口,攻击者会利用这个缺口。¹

原则优先:让身份验证产生密钥比修补更简单。它将"您是谁"与"保护交换的内容"统一在一个步骤中。

不是(过度)最简单:围绕仅裁决模型构建层层加固并不是爱因斯坦意义上的"最简单"——它仍然可以被位于用户和服务器之间的攻击者绕过。¹

一个规则,两个领域:

  • 端点:身份验证 → 解锁(恢复现有密钥)。
  • 在线:身份验证 → 启用(为交换创建密钥)。

如果密钥不是来自身份验证,那么它不是安全——只是仪式。

参考文献

  1. Microsoft安全博客——中间人活动及其影响。 https://www.microsoft.com/en-us/security/blog/2023/06/08/detecting-and-mitigating-a-multi-stage-aitm-phishing-and-bec-campaign/

  2. Microsoft Learn——使用FIDO2安全密钥登录Windows(Windows如何支持密钥登录)。 https://learn.microsoft.com/en-us/entra/identity/authentication/howto-authentication-passwordless-security-key-windows

  3. Microsoft Win32 WebAuthn API——HMAC-Secret结构/常量(平台支持)。 https://learn.microsoft.com/en-us/windows/win32/api/webauthn/ns-webauthn-webauthn_hmac_secret_salt https://learn.microsoft.com/en-us/windows/win32/webauthn/webauthn-constants

  4. Yubico——FIDO2 hmac-secret解释(目的和用法)。 https://docs.yubico.com/yesdk/users-manual/application-fido2/hmac-secret.html

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计