windows hello 介绍

Table of contents

Windows Hello 是 Windows 提供的一套身份验证机制。

用户可以通过以下方式登录:

  • PIN
  • 指纹
  • 人脸识别

它看起来只是“刷脸登录”或“输入 PIN”,但底层并不是把 PIN、指纹或人脸发送给服务器。

Windows Hello 的核心是:

使用 PIN、指纹或人脸,在本机授权使用一把私钥,再由服务器通过公钥验证用户身份。


一、Windows Hello 解决了什么问题?

传统密码存在很多风险:

  • 密码可能被钓鱼网站骗走
  • 用户可能在多个网站使用相同密码
  • 服务器密码数据库可能泄露
  • 攻击者获得密码后,可以在其他设备登录

Windows Hello 不依赖服务器保存用户的秘密密码。

它使用一对密钥:

1私钥:保存在用户设备中
2公钥:保存在服务器中

私钥通常受到 TPM 安全芯片保护,不会上传到服务器。


二、Windows Hello 注册流程

第一次设置 Windows Hello 时,用户通常需要先通过密码或 MFA 证明自己的身份。

然后,设备会生成一对密钥:

  • 私钥保留在当前设备
  • 公钥登记到服务器
 1sequenceDiagram
 2    participant U as 用户
 3    participant W as Windows Hello
 4    participant T as TPM
 5    participant S as 身份服务器
 6
 7    U->>S: 使用密码或 MFA 验证身份
 8    S->>W: 允许注册 Windows Hello
 9    U->>W: 设置 PIN、指纹或人脸
10    W->>T: 请求生成密钥对
11    T-->>W: 返回公钥,私钥保留在 TPM
12    W->>S: 发送公钥和凭据 ID
13    S->>S: 将公钥绑定到用户账户
14    S-->>U: 注册完成

注册完成后,服务器大致会保存这样的关系:

1用户账户
2└── 凭据 ID
3    └── 公钥

服务器不会保存:

  • Windows Hello PIN
  • 指纹
  • 人脸数据
  • 私钥

三、“公钥登记到服务器”是什么意思?

公钥登记,就是服务器记录:

这个用户的这个登录凭据,对应这把公钥。

例如:

1{
2  "user_id": "10086",
3  "credential_id": "windows-device-01",
4  "public_key": "PUBLIC_KEY_DATA"
5}

以后登录时,设备会使用对应的私钥生成签名。

服务器则找到这把已经登记的公钥,用它验证签名。

公钥不需要保密。即使公钥被别人看到,也不能用来生成签名,更不能反推出私钥。


四、Windows Hello 登录流程

登录时,服务器不会询问用户的 PIN。

服务器会生成一个随机挑战值,要求设备证明自己确实持有私钥。

 1sequenceDiagram
 2    participant U as 用户
 3    participant W as Windows Hello
 4    participant T as TPM
 5    participant S as 身份服务器
 6
 7    U->>S: 发起登录
 8    S->>W: 发送随机挑战 Challenge
 9    W->>U: 请求 PIN、指纹或人脸验证
10    U->>W: 完成本地验证
11    W->>T: 请求使用私钥
12    T->>T: 使用私钥签名 Challenge
13    T-->>W: 返回数字签名
14    W->>S: 返回凭据 ID 和数字签名
15    S->>S: 找到对应公钥并验证签名
16    S-->>U: 验证成功,允许登录

可以把整个过程简化成:

1服务器生成随机挑战
23设备使用私钥签名
45服务器使用公钥验证
67验证成功
89登录完成

PIN、指纹和人脸的作用,只是授权当前设备使用私钥。

它们不会被发送给服务器。


五、为什么不直接使用同一个对称密钥?

理论上,可以让设备和服务器共同保存一个相同的秘密密钥:

1设备保存:K
2服务器保存:K

登录时:

1服务器发送 Challenge
23设备计算 HMAC(K, Challenge)
45服务器也计算一次
67两个结果相同则登录成功

这种方式确实可以验证身份。

但它有一个重要问题:

服务器也拥有能够冒充用户的秘密密钥。

如果服务器数据库或密钥管理系统泄露,攻击者获得密钥 K 后,就可以生成正确的验证结果,冒充用户登录。

对称密钥的关系是:

1设备:可以生成验证结果
2服务器:也可以生成验证结果

Windows Hello 使用非对称密钥:

1设备:持有私钥,可以生成签名
2服务器:持有公钥,只能验证签名

即使服务器中的公钥数据库泄露,攻击者也不能生成有效签名。


六、为什么 Windows Hello 更安全?

Windows Hello 的关键优势有三个。

1. 私钥不离开设备

私钥通常在 TPM 内生成和使用,不需要上传给服务器。

2. 服务器不能冒充用户

服务器只有公钥,只能验证签名,不能生成签名。

3. PIN 只能用于当前设备

Windows Hello PIN 不是一个可以在任何地方使用的账户密码。

即使攻击者知道 PIN,通常还需要:

  • 拿到对应设备
  • 访问设备中的 TPM
  • 绕过设备的锁定和防暴力破解机制

所以,PIN 本身虽然可能只有几位数字,但它和设备中的私钥组合在一起,安全性与普通短密码完全不同。


七、总结

Windows Hello 并不是把人脸、指纹或 PIN 发送给服务器验证。

它的真实流程是:

1PIN、指纹或人脸
23本地授权使用私钥
45私钥对随机挑战进行签名
67服务器使用公钥验证签名
89登录成功

注册阶段,设备生成私钥和公钥:

1私钥留在设备
2公钥登记到服务器

登录阶段:

1私钥负责证明身份
2公钥负责验证身份

这套设计的核心价值是:

服务器可以验证用户,却不需要保存能够冒充用户的秘密。