1个不稳定发布版
0.1.0 | 2023年2月11日 |
---|
#742 in 身份验证
3.5MB
77K SLoC
xdg-credentials-portal
这是一个独立的服务,旨在在Linux上通过D-Bus Portal接口提供FIDO2平台功能(FIDO U2F和WebAuthn)。
项目由多个crate组成
- libwebauthn:FIDO2和FIDO U2F平台API的Linux本地实现。
- 完全用Rust编写。
- 不再依赖于Mozilla的authenticator-rs。
- 支持多种传输方式(目前USB HID和BLE)。该库旨在具有可插拔的传输实现,使其易于添加传输后端(计划:NFC,caBLEv2)。
- xdg-credentials-portal:通过D-Bus接口公开FIDO2和FIDO U2F平台API的服务API提案和参考实现,供桌面应用程序使用 - 包括容器化应用程序,如Flatpaks。
- 类似于xdg-desktop-portal和xdg-documents-portal,服务旨在通过建议的D-Bus 门户: org.freedesktop.portal.Credentials访问。
libwebauthn
平台功能
- FIDO U2F
- 🟢 注册(U2F_REGISTER)
- 🟢 验证(U2F_AUTHENTICATE)
- 🟢 版本(U2F_VERSION)
- FIDO2
- 🟢 创建凭证
- 🟢 验证断言
- 🟢 生物识别用户验证
- 🟢 可发现凭证(驻留密钥)
- FIDO2到FIDO U2F降级
- 🟢 基本功能
- 🟢 支持excludeList和预飞行请求
- PIN/UV协议
- 🟢 PIN/UV Auth协议一
- 🟢 PIN/UV Auth协议二
- PIN/UV操作
- 🟢 获取PinToken
- 🟢 使用Pin权限获取PinUvAuthToken
- 🟢 使用Uv权限获取PinUvAuthToken
- Passkey身份验证
- 🟢 可发现凭证(驻留密钥)
- 🔴 云辅助BLE(caBLE)传输(#31 受阻:规范尚未发布)
传输
USB(HID) | 低功耗蓝牙(BLE) | NFC | TPM 2.0(平台) | |
---|---|---|---|---|
FIDO U2F | 🟢 支持(通过hidapi) | 🟢 支持(通过bluez) | 🟠 计划(#5) | 🟠 计划中 (#4) |
WebAuthn (FIDO2) | 🟢 支持(通过hidapi) | 🟢 支持(通过bluez) | 🟠 计划(#5) | 🟠 计划中 (#4) |
xdg-credential-platform
这是一个非常早期的想法,目前还没有提出任何规范。
以下是拟议服务的总体架构图以及它如何与其客户端交互
脚注
- *:应考虑更好的UI替代方案,例如通过xdg-credentials-portal-{gnome, kde}的本地UI实现。
- Δ:参见下文路线图部分
动机
-
沙盒浏览器。需要一个现代解决方案,以允许沙盒应用程序(Flatpaks,Snaps)访问U2F和FIDO2设备,而无需授予对所有设备的全面访问权限。
- Firefox现在已正式在Flathub上发布,但不能访问U2F设备。参见flatpak问题#2764
-
无密码认证。FIDO2/WebAuthn承诺了一个没有密码、相关安全事件的世界,这值得我们追求。平台API将使应用程序更容易支持更强的认证。
-
平台认证器是FIDO2规范的重要组成部分,对于广泛采用无密码认证至关重要。Windows Hello,Android的FIDO2支持,Apple的TouchID和FaceID,都是平台认证器的例子。Linux桌面社区也应该能够享受到类似的益处。
-
本地应用程序FIDO2支持。FIDO2不应仅限于Web应用程序。
- FIDO2 API for Android(本地应用程序)
其他平台
以下是在其他平台上提供的相关API列表,它们提供类似的功能
- Android SDK:Fido2ApiClient
- Windows Hello:FIDO2 Win32 APIs
- macOS、iOS:通过ASWebAuthenticationSession实现WebAuthn
其他参考资料
贡献
如果您想贡献,但不知道从哪里开始,请查看问题选项卡中可用的任务。
或者,对以下方面的调查或专业知识将非常有帮助。请与我联系!
-
平台认证器支持。类似于Android设备和Windows Hello。为了实现这一点(并请求FIDO2认证),需要以下支持
- 可信平台模块(TPM)
- 用户验证设备(例如指纹读取器)
-
非特权访问。FIDO2凭证的范围限定在源(例如
https://example.org
)。拟议的API允许应用程序指定任何源(如浏览器所需)。因此,出于安全目的,需要额外的用户确认步骤。如果请求发送者可以验证,则可能不需要此额外步骤,因为它可以作为指定源的合法所有者。- 例如,Android已经实现了两个API:Fido2ApiClient(非特权)和Fido2PrivilegedApiClient(特权),供Web浏览器使用。这两个API之间的主要区别在于,特权API允许指定任意的源,而非特权API则需要将您的应用程序与您的源链接。
-
身份验证管理系统(PAM)和无密码登录(长期目标)。PAM模块将允许使用FIDO2进行用户登录,例如使用平台认证器(类似于Windows Hello)。
-
D-Bus网关API设计
-
提案和贡献流程(Flatpak、GNOME等)
-
用户界面/用户体验
依赖项
~5–18MB
~181K SLoC