测试视频
VirtualFido2设备,支持x,github,Fb等网站登录认证
VirtualFido2-USB
English | 中文
概述
VirtualFido2-USB 是一个虚拟 FIDO2 安全密钥实现,提供 WebAuthn 身份验证功能。本项目实现了 FIDO2 规范,创建了一个基于软件的认证器,可用于无密码身份验证。
FIDO2 设备工作流程
下图展示了完整的 FIDO2 设备身份验证工作流程,包含所有18个详细步骤:
完整工作流程步骤(18步)
第一阶段:设备初始化
- 设备初始化:创建CA的公钥、私钥和证书
- 凭据密钥创建:创建生成凭据的公钥、私钥和基于CA证书的凭据证书
- PIN通信设置:创建PIN通信的公钥私钥
第二阶段:凭据注册
- 客户端请求:客户端请求MakeCredential
- PIN支持检查:设备检测是否支持PIN,若是则检测是否已经设置PIN
- PIN设置要求:若未设置PIN,则返回错误码,告诉client需要设置PIN
- 密钥协商:客户端发送getKeyAgreement获取密钥交换信息,计算共享密钥
- PIN加密:客户端使用共享密钥对用户输入密码进行加密,将加密后的密码和自己的公钥信息一并发送给设备
- PIN解密:设备收到setPIN请求后,使用客户端发送过来的公钥信息生成共享密钥,使用共享密钥对加密过的PIN码进行解密,然后记录PIN码的hash值
- PIN令牌生成:客户端发送getPINToken请求,设备使用共享密钥对发送过来的加密过的pinHash进行解密,并与本地记录的pinHash进行对比验证,若匹配则返回使用共享密钥加密过的pinToken
- PIN设置完成:这时设备已经完成了PIN码的设置和pinToken的获取,若设备不支持PIN,则没有6~10的步骤
- PIN验证:继续接着步骤5,若设备支持PIN并且PIN已经设置,则根据客户端的请求对pinToken进行校验,如果pinToken校验失败,则返回PIN码错误信息
- 用户认证:设备不支持PIN,或者pinToken校验成功后,设备开始创建凭证,创建凭证前设备会通过一定的方式弹出认证UI,让用户决定是否允许创建凭证
- 凭据创建:用户允许后,设备开始创建凭证信息并将凭证信息发送给客户端,然后本地存储一份。凭据信息包含证书、公钥和随机生成的凭据ID
第三阶段:身份验证
- 认证请求:客户端请求GetAssertion认证,设备根据客户端传递过来的凭据ID查找本地是否存在对应的凭据信息
- 凭据不存在:若不存在,则返回凭据不存在的错误信息
- 凭据验证:若存在,则对token、rp等信息进行简单校验,然后将客户端传递过来的clientDataHash、rp信息和本地存储的凭据相关信息一并发送给客户端,并对这些数据进行签名
- 认证完成:客户端收到设备发送的Assertion数据,使用设备的公钥进行校验,然后对发送过来的凭证信息进行对比认证
主要特性
- WebAuthn 合规性:完整实现 WebAuthn 规范
- PIN 支持:可选的基于 PIN 的用户验证,包含安全密钥交换
- 安全密钥管理:正确的密钥生成和存储
- 基于证书的认证:CA 签名的凭据提供增强安全性
- 跨平台:支持多种操作系统
- 完整工作流程:实现 FIDO2 认证过程的所有18个步骤
安全考虑
- 所有加密操作使用行业标准算法
- PIN 传输使用共享密钥协商加密
- 凭据安全存储,具有适当的访问控制
- 基于证书的认证提供额外的安全层
- PIN 设置和验证遵循安全协议
许可证
本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。
贡献
欢迎贡献!请随时提交 Pull Request。
支持
如有问题或需要支持,请在 GitHub 上创建 issue。