跳至内容
NFC Utils
NFC Utils 菜单
浏览指南与章节

NFC Utils 指南

NTAG 424 DNA

在 NTAG 424 DNA 上配置密钥、安全动态消息和文件访问。TagTamper 变体增加自己的「检查」和「启用」控件。解码 SDM URL 也可离线使用。

概览

NTAG 424 DNA 是一个由五个密钥守护的小型文件系统。NDEF 消息位于文件 02。本页上的每个设置都是该文件或密钥的属性,每次更改都在应用用其中一个密钥打开的 EV2 安全消息会话中完成。

选择 NTAG 424 DNA 或 NTAG 424 DNA TagTamper。两者都有信息查看、NDEF、密钥、SDM 和访问工具。TagTamper 工具项只出现在对应的变体上。其他 DESFire 和 Plus 卡使用各自的信息查看工具页。

NTAG 424 工具菜单

密钥

它是什么
五个槽位,密钥 0 到密钥 4,每个 32 位十六进制数。密钥 0 是主密钥。其余四个由指向它们的权限和功能使用。
更改它会发生什么
手机上看不到任何变化。它改变的是谁能打开使用该槽位的会话。
它需要什么
始终需要密钥 0。更改密钥 1 到 4 还需要在字段中填入它们的当前值,因为芯片接收的是用旧密钥掩码后的新密钥。
撤销
改回去,或者恢复出厂设置,两者都需要密钥 0。密钥 0 丢失后,卡片将永远保持原样,本应用中没有任何功能能将其恢复。

当前密钥

密钥页面保存密钥 0 到密钥 4,初始为出厂的全零,「出厂密钥」操作可将其恢复。每个任务都严格使用这些字段中的值,没有任何东西会覆盖它们。密钥库为它们供值,而不是替换它们。读取本应用保存了密钥的标签会填入字段,更改成功会更新它们,恢复出厂设置会将其清零。

检查

「检查」用每个当前密钥进行认证,逐个报告「已接受」或「已拒绝」,不做任何更改。标签过早拿开时,进行中的密钥显示「失败」,其余显示「未检查」。

更改

「更改」选择一个密钥编号并接收一个新的 32 位值,可手动输入或生成。先检查,再更改。若把密钥 0 改为一个随后丢失的值,标签将永远保持当前配置,应用无法将其恢复。

密钥页面

安全动态消息

开启安全动态消息后,芯片在每次读取时重写 URL 的部分内容。下面的字段决定重写哪些部分。

字段含义
基础 URL标签打开的页面。应用按桌面编码器的布局把镜像字段作为查询参数追加。
加密 PICC 数据UID 和计数器用 PICC 数据密钥加密传输,而不是明文。开启后,它取代两个明文镜像。
URL 中的 UID、URL 中的读取计数器UID 和读取计数器的明文镜像。
CMAC用 CMAC 密钥为镜像字段签名,让服务器能拒绝复制品。
URL 中的加密数据一个 32 或 64 个字符的占位符 enc={enc},其前半部分在文件中保存至多 16 或 32 字节的明文。芯片在每次未认证的读取时把整个占位符替换为密文。需要开启 CMAC,并且 UID 和计数器都在 URL 中。下面的「加密数据」部分会详细说明。
读取计数上限可选。计数器一旦达到该值,芯片就拒绝对该文件的所有未认证读取,手机将打不开任何内容,此时读取标签页会指明该上限。提高或移除上限可恢复读取,计数器不会重置。
自定义模板可选。默认布局不适用时,填入带有 {uid}、{counter}、{cmac} 和 {picc} 占位符的完整 URL。{picc} 不能与 {uid} 或 {counter} 组合使用。

字段下方的等宽字体行用占位字母预览 URL。

它是什么
「URL 中的 UID」放入序列号,「URL 中的读取计数器」放入触碰次数,CMAC 添加一个用密钥计算的签名,让服务器能区分真实触碰和复制的链接。「加密 PICC 数据」把明文 UID 和计数器替换为一个只有密钥持有者才能解开的加密块。
更改它会发生什么
每次触碰都会打开不同的 URL。结果卡中的偏移量就是芯片在文件中写入实时值的位置。当计数器达到或超过读取计数上限时,芯片还会拒绝所有保留该上限的设置更改,包括访问权限,所以必须先在这里提高或移除上限。
它需要什么
「更改设置」密钥,并且你选择的 CMAC 或 PICC 密钥必须存在于卡片上。「应用」还会把写入设为密钥 0。
撤销
「禁用」,它保留消息和权限不变。

应用与禁用

「应用 SDM」写入 NDEF 并设置文件设置。此后文件可自由读取,写入或更改需要密钥 0。「禁用」关闭镜像,并保留访问权限下设置的任何权限。

安全动态消息页面

加密数据

「URL 中的加密数据」是 URL 中的一段,32 或 64 个字符,芯片在每次未认证的读取时对其加密。你输入的明文,至多 16 或 32 字节,位于文件中该段的前半部分。读卡器永远看不到它。它们看到的是密文,因为计数器参与加密,密文每次触碰都会变化。

使用哪个密钥

芯片由 CMAC 密钥连同 UID 和读取计数器派生加密密钥。它不是单独的选项,所以为 CMAC 签名的密钥同时也加密数据,该功能需要开启 CMAC,并且 UID 和计数器都在 URL 中。

更新它

明文是普通的文件数据,所以通过用写入权限写入文件中的那一段来更改,在这里设置过的卡片上就是密钥 0。

读取它

完整扫描显示密文,当密钥页面持有 CMAC 密钥时,还会在下方显示明文。

隐藏它

这段数据块无法从 URL 中省略,但可以伪装。在自定义模板中给参数起任意名字,把它放进路径段,或者在它旁边开启「加密 PICC 数据」,让 URL 携带两个看起来相似的十六进制块。把 {cmacStart} 放在它前面,CMAC 就会连密文一起签名。

它不是什么

它不是智能卡。安全元件卡运行自己的小程序,带有 PIN 和挑战应答。424 只是让随意的读取者看不到一小段静态载荷,仅此而已。

「SDM 已配置」结果卡

访问权限

NDEF 文件上的四个选择器,每个可设为自由(0xE)、密钥 0 到密钥 4,或从不(0xF)。「更改设置」设为「从不」会让文件设置成为永久。只要「更改设置」允许,其他权限仍可更改。

  • 读取谁可以读取消息。「自由」是每部手机都需要的,这里设为密钥会让手机看不到消息。
  • 写入谁可以覆写消息。新卡上为「自由」,「应用 SDM」会把它设为密钥 0,这样没人能破坏镜像。
  • 读写同一文件上的第二个密钥。满足「读取」或「读写」时允许读取,满足「写入」或「读写」时允许写入。
  • 更改设置谁可以更改这四项权限和 SDM 布局。新卡上为密钥 0,也是锁定时真正起作用的一项。
它是什么
NDEF 文件上的四项权限,每项为自由、某个密钥,或从不。
更改它会发生什么
「应用访问权限」重写文件设置,保持当前的 SDM 状态不变。你打开或关闭的每个槽位都会改变此后谁能读取、写入或重新配置该文件。
它需要什么
「更改设置」当前指定的密钥。页面顶部会显示该密钥,让将要使用的值一目了然。
撤销
应用新的权限,只要「更改设置」不是「从不」。

写入与读写的区别

「写入」和「读写」是两个独立的槽位,都涵盖写入,芯片按「或」的关系检查它们。任一槽位满足,写入即可通过。「读取」和「读写」对读取同理。「读写」是给完全拥有该文件的单个密钥的槽位,而「读取」为手机保持「自由」,「写入」保持关闭。要关闭写入,需要关闭两个槽位。

写入读写谁能写入
自由(0xE)任意任何人。
密钥 0自由(0xE)任何人,因为第二个槽位是开放的。
密钥 0密钥 0仅密钥 0。
密钥 0密钥 1密钥 0 或密钥 1。
从不(0xF)密钥 0仅密钥 0,通过第二个槽位。
从不(0xF)从不(0xF)永远没有人。

在 424 上,信息卡把四项权限显示在一行中。刚「应用 SDM」之后,它显示为 Read E · Write 0 · RW 0 · Change 0。

访问权限页面

锁定 424

424 上没有锁定命令。某项权限设为「从不」时卡片就成为永久状态,你选择哪项权限决定冻结什么。请只在你打算保持原样的卡片上这样做。

你想要设置之后
SDM 布局和权限固定,消息仍然动态「更改设置」设为从不(0xF)读取和 SDM 继续工作。写入遵循当前的写入权限。密钥仍可用密钥 0 更改。访问权限、禁用 SDM 和恢复出厂设置都会被拒绝。这是 SDM 标签的生产锁定状态。
消息也固定「写入」设为从不(0xF),「读写」设为从不(0xF),「更改设置」设为从不(0xF),一次应用完成文件永久只读。密钥仍可更改。
消息对手机永久隐藏「读取」设为从不(0xF),并把「更改设置」设为从不(0xF)手机打不开任何内容。只有持有文件读取密钥的读卡器能看到数据。很少有人需要这种状态。
尚无永久更改「写入」设为密钥 0,「更改设置」设为密钥 0在手机看来像已锁定,而你仍可用密钥 0 更改一切。「应用 SDM」之后卡片已经处于这种状态。

「更改设置」仍开放时,把某项权限设为「从不」并不是锁定。「更改设置」是那把锁,其余三项是它锁住的东西。

The NFC Mint 锁定卡片的方式

The NFC Mint 的编码器为每张铸造完成的卡片设置读取自由、写入从不、读写从不、更改设置从不、CMAC 使用密钥 1、计数器检索为从不。此后读取和安全动态消息永久有效,没人能写入文件,没人能更改布局,密钥仍可通过密钥 0 更改,这是我们唯一保留给自己的东西。在应用中达到同样的状态需要两步。

  • 第一步:安全动态消息用你想要的 CMAC 密钥配置,上限字段留空,然后应用。这也会把写入和读写设为密钥 0。
  • 第二步:访问权限读取自由(0xE)、写入从不(0xF)、读写从不(0xF)、更改设置从不(0xF)。应用,然后在提示无法撤销的弹窗中继续。

信息卡随后显示为 Read E · Write F · RW F · Change F。从此应用访问权限、禁用 SDM 和恢复出厂设置都会被拒绝,卡片仍可读取,其 URL 仍在每次触碰时变化。

已锁定卡片的读取结果

解码 SDM URL

它是什么
在手机上完成 SDM 链接的服务器端工作。取一个 URL,找出芯片填入的字段,解密已加密的内容,并检查签名。它不需要射频场中有标签。粘贴任意 URL,或按「使用上次读取」取用上次 424 读取得到的 URL。
更改它会发生什么
解码报告 UID 和计数器(明文或从 PICC 数据中恢复)、解密后的文本、防拆封条状态,以及 CMAC 有效或无效,无效时附带期望值。CMAC 不匹配意味着链接被篡改、从另一枚标签复制而来,或用不同的密钥签名。
它需要什么
CMAC 密钥(它同时解密加密数据),以及当 URL 携带加密 PICC 数据时的 PICC 数据密钥。两者位于字段下方,其值内联显示在共用的密钥槽位中,读取一枚开启了 SDM 的标签后,它们默认为该标签设置所指定的槽位。
撤销
这不是更改。

如何推测各值的角色

应用把 URL 拆分为各个值,查询参数和形似十六进制的路径段一视同仁,然后先按名称、再按长度推测每个值的角色。14 个十六进制字符视为 UID,6 个视为计数器,16 个视为 CMAC,32 个视为 PICC 数据或加密数据,64 个视为加密数据,两个字母视为防拆状态。每个推测都显示在选择器中,所以来自其他编码器、使用自己参数名的 URL 可以手动纠正。反正芯片从不看到这些名称,所以一旦选择器指明了哪个值是什么,任何编码器生成的 URL 都以同样的方式解码。

「CMAC 输入起点」选择 MAC 输入从哪里开始,有加密数据时从加密数据开始,否则从 CMAC 本身开始,其他布局则从 URL 开头开始。

解码 SDM URL 页面

TagTamper

它是什么
在 NTAG 424 DNA TagTamper 上,一根横跨封条的导线回路,芯片每次上电时都会测量它。GetTTStatus 返回两个值。「当前」是导线此刻的读数。「永久」是自回路启用以来导线是否曾读到断开,它只会单向变化。
更改它会发生什么
启用时用 SetConfiguration 选项 07 打开回路,并选定此后 GetTTStatus 需要的状态密钥,The NFC Mint 出货时设为无需认证(Free)。NFC Utils 在 TagTamper 工具页中提供「检查」和「启用」。「检查」查询当前状态和永久状态。「启用」需要密钥 0,并选择状态访问密钥。TamperKit 提供独立的激活记录和长期检查。
它需要什么
启用需要密钥 0。状态访问设为「自由」时任何读卡器都可以查询,设为某个密钥时需要认证,设为「无访问」时状态只能通过已配置的 SDM 获取。
撤销
无。回路无法再次关闭。

未激活、完好、已断裂

NFC Utils、NFC Proof 和 TamperKit 中的封条判定是一致的。只有两个值都读为「闭合」时才是「完好」,任一值曾读为「断开」即为「已断裂」,回路从未启用则为「未激活」。剪断后重新接上的导线读为「已断裂」,因为芯片已永久记录了第一次断开。

激活前被剪断的回路

启用之前芯片不做任何测量,所以激活前被剪断的回路看不出来,启用也不会因此失败。第一次测量随启用本身进行,已剪断的回路当场就读为「已断裂」。从那时起,芯片无法区分激活前剪断和激活后剪断的回路,这就是 TamperKit 在激活时记录状态的原因。

TagTamper 页面

擦除与重置

在 NTAG 424 下,该行是「擦除与重置」,不出现「格式化」,因为 424 的能力容器是内置于芯片的固定文件,没有什么可写的。

擦除标签

清空消息。密钥和权限保留。需要「写入」为「自由」,或其指定的密钥。

恢复出厂设置

清零消息,恢复文件的出厂权限并关闭 SDM,然后把每个密钥设回全零。需要「密钥」下的密钥 0,以及任何非零密钥的当前值。它会清除该标签的密钥库条目和「当前密钥」字段,因为密钥已恢复出厂。对于「更改设置」为「从不」的卡片,它无法恢复权限。

擦除与重置页面

哪些操作无法撤销

操作冻结的内容
「更改设置」为从不(0xF)时任何设为从不(0xF)的权限该项权限,连同「更改设置」一起,即整个布局。
丢失密钥 0一切。没有它,芯片上没有任何命令能更改密钥。