你点开一个 NFC 标签的商品链接。上面写着“NFC 213”,或者“兼容 NTAG215”,又或者只有一句“1K NFC 卡,所有手机通用”。你只想知道一件事:它能不能干我想让它干的活?而商品页回答不了你,因为写商品页的人自己也不知道。
我花了好几年打造 NFC.cool Tools,这款应用每次被轻触时要做的第一件事,恰恰就是回答这个问题:这是什么芯片,它能做什么?光是芯片识别这部分代码,就能认出七家厂商的大约六十款产品,而其中每一款之所以会进这份名单,都是因为有人把它贴到手机上,结果它的表现跟商品页承诺的不一样。写那段代码的时候,我一直希望世上能有一份这样的参考资料。它故意写得很长。如果你想看简短版,NFC 标签入门指南 是最好的起点,需要深入时它也会链回这里。
在看那些表格之前,先给你一句话结论:没有最好的 NFC 标签,只有最适合这项任务的芯片,而任务由三件事决定:你要存多少东西、你要防住谁,以及什么设备必须能读它。
怎样用好这份指南
这份指南里的每一个数字,都来自厂商的数据手册、Apple 或 Google 的平台文档,或者我自己应用的代码,参考资料 列在文末。凡是我亲手摆弄过的芯片,我会用一段实测笔记说明。没摆弄过的,我也会直说:那些冷门型号的信息来自数据手册,而数据手册是承诺,不是实测。
有两样东西你在这里找不到:写入第一枚标签的分步教程(那是 写入指南 的事),以及 NTAG 424 DNA 的完整故事,它有 专门的一篇文章。
NFC 标签的物理构造
一枚 NFC 标签由三样东西粘在一起组成:一颗沙粒大小的 芯片,一圈由蚀刻铝或铜绕成几匝的 天线,以及承载它们的 基材,基材可以是纸质贴纸、PET Inlay、PVC 卡片或者玻璃胶囊。芯片没有电池,它靠手机供电。
原理是电感耦合。手机的天线是一个线圈,驱动着一个每秒交变 1356 万次的磁场。把第二个线圈放进这个磁场,它里面就会感应出电流,跟无线充电器是同一个原理,只是功率小得多得多。标签的芯片就靠这股感应电流活着。要回传数据时,它并不自己发射任何信号,而是在天线两端反复接通、断开一个负载,手机的线圈会把这感知为自身磁场的一点点变化。这个技巧叫 负载调制,正因为如此,活全由手机来干,标签才能便宜到八美分一枚。
读取距离之所以是现在这样,也是这个原因。小线圈的磁场强度随距离的三次方衰减,所以在一厘米处读得好好的标签,到了十厘米就什么都收不到。我把它想成一支蜡烛:离得近,你能借着它看书;隔着整个房间,再怎么眯眼也没用。NFC Forum 自己的定义写的是“典型距离最远 2 厘米”,Android 的文档写的是“4 厘米或更短”,NXP 的数据手册写的则是“最远 100 毫米,取决于场强和天线几何形状”。三种说法都对。手机上的数字是你实际会看到的;100 毫米则是芯片配上大读卡器和大天线时的能力。
数据速率并不高,因为根本不需要更高。Type A 或 Type B 标签以 106 kbit/s 通信,速度更快的芯片会在初始握手之后协商到 212、424 或 848 kbit/s。FeliCa 跑在 212 或 424。ISO 15693 这个远距离家族更慢,常规模式只有 26.48 kbit/s,因为它的设计初衷是让仓库门禁在一米开外读取,而不是让手机来读。无论哪种速率,把一枚 NTAG216 的 888 字节完整导出一遍,都只需要几分之一秒。
| 标准 | 基础速率 | 更快的模式 | 回传方式 |
|---|---|---|---|
| ISO/IEC 14443 Type A 和 B | 106 kbit/s | 支持协商的芯片可达 212、424、848 kbit/s(DESFire、Plus、NTAG 424 DNA) | 在 847.5 kHz 副载波上做负载调制 |
| FeliCa(JIS X 6319-4、ISO/IEC 18092) | 212 kbit/s | 424 kbit/s | 负载调制 |
| ISO/IEC 15693 | 26.48 kbit/s(低速模式 6.62 kbit/s) | NXP 快速模式 53 kbit/s;ICODE 3 最高 212 kbit/s | 在 423.75 kHz 副载波上做负载调制 |
缩写大杂烩:标准、Forum 类型,以及哪些根本不是 NFC
每个商品页都混用着三套命名体系:定义无线电部分的 ISO 标准,定义数据如何排布的 NFC Forum 标签类型,以及厂商自己的产品名。下面是一张对照图。
标准
| 标准 | 它定义了什么 | NFC Forum 名称 | 芯片举例 |
|---|---|---|---|
| ISO/IEC 14443 Type A(第 1 至 3 部分) | 近耦合卡、106 kbit/s、Type A 调制、防冲突、UID | NFC-A | NTAG、MIFARE Ultralight、MIFARE Classic、Topaz |
| ISO/IEC 14443 Type B | 同上,但调制方式不同,也没有同等意义上的 UID | NFC-B | ST SRI512、Calypso 交通卡、许多电子护照 |
| ISO/IEC 14443-4 | 架在 A 或 B 之上的传输协议,叫 ISO-DEP | ISO-DEP | DESFire、NTAG 424 DNA、处于 SL3 的 MIFARE Plus、银行卡、护照 |
| ISO/IEC 7816-4 | 在 ISO-DEP 上使用的命令语言(APDU)和文件系统 | 上一行里的所有芯片 | |
| ISO/IEC 7816-6 | 其中包括芯片厂商代码的注册表 | UID 的第一个字节 | |
| ISO/IEC 15693 | 疏耦合卡,配合合适的读卡器可达一米,8 字节 UID | NFC-V | ICODE、ST25TV、ST25DV、TI Tag-it、NTAG 5 |
| JIS X 6319-4 | 索尼的 FeliCa | NFC-F | FeliCa Lite-S、Suica、八达通(Octopus) |
| ISO/IEC 18092 | NFC 本身(NFCIP-1):点对点模式以及手机使用的被动模式 | 你的手机 |
NFC Forum 标签类型
NFC Forum 并没有设计芯片。它写了五套“配方”,规定如何把 NDEF 消息(每部手机都看得懂的容器格式)存进那些早已存在的芯片里。这就是“Type 2 标签”的含义:它不是一款芯片,而是一种排布方式。
| Forum 类型 | 无线接口 | 内存模型 | 典型芯片 | 手机支持 |
|---|---|---|---|---|
| Type 1 | NFC-A | 8 字节的块,可一次性锁定 | Innovision/Broadcom Topaz | 两个平台都能读;NFC Forum 在 2021 年发布的规范中删除了 Type 1 |
| Type 2 | NFC-A | 4 字节的页,第 3 页是能力容器,TLV 块 | NTAG21x、MIFARE Ultralight、ST25TN、复旦 FM11NT0x1、Infineon my-d move | iPhone 和 Android,包括 iPhone 后台读取 |
| Type 3 | NFC-F | 16 字节的块,服务代码 | FeliCa Lite-S、FeliCa Standard | iPhone 和 Android(Android 必须支持 NFC-F) |
| Type 4 | 架在 NFC-A 或 NFC-B 上的 ISO-DEP | 用 APDU 选择的文件:一个 CC 文件和一个 NDEF 文件 | NTAG 424 DNA、DESFire、ST25TA | iPhone 和 Android |
| Type 5 | NFC-V | 4 字节的块,CC 在第 0 块 | ICODE SLIX 和 SLIX2、ST25TV、ST25DV、NTAG 5 | iPhone 从 iOS 13 起支持,Android 通过 NfcV 支持;2015 年加入 Forum |
有两样东西是刻意不在这张表里的。MIFARE Classic 根本不是 Forum 标签类型;Classic 上的 NDEF 是 NXP 自己的一套映射,部分 Android 手机支持,而 iOS 在任何机型上都不支持。另外,Forum 的配方完全不涉及安全。一枚 Type 2 标签可以是普通的 NTAG213,也可以是带 AES-128 认证的 NTAG 224 DNA;一枚 Type 4 标签可以是光秃秃的 ST25TA02K,也可以是一张银行卡。类型告诉你的是 NDEF 消息怎么存,而不是谁能拿到它。
哪些东西不是 NFC 标签
我收到的“为什么我的手机读不了这个”的消息里,有一半说的东西根本就不是 NFC。手机的 NFC 线圈调谐在 13.56 MHz,只会说上面那些协议。除此之外的一切,在它眼里都是隐形的,不管长得多像标签。
| 看起来像标签,但其实是 | 频率 | 它实际上是什么 | 手机能读吗 |
|---|---|---|---|
| 看不到芯片的办公室或停车场门禁卡 | 125 kHz | 低频 RFID:EM4100 只读 ID、HID Prox、T5577 可重写卡 | 不能,任何应用都改变不了这一点 |
| 宠物芯片 | 134.2 kHz | ISO 11784/11785 FDX-B 应答器 | 不能 |
| 零售防盗或物流标签 | 860 至 960 MHz | 超高频 RAIN RFID,EPC Gen2 | 不能 |
| 酒店房卡或老式交通卡 | 13.56 MHz | MIFARE Classic 或某种私有的高频卡 | Android 有时可以,iPhone 只显示 UID |
| 银行卡 | 13.56 MHz | 说 ISO-DEP 的 EMV 智能卡 | 技术上可以;应用能读出卡上的应用列表和公开数据,但 Apple 的 Core NFC 禁止读取支付卡,而且没有任何手机能做出一张可用的副本 |
| 护照 | 13.56 MHz | 符合 ICAO 9303 的电子证件 | 可以,用机读区当钥匙;这个我做过 |
| 安全密钥 | 13.56 MHz | 基于 ISO 7816 的 FIDO2 认证器 | 浏览器可以用,但不是当作标签来读 |
最让人心疼的是那张 125 kHz 的门禁卡。它能刷开门口的读卡器,它是一张里面有线圈的塑料卡,但它永远不会跟手机说话。我写过一篇 为什么 iPhone 打不开你小区的门,因为诚实的答案是硬件层面的。
怎样读懂数据手册和商品页
数据手册的首页就有你需要的全部数字,好的商品页会照抄过来。下面逐一说明每个数字的含义,以及哪些会骗人。
用户内存与总内存
每颗芯片的 EEPROM 都比你能用的多。一枚 NTAG213 总共有 180 字节,其中 144 字节归你;另外 36 字节存放着 UID、锁定位、能力容器和配置页。一张 MIFARE Classic 1K 有 1024 字节,其中 752 字节是数据,因为每个扇区都要让出一个块来存密钥。商品页总是报更大的那个数字。真正要紧的是 用户内存,而即便是它,也不等于一条 NDEF 消息能装下的量,这是下一节要讲的。
UID
唯一标识符在出厂时烧录,无法更改,除非是那些专门为了能改它而造的克隆芯片。UID 有三种长度:
| UID 长度 | 出现在哪里 | 说明 |
|---|---|---|
| 4 字节 | 老款 MIFARE Classic,以及如今的廉价 Classic 卡 | NXP 把这类叫作“非唯一标识符”(NUID),因为 4 字节早就不够用了。4 字节 UID 里没有厂商代码。首字节为 08 意味着芯片每次被轻触都会生成一个随机 ID |
| 7 字节 | NTAG、Ultralight、DESFire、NTAG 424 DNA、Classic EV1(可选),FeliCa 的 8 字节 IDm 算是近亲 | 首字节是厂商代码 |
| 8 字节 | 所有 ISO 15693 芯片 | 首字节永远是 E0,第二个字节是厂商代码 |
厂商代码来自 ISO/IEC 7816-6 注册表,它是核查一个商品页最快、也最可靠的办法。如果一枚“正品 NXP”标签报出的是 1D,那它就是复旦造的。
| 代码 | 厂商 |
|---|---|
| 01 | 摩托罗拉(Motorola) |
| 02 | 意法半导体(STMicroelectronics) |
| 03 | 日立(Hitachi) |
| 04 | 恩智浦(NXP Semiconductors) |
| 05 | 英飞凌(Infineon) |
| 07 | 德州仪器(Texas Instruments) |
| 08 | 富士通(Fujitsu) |
| 16 | EM Microelectronic |
| 1A | 索尼(Sony) |
| 1D | 上海复旦微电子 |
| 25 | Innovision(Topaz) |
| 2C | Impinj |
| 2E | 博通(Broadcom) |
ATQA、SAK 和 GET_VERSION:读卡器怎样区分芯片
Type A 芯片应答手机时,会发出两个小小的值:ATQA 和 SAK。读卡器(包括我的应用)用 SAK 把芯片归入各个家族,因为 SAK 的各个位说明了芯片是否支持 ISO-DEP,以及它大致属于哪个家族。NXP 自己的芯片识别应用笔记用粗体写着,不要把 ATQA 用于任何判断,因为它会撞车、会误导,我的经验也确实如此。
| SAK | 家族 | 常见的 ATQA |
|---|---|---|
| 00 | NTAG 和 MIFARE Ultralight,全部 | 00 44 |
| 08 | MIFARE Classic 1K,处于安全等级 1 的 MIFARE Plus 2K 或 SE | 00 04(4 字节 UID),00 44(7 字节) |
| 09 | MIFARE Classic Mini | |
| 18 | MIFARE Classic 4K,处于等级 1 的 MIFARE Plus 4K | 00 02 或 00 42 |
| 10、11 | 处于等级 2 的 MIFARE Plus X | |
| 20 | 一切支持 ISO-DEP 的芯片:DESFire、NTAG 424 DNA、处于等级 3 的 Plus、银行卡、JCOP | 03 44(DESFire、424),使用随机 ID 时为 03 04 |
既然所有 NTAG 和 Ultralight 都应答 SAK 00,要把 NTAG213、NTAG216 和 Ultralight EV1 区分开,就还需要一条命令:GET_VERSION。它返回八个字节,其中三个起作用。第 2 字节是产品类型(03 Ultralight、04 NTAG、07 NTAG I2C、01 DESFire、02 Plus、08 DESFire Light),第 4 字节是代际,第 6 字节编码了存储容量。NFC.cool 就是靠它知道自己面对的是什么,这也是读取 Amiibo 的游戏机向标签发出的第一个问题。
| 芯片 | GET_VERSION 响应 |
|---|---|
| NTAG213 | 00 04 04 02 01 00 0F 03 |
| NTAG215 | 00 04 04 02 01 00 11 03 |
| NTAG216 | 00 04 04 02 01 00 13 03 |
| NTAG210 | 00 04 04 01 01 00 0B 03 |
| NTAG212 | 00 04 04 01 01 00 0E 03 |
| Ultralight EV1 48 B | 00 04 03 01 01 00 0B 03 |
| Ultralight EV1 128 B | 00 04 03 01 01 00 0E 03 |
| Ultralight AES | 00 04 03 0x 04 00 0F 03 |
| NTAG 223 DNA | 00 04 04 02 04 00 0F 03 |
| NTAG 424 DNA(包在 APDU 里) | 厂商 04,类型 04,主版本 30,容量 11 |
也有不支持 GET_VERSION 的芯片:初代 Ultralight、Ultralight C 和老款 NTAG203 从来就没有这条命令,大多数克隆芯片也没有。这种缺失本身就是一种指纹。
擦写寿命、数据保存期、工作温度
这三个数字,商品页几乎从来不写,数据手册却一定会写。
擦写寿命 指一个字节能被重写多少次。对任何现行芯片来说,100,000 次是底线;Classic 时代的芯片和初代 Ultralight 标称 10,000 次。DESFire EV3 和 ST25DV 家族的典型值是 1,000,000 次。
数据保存期 指字节在不通电的情况下能保存多久。10 年是老标准,NXP 给 NTAG 424 DNA 和 ICODE SLIX 家族标的是 50 年,ST 给 ST25TA 这一系列 Type 4 芯片标的是 200 年。保存期是在室温下标定的;高温会缩短它。
工作温度 对大多数 NXP 消费级芯片是 -25 到 +70 °C,ST 和 EM 的型号是 -40 到 +85 °C,ICODE 3 最高可到 105 °C。瓶颈通常不在芯片,而在背胶和基材。
安全等级阶梯
这是商品页里最爱说谎的部分。“加密”“安全”“防克隆”这些字样,被印在了唯一保护只是一个明文传输的 32 位密码的标签上。下面是这道阶梯,从下往上排,本指南里的每一颗芯片都站在其中某一级上。
| 级别 | 是什么 | 芯片 | 能防住什么 |
|---|---|---|---|
| 0. 什么都没有 | 谁都能读、谁都能写 | 初代 Ultralight、NTAG203、TI Tag-it Standard、Topaz | 什么也防不住 |
| 1. 锁定位 | 单向的位,让页面永久只读 | 所有 Type 2 和 Type 5 芯片 | 重写;防不住复制 |
| 2. 密码 | 一个 32 位密码加一个 16 位确认值(PACK),可选失败次数上限;在 NTAG21x 上,密码以明文方式在空中传输 | NTAG21x、Ultralight EV1、NTAG 223 DNA、ICODE SLIX 家族(32 位)、ST25TV(32 或 64 位)、ST25TA(128 位) | 能挡住拿着应用随手重写的陌生人;挡不住拿着嗅探器、铁了心的攻击者 |
| 3. CRYPTO1 | NXP 上世纪 90 年代的 48 位流密码 | MIFARE Classic、处于等级 1 的 MIFARE Plus | 自 2008 年起什么也防不住;按第 0 级对待 |
| 4. 三重 DES | 用 16 字节密钥做双向认证 | Ultralight C、FeliCa Lite-S、DESFire D40 和 EV1 | 没有密钥就复制不了内容 |
| 5. AES-128 | 双向认证、安全报文 | Ultralight AES、NTAG 224 DNA、DESFire EV1 至 EV3、DESFire Light、处于等级 3 的 Plus、ICODE DNA、FeliCa Standard、EM4425 | 同上,而且用的是至今仍被信任的密码算法 |
| 6. AES 加 SUN | 每次轻触都会在 URL 本身里生成一份全新的密码学证明 | NTAG 424 DNA、NTAG 22x DNA、DESFire EV3 | 克隆,因为副本无法为下一次轻触签名 |
| 7. 防拆回路 | 一根导线,只要被弄断过一次,就会永久报告 | NTAG 213 TT、NTAG 424 DNA TT、NTAG 22x DNA StatusDetect、ICODE 3 TT、ST25TV02KC-T | 封条被重复使用 |
有两项功能不在这道阶梯上,而是在它旁边。原厂签名 是厂商写入的一份针对 UID 的数字签名,让读卡器可以核验芯片确实出自 NXP 或 ST。它防不住复制,因为克隆芯片可以带着一份复制来的签名,NXP 在自己的应用笔记里也是这么说的。至于 计数器(NTAG213/215/216 上的 24 位读取计数器,Ultralight EV1 上的三个单向计数器,SLIX2 上的 16 位写入计数器),它们是为具体用例服务的,不是安全功能,除非被纳入一条 SUN 消息。
NDEF,以及标签上究竟能装下什么
NDEF(NFC Data Exchange Format,NFC 数据交换格式)是一个信封。手机并不是从标签上读出“一个网址”;它读出的是一条包含 URI 记录的 NDEF 消息,而信封本身是有分量的。知道了这个分量,你才能回答“我的链接能不能塞进一枚 NTAG213”。
记录本身
每条记录都以一个标志字节开头(消息开始、消息结束、短记录,以及一个三位的类型名称格式),接着是类型的长度、负载的长度(负载小于 256 字节时占一个字节,否则占四个字节)、类型本身,最后是负载。所以,一条短 URL 记录在你链接的第一个字节之前,就要先花掉 4 字节的头部。
| 记录 | 类型 | 负载 |
|---|---|---|
| URL | 知名类型 U | 一个前缀字节,加上 URL 的其余部分(UTF-8) |
| 文本 | 知名类型 T | 一个状态字节、一个语言代码(en),然后是文本 |
| Smart Poster | 知名类型 Sp | 里面套着一整条 NDEF 消息:一个 URL,加上可选的标题和一个动作 |
| 联系人 | MIME text/vcard | 原样的 vCard 文本 |
| Wi-Fi | MIME application/vnd.wfa.wsc | Wi-Fi Simple Configuration 属性:SSID、认证类型、密钥 |
| Android 应用 | 外部类型 android.com:pkg | 一个包名;Android 会打开这个应用或它在 Play 商店的页面 |
前缀字节是 URI 记录里唯一的巧思。它不把 https:// 一个字母一个字母地写出来,而是让负载的第一个字节代表一个常见前缀,再由手机把它还原回去。
| 代码 | 前缀 | 代码 | 前缀 |
|---|---|---|---|
| 00 | 无 | 12 | rtsp:// |
| 01 | http://www. | 13 | urn: |
| 02 | https://www. | 14 | pop: |
| 03 | http:// | 15 | sip: |
| 04 | https:// | 16 | sips: |
| 05 | tel: | 17 | tftp: |
| 06 | mailto: | 18 | btspp:// |
| 07 | ftp://anonymous:anonymous@ | 19 | btl2cap:// |
| 08 | ftp://ftp. | 1A | btgoep:// |
| 09 | ftps:// | 1B | tcpobex:// |
| 0A | sftp:// | 1C | irdaobex:// |
| 0B | smb:// | 1D | file:// |
| 0C | nfs:// | 1E | urn:epc:id: |
| 0D | ftp:// | 1F | urn:epc:tag: |
| 0E | dav:// | 20 | urn:epc:pat: |
| 0F | news: | 21 | urn:epc:raw: |
| 10 | telnet:// | 22 | urn:epc: |
| 11 | imap: | 23 | urn:nfc: |
所以 https://nfc.cool/ 会被存成字节 04 加上 nfc.cool/:一个十七个字符的 URL,负载只占九个字节。NXP 自己的 NTAG 5 数据手册里附了一个例子:D1 01 0C 55 01 后接 nxp.com/nfc,解码出来就是 http://www.nxp.com/nfc。
记录外面的那层信封
在 Type 2 或 Type 5 标签上,消息装在一个 TLV 里:一个表示“NDEF 消息”的字节(03),一个长度字节(消息达到 255 字节或更长时占三个字节),消息本身,再加一个终止字节(FE)。Type 4 标签上没有 TLV;NDEF 文件以一个两字节的长度开头。另外,在出厂状态的 NTAG213 或 NTAG212 上,用户内存的前五个字节已经被一个 Lock Control TLV 占用了,这是 NXP 出厂时预先写好的,每个写入工具都会保留它。
下面是一条 https:// 链接的账,针对大多数人会买的那颗芯片,手算一遍:
NTAG213 用户内存:144 字节
减去出厂的 Lock Control TLV:139
减去 NDEF TLV 的封装(03、长度、FE):消息可用 136 字节
减去记录头(标志、类型长度、负载长度、
U):负载可用 132 字节减去前缀字节:
https://之后还能写 131 个字符
什么能装进哪颗芯片
| 标签 | NDEF 区域 | https:// 之后的 URL 字符数 | 最简 vCard(132 B,姓名、电话、邮箱、网址) | 典型 vCard(250 至 500 B) | Wi-Fi 记录(67 至 88 B) |
|---|---|---|---|---|---|
| NTAG210、Ultralight EV1 48 B | 48 | 40 | 不能 | 不能 | 不能 |
| NTAG212 | 128 | 115 | 不能 | 不能 | 能 |
| Ultralight EV1 128 B | 128 | 120 | 不能 | 不能 | 能 |
| NTAG213,出厂状态 | 144 | 131 | 不能,差 9 字节 | 不能 | 能 |
| NTAG213,去掉锁定 TLV | 144 | 136 | 不能,差 4 字节 | 不能 | 能 |
| ST25TN01K | 160 | 约 147 | 能,勉强 | 不能 | 能 |
| NTAG215 | 声明 496(用户内存 504) | 483 | 能 | 能,大多数可以 | 能 |
| NTAG216 | 声明 872(用户内存 888) | 859 | 能 | 能 | 能 |
| ICODE SLIX | 112(含 CC) | 100 | 不能 | 不能 | 能 |
| ICODE SLIX2 | 316 | 约 300 | 能 | 通常能 | 能 |
| NTAG 424 DNA | 256 字节的 NDEF 文件 | 249 | 能 | 小的可以 | 能 |
| DESFire EV3 2K | 最大 2048 字节的 NDEF 文件 | 最多 2038 | 能 | 能 | 能 |
有两处脚注常常让人栽跟头。NXP 自己在 NTAG215 和 NTAG216 上写的能力容器,声明的是 496 和 872 字节,比用户内存少,所以 Android 的 getMaxSize() 报的是那个较小的数字,而它是对的。另外,一张包含姓名、电话、邮箱和网址的 vCard,套信封之前是 132 字节,套上之后是 148 字节,这就是为什么它差一点塞不进 NTAG213,也是为什么做名片的厂商默认都用 NTAG215 或 NTAG216。我在入门指南里用的那些约数(大约 130、480 和 850 个字符),就是把这些数字的零头抹掉之后的结果。
内存映射:芯片上什么东西在哪里
如果你曾经在 NFC.cool 里导出过一枚标签,然后对着那堆十六进制发呆,这一节就是你的解码手册。
Type 2:NTAG213 的页面映射
| 页 | 字节数 | 内容 |
|---|---|---|
| 00 | 4 | UID 第 0 至 2 字节和一个校验字节 |
| 01 | 4 | UID 第 3 至 6 字节 |
| 02 | 4 | 校验字节、一个内部字节、两个管第 3 至 15 页的静态锁定字节 |
| 03 | 4 | 能力容器:E1 10 12 00(魔数、版本 1.0、18 x 8 = 144 字节、允许读写) |
| 04 至 27 | 144 | 用户内存,TLV 就放在这里 |
| 28 | 4 | 管第 16 页及以后的动态锁定字节 |
| 29 | 4 | CFG0:镜像配置、镜像落在哪一页,以及 AUTH0,即第一个受密码保护的页 |
| 2A | 4 | CFG1:带读写保护位的 ACCESS 字节,以及失败次数上限 AUTHLIM |
| 2B | 4 | PWD,即密码,只能写不能读 |
| 2C | 4 | PACK,两字节的确认值,加上两个保留字节 |
NTAG215 的结构相同,用户内存一直到第 81 页,配置位于 83 至 86 页;NTAG216 的用户内存一直到 E1,配置位于 E3 至 E6。能力容器的这些位都是单向的:一旦第 3 字节里的只读标志被置位,或者某个锁定位被置位,就再也清除不掉,应用里的“永久锁定”实际写下的就是这个。在 Type 2 上,“格式化”是往第 4 页写一个空的 NDEF TLV(03 00 FE);它并不会把内存清零,所以在被覆盖之前,旧数据仍然可以被导出来。
Type 4:NTAG 424 DNA 的文件系统
这里没有页。一个名为 D2760000850101 的 ISO 7816 应用里包含三个文件:一个 32 字节的能力容器(E103)、一个 256 字节的 NDEF 文件(E104),以及一个 128 字节的专有文件(E105)。每个文件都有各自的读、写和修改权限,每项权限都对应五把 AES 密钥中的一把。DESFire 的工作方式相同,只是允许你自己创建应用和文件;NTAG 424 DNA 的三个文件是固定的,所以我才把它形容为 一个带三个抽屉、上了锁的小保险箱。
Type 5:ISO 15693 的块
四字节一块,从零开始编号,能力容器在第 0 块(E1 40 后接容量),NDEF TLV 从第 1 块开始。UID、AFI、DSFID 和锁定状态都不在可寻址的块里,要用一条单独的 GET SYSTEM INFORMATION 命令来读。在 ICODE SLIX2 上,最后一个可寻址块(第 79 块)是那个 16 位计数器;在 ICODE 3 上,第 75 块存着一个 24 位计数器,第 76 块及以后是一个单独的配置区。
MIFARE Classic:扇区、尾块和目录
一张 Classic 1K 有 16 个扇区,每个扇区 4 个块,每块 16 字节。每个扇区的最后一块是 扇区尾块:密钥 A、三个访问控制字节、一个空闲字节、密钥 B。第 0 扇区的第 0 块是厂商块,里面存着 UID。为了把 NDEF 放进 Classic,NXP 定义了一套目录:第 0 扇区变成 MIFARE 应用目录(MAD),可以用公开密钥 A0 A1 A2 A3 A4 A5 读取,它列出了哪些扇区以应用代码 03 E1 存放着 NDEF。这些扇区用的是第二把公开密钥 D3 F7 D3 F7 D3 F7。一张刚出厂的卡,所有密钥都是 FF FF FF FF FF FF。Android 版 NFC.cool 格式化 Classic 卡时,写入的就是这套目录和这些密钥,这也是为什么格式化过的 Classic 卡能在部分 Android 手机上读出来,却在任何 iPhone 上都读不出来。
选型决策表
如果你已经知道要干什么、只想知道该用哪颗芯片,从这里开始。
| 任务 | 芯片 | 理由 | NFC.cool 支持情况 |
|---|---|---|---|
| 一个链接、一个 Wi-Fi 网络、一个快捷指令触发器、贴在某样东西上的贴纸 | NTAG213 | 131 个字符的 URL、密码、计数器,八美分 | 在 iPhone、Android、iPad 和 Mac 上完整支持 |
| 一张联系人名片、一个较长的链接、任何需要留出余量的用途 | NTAG216 | 859 个字符,功能相同,也是我做测试用的芯片 | 完整支持 |
| Amiibo | NTAG215 | 游戏机检查的正是这颗芯片和它的 504 字节 | 两个平台都支持备份与恢复 |
| 统计海报、名片、演示机上的轻触次数 | NTAG213、215 或 216 | 硬件读取计数器和 ASCII 镜像,而且应用的轻触计数器支持的正是这三款芯片 | 两个平台都支持 轻触计数器 |
| 超小天线、戒指、廉价的一次性用途 | NTAG 210µ 或 Ultralight EV1 48 B | 48 字节,17 pF 适合小线圈,没有密码 | 读取和写入 |
| 证明产品是正品,轻触一次,无需应用 | NTAG 424 DNA | 每次轻触都用 AES-128 自行签名;副本做不到 | 完整配置,包括签名校验 |
| 同上,但想要一枚便宜的 Type 2 贴纸 | NTAG 223 DNA | Type 2 芯片上的 SUN,144 字节 | 显示为 Type 2 标签;暂不支持 SUN 配置 |
| 一个被打开时会报告的封条 | NTAG 213 TT、NTAG 424 DNA TT、ST25TV02KC-T | 一根防拆导线,状态被永久记住 | 424 TT 完整支持;其他的按其基础芯片读取 |
| 隔着一臂距离做库存盘点或图书馆管理,配合门禁式读写器 | ICODE SLIX2 或 ICODE 3 | ISO 15693 用合适的读写器能在 1 至 1.5 米读取,用手机照样能轻触读 | 两个平台都支持读取、写入、格式化 |
| 需要被 3D 打印机本身读取的耗材盘 | ICODE SLIX2 | OpenPrintTag 标准要求 NFC-V | 读取和写入 |
| 门禁、闸机、交通系统 | DESFire EV3 或 MIFARE Plus EV2 | AES、真正的密钥管理、经过认证的安全性 | 识别并导出公开内容;不做任何密钥操作 |
| 与单片机通信的无源传感器 | NTAG I2C plus、ST25DV、NTAG 5 | 同一颗晶粒上集成 I2C 接口和能量采集 | 按其 NFC 一面读取 |
| 日本交通或电子钱包体系里的一切 | FeliCa | 那里的读卡器说的就是这种语言 | 读取;在 iPhone 上可向 Lite-S 和 Standard 写入 NDEF |
| 贴在金属表面上的标签 | 以上任意一款的抗金属形态 | 让它能用的是铁氧体层,而不是芯片 | 视芯片而定 |
| 植入皮下 | NTAG216(xNT)、NTAG I2C(xSIID)、DESFire(xDF) | 小小的玻璃天线需要对准手机的最佳位置 | 视芯片而定 |
表里没有的是:MIFARE Classic。在 2026 年,没有任何一项任务会让我去买一颗 Classic 芯片,下面的章节会解释为什么。
逐个家族细看
每个家族都按同样的方式来讲:一张来自数据手册的规格表,这颗芯片是干什么用的,手机拿它能做什么,以及我手上有的话,再加一段实测笔记。
NTAG 21x:贴纸家族
面向普通消费者出售的 NFC 贴纸、圆片和卡片,几乎全都用这颗芯片。虽然数据手册自 2015 年以来就没改过,NXP 在 2026 年仍把它们全部列为在产。
| 芯片 | 用户 / 总字节数 | 密码 | 计数器 | 镜像 | 签名 | 擦写寿命 / 保存期 | 状态 |
|---|---|---|---|---|---|---|---|
| NTAG 210µ | 48 / 64 | 无 | 无 | 无 | 有,可重新编程 | 10 万次 / 10 年 | 在产 |
| NTAG210 | 48 / 80 | 32 位 + PACK,AUTHLIM | 无 | UID | 有 | 10 万次 / 10 年 | 在产 |
| NTAG212 | 128 / 164 | 有 | 无 | UID | 有 | 10 万次 / 10 年 | 在产 |
| NTAG213 | 144 / 180 | 有 | 24 位读取计数器 | UID 和计数器 | 有 | 10 万次 / 10 年 | 在产 |
| NTAG215 | 504 / 540 | 有 | 有 | 有 | 有 | 10 万次 / 10 年 | 在产 |
| NTAG216 | 888 / 924 | 有 | 有 | 有 | 有 | 10 万次 / 10 年 | 在产 |
| NTAG213F、NTAG216F | 144 或 888 | 有 | 有 | 有 | 有 | 10 万次 / 10 年 | 在产;增加了场检测引脚和休眠模式,便于嵌入电子产品 |
| NTAG 213 TT | 144 / 184 | 有 | 有 | UID、计数器和防拆状态 | 有 | 10 万次 / 10 年 | 在产;增加了一根防拆导线 |
| NTAG203 | 144 / 168 | 无,只有一个 32 位 OTP 区 | 16 位写入计数器 | 无 | 无 | 1 万次 / 5 年 | 已停产,由 NTAG213 取代 |
它们全都是 NFC Forum Type 2、ISO/IEC 14443 Type A、7 字节 UID、106 kbit/s,额定工作温度 -25 到 +70 °C。NTAG210 和 NTAG212 的输入电容是 17 pF,适合小天线;213、215 和 216 是 50 pF。原厂签名是基于 secp128r1 曲线的 ECDSA,32 字节,用 READ_SIG 命令读取;验证用的密钥写在一份不公开的 NXP 应用笔记里,所以几乎没有哪款消费级应用会去核验它。
实际使用中真正要紧的是三项功能:密码(32 位的 PWD,标签用来应答的 16 位 PACK,标明保护从哪一页开始的 AUTH0,以及在猜错指定次数后让标签变砖的 AUTHLIM)、NFC 计数器(24 位,每个读取会话加一,可以用专门的命令读出),以及 ASCII 镜像,它会把 UID 和计数器以文本形式贴进你的 NDEF 消息,于是一个普通的 URL 每次被轻触都会变成 https://example.com/?u=04A1...&c=000123。我写过的飞利浦 Sonicare 刷头用的就是 NTAG213,AUTHLIM 设成了三次,这就是你猜错密码时 刷头会把自己锁死 的原因。
实测笔记:每次发版我都拿这几颗芯片做测试,有人只想买一包、然后再也不用操心的话,我推荐的就是 NTAG216。凡是放在公共场所的标签,都值得设个密码;它能挡住拿着免费应用的人,而大多数人就是这样的人。它挡不住拿着嗅探器的人,因为密码本身是不加密地在空中传输的,这一点我在应用里也直说了。
在手机上:所有型号都能读写 NDEF,iPhone 能在后台读取 URL 记录,两个平台都能对密码、计数器和镜像做底层访问。NFC.cool 在 iPhone、Android 上,以及在 iPad 和 Mac 上通过 USB 读卡器,全都能做到。
NTAG DNA:每次轻触都签名的芯片
三代产品,其中两代仍在生产。
| 芯片 | Forum 类型 | 用户字节数 | 密钥 | SUN | 签名 | 擦写寿命 / 保存期 | 状态 |
|---|---|---|---|---|---|---|---|
| NTAG 413 DNA | Type 4 | 160(32 CC + 128 NDEF) | 3 把 AES-128 | 有,24 位计数器 | ECC | 20 万次 / 50 年 | 已不再生产 |
| NTAG 424 DNA | Type 4 | 416(32 + 256 + 128) | 5 把 AES-128,可选 LRP,可选随机 ID | 有,可选加密 UID | ECDSA secp224r1,56 字节,外加 AES 原厂密钥 | 20 万次 / 50 年 | 在产;Common Criteria EAL4 |
| NTAG 424 DNA TT | Type 4 | 416 | 5 把 AES-128 | 有,并在消息中附带防拆状态 | 同上 | 20 万次 / 50 年 | 在产 |
| NTAG 223 DNA | Type 2 | 144 / 240 | 一把 16 字节的 SUN 密钥加一个 32 位密码 | 有,24 位计数器 | ECDSA secp192r1,48 字节 | 10 万次 / 10 年 | 自 2022 年 2 月起在产 |
| NTAG 224 DNA | Type 2 | 208 / 304 | 用 AES-128 双向认证取代密码 | 有 | 同上 | 10 万次 / 10 年 | 在产 |
| NTAG 223 和 224 DNA StatusDetect | Type 2 | 同上 | 同上 | 有,并在消息中附带传感器状态 | 同上 | 10 万次 / 10 年 | 在产 |
SUN(Secure Unique NFC)正是让这些芯片值 NTAG213 三倍价钱的那项功能:标签把自己的 UID 和读取计数器镜像进 URL,再附上一个针对它们计算的 AES-128 CMAC,每次轻触都重新计算。服务器校验这个 MAC;克隆标签没有密钥,就会校验失败。包括 LRP 模式和那五把密钥在内,我在 NTAG 424 DNA 那篇文章 里全都讲过了,所以这里只说之后的变化:NXP 现在还在卖 NTAG 426Q DNA 和 NTAG X DNA,后者是一颗 16 kB、获得 EAL6+ 认证的联网 Type 4 芯片,所以 424 已经不是最新的 DNA 芯片了,只是你真能以贴纸形式买到的那一款。
22x DNA 家族是个有意思的新成员:Type 2 芯片上的 SUN,这意味着贴纸更便宜,手机也会把它当成普通 NTAG 来读。StatusDetect 版本多了一个传感器:要么是一个导电回路,会不可逆地记录下它曾被弄断;要么是在两个引脚之间测量 0 到 11 pF 的电容,NXP 把它推荐用于液位、湿度和压力检测。
实测笔记:我的第一批 NTAG 424 DNA 标签是在 AliExpress 上花几欧元买的,应用里整套 424 功能都是围着它们做出来的:更换密钥、明文和加密两种模式的 SUN、文件访问权限、保险箱文件、防拆状态。424 也是唯一一颗 NFC.cool 会拿 NXP 公开的公钥去核验原厂签名、并显示“Genuine NXP”的芯片。22x DNA 我只在纸面上见过。
MIFARE Ultralight:票务家族
Ultralight 是 NTAG 的兄长。同样的空中接口,同样的 4 字节页,同样的 SAK,从 EV1 起连命令也一样。区别在于设计意图:Ultralight 是为单程票而造的,NTAG 系列则是为带网址的贴纸而造的,所以 NTAG 出厂时预先写好了能力容器,而 Ultralight 没有。
| 芯片 | 用户 / 总字节数 | 保护 | 计数器 | 签名 | 擦写寿命 / 保存期 | 状态 |
|---|---|---|---|---|---|---|
| MIFARE Ultralight(MF0ICU1) | 48 / 64 | 锁定位和一个 32 位 OTP 区 | 无 | 无 | 1 万次 / 5 年 | 已不再生产 |
| Ultralight C | 144 / 192 | 三重 DES 双向认证,16 字节密钥 | 16 位单向 | 无 | 10 万次 / 10 年 | 不推荐用于新设计,由 Ultralight AES 取代 |
| Ultralight EV1 | 48 / 80 或 128 / 164 | 32 位密码,AUTHLIM | 三个独立的 24 位单向计数器 | 有,32 字节 | 10 万次 / 10 年 | 在产 |
| Ultralight AES | 144 / 240 | AES-128 双向认证,CMAC 报文,可选随机 ID | 三个 24 位计数器 | 有,外加一把 AES 原厂密钥 | 10 万次 / 10 年 | 自 2022 年 2 月起在产,Common Criteria EAL3+ |
| Ultralight Nano | 40 / 56 | 锁定位和 OTP | 无 | 有 | 10 万次 / 10 年 | 已从 NXP 产品目录中消失,我没找到任何通告 |
Ultralight EV1 的标志性功能是那三个单向计数器:交通运营方把计数往下扣,芯片拒绝再往回加。Ultralight AES 则低调地回答了“我想要一颗带真正认证的 NTAG213”这个需求:同样是 144 字节,用 AES-128 取代密码,而且是任何手机都能读的 Type 2 标签。
在手机上:这里的所有芯片都被当作 Type 2 标签读取。Apple 的 Core NFC 提供了 .ultralight 家族,并允许应用发送原生命令;Android 有一个 MifareUltralight 类,它是可选的,但我见过的每部手机上都有。NFC.cool 会根据 GET_VERSION 报出 EV1 的各个型号和 AES 版本,并像对待 NTAG 一样处理 EV1 上的密码;AES 认证本身,应用并不做。
MIFARE Classic、Plus 和 DESFire:门禁家族
把三个家族放在一节里,是因为它们讲的是同一个故事:Classic 被攻破了,Plus 是迁移路线,DESFire 是整个行业最终落脚的地方。
MIFARE Classic 就是你那张旧酒店房卡、健身房会员卡以及大量办公室工牌里的芯片。它不是 NFC Forum 标签类型。它有自己的密码算法 CRYPTO1,2008 年被两个研究团队逆向破解:Nohl 和 Plötz 是在显微镜下观察硅片,拉德堡德大学的团队则是观察协议,他们“只需与真实读卡器进行一两次认证尝试,不到一秒钟”就恢复出了一把密钥。NXP 曾上法庭试图阻止第二篇论文发表,结果败诉。十六年后的 2024 年 8 月,Quarkslab 公布了复旦 FM11RF08S 中的一个硬件后门,这是过去五年里最常见的 Classic 兼容芯片;他们还发现了一把更老的后门密钥,早期的复旦芯片、部分英飞凌芯片,甚至一些 2000 年前后的 NXP 芯片都共用这把密钥。Classic 不是安全产品,NXP 自己的 Classic EV1 产品页现在也写着“不推荐用于新设计”,并指向了 DESFire Light。
| 芯片 | 用户 / 总字节数 | UID | 保护 | 擦写寿命 / 保存期 | 状态 |
|---|---|---|---|---|---|
| Classic Mini | 224 / 320 | 4 字节 | CRYPTO1 | 10 万次 / 10 年 | 已停产 |
| Classic 1K | 752 / 1024 | 4 字节 NUID | CRYPTO1 | 10 万次 / 10 年 | 已停产;EV1 不推荐用于新设计 |
| Classic 4K | 3440 / 4096 | 4 字节 NUID | CRYPTO1 | 10 万次 / 10 年 | 已停产;EV1 不推荐 |
| Classic EV1 1K 和 4K | 同上 | 7 字节或 4 字节,可选随机 ID | CRYPTO1;仅 1K 有原厂校验 | 至少 10 万次 / 10 年 | 不推荐用于新设计 |
关于 iPhone 的直白答案,因为每周都有人问我:iPhone 读不了 MIFARE Classic 卡里的内容,任何应用都改变不了这一点。Apple 的 Core NFC 在 API 里根本没有 Classic 家族,它的 MIFARE 命令文档也直接写明“不支持 Crypto1 协议”。手机能看到 UID 和 SAK,我的应用据此报出芯片家族,到此为止。Android 就不一样了:MifareClassic 类是可选的,只有 NFC 控制器在硬件上带 CRYPTO1 的手机才会实现它(NXP 的控制器带;某一代 Nexus 和 Galaxy 手机里的博通芯片不带)。在这些手机上,NFC.cool 能读出出厂密钥能打开的每一个扇区,还能把一张新卡格式化成 NDEF。
MIFARE Plus 是在 Classic 的内存映射上加装了 AES-128,这样运营方可以先换卡,再换读卡器。它按安全等级运行:SL1 的行为跟 Classic 一样(可选 AES),SL3 是只走 ISO-DEP 的纯 AES,Plus X 在两者之间还有一个 SL2。Plus S 和 Plus X 已经停产;Plus SE(1K,752 字节)和 Plus EV2(2K 或 4K,EAL5+,25 年保存期,典型擦写寿命 1,000,000 次)是现行型号。在 SL1 下,手机看到的是 SAK 08 或 18,跟 Classic 一样;在 SL3 下,它看到的是一张 ISO-DEP 卡。
MIFARE DESFire 则完全是另一种东西:一个小型文件系统,有应用、有文件、有逐文件的访问权限,每个应用最多 14 把密钥,通过 ISO-DEP 以最高 848 kbit/s 收发 APDU。
| 芯片 | 可用内存 | 密码算法 | 额外功能 | 擦写寿命 / 保存期 | 状态 |
|---|---|---|---|---|---|
| DESFire D40 | 4 kB | DES、三重 DES | 10 万次 / 10 年 | 2011 年逐步淘汰;同年其密钥被功耗分析攻击恢复出来 | |
| DESFire EV1 | 2304、4864 或 7936 字节 | DES、3DES、AES-128 | 支持 NFC Forum Type 4,随机 ID | 至少 20 万次 / 10 年 | 不推荐用于新设计 |
| DESFire EV2 | 2560、5120、8192 或 16384 字节 | AES-128,EAL5+ | 交易 MAC、距离检查、原厂签名 | 20 万次 / 25 年 | 不推荐用于新设计 |
| DESFire EV3 | 2560、5120、8192 或 16384 字节 | AES-128,EAL5+ | EV2 的全部功能,外加 SUN/SDM 和交易计时器;NFC Forum Type 4 证书 58652 | 至少 20 万次、典型 100 万次 / 25 年,-25 到 +85 °C | 在产 |
| DESFire Light | 640 字节 | 仅 AES-128,可选 LRP,EAL4 | 一个固定应用,含六个文件 | 20 万次 / 10 年 | 在产 |
DESFire 名字里的“2K”,并不是 2048 字节你能直接用的空间。NXP 的对比说明给出了表中那些可用容量,而你创建的每个应用和文件,都要以 256 字节为单位分配,从中划走一块存放自己的头部信息。与其相信标签上的标称值,不如用 FreeMemory 命令直接问卡。DESFire EV3 也给这个家族带来了 SUN,所以 EV3 能玩 NTAG 424 DNA 那套给 URL 签名的把戏,而 EV2 不能。
在手机上:iOS 把 DESFire 当作 .desfire MIFARE 标签交给应用,如果应用请求的是 NDEF 应用,则当作 ISO 7816 标签;Android 用的是 IsoDep。NFC.cool 会根据 GetVersion 识别出代际和容量,并列出无需密钥就允许查看的应用和文件。它不会对 DESFire 做认证,也不会往里写东西;那是运营方自己的工具该干的活,我宁愿直说,也不想装作能做。
ISO 15693:远距离家族
这些芯片是为一米、而不是一厘米的距离设计的。手机照样能读它们(Apple 从 iOS 13 起,Android 通过 NfcV),GoToTags 实测发现,在 iPhone 上 Type 5 标签的读取距离大约是 Type 2 标签的两倍,但它们真正的主场是图书馆的门禁、仓库的货架和洗衣房。UID 是以 E0 开头的 8 字节,块大小是 4 字节,而且这个家族多了三样 Type A 芯片没有的东西:AFI(一个应用族字节,读卡器可以按它筛选)、DSFID(一个数据格式字节),以及 EAS,也就是让商店门口的防盗门响起来的那个电子商品防盗位。
NXP ICODE。它的谱系依次是 SLI(2000)、SLI-S 和 SLI-L(2007)、SLIX 及其 S 和 L 版本(2010)、SLIX2(2014)、ICODE DNA(2016)和 ICODE 3(2024)。不存在什么“SLIX3”;商品页上要是这么写,要么指的是 ICODE 3,要么就是在瞎猜。
| 芯片 | 用户 / 总字节数 | 保护 | 计数器 | 签名 | 擦写寿命 / 保存期 | 状态 |
|---|---|---|---|---|---|---|
| ICODE SLI | 112 / 128 | 只有锁定位 | 无 | 无 | 10 万次 / 10 年 | 已停产 |
| ICODE SLI-S | 160 / 256 | 五个 32 位密码:读取、写入、销毁、隐私、EAS | 无 | 无 | 10 万次 / 10 年 | 已不再生产 |
| ICODE SLI-L | 32 / 64 | 三个密码 | 无 | 无 | 10 万次 / 10 年 | 已不再生产 |
| ICODE SLIX | 112 / 128 | 一个用于 EAS 和 AFI 的 32 位密码 | 无 | 无 | 10 万次 / 50 年 | 不推荐用于新设计 |
| ICODE SLIX-S | 160 / 256 | 五个 32 位密码,隐私模式,销毁 | 无 | 无 | 10 万次 / 50 年 | 在产 |
| ICODE SLIX-L | 32 / 64 | 三个密码 | 无 | 无 | 10 万次 / 50 年 | 在产 |
| ICODE SLIX2 | 316 / 320 | 五个 32 位密码,隐私模式,销毁 | 16 位,由写入命令推进 | 有,32 字节 | 10 万次 / 50 年 | 在产 |
| ICODE DNA | 252 / 256 | AES-128 双向认证,三把密钥 | 16 位 | 有,可重新编程 | 10 万次 / 50 年 | 在产 |
| ICODE 3 | 300 / 304,外加一个 192 字节的配置区 | 六个 32 位密码,两种隐私模式 | 24 位,能像 NTAG 一样统计轻触次数 | 有,32 或 48 字节,可重新编程 | 10 万次 / 50 年,最高 105 °C | 在产;有 TagTamper 版本 |
ICODE 3 是值得了解的那一款:它会像 NTAG213 那样把 UID 和轻触计数器镜像进 NDEF 消息,读取速率最高 212 kbit/s,还能自动调谐天线。它没有 AES;带 AES 的是 ICODE DNA,而这两款都不支持 SUN。
意法半导体 ST25TV 和 ST25DV。这是 ST 的 Type 5 产品线,也是整份指南里数据手册数字最漂亮的一条。
| 芯片 | 用户字节数 | 保护 | 计数器 | 签名 | 擦写寿命 / 保存期 | 状态 |
|---|---|---|---|---|---|---|
| ST25TV512、ST25TV02K | 64 或 256 | 32 或 64 位密码,kill,不可追踪模式,-AD 版本带防拆 | 16 位写入事件计数器 | TruST25 | 10 万次 / 60 年 | 不推荐用于新设计 |
| ST25TV512C、ST25TV02KC | 64 或 320 | 密码,kill,静默和隐身模式,-T 版本带防拆 | 无;取而代之的是一个 3 位的唯一轻触码 | TruST25 | 10 万次 / 60 年 | 在产,供货至 2035 年 |
| ST25TV04K-P | 512 | 64 位密码,kill | 无 | 无 | 100 万次 / 40 年 | 在产;带一个能量采集引脚 |
| ST25TV16K、ST25TV64K 及 KC 版本 | 2048 或 8192 | 64 位密码,kill | 无 | 无 | 100 万次 / 40 年 | K 型号不推荐,KC 型号在产 |
| ST25DV04K、16K、64K 及 KC 版本 | 512、2048 或 8192 | 三个 64 位射频密码加一个 I2C 密码 | 无 | 无 | 100 万次 / 40 年 | K 型号不推荐,KC 型号在产 |
| M24LR04E、16E、64E | 512、2048 或 8192 | 32 位密码 | 无 | 无 | 100 万次 / 40 年 | 不推荐用于新设计 |
ST25TV02KC 的 Augmented NDEF 值得单独说一段,因为它常被当成安全功能来卖。这颗芯片每次被读取时,都会把自己的 UID、一个自定义字段和一个三字符的 唯一轻触码 插进 URL,而且完全不碰 EEPROM。轻触码每次都会变,但 ST 的数据手册明明白白地写着它是“可预测的”。它是一个新鲜度令牌,告诉你的服务器这是一次新的轻触,而不是标签为正品的证明。TruST25,也就是 ST 针对 UID 的原厂签名,才是证明真伪的功能,而且和 NXP 的一样,它是一份克隆芯片可以照抄的静态签名。
Type 5 世界的其余成员。德州仪器的 Tag-it HF-I Inlay(Standard 32 字节;Pro 32 字节,带密码保护写入和 kill 命令;Plus 256 字节)遍布每一家在 2015 年前装上 NFC 的图书馆,如今它们全都被标为不推荐或已淘汰。EM Microelectronic 的 EM4233(208 字节,96 位密钥的隐私模式,60 年保存期)可按需供货。英飞凌的 my-d 和富士通的 MB89R118 之所以出现在 NFC.cool 的识别代码里,是因为有用户把它们寄给了我。NXP 的 NTAG 5(link、boost、switch)虽然名叫 NTAG,却是一颗 ISO 15693 芯片,容量 2048 或 512 字节,带 I2C 端口,能量采集最高 30 mW,EEPROM 擦写寿命 1,000,000 次、保存期 40 年:它是给电子产品用的联网标签,不是贴纸,为 NTAG21x 写的软件也没法跟它对话。
实测笔记:每一个 OpenPrintTag 耗材盘里都是 SLIX2,所以我经手过不少,NFC.cool 在两个平台上都能读取、写入和格式化它们。应用做不到的事,我想说清楚:ISO 15693 的密码、隐私、EAS 和 AFI 命令。这些命令字节作为一张参考表写在代码里了;但对应的按钮还没有做出来。
MIFARE 之外的 Type 4:ST25TA
ST 的 ST25TA 家族是基于 ISO/IEC 14443 Type A 的 Type 4 标签,但没有 DESFire 那一整套机制:一个 NDEF 文件、一个能力容器文件和一个系统文件,两个 128 位密码(读和写),以及一个可以统计读取或写入次数的 20 位事件计数器。
| 芯片 | NDEF 文件 | 密码 | 计数器 | 签名 | 擦写寿命 / 保存期 | 状态 |
|---|---|---|---|---|---|---|
| ST25TA512、ST25TA512B | 64 字节 | 两个 128 位 | B 版本为 20 位 | B 版本有 TruST25 | 100 万次 / 200 年 | 512 不推荐 |
| ST25TA02K、ST25TA02KB(-P、-D) | 256 字节 | 两个 128 位 | 20 位 | B 版本有 TruST25 | 100 万次 / 200 年 | 02K 和 02KB 不推荐;02KB-P 和 02KB-D 在产 |
| ST25TA16K、ST25TA64K | 2048 或 8192 字节 | 两个 128 位 | 无 | 无 | 100 万次 / 200 年 | 在产 |
两百年的保存期,一百万次擦写,只是速率仅有 106 kbit/s。-P 和 -D 版本带一个通用输出引脚,标签被读取时会切换电平,你就是靠它让一盏灯对手机做出反应的。在两种手机上,这些芯片都被当作 Type 4 标签读取;NFC.cool 能在上面读写 NDEF,并显示 ISO-DEP 的详细信息。
传感器芯片与双接口芯片
这些芯片有两副面孔:一面是 NFC 天线,另一面是 I2C 总线、传感器或者第二个无线电。
| 芯片 | NFC 一面 | 另一面 | 内存 | 值得注意的地方 |
|---|---|---|---|---|
| NTAG I2C plus(NT3H2111、NT3H2211) | Type 2,888 或 1912 字节,32 位密码,签名 | 最高 400 kHz 的 I2C,64 字节 SRAM 直通,场检测引脚 | 20 万至 50 万次 / 20 年 | 能量采集最高 15 mW;xSIID 植入体里用的就是它 |
| ST25DV(见上文) | Type 5 | 最高 1 MHz 的 I2C,一个用于数据流的 256 字节邮箱 | 100 万次 / 40 年 | 通过 V_EH 引脚采集能量,不稳压,按数据手册的说法是“几微瓦” |
| NTAG 5 link、boost、switch | Type 5,2048 或 512 字节,5332 带 AES | I2C、GPIO、PWM 输出 | 100 万次 / 40 年 | 最高 30 mW 能量采集;switch 版本完全不需要单片机 |
| NHS3100 | Type 2,由固件模拟 | 一颗 Cortex-M0+,配有精度 0.3 °C 的温度传感器 | 32 kB 闪存,4 kB EEPROM | 做在一张薄膜上的冷链记录仪,通过 NFC Forum 认证 |
| EM4423“em echo” | Type 2,240 字节 NDEF 区 | 超高频 RAIN RFID,共用内存,共用序列号 | 10 万次 / 10 年 | 已停产 |
| EM4425“em echo-V” | Type 5,最多 256 字节共享 | 超高频 RAIN RFID,AES-128,防拆焊盘,数字签名 | 10 万次 / 50 年 | 现行型号;同一颗晶粒,手机在一厘米处能读,超高频装卸门读写器在几米外也能读 |
这些芯片我都没拿来做过东西,所以这张表纯粹来自数据手册。它们之所以出现在这份指南里,是因为它们会以“NFC 芯片”的名义出现在商品页上,把人搞糊涂:NTAG 5 不是 NTAG213,em echo 标签在你的手机上也不会有什么特别的表现。
老旧型号与小众芯片
Topaz(Innovision 出品,后归博通)是 NFC Forum Type 1:8 字节的块,96 或 512 字节,一次性锁定,擦写寿命 10,000 次。两种手机都还能从 Topaz 上读出 NDEF,但 NFC Forum 已在 2021 年的规范中删除了 Type 1,也不再有人在新设计中采用它。经销商手里仍有库存。
FeliCa 是索尼的家族,也是日本公共交通的基础。FeliCa Lite-S(224 字节用户内存,16 字节一块,8 字节 IDm,精简的三重 DES MAC)是标签版本,属于 NFC Forum Type 3;FeliCa Standard 是智能卡版本,在现行的 RC-SA01 上已支持 AES,并获得 Common Criteria EAL6+ 评级,Suica、PASMO、Edy、WAON、nanaco 和香港八达通都跑在它上面。索尼的 FeliCa Plug 模块已于 2026 年 3 月停产。NFC.cool 在两个平台上都能根据系统代码报出交通卡和电子钱包的品牌,能读取 Lite-S 和 Standard,并能在 iPhone 上向它们写入 NDEF。
Kovio NFC Barcode 是一种印刷硅工艺的只读标签,容量 16 字节。Android 至今仍为它保留着一个 NfcBarcode 类。Kovio 的资产在 2014 年转给了 Thinfilm,Thinfilm 在 2019 年停止了 NFC 生产,并在 2021 年改了名。这个类已经是一块化石了。
ISO 14443 Type B 存储芯片。ST 的 SRI512、SRT512 和 SRI4K(512 或 4096 位,以 32 位为一块,两个递减计数器,1,000,000 次擦写,40 年保存期)用在法国和比利时的交通系统以及一些滑雪通行证上。Android 通过 NfcB 开放它们;iPhone 则根本没有底层的 Type B 标签对象,所以除非一张 Type B 卡支持 ISO-DEP 并能应答 SELECT,否则 iPhone 看不见它。巴黎 Navigo 系统所用的 Calypso 就是一种能做到这一点的 Type B 智能卡。
克隆芯片与兼容芯片
这是商品页最不希望你读到的一节。
复旦 FM11NT021 是最常见的那种“NTAG213”,其实并不是 NTAG213。它同样是 45 页共 180 字节,同样有 144 字节的用户区、一个密码、一个 24 位读取计数器,UID 里的厂商代码是复旦的 1D。它没有实现 GET_VERSION,现行的数据手册里也没有列出 READ_SIG 命令,所以读卡器问这两个问题中的任何一个,都只会得到沉默,然后只能退回到按内存大小去猜,这就是为什么 Proxmark3 社区会把它报成 NTAG203。复旦也生产 504 和 888 字节的版本(FM11NT041、FM11NT081)。用来在贴纸上放一个链接,它们没问题。用来做 Amiibo 就不行,因为游戏机第一个问的就是 GET_VERSION。
复旦 FM11RF08 和 FM11RF08S 是大多数廉价“1K”卡里的 Classic 兼容芯片。08S 在 2020 年加入了针对已知 Classic 攻击的防御措施,结果后来被发现带着一把所有出厂卡通用的硬件后门密钥,Quarkslab 在 2024 年公布了它,连同相应的工具,这些工具如今已经进了 Proxmark3 固件。
MIFARE Classic 魔术卡 是专门造出来、让 UID 和厂商块可以被重写的芯片,而真正的 Classic 永远不允许这么做。它的各个代际本身就是一门爱好:
| 代际 | 怎样修改 UID | 能否被检测出来 | 说明 |
|---|---|---|---|
| Gen1a、Gen1b | 一条后门唤醒命令 | 能,任何读卡器都可以探测这个后门 | 最早的“中国魔术卡”;门禁系统会把它过滤掉 |
| Gen2、CUID | 认证后对第 0 块做一次普通写入 | 没有后门可探测;读卡器只能试着写一下 | 兼容手机,是如今最常见的一种 |
| FUID、UFUID | 只能改一次,或者在封卡之前可改 | 封卡之前可以 | 用来永久克隆一张工牌的一次性卡 |
| Gen3、APDU | 特殊的 APDU 命令 | 知道这些命令的读卡器可以 | |
| Gen4 GTU、GDM、“Ultimate” | 一套受密码保护的配置;还能模拟 Ultralight 和 NTAG | 仅在密码仍为默认值时可以 | 一张卡片形态、7 字节 UID、什么家族都能扮演的变色龙 |
魔术 NTAG21x 卡也存在,而那些完全模拟的版本甚至会接受一份复制来的原厂签名,这正是 NXP 关于静态签名所强调的一点。
用于 Amiibo 的“NTAG215 兼容”芯片。Amiibo 就是一枚普通的 NTAG215,它的 540 字节里装着用这枚标签自己的 UID 派生出的密钥加密并签名的数据。把这些字节复制到另一枚标签上,签名就对不上了,所以备份必须针对目标 UID 重新生成密钥,NFC.cool 的 Amiibo 备份与恢复 做的正是这件事。游戏机的读取流程是:先发 GET_VERSION,然后进行一次由 UID 派生的密码认证,再读取全部 135 页,包括配置页。缺少 GET_VERSION、或者只有 45 页而不是 135 页的芯片,第一步就会失败。TagMo 的文档用一句话概括了这件事:只认 NTAG215。
克隆芯片在应用里会怎么显示。NFC.cool 首先靠 GET_VERSION 来识别。不应答这条命令的芯片,或者应答的内存大小与它宣称的不符的芯片,会按它实际是什么来命名,而不是按商品页上写的。对于 NTAG 424 DNA,应用会再进一步,拿 NXP 的公钥去核验 ECDSA 原厂签名,这是应用里唯一一个能以密码学为依据说出“Genuine NXP”的地方。对于 NTAG21x,应用不读取签名,一方面因为 NXP 的验证密钥受保密协议约束,另一方面因为一份复制来的静态签名反正也能通过校验。对一枚 Type 2 标签来说,诚实的证据链是:厂商代码、GET_VERSION、内存大小,以及芯片宣称的那些功能是否真的存在。
外形与读取距离
芯片决定标签能做什么;外形决定手机能不能够得着它。
| 外形 | 是什么 | 典型天线尺寸 | 手机读取距离 | 规格与说明 |
|---|---|---|---|---|
| 湿 Inlay | 蚀刻天线和芯片做在 PET 薄膜上,带背胶和离型纸 | 22 至 38 mm | 2 至 4 cm | 买芯片最便宜的方式;只能粘一次 |
| 干 Inlay | 同上,但没有背胶 | 同上 | 同上 | 用来层压进别的东西里 |
| 纸质或 PET 贴纸 | 一枚带可印刷面层的 Inlay | 22 至 38 mm | 2 至 4 cm | 纸质面层可以印刷,PET 面层能防水 |
| PVC 卡 | ISO 7810 ID-1,85.60 x 53.98 mm,厚 0.76 mm | 整张卡 | 3 至 5 cm | 你能拿在手里的最大天线;也是读卡器设计时的目标对象 |
| 圆片、滴胶标签 | 封在坚硬树脂穹顶下的 Inlay,常带一个孔 | 20 至 30 mm | 2 至 3 cm | 防水;Amiibo 就是这种外形 |
| 钥匙扣 | 装在 ABS 外壳里的 Inlay | 20 至 30 mm | 2 至 3 cm | GoToTags 的钥匙扣标称 IP67,-25 到 +75 °C |
| 腕带 | 带 Inlay 的硅胶腕带 | 20 至 25 mm | 1 至 3 cm | 音乐节、泳池;腕带可以弯,Inlay 最好别弯 |
| 抗金属 | 在天线和金属之间垫一层铁氧体片的 Inlay | 22 至 34 mm | 贴在金属上 2 至 3 cm | Seritag 实测,同一款 22 mm 标签贴在金属上读取距离为 21 至 25 mm,不贴金属时为 26 至 30 mm;工业级 34 mm 版本读取距离为 31 至 40 mm,IP68,-25 到 +85 °C |
| 洗衣标签 | 封在 PPS 纽扣里的芯片 | 16 mm | 1 至 2 cm | Smartrac 给自家高频洗衣标签标称 200 次洗涤、-30 到 +200 °C、60 bar;大多数洗衣标签是只有 UID 的 ISO 15693 芯片 |
| 植入体 | 封在 2 x 12 mm 玻璃胶囊或柔性聚合物里的芯片 | 几毫米 | 必须对准手机的那个最佳位置 | xNT 是 NTAG216,NExT 额外加了一颗 125 kHz 的 T5577,xSIID 是带 LED 的 NTAG I2C plus,xDF 是 DESFire;柔性版本比玻璃版本好读得多 |
大多数“读不出来”的工单,都能用两条物理规律解释。天线大小决定距离,大致来说:卡片比圆片读得远,圆片比 10 mm 的 Inlay 读得远,而植入体得贴着读。金属会让天线失谐:贴在金属表面上的线圈会在金属里感应出涡流,电感随之下降,谐振频率偏离 13.56 MHz,所以一枚普通标签贴到铁皮柜上就废了。在线圈和金属之间垫一层铁氧体片,能把磁场引导回来,让标签复活,代价是距离更短、成本更高,这就是为什么抗金属标签要贵上三倍。
手机怎么拿,和标签本身一样重要。iPhone 的天线在顶部边缘;Apple 自己的说明是“将 iPhone 的顶部靠近”标签。Android 则因机型而异,通常在背面中央或摄像头附近。入门指南 里有详细的操作说明。
什么设备能读什么芯片
这是一张手机和读卡器的对照矩阵。手机那几列来自 Apple 和 Google 的文档以及我自己的应用;桌面读卡器和极客工具那几列来自厂商的规格表和各个项目自己的文档,除了 iPad 和 Mac 那一列里提到的读卡器之外,这些设备我都没有亲自测试过。
| 芯片家族 | iPhone 后台读取 | iPhone 应用内 | Android | iPad 和 Mac 配 USB 读卡器 | Web NFC(Android 上的 Chrome) | ACR122U | ACR1552U、OMNIKEY 5022 | PN532 开发板 | Proxmark3 | Flipper Zero |
|---|---|---|---|---|---|---|---|---|---|---|
| NTAG21x、Ultralight EV1 及其他 Type 2 | 仅 URL 记录 | NDEF、密码、计数器、镜像、导出 | 同左 | 同左,通过 NFC.cool | 仅 NDEF | 能 | 能 | 能 | 能,还能模拟 | 能,还能模拟 |
| NTAG 22x DNA | URL 记录 | NDEF、原始命令 | 同左 | 同 Type 2 | NDEF | 能 | 能 | 能 | 能 | 按 NTAG 读取 |
| NTAG 424 DNA、ST25TA、作为 Type 4 的 DESFire | URL 记录 | NDEF、APDU | NDEF、APDU | NDEF、完整的 424 配置 | NDEF | 能 | 能 | 能 | 能 | 读取 NDEF;不做密钥操作 |
| Ultralight C | 格式化后可读 NDEF | NDEF、原生命令 | 同左 | NDEF | NDEF | 能 | 能 | 能 | 能 | 能 |
| Ultralight AES | 格式化后可读 NDEF | NDEF、原生命令 | 同左 | NDEF | NDEF | 能 | 能 | 能 | 能 | 按 Ultralight 读取 |
| MIFARE Classic | 不能 | 仅 UID 和家族 | 控制器带 CRYPTO1 的手机上可完整读写 | 仅读取 NDEF,用公开密钥 | 不能 | 能,需密钥 | 能,需密钥 | 能,需密钥 | 能,还能恢复密钥和模拟 | 能,还能恢复密钥和模拟 |
| MIFARE Plus | 不能 | SL1 下仅 UID;SL3 下为 ISO-DEP | SL1 下同 Classic;SL3 下为 IsoDep | UID | 不能 | 能 | 能 | 能 | 能 | 未见文档说明 |
| DESFire,原生模式 | 不能 | 家族和版本、APDU | IsoDep | 版本 | 不能 | 能 | 能 | 能 | 能 | 仅读取和保存 |
| ISO 15693:ICODE、ST25TV、ST25DV、TI、EM | URL 记录 | 自 iOS 13 起支持完整的 ISO 15693 命令集 | NfcV | 未测试 | NDEF | 不能 | 能 | 不能 | 能,还能模拟 | 能,还能模拟 |
| FeliCa Lite-S 和 Standard | URL 记录 | 声明系统代码后可读写 | NfcF | 读取;通过 NFC.cool 可写入 FeliCa | NDEF | 能 | OMNIKEY 上仅 UID | 能 | 能 | Lite-S 可读取和模拟 |
| Topaz(Type 1) | NDEF | NDEF | NDEF | 未测试 | NDEF | 能 | 未见文档说明 | 能 | 能 | 未见文档说明 |
| ISO 14443 Type B 存储芯片(SRI512) | 不能 | 不能 | NfcB | 未测试 | 不能 | 能 | 能 | 仅读卡器模式 | 能 | 仅 UID |
| 125 kHz 门禁卡、宠物芯片、超高频标签 | 不能 | 不能 | 不能 | 不能 | 不能 | 不能 | 不能 | 不能 | 125 kHz 能 | 125 kHz 能 |
有几行值得多说一句。
iPhone 后台读取 只对 NDEF URL 记录生效,只在手机已解锁且正在使用时生效,而且在相机、钱包、某个读取会话或飞行模式处于活动状态时不会触发。它从不读取原始芯片。需要 iPhone XS 及更新机型。
哪些 iPhone 能读标签:根据 Apple 在 WWDC 2019 上的讲座,iPhone 7 及更新机型可以在应用内读取。写入和原始命令是从 iOS 13 开始支持的。
Android 的
MifareClassic类是可选的。Google 的原话是:“如果它没有被实现,那么 MifareClassic 永远不会被枚举出来”。决定因素是控制器,而不是 Android 版本。Web NFC 只支持 NDEF,需要 Chrome 89 及更高版本,仅限 Android,而 Apple 对它持反对立场,所以不会有 Safari 版本。这就是为什么本站的 在线 NFC 读取器 在 Android 上能用,而对 iPhone 用户则会提示去用应用。
iPad 和 Mac 没有 NFC 无线模块。从 NFC.cool 6.15.0 起,应用改为通过 Apple 的智能卡框架与 USB CCID 读卡器通信;我测试的是 HID OMNIKEY 5022 CL,用户反馈 ACS ACR1552U-M1 和 ACR1255U-J1 也能用,那篇文章 列出了各种限制。通过读卡器可以给 NTAG 设置密码;移除密码则需要一条 OMNIKEY 拒绝执行的命令,所以这件事得用手机来做。
ACS ACR122U 不支持 ISO 15693,ACR1252U 和 ACR1255U-J1 也不支持。在 ACS 的产品线里,只有 ACR1552U 支持。OMNIKEY 5022 两者都支持。如果你要给图书馆标签买读卡器,这一点值得事先知道。
Proxmark3 和 Flipper Zero 是能够恢复 MIFARE Classic 密钥、模拟卡片的工具。它们就是干这个用的,这份指南之所以提到它们,是因为少了它们,“什么设备能读”这个问题的答案就不诚实了。
| 读卡器 | 接口 | Type A | Type B | FeliCa | ISO 15693 | 125 kHz | 有密钥时读 Classic | Classic 密钥恢复 | 模拟 | 2026 年 9 月所见价格 |
|---|---|---|---|---|---|---|---|---|---|---|
| ACS ACR122U | USB,PC/SC | 能 | 能 | 能 | 不能 | 不能 | 能 | 不能 | 不能 | 约 40 至 50 美元;ACS 已停产,仿冒品很常见 |
| ACS ACR1252U | USB,PC/SC | 能 | 能 | 能 | 不能 | 不能 | 能 | 不能 | 卡模拟模式 | 97.50 美元 |
| ACS ACR1552U | USB,PC/SC | 能 | 能 | 能 | 能 | 不能 | 能 | 不能 | 卡模拟模式 | 44.81 美元 |
| ACS ACR1255U-J1 | 蓝牙和 USB | 能 | 能 | 能 | 不能 | 不能 | 能 | 不能 | 不能 | 64.81 美元 |
| HID OMNIKEY 5022 CL | USB,PC/SC | 能 | 能 | 仅 UID | 能 | 不能 | 能 | 不能 | 不能 | 69.99 欧元 |
| PN532 扩展板 | SPI、I2C、UART | 能 | 仅读卡器模式 | 能 | 不能 | 不能 | 能 | 靠主机工具 | Classic 1K/4K 和 FeliCa | 24 至 40 美元 |
| Proxmark3 RDV4 | USB,可选 BLE | 能 | 能 | 能 | 能 | 能 | 能 | 能 | 能 | 329 至 529 欧元 |
| Proxmark3 Easy | USB | 能 | 能 | 能 | 能 | 能 | 能 | 部分支持 | 能 | 78 欧元;克隆版约 28 英镑起 |
| Flipper Zero | 独立设备,USB-C,BLE | 能 | 有限 | Lite-S | 能 | 能 | 能 | 能 | 能 | 169 美元 |
| Chameleon Ultra | USB-C,BLE | 读取和模拟 | 不能 | 不能 | 不能 | 模拟和读取 | 能 | 能 | 能 | 129 欧元 |
NFC.cool Tools 对每种芯片能做什么
写到这里,该轮到我自己做的东西出场了,而它确实应该出现在这里,因为上面每一行最后都会落到一个问题上:“那应用能拿它做什么?”下面这张表不是营销文案;它是我在写这份指南时,直接从应用自己的源代码里整理出来的,而且它纠正了两件我本来会写错的事。
| 芯片家族 | iPhone | Android | iPad 和 Mac 配读卡器 |
|---|---|---|---|
| 按具体产品识别 | 约 60 个型号:NTAG203 至 216、NTAG I2C、Ultralight 和 C、按容量区分的 Ultralight EV1、Ultralight AES、Classic Mini、1K 和 4K、按安全等级区分的 Plus 2K 和 4K、按容量区分的 DESFire EV1、EV2 和 EV3、NTAG 424 DNA 及其 TagTamper 版本、ICODE SLI、SLI-S、SLI-L、SLIX、SLIX-S、SLIX-L 和 SLIX2、TI Tag-it Standard、Pro 和 Plus、ST25TV、ST25DV 和 M24LR、英飞凌 my-d、富士通 MB89R118、EM4233 和 EM4423、FeliCa Lite 和 Standard,以及 Suica、PASMO、ICOCA、Edy、WAON 和 nanaco;EMV 卡和 PIV 卡会被识别为对应的卡种 | 约 20 个型号:NTAG203、213、215 和 216、NTAG 424 DNA、DESFire、Classic Mini、1K 和 4K、Plus 2K 和 4K、JCOP 和 SmartMX、包括八达通在内的 FeliCa 品牌;ISO 15693 芯片按容量报告,不区分具体产品 | 根据读卡器的复位应答(ATR)得出的卡片类型 |
| 读取 NDEF | 所有家族 | 所有家族 | Type 2、Type 4、FeliCa;Classic 用公开密钥 |
| 写入 NDEF、清空标签 | Type 2、Type 4、Type 5、FeliCa Lite-S 和 Standard | Type 2、Type 5、带 NDEF 目录的 MIFARE Classic,以及 Android 能格式化的一切 | Type 2、Type 4、FeliCa |
| 将整个内存清零 | Type 5 | Type 2、Type 5、Classic | 同 iPhone |
| 永久锁定 | Type 2 锁定字节;Type 4、Type 5 和 FeliCa 上将 NDEF 设为只读;在 NTAG 424 DNA 上刻意拒绝执行 | Type 2 | 能 |
| 密码 | NTAG213、215、216 和 203 | Type 2 家族 | 能设置;能否移除取决于读卡器 |
| 轻触计数器和镜像 | NTAG213、215、216 | NTAG213、215、216 | 能 |
| 完整内存导出 | Type 2、ISO 15693、DESFire 文件列表、FeliCa、NTAG 424 DNA 文件 | 用出厂密钥的 Classic、Ultralight、ISO 15693、FeliCa、任意 Type A | Type 2、Type 4、FeliCa |
| MIFARE Classic 内容 | 不能;Core NFC 没有 CRYPTO1 | 用出厂密钥读取,用公开密钥格式化和写入 | 仅读取 NDEF |
| NTAG 424 DNA | 密钥、明文和加密模式的 SUN、文件访问权限、芯片配置、保险箱文件、随机 UID、LRP、防拆状态、原厂签名校验 | 同左 | 同左 |
| Amiibo | NTAG215 备份与恢复,针对目标标签重新生成密钥 | 同左 | 能 |
| ISO 15693 密码、EAS、AFI | 暂不支持 | 暂不支持 | 不能 |
| DESFire 认证和写入 | 不能 | 不能 | 不能 |
| 原始命令 | 专家级 APDU 模式 | 一份命令目录 | 能 |
记录一下那两处纠正:我本来会写应用会核验 NTAG21x 标签的原厂签名,但它并不会;只有 424 才有这项待遇。我本来还会写 ISO 15693 的密码命令已经做好了,但它们其实只是一张参考表,还在等界面。这两件事都在我的待办清单上。
怎样买才不踩坑
一个商品页要写清楚下面这些,我才会下单:
准确的芯片名称。要写“NTAG213”,而不是“NFC 213”;要写“ICODE SLIX2”,而不是“ISO 15693 标签”;要写“MIFARE Classic EV1 1K”,而不是“1K 卡”。如果商品页连芯片都不报名字,那卖家要么不知道,要么不想让你知道。
以字节为单位的用户内存,而且必须跟芯片对得上:NTAG213 是 144,215 是 504,216 是 888,SLIX2 是 316。一张最后发现是 MIFARE Classic 的“1K”卡,在 iPhone 上是用不了的。
厂商,如果它声称是正品 NXP 或 ST 的话。买到之后,UID 里的厂商代码会告诉你真相;买之前,价格就会告诉你。没有人会以市价的三分之一卖正品 NTAG216 贴纸。
天线尺寸和外形。10 mm 的 Inlay 读取距离是一厘米;38 mm 的是四厘米。抗金属标签必须写明抗金属。
是否已做 NDEF 格式化。NTAG 出厂时就已格式化;Ultralight EV1 和大多数 ISO 15693 芯片没有,NFC.cool 可以给它们格式化,但这毕竟多了一步。
危险信号:“NTAG215 兼容”(它就不是 NTAG215)、安全阶梯第 4 级以下的芯片却写着“加密”、MIFARE Classic 写着“所有手机通用”,以及任何带有厂商从未用过的字母的芯片名,比如 SLIX3。
标签的价格。这是我在 2026 年 9 月 9 日于 Seritag、Shop NFC、GoToTags、NFCW Shop、NFC.CARDS、NFC-Tag-Shop.de、Tagstand 和 Digi-Key 上看到的标价。大多数店铺最少按十个起卖,所以“单个”那一列是它们提供的最小档位。价格会变动;把这些数字当成比例来看。
| 标签 | 单个或最小档位 | 每个(100 个起) | 每个(1,000 个起) | 裸芯片 |
|---|---|---|---|---|
| NTAG213 贴纸 | 0.32 至 0.65 欧元,0.33 至 0.58 美元 | 0.29 至 0.34 欧元 | 0.23 至 0.24 欧元,0.50 美元 | 晶圆批量 0.14 美元 |
| NTAG215 贴纸或卡片 | 0.48 至 0.54 美元,0.64 至 0.67 英镑 | 0.35 美元 | 0.33 美元 | 0.21 美元 |
| NTAG216 贴纸 | 0.97 欧元,0.71 美元 | 0.70 欧元,0.61 美元 | 0.56 欧元,0.56 美元 | 0.37 美元 |
| NTAG 424 DNA 贴纸 | 0.63 欧元,0.90 美元 | 0.62 欧元,0.77 美元 | 0.57 欧元,0.68 美元 | 单颗 0.79 美元,1,000 颗起每颗 0.51 美元 |
| MIFARE Classic 1K 卡 | 十张起 1.35 至 1.59 欧元;单张零售 6.69 欧元 | 1.29 至 1.52 欧元,1.98 美元 | 0.95 至 1.13 欧元,0.86 美元 | |
| DESFire EV3 卡 | 1.85 至 2.79 欧元 | 1.85 至 2.45 欧元 | 1.35 至 2.29 欧元 | 31,000 颗起 1.18 美元 |
| ICODE SLIX2 标签 | 0.69 欧元 | 0.34 至 0.37 欧元 | 0.22 至 0.25 欧元 | 单颗 0.35 美元,1,000 颗起每颗 0.22 美元 |
| ST25TV02KC Inlay | 0.32 至 0.87 美元 | 0.30 至 0.79 美元 | 0.28 至 0.77 美元 | 整卷每颗 0.13 美元 |
规律跟你猜的一样:内存几乎不要钱,密码学功能大约让价格翻倍,而外形比芯片本身更贵。一颗裸 NTAG213 晶粒只要十四美分;包在它外面的贴纸才占了价格的大头。
去哪里买:我在 推荐链接页面 上维护着一份我自己真正在用的标签和读卡器清单,而当初催生整套 DNA 功能的那批 424 标签就是从 AliExpress 买的,所以我不会跟你说网购平台碰不得。只是在往标签里写任何东西之前,先用应用检查一下到手的是什么。
一张表看完全部芯片
每颗芯片一行。“用户字节数”是你能写入的量;DESFire 用的是 NXP 给出的可用容量。手机那两列说的是平台能做什么,而不是每款应用都能做什么;NFC.cool 那一列说的是我的应用能做什么。在手机上请左右滑动查看,第一列会固定不动。
| 芯片 | 厂商 | Forum 类型 | 标准 | 用户字节数 | UID | 保护 | 擦写寿命 / 保存期 | iPhone | Android | NFC.cool | 最适合 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| NTAG 210µ | NXP | 2 | 14443-A | 48 | 7 | 锁定位 | 10 万次 / 10 年 | NDEF、原始命令 | NDEF、原始命令 | 读取、写入 | 超小的一次性用途 |
| NTAG210 | NXP | 2 | 14443-A | 48 | 7 | 密码 | 10 万次 / 10 年 | NDEF、原始命令 | NDEF、原始命令 | 读取、写入 | 小天线 |
| NTAG212 | NXP | 2 | 14443-A | 128 | 7 | 密码 | 10 万次 / 10 年 | NDEF、原始命令 | NDEF、原始命令 | 读取、写入 | 需要多点空间的小天线 |
| NTAG213 | NXP | 2 | 14443-A | 144 | 7 | 密码、计数器、镜像 | 10 万次 / 10 年 | NDEF、原始命令 | NDEF、原始命令 | 全部功能 | 默认首选的贴纸 |
| NTAG215 | NXP | 2 | 14443-A | 504 | 7 | 密码、计数器、镜像 | 10 万次 / 10 年 | NDEF、原始命令 | NDEF、原始命令 | 全部功能,含 Amiibo | Amiibo、中等大小的数据 |
| NTAG216 | NXP | 2 | 14443-A | 888 | 7 | 密码、计数器、镜像 | 10 万次 / 10 年 | NDEF、原始命令 | NDEF、原始命令 | 全部功能 | 联系人,稳妥之选 |
| NTAG213F、216F | NXP | 2 | 14443-A | 144、888 | 7 | 密码、场检测引脚 | 10 万次 / 10 年 | 同 213 | 同 213 | 同 213 | 嵌入电子产品的标签 |
| NTAG 213 TT | NXP | 2 | 14443-A | 144 | 7 | 密码、防拆导线 | 10 万次 / 10 年 | 同 213 | 同 213 | 同 213 | 封条 |
| NTAG203 | NXP | 2 | 14443-A | 144 | 7 | 锁定、OTP | 1 万次 / 5 年 | NDEF | NDEF | 读取、写入、密码 | 老库存 |
| NTAG I2C plus | NXP | 2 | 14443-A | 888、1912 | 7 | 密码 | 20 万至 50 万次 / 20 年 | NDEF、原始命令 | NDEF、原始命令 | 识别、读取、写入 | 带单片机的电子产品 |
| NTAG 223、224 DNA | NXP | 2 | 14443-A | 144、208 | 7 | 密码或 AES、SUN | 10 万次 / 10 年 | NDEF、原始命令 | NDEF、原始命令 | 同 Type 2 | 低成本防伪 |
| NTAG 22x DNA StatusDetect | NXP | 2 | 14443-A | 144、208 | 7 | 同上,加传感器 | 10 万次 / 10 年 | NDEF、原始命令 | NDEF、原始命令 | 同 Type 2 | 封条与传感 |
| NTAG 413 DNA | NXP | 4 | 14443-4 | 160 | 7 | 3 把 AES 密钥、SUN | 20 万次 / 50 年 | NDEF、APDU | NDEF、APDU | 识别 | 已停产 |
| NTAG 424 DNA | NXP | 4 | 14443-4 | 416 | 7 | 5 把 AES 密钥、SUN、LRP | 20 万次 / 50 年 | NDEF、APDU | NDEF、APDU | 完整配置 | 防伪验证 |
| NTAG 424 DNA TT | NXP | 4 | 14443-4 | 416 | 7 | 同上,加防拆 | 20 万次 / 50 年 | NDEF、APDU | NDEF、APDU | 完整配置 | 防伪封条 |
| Ultralight | NXP | 2 | 14443-A | 48 | 7 | 锁定、OTP | 1 万次 / 5 年 | NDEF | NDEF | 读取、写入 | 已停产 |
| Ultralight C | NXP | 2 | 14443-A | 144 | 7 | 3DES | 10 万次 / 10 年 | NDEF、原始命令 | NDEF、原始命令 | 读取、写入 | 老式票务 |
| Ultralight EV1 | NXP | 2 | 14443-A | 48、128 | 7 | 密码、3 个计数器 | 10 万次 / 10 年 | NDEF、原始命令 | NDEF、原始命令 | 读取、写入、密码 | 票务、一次性用途 |
| Ultralight AES | NXP | 2 | 14443-A | 144 | 7 | AES-128 | 10 万次 / 10 年 | NDEF、原始命令 | NDEF、原始命令 | 读取、写入 | 带认证的 Type 2 |
| Ultralight Nano | NXP | 2 | 14443-A | 40 | 7 | 锁定、OTP | 10 万次 / 10 年 | NDEF | NDEF | 读取、写入 | 单程票 |
| Classic Mini | NXP | 无 | 14443-A | 224 | 4 | CRYPTO1 | 10 万次 / 10 年 | UID | 取决于控制器 | Android:读取、格式化 | 无 |
| Classic 1K、EV1 | NXP | 无 | 14443-A | 752 | 4 或 7 | CRYPTO1 | 10 万次 / 10 年 | UID | 取决于控制器 | Android:读取、格式化 | 无 |
| Classic 4K、EV1 | NXP | 无 | 14443-A | 3440 | 4 或 7 | CRYPTO1 | 10 万次 / 10 年 | UID | 取决于控制器 | Android:读取、格式化 | 无 |
| Plus SE | NXP | 无 | 14443-A | 752 | 4 或 7 | SL3 下为 AES | 10 万次 / 10 年 | UID | 同 Classic | 识别 | 从 Classic 迁移 |
| Plus EV2 | NXP | 无 | SL3 下为 14443-4 | 1520、3440 | 4 或 7 | AES-128,EAL5+ | 20 万次 / 25 年 | ISO-DEP | IsoDep | 识别 | 门禁 |
| DESFire EV1 | NXP | 4 | 14443-4 | 2304 至 7936 | 7 | DES、3DES、AES | 20 万次 / 10 年 | NDEF、APDU | NDEF、APDU | 识别、列出文件 | 老式交通系统 |
| DESFire EV2 | NXP | 4 | 14443-4 | 2560 至 16384 | 7 | AES,EAL5+ | 20 万次 / 25 年 | NDEF、APDU | NDEF、APDU | 识别、列出文件 | 门禁 |
| DESFire EV3 | NXP | 4 | 14443-4 | 2560 至 16384 | 7 | AES、SUN,EAL5+ | 最少 20 万次、典型 100 万次 / 25 年 | NDEF、APDU | NDEF、APDU | 识别、列出文件 | 门禁、交通 |
| DESFire Light | NXP | 4 | 14443-4 | 640 | 7 | AES、LRP,EAL4 | 20 万次 / 10 年 | NDEF、APDU | NDEF、APDU | 识别 | 单应用卡 |
| ICODE SLI | NXP | 5 | 15693 | 112 | 8 | 锁定 | 10 万次 / 10 年 | NDEF、原始命令 | NfcV | 读取、写入、格式化 | 已停产 |
| ICODE SLI-S、SLI-L | NXP | 5 | 15693 | 160、32 | 8 | 密码 | 10 万次 / 10 年 | NDEF、原始命令 | NfcV | 读取、写入、格式化 | 已不再生产 |
| ICODE SLIX | NXP | 5 | 15693 | 112 | 8 | EAS/AFI 密码 | 10 万次 / 50 年 | NDEF、原始命令 | NfcV | 读取、写入、格式化 | 图书馆和物流存量 |
| ICODE SLIX-S、SLIX-L | NXP | 5 | 15693 | 160、32 | 8 | 密码、隐私模式 | 10 万次 / 50 年 | NDEF、原始命令 | NfcV | 读取、写入、格式化 | 物流 |
| ICODE SLIX2 | NXP | 5 | 15693 | 316 | 8 | 密码、隐私模式、计数器、签名 | 10 万次 / 50 年 | NDEF、原始命令 | NfcV | 读取、写入、格式化 | 库存盘点、OpenPrintTag 耗材盘 |
| ICODE DNA | NXP | 5 | 15693 | 252 | 8 | AES-128 | 10 万次 / 50 年 | NDEF、原始命令 | NfcV | 按 ISO 15693 读取 | 远距离品牌保护 |
| ICODE 3 | NXP | 5 | 15693 | 300 | 8 | 密码、轻触计数器、镜像、签名 | 10 万次 / 50 年 | NDEF、原始命令 | NfcV | 按 ISO 15693 读取 | 当下的库存盘点芯片 |
| NTAG 5 | NXP | 5 | 15693 | 512、2048 | 8 | 密码,5332 带 AES | 100 万次 / 40 年 | NDEF、原始命令 | NfcV | 按 ISO 15693 读取 | 联网电子产品 |
| ST25TN512、01K | ST | 2 | 14443-A | 64、160 | 7 | kill、轻触码、TruST25 | 10 万次 / 40 年 | NDEF、原始命令 | NDEF、原始命令 | 按 Type 2 读取 | NTAG213 的替代品 |
| ST25TV512C、02KC | ST | 5 | 15693 | 64、320 | 8 | 密码、kill、隐私模式、轻触码、TruST25 | 10 万次 / 60 年 | NDEF、原始命令 | NfcV | 识别为 ST25TV,读取、写入 | 每次轻触生成新 URL 的标签 |
| ST25TV16K、64K | ST | 5 | 15693 | 2048、8192 | 8 | 64 位密码、kill | 100 万次 / 40 年 | NDEF、原始命令 | NfcV | 读取、写入 | 大容量 Type 5 存储 |
| ST25DV04K 至 64K | ST | 5 | 15693 | 512 至 8192 | 8 | 64 位密码 | 100 万次 / 40 年 | NDEF、原始命令 | NfcV | 识别为 ST25DV,读取、写入 | 带单片机的动态标签 |
| M24LR | ST | 未声明 | 15693 | 512 至 8192 | 8 | 32 位密码 | 100 万次 / 40 年 | NDEF、原始命令 | NfcV | 按 ST25TV 读取 | 老式双接口 |
| ST25TA02K、02KB | ST | 4 | 14443-4 | 256 | 7 | 128 位密码、计数器,B 版本有 TruST25 | 100 万次 / 200 年 | NDEF、APDU | NDEF、APDU | 读取、写入 | 不带 DESFire 的 Type 4 |
| ST25TA16K、64K | ST | 4 | 14443-4 | 2048、8192 | 7 | 128 位密码 | 100 万次 / 200 年 | NDEF、APDU | NDEF、APDU | 读取、写入 | 大容量 Type 4 存储 |
| TI Tag-it HF-I Standard、Pro、Plus | TI | 未声明 | 15693 | 32、32、256 | 8 | 锁定;Pro 增加密码写入和 kill | 10 万次 / 10 年 | NDEF、原始命令 | NfcV | 识别、读取 | 老式图书馆系统 |
| EM4233 | EM | 未声明 | 15693 | 208 | 8 | 96 位密钥、隐私模式、销毁 | ? / 60 年 | NDEF、原始命令 | NfcV | 识别、读取 | 按需供货 |
| EM4425 em echo-V | EM | 5 | 15693 加超高频 | 最多 256 | 8 | AES-128、密码、防拆 | 10 万次 / 50 年 | NDEF、原始命令 | NfcV | 按 ISO 15693 读取 | 双频零售 |
| Infineon my-d move | 英飞凌 | 2 | 14443-A | 128 | 7 | 密码、数值计数器 | 10 万次 / 10 年 | NDEF、原始命令 | NDEF、原始命令 | 识别、读取 | 票务 |
| Fudan FM11NT021 | 复旦 | 2 | 14443-A | 144 | 7 | 密码、计数器 | 号称 50 万次 / 10 年 | NDEF、原始命令 | NDEF、原始命令 | 按通用 Type 2 读取 | 廉价链接贴纸 |
| Fudan FM11RF08、08S | 复旦 | 无 | 14443-A | 752 | 4 | CRYPTO1,带后门 | ? | UID | 取决于控制器 | 同 Classic | 无 |
| Topaz 96、512 | Innovision、博通 | 1 | 14443-A | 96、约 480 | 7 | 一次性锁定 | 1 万次 / 5 年 | NDEF | NDEF | NDEF | 老旧型号 |
| FeliCa Lite-S | 索尼 | 3 | 18092、JIS X 6319-4 | 224 | 8(IDm) | 3DES MAC | ? | NDEF、原始命令 | NfcF | 读取、写入 | 日本 |
| FeliCa Standard | 索尼 | 3 | 18092 | 4 kB | 8 | AES,EAL6+ | ? | NDEF、原始命令 | NfcF | 读取、品牌识别 | 交通和电子钱包 |
| Kovio NFC Barcode | Kovio、Thinfilm | 无 | 私有 | 16,只读 | 无 | 无 | 不适用 | 不能 | NfcBarcode | 不能 | 已消亡 |
| ST SRI512、SRT512、SRI4K | ST | 无 | 14443-B | 64、512 | 8 | 计数器、锁定 | 100 万次 / 40 年 | 不能 | NfcB | 不能 | Type B 交通卡 |
大家常搜的芯片对比
NTAG213、NTAG215 和 NTAG216 怎么选:同一颗芯片的三种内存规格,144、504 和 888 字节,密码、计数器、镜像和签名全都一样。放一个链接买 213,做 Amiibo 买 215,放联系人名片或者懒得多想就买 216。价格差大约三十美分。
NTAG213 对比 Ultralight EV1:空中接口和命令都一样;NTAG 有 ASCII 镜像和预先写好的能力容器,EV1 有三个单向计数器,有 48 和 128 字节两种规格。贴纸要用 NTAG;票务要用 EV1。
NTAG213、ST25TN01K 和复旦 FM11NT021 对比:三颗 144 到 160 字节的 Type 2 芯片。NTAG 有密码和读取计数器,也会应答 GET_VERSION;ST25TN 内存更大,有 kill 命令、轻触码和 TruST25,但没有密码;复旦的芯片照搬了 NTAG 的功能,唯独没有 GET_VERSION,而且现行数据手册里也没有签名。只放一个普通链接的话,哪颗都行;要用计数器或做 Amiibo,就选 NTAG。
MIFARE Classic 对比 DESFire:这根本没得比。Classic 的密码算法 2008 年就被攻破了,它最常见的克隆芯片 2024 年又被发现带后门;DESFire EV3 有 AES、密钥管理、EAL5+ 认证和 SUN。支持 Classic 的唯一理由,就是墙上那台读卡器是 2009 年装的。
NTAG 424 DNA 对比 NTAG213:424 用 AES-128 给每次轻触签名,以三个文件、五把密钥存储 416 字节;213 存储 144 字节,配一个 32 位密码。如果问题是“这个产品是不是真的”,只有 424 回答得了。如果问题是“这张贴纸能不能打开一个链接”,213 能做到,价格只有三分之一。
NTAG 424 DNA 对比 NTAG 223 DNA:两者都支持 SUN。424 是 Type 4,有五把密钥、LRP、可选随机 UID、一个保险箱文件和 50 年保存期;223 是一枚 Type 2 贴纸,只有一把 SUN 密钥、一个 32 位密码,保存期 10 年。想在标签上放一个带签名的 URL,223 是更便宜的办法;424 则是如今就有应用能配置它的那一款。
做库存盘点选 ICODE SLIX2 还是 NTAG216:如果手机是唯一的读取设备,NTAG216 内存更大,还有计数器。如果要用到门禁式读写器或手持读写器,SLIX2 能在一米外读取,NTAG 只有四厘米,这一点就决定了答案。
在日本选 FeliCa 还是 NTAG:日本的交通闸机只说 FeliCa,别的都不认;日本的手机两种都能读。在东京的海报上贴一枚标签,NTAG 就够了。任何必须被 Suica 读卡器接受的东西,就得用 FeliCa,而那不是一颗能用手机应用来编程的芯片。
常见问题
我该买 NTAG215 还是 NTAG216?
除非你要写 Amiibo,否则选 216。它有 888 字节,215 只有 504 字节,密码、计数器和镜像一样,手机支持也一样。215 之所以每家店都有卖,是因为任天堂的手办用的就是它,如果你要做的正是这件事,它就是唯一的选择。
iPhone 能读 MIFARE Classic 标签吗?
它能看出那里有一张。Core NFC 读到 UID 和 SAK 就停下了;Apple 的 API 里没有 Classic 家族,文档里也写着 MIFARE 命令“不支持 Crypto1 协议”。在 iPhone 上,没有任何应用能读出一个扇区。配有 NXP NFC 控制器的 Android 手机可以读;配某些其他控制器的手机则不行,在那些手机上,MifareClassic 类压根就不会出现。
一枚 NFC 标签能重写多少次?
对 NXP 或 ST 的任何现行芯片来说,室温下是 100,000 次,而且数据手册上的数字是最低值。DESFire EV3 或 ST25DV 标称一百万次。老款 NTAG203、初代 Ultralight 和 Topaz 标称 10,000 次。没有人会把一张贴纸重写一万次;这个数字真正有意义的场合,是计数器和需要记录日志的标签。
NFC 标签的读取距离有多远?
用手机读的话,卡片大小的天线最远约四厘米,小贴纸约两厘米,前提是对准手机上的正确位置。NFC Forum 自己的定义写的是“最远 2 厘米”。一枚 ISO 15693 标签配上带大天线的门禁式读写器,能在一米外工作,但手机读它时,距离跟读其他标签一样只有几厘米,大概是 Type 2 标签的两倍。
NFC 标签会过期或者用坏吗?
大多数消费级芯片的数据保存期标称 10 年,NTAG 424 DNA 和 ICODE SLIX 家族是 50 年,ST25TV 是 60 年,ST25TA 是 200 年,全都是在室温下。高温会缩短保存期。实际使用中,背胶、纸质面层和天线会比 EEPROM 早得多就撑不住了。
网购平台上的便宜 NFC 标签能放心买吗?
安全是安全的;但它们宣称的东西不一定属实。一枚便宜的“NTAG213”往往是复旦 FM11NT021,放个链接没问题,但遇到任何会发 GET_VERSION 的场景就会失败。一枚便宜的“NTAG215”往往根本不是 NTAG215,Amiibo 会拒绝它。在写入任何东西之前,先用应用查看厂商代码和芯片名称,并且从会写明芯片型号的店铺购买。
我的手机能用 NFC 应用读取银行卡或护照吗?
护照可以:以机读区作为钥匙,应用就能读出芯片里的数据组,NFC.cool 在两个平台上都能做到。银行卡是一张 EMV 智能卡;应用能读出它的应用列表和一些公开记录,但 Apple 在 Core NFC 中禁止读取支付卡,卡的安全码并不在芯片上,而且每一笔交易都由一把永远不会离开卡片的密钥签名,所以根本没有东西可复制。
为什么我的办公室工牌或酒店房卡在应用里不显示?
大多数办公室工牌是 125 kHz 的感应卡,手机 13.56 MHz 的线圈连感知都感知不到。大多数酒店房卡和老式交通卡是 MIFARE Classic,iPhone 只能识别它,Android 手机也只有在控制器合适、密钥正确的情况下才能读取。这两种情况都不是应用能解决的,我宁愿直说,也不想卖给你一个变通方案。
已经设为只读的 NFC 标签还能解锁吗?
不能。Type 2 或 Type 5 标签上的锁定位是芯片里的单向位;能力容器里的只读标志也一样。密码只要你知道,就能移除;锁定则不行。这就是为什么 NFC.cool 在锁定任何东西之前都会问你两遍。
NTAG 的密码算真正的安全措施吗?
它能挡住拿着免费应用的人,而大多数人就是这样的人。它挡不住拿着能监听的读卡器的人,因为 32 位密码是不加密地在空中传输的,标签应答的也只是一个 16 位的确认值。任何需要扛得住有心攻击者的场景,安全阶梯都要从 AES 起步:Type 2 贴纸选 Ultralight AES,如果轻触本身就必须证明点什么,就选 NTAG 424 DNA。
做 Amiibo 需要哪种标签?
NTAG215,而且只能是 NTAG215。游戏机会先发 GET_VERSION,再用一个由 UID 派生的密码进行认证,然后读取全部 135 页。没有 GET_VERSION、或者页数不同的芯片,第一条命令就会失败。把 Amiibo 写进一枚标签是不可逆的,因为锁定字节和密码都是这种格式的一部分。
哪种 NFC 标签能贴在金属表面上用?
任何一颗采用抗金属外形的芯片都可以,也就是在天线和金属之间垫一层铁氧体片。普通标签贴在钢板上根本读不出来;抗金属标签的读取距离大约是它正常距离的五分之四。如果你能在普通标签和金属之间垫上三毫米任意非金属材料,也同样管用。
NFC.cool 能在 iPad 和 Mac 上用吗?
能,从 6.15.0 版本起,通过 USB 智能卡读卡器实现;这两种设备本身都没有 NFC 无线模块。我测试的是 HID OMNIKEY 5022 CL,用户反馈 ACS ACR1552U 和 ACR1255U-J1 也能用。凡是在手机上对 Type 2、Type 4 和 FeliCa 能用的功能,通过读卡器都能用,MIFARE Classic 则只能读取。
术语表
| 术语 | 含义 |
|---|---|
| AFI | Application Family Identifier,应用族标识符,ISO 15693 标签上的一个字节,让读卡器在盘点时只读取某一类标签 |
| APDU | Application Protocol Data Unit,应用协议数据单元,ISO 7816-4 的命令与响应格式,所有 ISO-DEP 芯片都用它 |
| ATQA | Answer To Request,请求应答,Type A 芯片发出的头两个字节;NXP 说不要靠它来识别芯片 |
| AUTH0 | NTAG 的一个配置字节,标明从哪一页开始需要密码 |
| AUTHLIM | NTAG 的一项设置,在密码错误达到指定次数后锁死标签 |
| CC | Capability Container,能力容器,即告诉读卡器这枚标签存有 NDEF 以及容量多大的那四个字节(在 Type 4 上是一个文件) |
| CMAC | 用 AES 计算的消息认证码;正是它让 SUN 消息无法伪造 |
| CRYPTO1 | NXP 用在 MIFARE Classic 里的私有 48 位流密码,2008 年被攻破 |
| DSFID | Data Storage Format Identifier,数据存储格式标识符,ISO 15693 上描述内存如何组织的一个字节 |
| EAS | Electronic Article Surveillance,电子商品防盗,ISO 15693 标签上让商店防盗门报警的那个位 |
| GET_VERSION | NXP 的一条命令,返回八个字节,标明芯片的厂商、类型、代际和容量 |
| ISO-DEP | ISO/IEC 14443-4 传输协议;支持它的芯片会应答 SAK 20 并接受 APDU |
| 负载调制 | 无源标签发送数据的方式:在天线上切换一个负载,读卡器会在自己的磁场中感知到这个变化 |
| LRP | Leakage Resilient Primitive,抗泄漏原语,NTAG 424 DNA 和 DESFire Light 上一种能抵御侧信道攻击的 AES 模式 |
| MAD | MIFARE Application Directory,MIFARE 应用目录,即 Classic 卡的第 0 扇区,列出其他扇区里存放着什么 |
| 镜像 | NTAG 的一项功能,每次被读取时把 UID 和计数器以 ASCII 形式贴进 NDEF 消息 |
| NDEF | NFC Data Exchange Format,NFC 数据交换格式,每部手机都能读的记录容器 |
| NUID | Non-Unique Identifier,非唯一标识符,NXP 对 4 字节 UID 的叫法 |
| OTP | One Time Programmable,一次性可编程,只能置位一次、永远无法清除的位 |
| PACK | Password Acknowledge,密码确认,NTAG 在密码正确后返回的两个字节 |
| PICC、PCD | 标准里对卡片和读卡器的称呼 |
| 随机 ID | 一种模式,芯片在防冲突阶段每次都用一个全新的随机 4 字节 ID 应答,以保护隐私 |
| READ_SIG | 返回芯片原厂签名的命令 |
| SAK | Select Acknowledge,选择确认,Type A 芯片被选中后返回的字节;它的各个位把芯片归入不同家族 |
| SDM | Secure Dynamic Messaging,安全动态消息,NTAG 424 DNA 和 DESFire EV3 上支撑 SUN 的机制 |
| SUN | Secure Unique NFC,一个每次轻触都携带全新密码学证明的 URL |
| T5T、T2T、T4T | NFC Forum 对 Type 5、Type 2 和 Type 4 标签的简称 |
| TLV | Tag-Length-Value,标签-长度-值,Type 2 和 Type 5 芯片上包在 NDEF 消息外面的封装 |
| TruST25 | ST 针对 UID 的原厂签名 |
| UID | 芯片出厂时写入的标识符,4、7 或 8 字节 |
参考资料与延伸阅读
这份指南里的每一张表,都对照过下面其中一份资料。价格来自选购一节里提到的那些店铺,时间是 2026 年 9 月 9 日。
NXP NTAG
NTAG 424 DNA 和 NTAG 424 DNA TagTamper 数据手册,以及 AN12196,附有原厂签名公钥的 424 功能与使用提示说明
NTAG I2C plus 和 NTAG 5 boost 数据手册
AN13089,NTAG 21x 功能与使用提示,讲的是为什么静态原厂签名不能保证防克隆(镜像站点;nxp.com 上的版本不公开)
NXP MIFARE
MIFARE Ultralight、Ultralight C、Ultralight EV1 和 Ultralight AES 数据手册
MIFARE Plus S、Plus SE 和 Plus EV2 简版数据手册
DESFire EV1、DESFire EV2、DESFire EV3 和 DESFire Light 数据手册,以及 AN12752,关于 DESFire 的可用内存
AN10833,MIFARE 类型识别、AN10927,MIFARE 的 UID、AN1305,MIFARE Classic 上的 NDEF、AN10787,MIFARE 应用目录、AN11004,把 DESFire 用作 Type 4 标签
NXP ICODE
意法半导体、德州仪器、EM、索尼、复旦
ST 的 ST25TV02KC、ST25TN01K、ST25DV64KC、ST25TA02KB 和 M24LR64E-R 数据手册,AN5658,关于 Augmented NDEF,以及 TA0358,关于 TruST25
安全研究与标准
Quarkslab,MIFARE Classic: exposing the static encrypted nonce variant and a few hardware backdoors(2024)
Nohl、Evans、Starbug 和 Plötz,Reverse-Engineering a Cryptographic RFID Tag(USENIX Security 2008)
Garcia 等,Dismantling MIFARE Classic(ESORICS 2008)
NFC Forum 关于 这项技术 和 Type 2 标签规范 的页面
手机与读卡器
Apple 的 Core NFC、后台标签读取、排除了 CRYPTO1 的 MIFARE 命令 和 WWDC 2019 第 715 场讲座
Android 的 MifareClassic、NFC 高级指南 和 Chrome 中的 Web NFC
读卡器:ACS ACR122U、HID OMNIKEY 5022 CL、NXP PN532、Proxmark3、Flipper Zero 和 Chameleon Ultra
天线与铁氧体:TI SLOA241 和 Würth ANP022
总结
让芯片匹配任务。放链接用 NTAG213,拿不准就用 NTAG216,做 Amiibo 用 NTAG215,轻触必须证明点什么时用 NTAG 424 DNA,需要被门禁式读写器读取时用 ICODE SLIX2 或 ICODE 3,门禁必须信任它时用 DESFire EV3,而 MIFARE Classic 那一排货架上的东西,一样都别碰。这份指南里的其他所有内容,都是这句话背后的推理过程,而那些表格的存在,就是为了让你再也不必轻信商品页上的说辞。
如果你想在写入之前先看清一枚标签到底是什么,这正是 NFC.cool Tools 每次轻触都会做的事,无论是在 iPhone 上、Android 上,还是在插着读卡器的 iPad 或 Mac 上。如果你桌上有一颗芯片被应用认错了,或者应用根本认不出来,请写信告诉我。那六十款里的大多数,就是这样进入名单的。