Skip to content

← 返回 NFC.cool Blog

NTAG 424 DNA:能自证不是仿冒品的 NFC 标签

一枚 NTAG 424 DNA 标签贴在一部 iPhone 上,屏幕显示着验证为真品的结果,旁边是标签的配置界面

前段时间,我总是不经意间读到同一个说法:奢侈品牌正在把 NFC 芯片放进自家产品里,这样你就能用手机轻触一只包或一瓶酒,确认它是真货、不是仿冒品。每篇文章都在说同一句漂亮话,却没有一篇说清楚到底怎么做到的。究竟是什么,能拦住造假者在仿制手袋的同时把芯片也一并复制过去呢?

于是我做了每次对某种标签好奇时都会做的事。我上了 AliExpress,找到一个卖”NTAG 424 DNA”标签的链接,下单买了一小批,然后等着信封寄到。花了几欧元,等了两个星期,那些品牌防伪系统赖以搭建的同款硅片,就摆在了我的桌上。接着我轻触了一枚,看看它到底能做什么。

NTAG 424 DNA 标签究竟是什么

从外表看,它就是一枚普通的 NFC 标签。把它扔进一堆廉价标签里你根本挑不出来,任何手机都能毫无怨言地读到它。如果你读过我那篇 NFC 标签类型指南,它不过是又一枚 Type 4 标签,iPhone 照读不误。

不一样的地方在”DNA”这部分。芯片内部藏着几把 AES-128 密钥和一个小小的加密引擎,它能做一件普通 NTAG215 或者整包里随便一张贴纸都做不到的事:它能给每一次轻触签名。这个签名就是关键所在。有没有它,正是这两种标签的区别:一种只会说”这里有个链接”,另一种会说”这里有个链接,还附上一份加密证明,证明此时此刻正是我,这枚特定的、货真价实的芯片,在提供它”。

这才是奢侈品牌真正花钱买的东西:不是那个链接,而是”一枚真芯片正在提供它”的这份证明。

SUN 和 SDM 是怎么运作的:一条每次轻触都会重写自己的链接

而接下来,我就豁然开朗了。当我去看这枚标签实际发出的是什么时,我意识到,理解它所需的大部分机制,我其实早就做出来过了。

今年早些时候,我上线了一个 NFC 轻触计数器功能:一枚标签会统计自己被读取了多少次,并把这个数字放进 URL 里,这样一个链接就能知道这是第 47 次有人扫描它。一枚 NTAG 424 DNA 标签就是同一个思路,只不过在外面裹了一层加密,让它无法被伪造。

这套机制叫 SUN(Secure Unique NFC),如果你在读 NXP 的数据手册,它又叫 SDM(Secure Dynamic Messaging)。你在标签上存一个普通链接,类似 https://example.com 这样。但你会告诉芯片,每次被轻触时就即时重写这个链接的一部分。于是你手机实际收到的,更接近这样:

https://example.com/?picc_data=A1B2...&cmac=9F3C...

这两个值可不是摆设。picc_data 是标签真实 ID 加上一个轻触计数器的加密副本,用一把永远不会离开芯片的密钥打乱而成。cmac 则是针对这份数据的一个加密签名。两者每次轻触都会变。同一枚标签轻触两次,你会得到两个完全不同的 URL,每一个都是芯片当场新鲜签出来的。

我把一枚普通的 NFC 标签想象成橱窗里一块印好的招牌。谁都能把它拍下来,再印一份一模一样的复制品。而一枚 SUN 标签更像是一位保安:你每走进来一次,他就递给你一张全新的、单独编号并盖了章的收据。把昨天的收据复印一份对你没有任何用处,因为今天的号码不一样,而且只有保安那个章才是真的。

为什么一枚被克隆的 NTAG 424 DNA 标签会露馅

这一部分回答的正是我最初的那个问题。造假者当然能克隆一枚标签的内容。他们可以把 URL 读出来,一个字节一个字节地复制,再写进一枚空白芯片里。这一点向来如此,也正是为什么”随便贴个二维码上去”其实从来证明不了任何东西。

他们做不到的,是拿出下一个有效的签名。签名密钥住在那枚真芯片内部,从不外露,哪怕在一次轻触过程中也不会。这意味着,一次轻触只有对真正握有密钥的一方才有价值。在一套真正的品牌防伪方案里,标签的链接指向厂商自己运行的一台服务器,正是这台服务器负责解密每一次轻触、重新计算签名以确认密钥吻合,并持续追踪那个一路攀升的计数器。

最后这一点,正是揪出克隆品的关键。造假者能放到仿品上的 URL,只可能是从某一次真实轻触里截获来的那一个,它被冻结在那次轻触碰巧带着的那个计数值上。把它重放一遍,服务器看到的就是一个它早已见过的数字,而一枚真芯片的计数器永远只会往前走,所以一次重复、或者一次倒退,就把这场重放暴露了。想要送出一个全新的、更大的计数值,还要配上一个依然验得过的签名,他们就得拿到密钥;而想拿到密钥,他们就得攻破 AES,或者从物理上把芯片开盖。为了一只假手袋,这两件事都不会发生。

这就是那句营销话术诚实的版本。芯片并不能让产品本身无法复制。它让真伪证明无法复制,并把这份证明转移到了造假者复制不出来的东西上。

NFC.cool 如何验证一枚标签是真品

一旦弄懂了这些标签,我就想让 App 把整件事认认真真地做好,而不只是甩给你一堆十六进制转储。所以 NFC.cool Tools 现在已经能在 iPhoneAndroid 上完整处理 NTAG 424 DNA,而且它用两种彼此独立的方式来校验真伪,在专门为此打造的标签上还有第三种,也就是物理方式。

**芯片的出身。**每一枚真正的 NXP 芯片,都带有一个针对自身 ID、用 NXP 私钥签出的出厂签名。NFC.cool 会读取这个签名,并直接在手机上用 NXP 的公钥去验证它。如果验得过,你就会得到一个干脆利落的”正品 NXP”结果。这一项不需要任何设置,也不需要你提供任何密钥。它回答的是”这到底是真正的 NXP 硅片,还是一枚不知名的克隆货?”。

**轻触本身。**这就是 SUN 校验。NFC.cool 会解密 picc_data,取出标签 ID 和轻触计数器,重新计算签名,再拿它和标签发来的 cmac 做比对。如果两者吻合,这次轻触就是真实而新鲜的,你会看到”真品”。这一项证明的东西更多,所以它要求的也更多:它需要标签的密钥。一枚仍停在出厂默认状态的全新标签,不用你输入任何东西就能验过。而一枚被人用自己的密钥锁住的标签,只有当你存好了那把密钥时,才会被验证为真品。

**物理封条,用在专门为此打造的标签上。**这类标签里有一个版本,叫 NTAG 424 DNA TagTamper,天生就是一道防拆封条。它是一张贴纸,里面多穿了一根细细的导线,你把它横贴在任何你想保护的地方,盖在盒子的封口上,或者绕在瓶盖一圈上,跟今天那些”撕毁保修失效”的贴纸干的是同一件活。一旦打开物品,你就会撕破这张贴纸,而这会扯断那根导线。NFC.cool 会在轻触时检查这根导线,明明白白地告诉你封条是还完好、还是已经被破坏。妙的地方在于,它是一个单向的门闩:一旦扯断,芯片就永远记住了,所以一件被打开过、之后又被小心翼翼重新封上的东西,读出来仍然是”已被打开”。加密证明的是芯片是真品;而这个,证明的是没有人动过盒子里的东西。

这一切对所有人都是免费的。读取一枚标签,它的链接、它的轻触计数、它的文件布局、它的封条是否还完好,以及跑那两项加密校验,都分文不取。我希望”这东西是真的吗?“这个问题,任何轻触它的人都能得到答案。

写入你自己的安全标签

读取只是一半。另一半是,从 AliExpress 买来的那些空白标签,随你来写入,而 NFC.cool 是通过一条正儿八经的、经过认证并加密的通道来完成的,也就是芯片本身坚持要用的那套安全消息机制,而不是碰运气式的裸写。

温和的版本一共三步。写入你自己的链接,这是免费的。打开 SUN,让标签开始给每一次轻触签名。再把出厂密钥换成你自己的,用一句口令的形式设置,这样就不用去折腾一串 32 位的十六进制字符,它会被存进你的钥匙串里。从这一刻起,标签就锁定到你了:它会继续向每一个轻触它的人证明自己是真品,但只有你才能重新对它写入。

我本可以到此为止。少数几个哪怕沾一沾这类标签的 App,都停在了这里。我没有。

在你的 iPhone 或 Android 上配置整枚 NTAG 424 DNA 芯片

在陪着这些标签熬了一周的夜之后,某个时刻我下了一个决定:NFC.cool Tools 要覆盖 NTAG 424 DNA 规范的 100%,而不是每篇”轻触即验真”教程都止步于的那一小块方便演示的部分。如果我想让它成为世上最好的 NFC App,那么”我们支持 NTAG 424 DNA”就不能悄悄地只意味着”我们支持那一把简单的密钥和那一个简单的模式”。于是我顺着数据手册一路读下去,把剩下的都做了出来。

一枚 NTAG 424 DNA 芯片可不止一把密钥,它有五把。NFC.cool 现在把它们全都管起来了:修改任意一个槽位、把它重置回出厂状态,或者输入你在另一台设备上设好的密钥,好让这部手机也能驱动这枚标签。SUN 也不是非得用那把主密钥来签名:你可以让轻触的加密指向一把密钥、让它的签名指向另一把,并决定这枚标签是把自己的 ID 明文照搬出来,还是让它保持加密。

芯片上的每个文件都带着自己的一套访问规则,现在你可以编辑它们了:谁可以读一个文件、谁可以写它、谁可以更改它的设置,每一项都可以设成某把特定的密钥、或者完全敞开、或者永久关闭。文件之下,是芯片自身的配置,这些也都在这里:打开随机 ID,让标签不再向它经过的每一台读取器广播同一个序列号(这是实打实的隐私提升),设定它在把自己锁死之前能容忍多少次失败的解锁尝试,还有一小把大多数人永远不需要去碰的更底层的开关。

这枚芯片甚至还留了一个小小的私密保险库。它上面有一个加密文件,锁在你的 Key 0 之下,它随标签本身一起走,而不是待在某台服务器上。往里面藏一点小秘密,一点你希望它跟着标签一起走、而不是躺在别人数据库里的东西,只有你的密钥才能把它读回来。NFC.cool 替你写入它、也替你读取它。

如果你以前做过这类事,那也是坐在书桌前做的。NXP 会发一个叫 TagXplorer 的 Windows 工具,你把一个 USB 读卡器插到电脑上,然后从那里一路点选芯片的配置。NFC.cool 能做所有这些同样的事,但它是被造来”用”的,而不是让你”忍”的。TagXplorer 是满屏裸十六进制和晦涩字段的桌面软件,而 NFC.cool 是你口袋里那部手机上一屏屏大白话的界面,用一句口令代替一把裸密钥,并在任何不可逆的操作之前给出警告。整件事,你只需把手机贴在标签上一两秒就能搞定。

NTAG 424 DNA 的 LRP 模式是什么,以及那些你无法撤销的更改

再然后,就是 LRP 了。在我为第一个版本写的设计笔记里,紧挨着”LRP 模式”,我写了一句”暂不计划,冷门,消费级 App 用不上”。LRP 是 Leakage-Resilient Primitive 的缩写,是这枚标签货真价实的偏执模式。通常情况下,芯片用普通的 AES 来守护它的密钥,想偷到一把密钥就意味着要攻破 AES 本身。但还有一条更阴险的攻击路线:把一枚芯片架到实验台上,在它运行加密运算时盯着它电流消耗里那点微弱的抖动、以及电磁噪声的嗡鸣,只要采到足够多这样的轨迹,你就能单凭泄漏本身把密钥重建出来,完全不用去碰那些数学。LRP 是一条被重新设计过的安全通道,就是要让那份泄漏无处着力。对一瓶葡萄酒上的一张贴纸来说,它实在是杀鸡用牛刀,这也正是为什么大多数标签从不开启它、大多数工具也从不学着去说它。可它就是一直在我心里挠个不停,而”覆盖整份规范”这句话后面并没有跟着一条”困难的部分除外”的脚注,所以我把它做了出来。NFC.cool 现在会说 LRP 了,这意味着即便一枚标签被切换进那个模式(一个你收不回的单向开关),App 依然能向它完成认证、像对待其他任何标签一样管理它。我还不知道有别的哪一款手机 App 走到了这一步。

关于那些容易踩的坑,我就直说了,因为现在坑更多了。这里很多命令都是永久性的。启用 LRP 无法撤销。打开随机 ID 无法撤销。把一个文件的”更改”权限设成 Never,你就把那个文件冻结了一辈子。一把错误的密钥能把一个槽位彻底锁死。App 在你动手的当下会把这事说得很重,那些真正不可逆的操作会逼着你通过一个把确切后果讲清楚的警告来确认,但有一点在这里还是值得再说一遍:在动你真正在乎的那枚标签之前,先拿一枚备用的练练手。

防伪 NFC 标签究竟用在哪里

说实话?大多数轻触 NFC 标签的人,这一切都用不上,这也挺好。一张能打开链接的贴纸,本身就是一样美好、平淡而有用的东西。

可一旦你亲手拿过一枚这样的标签,它的用武之地就一目了然了。一只奢侈品包可以证明自己是真货。一瓶葡萄酒或威士忌可以表明它从没被悄悄开瓶、再兑上些便宜货灌回去,防拆封条撑起的正是这后半件事。一盒药既担保里面是真药,也担保封条没被任何人破坏过。一件限量产品或一件艺术品,能拿到一张谁也伪造不了的证书,而门票也不再是那种你截个图就能转手传给别人的东西。把一枚标签放在门边或货架上,一次轻触就能证明确实有人真的站在过那里,而不是窝在沙发上重放一个存好的链接。球鞋和卡牌能证明自己出自真正的那次发售、而不是高仿。任何一个独立创作者,都能让自己的东西证明它就是他自己的东西。这和欧盟数字产品护照正从监管一侧兜着圈子想解决的,是同一个真伪问题,只不过这里是在单个物件的层面上把它解决掉的。

我做这个功能,并不是因为有一千个用户开口要它。我做它,是因为我出于好奇从网上买了些奇怪的标签,弄明白了它们的原理,然后就非得把数据手册的每一页都翻个遍不可。好功能,通常就是这么开始的。

关于 NTAG 424 DNA 标签,一句话的结论

NTAG 424 DNA 标签,是 NFC 里最接近防拆封条的东西。它们没法阻止有人复制一件产品,但它们让这件产品的真品证明无法伪造,因为那份证明是一个只有真芯片才能产生的、每次都新鲜的加密签名。

NFC.cool Tools 现在能读取它们,免费验证芯片、验证轻触、验证防拆封条,并把整枚芯片交到你手上任你配置:每一把密钥、每个文件的权限、它最底层的设置,甚至 LRP,让你直接在手机上就能配置属于你自己的标签。如果你曾好奇一次轻触怎么就能分辨真假,那就在 iPhoneAndroid 上装上它,花几欧元订一批这样的标签,自己亲手轻触一枚。这绝对值得你一头扎进去,好好研究一番。