本來計劃寫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鍊,比如:
5.Applet選擇
FIDO用戶端通過NFC與認證裝置進行認證/注冊操作,每次都需要從選擇applet指令開始。選擇之後的指令就參考U2F Raw Message中的定義即可。
FIDI U2F的AID由RID+AC+AX組成
域 | 值 |
---|---|
| 0xA000000647 |
| 0x2F |
| 0x0001 |
是以通過FIDO U2F AID來選擇applet的指令是:
00 A4 04 00 08 A0000006472F0001
FIDO認證裝置對選擇applet的指令成功的響應為版本資訊“U2F_V2”,選擇applet成功的響應為:
0x5532465F56329000
完成選擇applet,剩下的就參考U2F應用層的指令進行即可,下一篇真的寫U2F Raw Message了。