CanoKey 的 NDEF 应用实现了 NFC Forum Type-4 Tag,通过 NFC 接口暴露一条 NDEF 消息。本页介绍 CanoKey 所实现的文件布局和命令。标准定义请参阅 NFC Forum 规范。
NDEF 标签应用标识符(AID)为:
D2 76 00 00 85 01 01
使用 00 A4 04 00 07 D2760000850101 选择该应用。随后,使用 Select 命令(P1 = 00,P2 = 0C)并在数据域中给出两字节的文件标识符,选择以下两个文件之一:
| 文件 ID | 文件 |
|---|---|
E103 |
Capability Container(CC) |
0001 |
NDEF 文件 |
| INS | 名称 |
|---|---|
A4 |
Select |
B0 |
Read Binary |
D6 |
Update Binary |
固件 3.1.1 及更高版本支持 Update Binary 的 ISO 7816-4 命令链(CLA = 10)。
Capability Container 长度为 15 字节,从标签接口只能读取:
| 偏移 | 长度 | 字段 | 值 |
|---|---|---|---|
| 0 | 2 | CCLEN | 000F |
| 2 | 1 | 映射版本 | 20(版本 2.0) |
| 3 | 2 | MLe | 0400 |
| 5 | 2 | MLc | 0400 |
| 7 | 1 | NDEF File Control TLV:标签 | 04 |
| 8 | 1 | NDEF File Control TLV:长度 | 06 |
| 9 | 2 | NDEF 文件标识符 | 0001 |
| 11 | 2 | NDEF 文件最大大小 | 0400 |
| 13 | 1 | NDEF 文件读权限 | 00(允许读取) |
| 14 | 1 | NDEF 文件写权限 | 00(允许写入)或 FF(只读) |
对 Capability Container 执行 Update Binary 会被拒绝并返回 6985;写权限字节只能通过 Admin 应用修改(见第 5 节)。
NDEF 文件最多可容纳 1024 字节:开头是两字节大端序的 NLEN,随后是 NDEF 消息,因此 NDEF 消息的最大长度为 1022 字节。
出厂默认内容是一条指向 https://canokeys.org 的 URI 记录:
00 11 ; NLEN = 17
D1 01 0D 55 04 63 61 6E 6F 6B 65 79 73 2E 6F 72 67
(D1:短记录,类型名格式 1;类型 55 = “U”,即 URI;标识符 04 = https:// 前缀;负载为 canokeys.org。)
Read Binary(INS = B0)在 P1:P2 中携带偏移量(大端序),在 Le 中给出要读取的字节数。超出所选文件末尾的读取会被拒绝并返回 6700。在未选择文件的情况下发出该命令会被拒绝并返回 6985。
Update Binary(INS = D6)在 P1:P2 中携带偏移量,在命令数据域中携带数据;offset + Lc 不得超过 NDEF 文件大小(1024 字节)。仅当 CC 的写权限字节为 00 时才接受写入;否则命令失败并返回 6982。
要替换 NDEF 消息,应先更新消息字节,然后再更新偏移 0 处的 NLEN 字段,这是 Type-4 Tag 的常规做法。
可通过 Admin 应用的指令 08h 将 NDEF 消息设为只读(P1 = 00 表示读写,P1 = 01 表示只读),该指令会重写 Capability Container 的写权限字节;参见 Admin 应用文档。设为只读后,对 NDEF 文件执行 Update Binary 会失败并返回 6982。
Admin 应用还可以重置 NDEF 应用(指令 07h),这会恢复默认的 Capability Container 和默认的 https://canokeys.org 内容。
| SW | 含义 |
|---|---|
9000 |
成功 |
6700 |
长度或偏移错误 |
6982 |
安全状态不满足(写权限已禁用) |
6985 |
条件不满足(未选择文件;CC 不可写) |
6A82 |
文件未找到(未知的文件标识符) |
6A86 |
P1 / P2 错误 |
6D00 |
不支持的指令 |