NTag424 DNA设置CommMode.Full后ReadData返回7E错误求助
NTag424 DNA CommMode.Full下ReadData返回7Eh(Command size not allowed)问题分析及解决
问题梳理
- 已成功将file_02的CommMode改为Full,读写改权限设为Key0,
GetFileSettings返回00 03 00 00 00 01 00确认配置生效 - Full模式下
WriteData可正常执行,但ReadData无论使用哪种CommMode均返回7Eh错误码 - 切回Plain模式后
ReadData恢复正常
问题原因分析
从你提供的APDU示例来看,核心问题出在Full模式下ReadData命令的APDU数据结构不符合规范:
APDU Buffer: 90AD00000F02000000FF0000CC7137F33032F9F200
拆解后的数据字段为:02(FileID) + 000000(Offset) + FF(Length) + 0000(CmdCtr) + CC7137F33032F9F2(MAC)
而你标注的当前会话CmdCtr为1,这意味着数据段中的CmdCtr应该是0001而非0000。
在CommMode.Full模式下,所有受权限保护的命令必须携带与当前会话一致的CmdCtr,并基于正确的CmdCtr计算MAC。CmdCtr不匹配会导致命令格式验证失败,触发7Eh(Command size not allowed)错误——尽管表面上是长度问题,实际是会话参数不匹配导致的格式校验失败。
另外需要确认:Full模式下ReadData的响应是AES加密的,若读取长度为255字节,加密后会按AES块大小(16字节)对齐为256字节,Le字段设为00是正确的(表示接收256字节),这部分无问题。
解决办法
- 修正CmdCtr字段:将APDU数据段中的
0000替换为当前会话的CmdCtr值0001 - 重新计算MAC:使用正确的
CmdCtr、命令参数(FileID、Offset、Length)、会话密钥KSesAuthMAC重新生成8字节MAC - 组装正确的APDU:修正后的APDU数据段应为
02 00 00 00 FF 00 01 [新MAC值],Lc保持0F,Le保持00 - 验证会话状态:确保执行ReadData前已通过Key0的双向认证,且会话未过期
修正后的APDU示例结构
90AD00000F02000000FF0001XXXXXXXXXXXXXXXX00
(注:XXXXXXXXXXXXXXXX为重新计算的8字节MAC值)
内容的提问来源于stack exchange,提问作者Yasser Daheek
相关产品推荐
相关产品推荐

