Windows Hello 企业版的工作原理
Windows Hello 企业版是一种分布式系统,需要多种技术才能协同工作。 为了简化对 Windows Hello 企业版工作原理的说明,让我们将其分解为五个阶段,它们表示部署过程的时间顺序。
设备注册阶段
在此阶段中,设备将其标识注册到标识提供者 (IdP) ,以便它可以与 IdP 关联并进行身份验证。
预配阶段
在此阶段,用户使用一种身份验证形式进行身份验证, (通常用户名/密码) 来请求新的 Windows Hello 企业版凭据。 预配流需要第二个身份验证因素,然后才能生成公钥/私钥对。 公钥注册到 IdP,映射到用户帐户。
密钥同步阶段
在此阶段中, 某些混合部署需要用户的公钥从 Microsoft Entra ID 同步到 Active Directory。
证书注册阶段
在此阶段中, 只有使用证书的部署才需要证书,使用组织的公钥基础结构 (PKI) 向用户颁发证书。
身份验证阶段
在最后一个阶段中,用户可以使用生物识别或 PIN 登录到 Windows。 无论使用何种手势,都会使用 Windows Hello 企业版凭据的专用部分进行身份验证。 IdP 通过将用户帐户映射到预配阶段注册的公钥来验证用户标识。
以下部分更深入地介绍了其中每个阶段。
设备注册
Windows Hello 企业版部署中包含的所有设备都必须完成名为 “设备注册”的过程。 设备注册使设备能够关联并向 IdP 进行身份验证:
- 对于云和混合部署,标识提供者Microsoft Entra ID,设备向 设备注册服务注册
- 对于本地部署,标识提供者是 Active Directory 联合身份验证服务 (AD FS) ,设备向 AD FS 上托管 的企业设备注册服务 注册
注册设备后,IdP 会为设备提供一个标识,该标识用于在用户登录时对设备进行身份验证。
存在不同的注册类型,这些注册类型标识为 联接类型。 有关详细信息,请参阅 什么是设备标识。
有关详细的序列图,请参阅 设备注册的工作原理。
预配
设备注册完成后,以及设备收到启用 Windows Hello 的策略后,将触发 Windows Hello 预配。 如果满足所有先决条件,则会启动“云 eXperience 主机 (CXH) ”窗口,以引导用户完成预配流。
注意
根据部署类型,仅当以下情况时,才会启动 Windows Hello 企业版预配:
- 设备满足 Windows Hello 硬件要求
- 设备已加入 Active Directory 或Microsoft Entra ID
- 用户使用 Active Directory 或 Entra ID 中定义的帐户Microsoft登录
- 已启用 Windows Hello 企业版策略
- 用户未通过远程桌面连接到计算机
规划 Windows Hello 企业版部署一文中介绍了特定部署类型的其他先决条件。
在预配阶段,将创建 Windows Hello 容器 。 Windows Hello 容器是 密钥材料或数据的逻辑分组。 容器仅在 注册 到组织的 IdP 的设备上保存组织的凭据。
注意
磁盘上、注册表中或其他地方没有物理容器。 容器是用于相关项分组的逻辑单元。 Windows Hello 存储的密钥、证书和凭据受到保护,无需创建实际容器或文件夹。
下面是预配阶段所涉及的步骤:
- 在 CXH 窗口中,系统会提示用户使用 MFA 向 IdP 进行身份验证
- MFA 成功后,用户必须提供生物手势 ((如果可用) )和 PIN
- 确认 PIN 后,将创建 Windows Hello 容器
- 生成公钥/私钥对。 密钥对绑定到受信任的平台模块 (TPM) (如果可用)或在软件中
- 私钥存储在本地并由 TPM 保护,无法导出
- 公钥注册到 IdP,映射到用户帐户
- 设备注册服务将密钥写入Microsoft Entra ID 中的用户对象
- 对于本地方案,AD FS 将密钥写入 Active Directory
以下视频显示了使用密码登录后的 Windows Hello 企业版注册步骤:
有关详细信息和详细的序列图,请参阅 预配的工作原理。
Windows Hello 容器详细信息
在预配阶段,Windows Hello 会在设备上生成新的公钥/私钥对。 TPM 生成并保护私钥。 如果设备没有 TPM,则会加密私钥并将其存储在软件中。 此初始密钥称为 保护程序密钥。 保护程序密钥与单个手势相关联:如果用户在同一设备上注册 PIN、指纹和人脸,则每个手势都有唯一的保护程序密钥。
保护程序密钥安全地包装 身份验证密钥。 身份验证密钥用于解锁 用户 ID 密钥。 容器只有一个身份验证密钥,但还可能存在多个用不同的唯一保护程序密钥包装的密钥副本。
每个保护程序对自己的身份验证密钥副本进行加密。 加密的执行方式由保护程序本身决定。 例如,PIN 保护程序使用 PIN 作为 entropy 执行 TPM 密封操作;如果没有 TPM 可用,则使用派生自 PIN 本身的密钥对身份验证密钥执行对称加密。
重要提示
可以根据配置的策略设置,在硬件 (TPM 1.2 或 2.0) 或软件中生成密钥。 若要保证在硬件中生成密钥,必须配置策略设置。 有关详细信息,请参阅 使用硬件安全设备。
个人 (Microsoft 帐户) 和工作或学校 (Active Directory 或 Microsoft Entra ID) 帐户使用单个容器作为密钥。 所有密钥均由标识提供商的域分隔开来,以帮助保护用户隐私。
Windows Hello 还会生成 管理密钥。 管理密钥可用于在必要时重置凭据。 例如,使用 PIN 重置服务时。 除了保护程序密钥,支持 TPM 的设备还会生成一个包含 TPM 中的证明的数据块。
只有 PIN 或生物识别手势才能访问存储在容器中的密钥材料。 预配期间进行的双重验证会在 IdP 和用户之间创建受信任的关系。 当公钥/私钥对的公共部分发送到标识提供者并与用户帐户关联时,就会发生这种情况。 当用户在设备上输入手势时,标识提供者知道它是已验证的标识,因为 Windows Hello 密钥和手势组合在一起。 然后,它提供一个身份验证令牌,允许 Windows 访问资源和服务。
容器可以包含多种类型的密钥材料:
- 身份验证密钥,始终是非对称公钥-私钥对。 此密钥对在注册期间生成。 每次访问它时,必须使用用户的 PIN 或生物识别手势来解锁它。 身份验证密钥一直存在,直到用户重置 PIN,此时会生成新密钥。 生成新密钥时,必须使用新密钥解密和重新加密旧密钥之前保护的所有密钥材料
- 一个或多个 用户 ID 密钥。 这些密钥可以是对称的或非对称的,具体取决于你使用的 IdP。 对于基于证书的 Windows Hello for Work,当容器解锁时,需要访问用户 ID 密钥或密钥对的应用程序可以请求访问。 用户 ID 密钥用于对从此设备发送到 IdP 的身份验证请求或令牌进行签名或加密。 用户 ID 密钥的生存期通常很长,但生存期可能比身份验证密钥短。 Microsoft帐户、Active Directory 帐户和Microsoft Entra 帐户都需要使用非对称密钥对。 设备生成公钥和私钥,将公钥注册到 IdP (以便以后) 验证,并安全地存储私钥。 对于组织,可以通过两种方式生成用户 ID 密钥:
- 用户 ID 密钥对可与组织的证书颁发机构 (CA) 相关联。 此选项可以使具有现有 PKI 的组织酌情继续使用它。 鉴于许多应用程序(如 VPN 解决方案)需要使用证书,因此,当你在此模式下部署 Windows Hello 时,它允许更快地从用户密码转换,同时仍保留基于证书的功能。 此选项还允许组织将其他证书存储在受保护的容器中。 例如,允许用户通过 RDP 进行身份验证的证书
- IdP 可以直接生成用户 ID 密钥对,这允许在没有或不需要 PKI 的环境中快速、较低开销地部署 Windows Hello
用户 ID 密钥用于对服务的用户进行身份验证。 例如,通过签署 nonce 来证明私钥的所有权,该私钥对应于已注册的公钥。 具有 Active Directory、Microsoft Entra ID 或 Microsoft 帐户的用户具有与其帐户关联的密钥。 密钥可用于通过验证域控制器 (Active Directory 方案) 或云 (Microsoft Entra ID 和 MSA 方案) 登录到其 Windows 设备。
Windows Hello 还可以用作 FIDO2 验证器,以向支持 WebAuthn 的任何网站进行身份验证。 网站或应用程序可以使用 API 在用户的 Windows Hello 容器中创建 FIDO 用户 ID 密钥。 在后续访问中,用户可以使用其 Windows Hello PIN 或生物识别手势对网站或应用进行身份验证。
若要详细了解 Windows 如何使用 TPM 来支持 Windows Hello 企业版,请参阅 Windows 如何使用受信任的平台模块。
生物识别数据存储
用于支持 Windows Hello 的生物识别数据仅存储在本地设备上。 它不会漫游,也不会发送到外部设备或服务器。 这种分离有助于阻止潜在的攻击者,因为它未提供攻击者可能损害的单个集合点,从而使其无法盗取生物识别数据。 即使攻击者可以从设备获取生物识别数据,也无法将其转换为生物识别传感器可识别的原始生物识别样本。
每个传感器都有自己的生物识别数据库文件,其中模板数据存储 (路径 C:\WINDOWS\System32\WinBioDatabase
) 。 每个数据库文件都有一个随机生成的唯一密钥,该密钥已加密到系统。 使用具有 CBC 链接模式的 AES,使用每个数据库密钥加密传感器的模板数据。 哈希为 SHA256。
注意
某些指纹传感器能够在指纹传感器模块(而不是 OS 中)上完成匹配。 这些传感器将生物识别数据存储在指纹模块上,而不是存储在数据库文件中。 有关详细信息,请参阅 Windows Hello 增强的安全性登录 (ESS) 。
密钥同步
混合环境中需要密钥同步。 用户预配 Windows Hello 企业版凭据后,密钥必须从 Microsoft Entra ID 同步到 Active Directory。
用户的公钥将写入 msDS-KeyCredentialLink
Active Directory 中用户对象的 属性。 同步由 Microsoft Entra Connect Sync 处理。
证书注册
对于证书部署,注册密钥后,客户端会生成证书请求。 请求将发送到证书注册机构 (CRA) 。 CRA 位于 Active Directory 联合身份验证服务 (AD FS) 服务器上,该服务器验证证书请求并使用企业 PKI 完成证书请求。
证书在用户的 Hello 容器上注册,该容器用于向本地资源进行身份验证。
Authentication
Windows Hello 凭据基于证书或非对称密钥对。 Windows Hello 凭据以及使用这些凭据获取的令牌绑定到设备。
身份验证是组合以下项的双重身份验证:
- 绑定到设备的密钥或证书和
- 此人知道 (PIN) 或
- 此人 (生物识别)
PIN 输入和生物识别手势都触发 Windows,以私钥对发送到标识提供者的数据进行加密签名。 IdP 验证用户的标识并对该用户进行身份验证。
PIN 或凭据的专用部分永远不会发送到 IdP,并且 PIN 不会存储在设备上。 在执行使用凭据的专用部分的操作时,PIN 和生物手势是 用户提供的 entropy 。
当用户希望访问受保护的密钥材料时,身份验证过程将从用户输入 PIN 或生物识别手势以解锁设备开始,此过程有时称为释放密钥。 将其想象成使用物理钥匙解锁一扇门:你需要先从口袋或钱包中拿出钥匙,才能打开门锁。 用户的 PIN 将解锁设备上的容器的保护程序密钥。 解锁该容器时,应用程序 (,因此用户) 可以使用容器中驻留的任何用户 ID 密钥。
这些密钥用于对发送到 IdP 的请求进行签名,请求访问指定资源。
重要提示
尽管密钥已解锁,但应用程序不能随时使用它们。 应用程序可以使用特定 API 请求需要将密钥材料用于特定操作(例如,解密电子邮件或登录某个网站)的操作。 通过这些 API 进行访问不需要通过用户手势进行显式验证,并且不会向请求应用程序公开密钥材料。 相反,应用程序会要求身份验证、加密或解密,并且 Windows Hello 层将处理实际的工作并返回结果。 在适当情况下,应用程序即使在已解锁的设备上仍然可以请求强制的身份验证。 Windows 将提示用户重新输入 PIN 或执行身份验证手势,这为敏感数据或操作提供了一层额外的保护。 例如,可以将应用程序配置为在每次执行特定操作时要求重新进行身份验证,即使已使用相同的帐户和 PIN 或手势解锁设备也是如此。
有关详细信息和详细的序列图,请参阅 身份验证的工作原理。
主刷新令牌
单一登录 (SSO) 依赖于获取的特殊令牌来访问特定应用程序。 在使用 Kerberos 的传统 Windows 集成身份验证案例中,令牌是 Kerberos TGT (票证授予票证) 。 对于Microsoft Entra ID 和 AD FS 应用程序,此令牌是 PRT) (主刷新令牌 。 它是一个 JSON Web 令牌 ,包含有关用户和设备的声明。
PRT 最初是在登录或解锁期间获取的,其方式与获取 Kerberos TGT 的方式类似。 此行为适用于已加入 Microsoft Entra 和 Microsoft Entra 混合联接的设备。 对于使用 Microsoft Entra ID 注册的个人设备,PRT 最初是在 添加工作或学校帐户时获取的。 对于个人设备,用于解锁设备的帐户不是工作帐户,而是消费者帐户 (Microsoft帐户) 。
SSO 需要 PRT。 如果没有它,用户每次访问应用程序时都会提示他们输入凭据。 PRT 还包含有关设备的信息。 如果在应用程序上设置了任何 基于设备的条件访问 策略,则拒绝对 PRT 的访问。
提示
Windows Hello 企业版密钥满足 Microsoft Entra 多重身份验证 (MFA) 要求,并减少用户在访问资源时看到的 MFA 提示数。
有关详细信息,请参阅 什么是主刷新令牌。
Windows Hello 企业版和密码更改
更改用户帐户密码不会影响登录或解锁,因为 Windows Hello 企业版使用密钥或证书。
但是,如果用户需要更改其密码 (例如,由于密码过期策略) ,则使用 Windows Hello 登录时,不会通知他们密码更改要求。 这可能会导致对受 Active Directory 保护的资源进行身份验证失败。 若要缓解此问题,请考虑以下选项之一:
- 禁用用户帐户的密码过期
- 作为密码过期策略的替代方法,请考虑采用 PIN 过期策略
- 如果密码过期是组织的要求,请指示用户定期或在收到身份验证失败消息时更改其密码。 用户可以通过以下方式重置其密码:
- 使用 Ctrl + Alt + Del>更改密码 选项
- 使用密码登录。 如果必须更改密码,Windows 会提示用户更新密码
重要提示
若要更改用户的密码,设备必须能够与域控制器通信。
后续步骤
为了适应众多组织的需求和要求,Windows Hello 企业版提供了不同的部署选项。 若要了解如何规划 Windows Hello 企业版部署,请参阅: