原本打算写 U2F Raw Message 的内容的,然而发现 FIDO 联盟在 2015 年 5 月份公布的最新的 U2F 标准中,减少了 NFC 协定,所以先写下 NFC 的协定吧。
FIDO U2F NFC 的协定其实非常简单,就是定义了一下 FIDO U2F 的 AID 和 APDU 的标准。
1. 协定简介
FIDO 客户端和认证设施之间通过 NFC 进行通信,过程如下:
(1)客户端发送抉择 applet 指令
(2)认证设施返回胜利
(3)客户端发送操作指令(注册、认证)
(5)认证设施返回响应数据或者谬误
2. 封包的问题
U2F NFC 协定不须要对音讯做任何额定的封包操作(比方 USB HID 协定,须要对音讯进行封包一样)。音讯只须要依照文档 U2F Raw Message 中的定义间接发送到认证设施即可。
3.APDU 的长度
局部响应数据可能比拟长,一条短 APDU 不能传完,所以 U2F 认证设施必须按上面的规定应答:
如果申请指令是扩大长度,认证设施的应答必须应用扩大 APDU 格局
如果申请指令不是扩大长度,认证设施的应答必须应用 ISO7816-4 APDU 链,比方:
4.Applet 抉择
FIDO 客户端通过 NFC 与认证设施进行认证 / 注册操作,每次都须要从抉择 applet 指令开始。抉择之后的指令就参考 U2F Raw Message 中的定义即可。
FIDI U2F 的 AID 由 RID+AC+AX 组成
域 | 值 |
---|---|
RID | 0xA000000647 |
AC | 0x2F |
AX | 0x0001 |
所以通过 FIDO U2F AID 来抉择 applet 的指令是:
00 A4 04 00 08 A0000006472F0001
FIDO 认证设施对抉择 applet 的命令胜利的响应为版本信息“U2F_V2”, 抉择 applet 胜利的响应为:
0x5532465F56329000
实现抉择 applet,剩下的就参考 U2F 应用层的指令进行即可,下一篇真的写 U2F Raw Message 了。