U2F ( Universal 2nd Factor ) 是 Yubico, Yahoo 和 Google 联合开发的基于物理设备的双因素认证协议。这个物理设备就是U2F认证器。
U2F认证器类似国内的U盾保护机制,使用双因子(密码+硬件介质)保护用户账户和隐私。在各种网站中,我们经常要创建和记住多个用户名和密码,而且为了安全性还需把密码设置的死长死长。FIDO联盟就是通过规范和认证使基于认证器的生态系统,减少对密码的依赖,并防止钓鱼网站,中间人攻击和重放攻击。
U2F认证器特点:
1. 相较于各种银行U盾,无需驱动,无需浏览器插件。
2. APDU指令遵循ISO7816-4 规范。
3. 协议简单,只有获取版本、注册和认证3条指令。
4. 使用ECDSA算法(ECC-P256签名)实现注册和认证功能。
工作原理:
1.注册,用户登录服务器进行注册时,客户端生成注册信息发给认证器,注册信息=挑战数据+应用注册数据,如下:
认证器收到注册请求以后,产生一对非对称密钥(用于登录时的认证操作),私钥保存在认证器中,公钥传给服务器,并对上述数据进行签名(使用设备私钥进行签名,设备私钥由供应商预置),服务器将此公钥和用户对应的账户相关联。
2. 认证,用户登录服务器验证信息时,客户端生成挑战数据发给认证器,用户在认证器上按确认按键,认证器使用注册时产生的私钥对客户端发来的挑战数据做签名,服务器使用注册时认证器返回的公钥进行验签。
客户端发给认证器的数据,控制字段+挑战数据+应用数据+密钥句柄长度+句柄
以上是注册和认证的大致流程,如对技术细节感兴趣请参考《FIDO U2F Raw Message Formats》文档,下载地址:
https://fidoalliance.org/specs/fido-u2f-v1.0-ps-20141009/fido-u2f-raw-message-formats-ps-20141009.pdf
FIDO演示:
注册/认证:输入账号+密码(密码可以为空),插入U2F,注册/认证成功