给 Linux 做了个 Windows Hello 平替:gaze-fido
换到 Linux 之后,我一直想补上一个小功能:像 Windows Hello 一样,在浏览器登录 Google 这类网站时,直接用电脑上的人脸识别完成 Passkey 验证。
我的笔记本没有指纹识别器,不过有红外摄像头,也有 TPM 模块,原本在 Windows 上可以用 Windows Hello 刷脸。Passkey 平时到底用得多不多另说,至少能用笔记本的人脸识别登录网站,看起来就挺酷。到了 Linux 上,我已经可以用 Gaze 做本地人脸验证,但还缺一个能让浏览器把它当作 FIDO2 验证器使用的东西。
于是我大致了解了一下 Windows Hello 和 Passkey 的工作方式,然后开始 Vibe Coding,做出了 gaze-fido。
它是怎么工作的
简单说,gaze-fido 会通过 Linux 的 UHID 接口注册一个虚拟 FIDO2 验证器,浏览器再用 CTAP2 与它通信,完成 WebAuthn / Passkey 验证;密钥由 TPM 2.0 保护,使用时再结合 Gaze 做人脸验证。
项目用 Rust 和 Qt 写成。这样,网站看到的是一个标准的 FIDO2 验证器,而我可以用笔记本自带的红外摄像头完成本地验证,不需要额外插一把安全密钥。
目前用起来怎么样
目前我自己用下来没遇到什么问题,Google 等网站的 Passkey 验证可以正常完成。项目还处在实验性质,现阶段主要就是满足我自己的使用场景;我也还没有打算把它包装成一个适用于各种硬件和发行版的通用方案。
好像只有我需要
回头看,这个需求确实挺小众:要在 Linux 上用 Passkey,刚好有支持人脸识别的红外摄像头和 TPM,还想把本机的人脸验证接进浏览器。大多数人可能直接用手机、密码管理器或者实体安全密钥就解决了。
所以项目公开出来以后,我有时也会想:除了我之外,似乎完全没有人会需要它。不过,能把一个自己觉得酷、也确实用得上的点子做出来,已经挺有意思了。万一刚好有人和我有一样的需求,这个仓库也许能派上用场。