随着互联网和移动互联网普及,用户身份认证的方式也在不断变化。从最初的帐号密码到动态令牌、U盾、短信验证码,再到指纹、人脸等生物特征认证方式。服务提供商和用户对身份认证的需求也从最基础的安全性,扩展到便捷性、隐私性和规范性。
然而,目前流行的身份认证方式或多或少存在问题。
传统静态密码认证存在安全问题:
通过黑客技术盗取用户帐号密码,如:拖库、钓鱼、木马、暴力破解等
撞库:利用大多数人在所有服务使用同一套帐号密码的特点,使用已经获得的帐号密码尝试登录其他服务
动态认证方式也存在问题:
恶意应用可以读取短信验证码,在用户不知情的情况下进行盗刷
动态令牌、U盾在各个机构间不通用,用户需要持有多个硬件设备
生物特征认证也存在不足:
生物特征独一无二,被采集到服务端,无法像密码一样更改,泄露后果严重
只在移动端(手机和部分笔记本电脑)普及,桌面端基本无法使用
对于以上问题,FIDO是一种优秀的解决方案。
FIDO全称为Fast Identity Online,是一套身份认证框架协议。它由FIDO联盟推出并持续维护。
FIDO规范1.x版本包含UAF(Universal Authentication Framework)和U2F(Universal 2nd Factor)两个子规范。
UAF:支持无密码体验。用户使用在线/本地应用时,使用本地认证机制(比如指纹、PIN码)完成FIDO注册,之后在需要身份认证(比如登录)时,不再需要提供密码,而只需要验证注册时使用的指纹或PIN码即可。避免使用密码带来的安全风险(比如钓鱼、木马),也免去记忆和输入密码,提升便捷性。
U2F:支持第二因素体验。用户使用在线/本地应用时,使用第二因素设备(比如外形类似U盾的FIDO安全盾)完成FIDO注册,之后在使用传统登录方法登录后,用户再使用第二因素设备完成验证。在服务现有密码基础结构上增强其安全性。
2019年正式发布的FIDO2 包含CTAP(Client to Authenticator Protocols)和W3C WebAuthn两部分,是1.x版本的演进,向后兼容1.x版本。
CTAP:允许通过USB、NFC或BLE使用外部身份验证器(比如FIDO安全密钥,移动设备)在启用FIDO2的浏览器和操作系统上进行身份验证,以提供无密码、二次身份验证或多重身份验证体验。
W3C WebAuthn:定义了内置在浏览器和平台中的标准Web API,以支持FIDO身份验证。

将身份认证手段与身份认证协议分离
支持尽可能多的认证手段,充分利用现有硬件设备内嵌的安全能力
支持不同的安全级别,使得网络服务提供商能够了解设备具有的认证手段和能力并设置认证策略
保护用户隐私,使得用户信息不被泄露且无法被非法追踪
在所有用户的所有设备上对所有应用支持多样化的认证方式
在FIDO认证过程中,除了您的在线/本地应用和应用服务器以外,还有FIDO规范定义的3种重要实体:FIDO认证器、FIDO客户端和FIDO服务器:
FIDO认证器:用来进行本地认证的机制或设备,分为平台认证器和漫游认证器。
平台认证器:集成在使用FIDO的设备上的认证器,比如手机或笔记本电脑上的指纹认证器。
漫游认证器:游离于使用FIDO的设备,通过蓝牙、NFC或USB连接的认证器,比如形状类似于U盾或动态令牌的认证器。
FIDO客户端:集成在您的应用中,提供FIDO认证API,或集成在浏览器中,由浏览器提供Web API,是调用FIDO服务器和FIDO认证器完成认证的桥梁。
FIDO服务器:在应用服务器需要发起FIDO认证时,生成符合FIDO规范的认证请求,发送给您的应用服务器;并在FIDO认证器完成本地认证后,接收您的应用服务器返回的符合FIDO规范的认证响应,并进行校验。

FIDO认证的主要步骤是:
当用户需要发起FIDO认证时,应用服务器向FIDO服务器发送发起认证的请求。
FIDO服务器生成一个FIDO规范定义的FIDO认证请求,其中包含一个随机生成的challenge,发送给应用服务器。
该FIDO认证请求依次被应用服务器、应用、FIDO客户端转发给用户的FIDO认证器。
用户在FIDO认证器上完成确认后,FIDO认证器生成一个FIDO规范定义的FIDO认证响应,其中包含对FIDO认证请求中的challenge的签名,发送给FIDO客户端。
该FIDO认证响应依次被FIDO客户端、应用、应用服务器转发给FIDO服务器。
FIDO客户端对签名进行验证,通过后通知应用服务器FIDO认证通过。
在华为浏览器中使用您的在线应用:华为手机上的华为浏览器已经集成了FIDO客户端。因此如果您的在线应用已经支持FIDO,那么用户通过华为浏览器打开您的在线应用,就可以使用FIDO。支持使用平台认证器,如指纹;也可以使用漫游认证器,如FIDO安全密钥,甚至另一部华为手机。
在华为手机中使用您的本地应用:华为HMS Core实现了FIDO客户端和平台认证器。因此您只需要按照开发指南在您的应用中集成HMS Core SDK并完成开发,用户就可以在您的应用中使用FIDO。支持使用平台认证器,如指纹;也可以使用漫游认证器,如FIDO安全密钥,甚至另一部华为手机。
把华为手机作为漫游认证器:如果您的在线/本地应用支持FIDO,当您的用户在其他设备上使用时,可以把华为手机作为漫游认证器完成认证。