背景

此前在 Google Cloud Next 18 大会上,Google 发布了名为 “Titan” 的安全密钥。这是一个双重身份验证(2FA, 即 Two-Factor Authentication)设备,采用的是 FIDO 联盟的技术规范,Google 是该联盟的成员之一。

Google Titan 安全密钥

其实,此类安全密钥并非 Google 首发,在此之前已经有一些厂商推出相关的设备,其中颇具影响力的当属 Yubico 。Yubico 也是 FIDO 联盟的重要成员之一,Yubico 的 CTO Jakob Ehrensvärd 是原“强认证规范”的主要作者,该规范后来演变为通用第二因素标准(U2F, 即 Universal 2nd Factor)。

FIDO(Fast IDentity Online)联盟是成立于2012年7月的行业协会,旨在为众多网站和移动服务提供更简单、更安全的用户身份认证体验的开放性可扩展标准。FIDO U2F 就是其中的一个身份认证标准。

FIDO U2F 使用专门的 USB 或 NFC 设备来加强并简化双重身份验证,这种密钥设备可以在目前绝大多数操作系统上使用,无须安装驱动程序,也不需要安装特定的客户端程序。用户在浏览器上登陆在线服务,输入用户名和密码后,轻按 U2F 安全密钥上的按钮即可完成二次验证。

目前支持较好的浏览器有 Chrome 38+、Opera 40+,Microsoft Edge 和 Mozilla Firefox 也正在开放支持。各热门在线服务也开始支持 FIDO U2F,例如: Google、Facebook、Twitter、GitHub、GitLab 等。随着 FIDO 开放生态系统的不断壮大,将会有更多浏览器和在线服务支持 FIDO U2F 标准。

了解更多信息,可访问 FIDO 联盟官网:https://fidoalliance.org

nRF52-U2F 简介

nRF52-U2F 是 FIDO U2F 标准协议在 nRF52 SoC 上的一个开源实现,目前主要支持 nRF52840 SoC。

为什么首选 nRF52840?主要是因为:

  • nRF52840 片上支持 USB 2.0 设备控制器,无需增加任何外围器件即可实现 USB HID 功能;
  • 集成 ARM TrustZone® Cryptocell-310 加密子系统,可以硬件实现多种加解密算法,更加安全且高效;
  • 支持低功耗蓝牙(BLE)和 NFC 标签功能,这两种方式也是 FIDO U2F 规范所支持的,便于未来扩展更多应用场景;
  • 安全可靠的固件升级功能(DFU),通过 DFU 更新固件可获得新功能扩展以及修复 bug,从而延长设备生命周期。

nRF52-U2F 目前采用 MIT License 开源,所有源码以及开发文档已在 GitHub 上公布,感兴趣的朋友可以一起参与该项目的开发。该项目涵盖的内容比较广,例如嵌入式开发、USB协议、短距离无线通信(BLE、NFC)、密码学、Web 安全认证等,作为学习研究也是一个不错的课题。

Star

FIDO U2F 工作原理

FIDO U2F 的基本工作流程主要分两部分:注册(Registration)认证(Authentication)。交互过程如下图:

注册(Registration

用户通过客户端(主要是 Web 浏览器)登录在线服务获取 challenge 数据,生成注册请求发给 U2F 设备。U2F 设备收到注册请求后,产生一对非对称密钥,并生成 key handle(主要为了认证时找回私钥),将公钥、key handle 等数据用 ECDSA 算法(ECC P-256)签名后作为响应发给客户端。客户端转换成特定格式发给在线服务,服务器将公钥与用户账号建立关联。

认证(Authentication)

用户通过客户端登录在线服务获取 challenge 数据,生成认证请求发给 U2F 设备。用户按键确认后,U2F 设备根据认证请求中的 key handle 找回注册时的私钥,然后对 challenge 等数据进行签名,生成响应数据后发给客户端,客户端转换成特定格式发给在线服务,服务器使用注册时关联的公钥验证签名是否正确。

关于注册、认证消息格式的规定可以参考:FIDO U2F Raw Message Formats

硬件支持

nRF52-U2F 目前支持以下两款 nRF52840 开发套件,而且可以快速移植到其他 nRF52840 的板卡,更多硬件会陆续支持:

开发计划

nRF52-U2F 未来开发计划中将会支持以下特性:

  • FIDO2:这是 W3C 的 WebAuthn 和 FIDO 的 CTAP 结合的标准,未来主流浏览器也都会支持该标准;
  • 实现 FIDO 的低功耗蓝牙(BLE)功能;
  • 实现 FIDO 的 NFC 标签功能。

相关链接