news 2026/6/11 13:50:57

NTAG 424 DNA芯片LRP协议与SDM机制深度解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
NTAG 424 DNA芯片LRP协议与SDM机制深度解析

1. NTAG 424 DNA:为NFC应用注入芯片级安全

在物联网设备、智能门禁和移动支付日益普及的今天,近场通信(NFC)技术因其便捷性而广泛应用。然而,NFC通信的开放性也带来了安全风险:数据在传输过程中可能被窃听、篡改或重放。对于一张用于门禁的NFC卡或一个附着在贵重资产上的标签,如果其存储的标识信息可以被任意读取和复制,那么整个安全体系将形同虚设。这正是NFC安全芯片需要解决的痛点。

NXP的NTAG 424 DNA系列芯片,正是在这一背景下诞生的高安全性解决方案。它不仅仅是一个存储数据的标签,更是一个集成了高级加密引擎的安全元件。其核心价值在于,将传统上需要后端服务器或复杂应用层协议才能实现的安全功能,如强认证、数据加密和防篡改,直接下沉到了芯片层面。这意味着,即使在一个完全开放的NFC通信环境中,数据从芯片被读出的那一刻起,就已经受到了保护。

这项技术的核心围绕着两个关键机制:LRP安全通信安全动态消息。LRP协议为读写器与芯片之间的双向通信建立了一个受保护的“安全通道”,确保后续的所有指令和数据交换都经过加密和认证。而SDM机制则更为巧妙,它允许芯片在无需与读写器进行复杂认证握手的前提下,动态地生成并输出经过加密和完整性校验的数据,完美兼容标准的NDEF读取操作。这使得普通的手机或读卡器也能读取到受保护的信息,但只有拥有正确密钥的后端系统才能解读其真实内容。

本文将深入芯片内部,拆解LRP协议的认证流程与密钥生成奥秘,并详解SDM如何在不依赖在线认证的情况下实现数据的安全交付。无论你是嵌入式安全工程师、物联网系统架构师,还是对NFC安全机制感兴趣的技术爱好者,理解这些机制都将帮助你设计出更健壮、更可靠的应用方案。

2. LRP安全通信协议深度解析

LRP,全称Leakage-Resilient Protocol,即泄漏弹性协议。顾名思义,它的设计目标之一就是抵抗侧信道攻击。传统的AES算法在硬件实现时,其功耗、电磁辐射或执行时间可能与正在处理的数据或密钥相关,攻击者通过分析这些“泄漏”的信息,有可能推导出密钥。LRP通过引入一套独特的密钥派生和加密流程,增加了从侧信道信息中提取密钥的难度,为资源受限的嵌入式设备提供了更高级别的物理安全。

2.1 LRP与标准AES安全消息的差异

在深入LRP细节之前,有必要先理解NTAG 424 DNA芯片支持的两种安全消息模式:标准的AES模式和LRP模式。两者都用于在认证成功后,保护后续应用层命令(如读、写文件)的通信安全。

核心差异在于加密原语和密钥结构:

  • AES模式:使用标准的AES-128算法进行加密和CMAC计算。会话密钥是静态的128位密钥。
  • LRP模式:使用基于AES构建但经过改造的LRP原语。其“密钥”并非一个简单的静态值,而是一个由一组明文和更新密钥构成的集合。每次加密操作都会使用这组明文中的不同部分,并结合更新密钥进行变换,使得每次加密操作的内在过程都略有不同,从而模糊侧信道特征。

从应用层看,两种模式提供的安全服务(机密性、完整性)是相同的,命令流程也基本一致。选择哪种模式,取决于你对安全等级的要求和对抗物理攻击风险的评估。LRP提供了更强的物理安全防护,但实现上更为复杂。

2.2 LRP双向认证流程详解

建立LRP安全通道的第一步,是完成双向认证。NTAG 424 DNA支持两种认证命令:AuthenticateLRPFirst(首次认证)和AuthenticateLRPNonFirst(非首次认证)。前者用于建立全新的安全会话,后者用于在已激活LRP安全消息的会话中切换或更新认证密钥。

2.2.1 AuthenticateLRPFirst:建立信任的握手

这是一个典型的三次相互认证过程,遵循ISO/IEC 9798-4标准。整个过程不可被其他命令中断。

第一阶段:读写器发起挑战

  1. 命令发起:读写器向芯片发送AuthenticateLRPFirst命令,其中包含一个名为PCDCap2的能力参数。为了指明使用LRP模式,必须将该参数的第1比特位设置为1。
  2. 芯片响应:芯片接收到命令后,首先验证请求中指定的密钥是否存在(在NTAG 424 DNA中,通常为出厂预置的OriginalityKey)。验证通过后,芯片会:
    • 生成一个16字节的随机数RndB(挑战B)。
    • 将内部命令计数器CmdCtr和加密计数器EncCtr重置为0。
    • 生成一个随机的事务标识符TI
    • RndB以明文形式发送给读写器。

第二阶段:读写器回应挑战并发出自己的挑战

  1. 读写器计算:读写器收到RndB后,自己也生成一个16字节的随机数RndA(挑战A)。
  2. 会话密钥生成:读写器利用RndARndB和双方共享的静态密钥Kx,按照LRP特有的算法(详见2.3节)计算出两个会话密钥:SesAuthENCKey(用于加密)和SesAuthMACKey(用于消息认证)。
  3. 构造响应:读写器使用SesAuthMACKey,对RndARndB的拼接数据计算一个完整的16字节MAC值。
  4. 发送响应:读写器将RndA和计算出的MAC值拼接,作为AuthenticateLRPFirst - Part2命令发送给芯片。

第三阶段:芯片验证并确认

  1. 芯片验证:芯片使用相同的静态密钥Kx和流程,生成相同的会话密钥SesAuthMACKey。然后用它验证收到的MAC值是否正确。
  2. 验证失败:如果MAC验证失败,芯片拒绝此次认证,会话终止。
  3. 验证成功:如果MAC验证成功,芯片则使用SesAuthENCKey加密一组数据,该数据包含:之前生成的TI、芯片自身的能力参数PDCap2、以及读写器发来的PCDCap2参数(会被调整或补零至6字节)。加密算法采用LRP模式。
  4. 最终响应:芯片计算加密后数据的MAC(使用SesAuthMACKey,输入为RndBRndA和加密数据),并将加密数据和此MAC一同发送给读写器。
  5. 读写器最终验证:读写器解密数据,验证TIPDCap2的正确性,并验证MAC。全部通过后,双向认证完成,LRP安全消息通道被激活。

实操心得:理解PCDCap2的作用AuthenticateLRPFirst中,PCDCap2参数的核心作用是协议版本协商。虽然目前芯片只检查其第1比特位以区分LRP模式,但保留此字段为未来协议升级提供了可能。在实际开发中,即使芯片文档未明确定义其他位的含义,也应严格按照规范格式填充该字段(例如设置为020000000000h),这是一个良好的兼容性习惯。

2.2.2 AuthenticateLRPNonFirst:会话内的密钥切换

此命令用于在已经建立LRP安全通道的会话中,认证另一个不同的应用密钥。其流程与AuthenticateLRPFirst高度相似,但有三点关键简化:

  1. 不交换能力参数:不再交换和验证PCDCap2PDCap2
  2. 不重置TI:事务标识符TI保持不变,延续当前会话。
  3. 不重置CmdCtr:命令计数器CmdCtr继续递增,保持会话连续性。

需要注意的是,EncCtr在此次认证中仍会被重置为0。如果认证的目标密钥是OriginalityKey,认证成功后,芯片会退出已认证状态。这个命令非常适用于多应用场景下,在同一物理会话中安全地切换访问不同文件所需的密钥。

2.3 LRP会话密钥生成机制剖析

这是LRP协议的精髓所在,也是其抵抗侧信道攻击能力的关键。LRP的会话密钥生成基于NIST SP 800-108标准的计数器模式密钥派生函数。

核心思想:不是直接使用静态密钥Kx进行加密,而是用它派生出一组新的、仅用于本次会话的密钥材料。这个派生过程引入了双方交换的随机数RndARndB,确保了每次会话的密钥都是唯一的。

生成步骤分解:

  1. 构建会话向量:首先,将RndARndB以特定方式交织、拼接,并加入固定的标签9669h,形成一个32字节的会话向量SV。具体格式为:SV = 00h || 01h || 00h || 80h || RndA[15::14] || (RndA[13::8] XOR RndB[15::10]) || RndB[9::0] || RndA[7::0] || 96h || 69h这个结构确保了随机数的充分混合,任何一位的变化都会导致最终生成的密钥完全不同。
  2. 生成主会话密钥材料:使用静态密钥Kx,通过LRP特定的generatePlaintextsgenerateUpdatedKeys函数,生成一组认证用明文认证用更新密钥。接着,计算SesAuthMasterKey = MACLRP(Kx; SV)。这个主密钥是后续所有会话密钥的种子。
  3. 派生最终会话密钥:使用上一步得到的SesAuthMasterKey,再次通过generatePlaintextsgenerateUpdatedKeys函数,生成:
    • SesAuthSPT: 一组16个16字节的明文。
    • SesAuthMACUpdateKeySesAuthENCUpdateKey: 两个更新密钥。
  4. 构成LRP密钥:最终的SesAuthMACKey并非一个128位的值,而是SesAuthSPT这组明文和SesAuthMACUpdateKey共同构成的一个集合SesAuthENCKey同理,由相同的SesAuthSPTSesAuthENCUpdateKey构成。

注意事项:LRP密钥的“使用”方式当后续通信使用SesAuthMACKey计算MAC或使用SesAuthENCKey加密时,芯片内部并不是简单地将这个“密钥”输入AES算法。而是会利用这组明文和更新密钥,在LRP原语内部动态地构造出每次加密操作实际使用的轮密钥,这个过程增加了侧信道分析的难度。对于开发者而言,在协议层面,你可以像使用普通AES密钥一样来调用这些会话密钥,但需要理解其底层实现的复杂性。

2.4 LRP安全消息的三种通信模式

认证成功后,芯片进入LRP已认证状态。此时,应用命令可以通过三种模式进行,与AES安全消息模式一一对应:

  1. 明文模式:此模式下,命令和数据均以明文传输,仅依赖物理层和认证状态进行访问控制。适用于不需要保密性,只需身份验证的场景。
  2. MAC模式:此模式下,命令数据本身是明文的,但会附加一个基于SesAuthMACKeyCmdCtrTI计算出的MAC值。接收方验证MAC以确保数据的完整性和来源真实性,防止命令被篡改。MAC计算使用的是LRP特定的MAC算法
  3. 全加密模式:这是安全级别最高的模式。命令数据先使用SesAuthENCKey进行LRP加密,然后再对加密后的数据、CmdCtrTI计算MAC。同时,芯片的响应数据也会被加密并附加MAC。这同时提供了机密性、完整性和认证。

命令计数器与TI的作用CmdCtr在每条成功验证的命令后递增,TI在会话中保持不变。它们被包含在MAC计算中,有效抵御了重放攻击。攻击者即使截获了一条有效的加密命令,也无法在另一个会话或同一会话的后续时刻重放它,因为CmdCtrTI会不匹配。

3. 安全动态消息机制实战指南

安全动态消息是一种革命性的设计,它允许芯片在未认证状态下,动态地输出经过加密和完整性保护的数据。这对于需要与标准NFC读写器(如智能手机)兼容的应用至关重要。

3.1 SDM的核心价值与风险认知

典型应用场景:假设一个NTAG 424 DNA标签贴在产品上,存储着一个包含产品唯一序列号和生产日期的NDEF消息。你希望:

  • 普通用户:用手机碰一下,能打开一个网页(例如产品主页)。
  • 授权人员:用专用设备或APP碰一下,能读取到加密的序列号和日期,用于防伪验证或物流追踪。

SDM完美支持此场景。NDEF文件中的数据部分可以被预留为“占位符”。当标签被读取时,芯片动态地将加密后的真实数据(如序列号)和计算出的MAC填充到这些占位符中,组成一个完整的NDEF消息。手机读取到的是一个合法的NDEF URI记录,其中包含加密数据作为URL参数,只有后端服务器用正确的密钥才能解密和验证。

必须理解的残余风险: 由于SDM允许任何人(包括攻击者)读取加密消息,因此存在重放攻击风险。攻击者可以读取一次有效的加密消息,然后反复将其播放给验证服务器。风险缓解策略

  1. 强制计数器校验:验证端必须维护每个标签的SDMReadCtr记录。拒绝已经使用过的或乱序的计数器值。这是最基本的要求。
  2. 结合时间窗口:要求标签必须定期(例如每天)被读取一次。如果服务器在预期时间内没有收到某个标签的更新读数,则将其标记为异常。
  3. 多次读取比对:要求对同一个标签进行多次读取。但这只能防御只读取了一次的攻击者,对于同步进行了多次读取的攻击者无效。

3.2 SDM核心组件配置详解

启用和配置SDM功能主要通过ChangeFileSettings命令对标准数据文件进行设置。

3.2.1 SDM读计数器

SDMReadCtr是一个24位的无符号整数,是SDM防重放的基石。

  • 递增规则:在未认证状态下,对启用SDM的文件首次成功执行ReadDataISOReadBinary命令时,计数器会先递增,再计算响应。后续对同一文件的连续读取不会增加计数器。一旦收到其他命令,下次读取时计数器又会递增。
  • 读取方式:可以通过GetFileCounters命令读取,也可以选择将其镜像到文件数据中(作为PICCData的一部分)。
  • 计数器限制:可以设置SDMReadCtrLimit。当计数器达到此限制时,未认证状态下的读取将被拒绝。这可以限制标签的总使用次数或对抗侧信道分析(建议与认证失败计数器TotFailCtrLimit配置一致)。
3.2.2 PICCData:元数据镜像

PICCData是芯片和文件的元数据,通常包含UID和/或SDMReadCtr。它可以被镜像到文件数据的指定位置。

  • 访问权限:通过SDMMetaRead访问权限位控制。如果设置为自由访问,PICCData以明文(ASCII编码)镜像。如果配置为需要某个应用密钥,则PICCData会被加密。
  • 配置偏移量UIDOffsetSDMReadCtrOffset分别指定明文UID和计数器的镜像位置。对于加密镜像,使用PICCDataOffset
  • 重要约束:镜像区域之间不能重叠。例如,UID的镜像区域不能与计数器镜像区域交叉。
3.2.3 SDMENCFileData:文件数据加密

这是SDM的核心功能,允许对文件的一部分数据进行加密。

  • 配置:通过SDMENCOffsetSDMENCLength指定文件内用于存放加密数据的“占位符”区域。
  • 一个关键细节:当使用ASCII编码时,SDMENCLength指定的长度是占位符的总长度。实际被加密的明文数据长度是SDMENCLength的一半。例如,如果你想加密32字节的原始数据,需要设置SDMENCLength为64字节。前32字节存放原始明文,后32字节在SDM读取时被忽略,由加密后的密文(ASCII编码后也为32字节)动态覆盖前32字节的位置。
  • 密钥:加密使用一个从SDMFileReadKey派生的会话密钥SesSDMFileReadENCKey
3.2.4 SDMMAC:完整性校验码

为确保动态输出数据的完整性,SDM支持计算消息认证码。

  • 强制性:如果SDMFileRead访问权限配置为需要应用密钥,则MAC计算是强制的。
  • 镜像:MAC值通过SDMMACOffset指定的位置镜像到文件中,且必须是ASCII编码(因此16字节输出)。
  • 计算范围SDMMACInputOffset定义了MAC计算的起始偏移。MAC计算的范围是从SDMMACInputOffsetSDMMACOffset-1动态文件数据。这意味着计算包含了之前动态插入的加密PICCData和加密文件数据,确保了整个动态输出块的完整性。
  • 密钥:MAC计算使用另一个从SDMFileReadKey派生的会话密钥SesSDMFileReadMACKey

3.3 SDM会话密钥生成与加密流程

SDM的会话密钥生成同样基于NIST SP 800-108,但输入上下文不同。

3.3.1 AES模式下的SDM密钥生成与加密
  1. 密钥生成
    • 构造两个会话向量SV1SV2。它们包含固定的标签(3CC3h用于加密,C33Ch用于MAC)、计数器、长度,以及UIDSDMReadCtr
    • 会话密钥由SDMFileReadKey对会话向量计算CMAC得到:SesSDMFileReadENCKey = MAC(SDMFileReadKey; SV1)SesSDMFileReadMACKey = MAC(SDMFileReadKey; SV2)
  2. PICCData加密:采用AES-CBC模式,IV为零向量。输入数据为PICCDataTagUIDSDMReadCtr和随机填充字节,填充至16字节的整数倍。
  3. 文件数据加密:采用AES-CBC模式。IV由SesSDMFileReadENCKey加密SDMReadCtr(后补零)得到。这确保了即使加密相同的数据,只要计数器不同,密文就不同。
3.3.2 LRP模式下的SDM密钥生成与加密
  1. 密钥生成
    • 构造会话向量SV,包含计数器、长度、UIDSDMReadCtr和固定标签1EE1h
    • 首先用SDMFileReadKey生成一组明文和更新密钥。
    • 计算主密钥:SesSDMFileReadMasterKey = MACLRP(SDMFileReadKey; SV)
    • 用主密钥生成最终的会话密钥材料:一组明文SesSDMFileReadSPT和两个更新密钥SesSDMFileReadMACUpdateKeySesSDMFileReadENCUpdateKey
    • 最终的会话密钥同样是由明文集合和更新密钥共同构成。
  2. PICCData加密:采用LRICB模式(一种基于LRP的操作模式)。密文前会附加一个8字节的随机数PICCRand。由于LRP密文和随机数的总长度更长,启用LRP模式后,为加密PICCData预留的占位符长度需要48字节(ASCII编码后)
  3. 文件数据加密:采用LRICB模式,计数器由SDMReadCtr和后补的三个零字节构成。

避坑指南:AES与LRP模式切换的陷阱使用SetConfiguration命令在AES和LRP模式之间切换时,会禁用安全动态消息功能。这是因为两种模式下的加密数据输出长度不同(尤其是PICCData)。如果你在AES模式下配置好了SDM并写入了NDEF文件,切换到LRP模式后,SDM将失效,读取到的将是占位符原始数据,而非动态加密数据。切换前务必重新规划文件布局并更新NDEF内容。

3.4 一个完整的SDM输出映射示例

假设我们有一个NDEF URI文件,内容为:http://www.nxp.com/index.html?p=<UID_PLACEHOLDER>&c=<CTR_PLACEHOLDER>&m=<MAC_PLACEHOLDER>

我们配置SDM如下:

  • UIDOffset指向<UID_PLACEHOLDER>,长度为14字节(7字节UID的ASCII编码)。
  • SDMReadCtrOffset指向<CTR_PLACEHOLDER>,长度为6字节。
  • SDMENCOffset指向文件数据中一段预留的、用于存放加密信息的位置,SDMENCLength设为64(计划加密32字节用户数据)。
  • SDMMACOffset指向<MAC_PLACEHOLDER>,长度为16字节。
  • SDMMACInputOffset设为URI字符串的起始位置。

当标准NFC手机读取此标签时:

  1. 芯片动态生成当前SDMReadCtr(例如000001h)。
  2. SesSDMFileReadENCKey加密指定的32字节用户数据。
  3. 将UID(如04E134FE9D7CD3)和计数器(000001)以明文或加密形式(取决于配置)填入对应占位符。
  4. 将加密后的用户数据(ASCII编码)填入文件数据占位符的前半部分。
  5. 计算从SDMMACInputOffset(URI开头)到SDMMACOffset(MAC占位符前)所有动态数据的MAC,并将结果(ASCII编码)填入MAC占位符。
  6. 手机最终读到一个完整的URL:http://www.nxp.com/index.html?p=04E134FE9D7CD3&c=000001&m=3AC7...(加密数据段)...&m=9F1D...(MAC值)...

后端服务器收到这个URL后,提取出UID、计数器、加密数据和MAC。利用UID和计数器,结合共享的SDMFileReadKey,可以派生出相同的会话密钥,从而解密数据并验证MAC,完成鉴权。

4. 开发实践:常见问题与深度排查

在实际集成NTAG 424 DNA的LRP和SDM功能时,开发者常会遇到一些棘手的问題。以下是一些典型问题及其排查思路。

4.1 认证失败问题排查

问题现象:发送AuthenticateLRPFirst命令后,芯片返回错误代码,如6A80(数据字段参数错误)或6982(安全状态不满足)。

排查清单:

  1. 密钥验证:首先确认命令中指定的密钥版本号是否正确,以及该密钥是否已在芯片中正确配置且未被锁定。
  2. PCDCap2参数:这是最容易被忽略的一点。确保PCDCap2参数的第1比特位(从LSB开始数)设置为1,以指示LRP模式。一个典型的正确值是020000000000h(二进制第1位为1)。许多开发库的默认值可能是全零,会导致认证直接被拒绝。
  3. 随机数生成:确保读写器生成的随机数RndA具有足够的熵(真随机或密码学安全的伪随机)。弱随机数会降低协议安全性。
  4. 会话密钥计算:LRP的会话密钥生成算法较为复杂,涉及特定的字节顺序和拼接规则。务必严格按照数据手册第9.2.7节的公式实现SV的构建,并正确调用generatePlaintextsgenerateUpdatedKeys函数(通常由芯片厂商提供的加密库实现)。建议将中间变量(如SVSesAuthMasterKey)与官方示例或已知正确的实现进行逐字节比对。
  5. MAC计算范围:确认在AuthenticateLRPFirst - Part2中,计算MAC的数据是RndARndB拼接,且顺序正确。MAC算法应使用完整的16字节输出,不进行截断。

4.2 SDM读取数据异常

问题现象:启用SDM后,用手机或读卡器读取标签,得到的NDEF数据是乱码、占位符未替换,或者URI格式错误。

排查步骤:

  1. 检查SDM配置:使用GetFileSettings命令,确认目标文件的SDMFileReadSDMMetaRead访问权限已正确设置为应用密钥(0h-4h),而非自由访问(Fh/Eh)。确认SDMENCOffsetSDMENCLengthSDMMACOffset等参数已正确设置且无重叠。
  2. 验证NDEF文件布局:这是最常见的问题。SDM的偏移量是相对于文件内部字节地址而言的。你必须确保在文件的这些偏移位置,确实预留了正确长度的占位符字节。例如,如果你设置SDMENCLength为64,那么从SDMENCOffset开始的64个字节,在原始的NDEF文件数据中必须是预留好的(例如全部填充为0x00)。可以使用ReadData命令(在认证后)直接读取文件原始内容进行核对。
  3. 区分AES与LRP模式:如果使用LRP模式,加密的PICCData总长度为48字节(8字节PICCRand + 40字节密文)。而在AES模式下,长度是32字节。你为PICCData预留的占位符长度必须与当前芯片的加密模式匹配。不匹配会导致数据截断或解析错误。
  4. 检查会话密钥派生:SDM的会话密钥依赖于UID和当前的SDMReadCtr。确保后端服务器在计算密钥时,使用的UID是芯片的实际7字节UID(二进制),SDMReadCtr是读取到的24位计数器值(注意字节序:在接口上是LSB first,但在ASCII镜像中是MSB first)。一个字节序错误就会导致密钥完全不同。
  5. 解密与验证顺序:后端处理流程应为:a) 从URI中提取密文和MAC。b) 使用UIDSDMReadCtr派生SesSDMFileReadMACKey。c)先验证MAC。如果MAC验证失败,说明数据在传输中被篡改,应直接拒绝,无需尝试解密。d) MAC验证通过后,再用派生的SesSDMFileReadENCKey解密数据。

4.3 性能与资源考量

问题:LRP和SDM的计算开销如何?对读写器或后端有什么要求?

分析与建议:

  • 芯片端:所有加解密和MAC计算均在NTAG 424 DNA芯片内部完成,对读写器是透明的。LRP计算比标准AES稍慢,但对于单次读卡操作(通常在100ms内完成),其差异可以忽略不计。
  • 读写器端:在AuthenticateLRPFirst过程中,读写器需要执行LRP会话密钥生成、加密和MAC计算。这需要读写器MCU具备一定的计算能力或集成加密协处理器。对于资源受限的嵌入式读写器,建议使用芯片厂商提供的、经过优化的加密库。
  • 后端服务器:服务器需要处理大量的并发验证请求。每个请求都需要进行密钥派生、解密和MAC验证。优化密钥缓存至关重要。对于每个标签(UID),其SDMFileReadKey是固定的。可以预计算或缓存由UIDSDMReadCtr派生的会话密钥,但需要注意SDMReadCtr是变化的。一种折中方案是缓存基于UID的中间计算结果,以加速每次验证时的完整密钥派生。

4.4 安全最佳实践

  1. 密钥管理OriginalityKey是芯片的根密钥,应仅在个人化阶段使用,用于发行应用密钥。应用密钥应每张卡不同,或按批次分组,避免“一钥通吃”。
  2. 启用计数器限制:为SDMReadCtr设置一个合理的上限(SDMReadCtrLimit),并与认证失败计数器联动。这能有效限制标签的使用寿命和对抗旁道攻击的尝试次数。
  3. 后端强制校验:后端系统必须严格校验SDMReadCtr的唯一性和递增性。维护一个每个UID对应的最新计数器值数据库。对于重复或更小的计数器值,坚决拒绝。
  4. 模式选择:如果应用环境面临物理攻击(如丢失的卡片可能被拆解分析),优先使用LRP模式。如果更注重兼容性和处理速度,且物理安全风险可控,AES模式是更简单可靠的选择。
  5. NDEF设计:在设计包含SDM数据的NDEF消息时,确保加密数据和MAC作为URL参数时,进行正确的URL编码,避免特殊字符(如&,=)破坏URL结构。

深入理解NTAG 424 DNA的LRP和SDM机制,能够让你在设计和实现NFC安全应用时,不仅知其然,更能知其所以然。从芯片级的认证握手到应用层的数据安全交换,这套体系提供了一套完整、灵活且强大的工具箱。在实际项目中,耐心对照数据手册调试每一步,尤其是密钥派生和数据偏移计算,是成功集成的关键。当你的设备在无需触碰任何“连接”按钮的情况下,就完成了一次安全的数据交换,那种体验正是这些底层安全技术所赋予的魔力。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 13:49:51

高效自动化微博图片下载器:无需登录一键批量保存高清原图

高效自动化微博图片下载器&#xff1a;无需登录一键批量保存高清原图 【免费下载链接】weiboPicDownloader Download weibo images without logging-in 项目地址: https://gitcode.com/gh_mirrors/we/weiboPicDownloader weiboPicDownloader 是一款基于Python开发的命令…

作者头像 李华
网站建设 2026/6/11 13:49:18

PCA9538A GPIO扩展器:I2C接口、中断功能与低功耗设计详解

1. 项目概述与核心价值在嵌入式硬件开发中&#xff0c;我们常常会遇到一个经典难题&#xff1a;主控微控制器&#xff08;MCU&#xff09;的通用输入输出&#xff08;GPIO&#xff09;引脚不够用了。无论是为了连接更多的传感器、驱动额外的LED阵列&#xff0c;还是增加几个功能…

作者头像 李华
网站建设 2026/6/11 13:48:53

G-Helper深度指南:三大场景下的华硕笔记本性能优化神器

G-Helper深度指南&#xff1a;三大场景下的华硕笔记本性能优化神器 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, E…

作者头像 李华
网站建设 2026/6/11 13:44:03

JAX核心原理:函数式编程与XLA编译驱动的高性能AI计算

1. 这不是又一个深度学习框架——JAX到底在解决什么真问题&#xff1f;如果你最近翻过NeurIPS、ICML或arXiv上顶会论文的附录&#xff0c;或者扫过DeepMind、Google Research、FAIR、Meta AI这些实验室开源项目的requirements.txt&#xff0c;你大概率已经见过jax和jaxlib这两个…

作者头像 李华
网站建设 2026/6/11 13:43:01

3步解决暗黑破坏神2存档编辑难题:d2s-editor免费开源工具使用指南

3步解决暗黑破坏神2存档编辑难题&#xff1a;d2s-editor免费开源工具使用指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾为《暗黑破坏神2》中重复刷装备而感到疲惫&#xff1f;是否想快速测试某个build却苦于装备收…

作者头像 李华