天天看点

[FIDO]U2F NFC协议

本来计划写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链,比如:
[FIDO]U2F NFC协议

5.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了。