2362675_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2362675_zh-CN

2362675_zh-CN

ICODE SLIX2 独创性签名

恩智浦社区你好,
我正在使用 RC663 ISO 15693 阅读器
在嵌入式 MCU(GD32F303CC、ARM Cortex-M4)上实现 AN11350 中描述的 ICODE SLIX2 原创性签名验证。
已成功从标签中读取签名(通过
命令 0xBD 为 32 字节),但是 ECDSA 验证总是失败。
如能说明正确的哈希值/信息格式,我将不胜感激。
─────────────────
硬件 & 软件
─────────────────── ──
读者:恩智浦 RC663
标签:恩智浦 ICODE SLIX2 (SL2S2602)
曲线:secp128r1(由 32 字节签名 = r|s 确认,每个 16
字节)ECC 库:easy-ecc (https://github.com/jestan/easy-ecc)
使用 ECC_CURVE = secp128r1 (ECC_BYTES = 16)
MCU 编译:GD32F303CC(ARM Cortex-M4,无操作系统)
───────────────
READ_SIGNATURE 命令 (0xBD)
──────────────
请求帧(11 字节,ISO 15693 寻址模式):
FLAGS = 0x22 (高数据速率 | 地址标志)
CMD = 0xBD (READ_SIGNATURE,恩智浦自定义命令)
MFG_CODE = 0x04 (恩智浦集成电路制造商代码 — 0xA0–0xDF 范围必需)
UID = 8 字节(已寻址)
响应(33 字节):
FLAGS = 0x00 (无错误)
SIG = 32 字节
通过与
对相同标签的 proxmark3 扫描进行比较,32 字节签名和 UID 已确认正确。
──────────────────公钥 ──────────────────
──
33 字节
公钥:048878a2a2a2d3eec3eec336b4f261a082bd71f9be11c4e2e2e896648b32efa59cea6e59f0 使用 seca6e59f0 p128r1 压缩公钥(17 字节):0x02、0x88、0x78、0xA2、0xA2、0xD3、0xEE、0xC3、0x36、0xB4、0xF2、0x61、0xA0、0x82、0xBD、0x71(前缀 = 0x02 因为 y 坐标的 LS
B 是奇数)) 标签供应商已确认公钥正确无误。



──────────────────────── RC663 缓冲区中的 UID 字节顺序 ───────────────────────────────────── ISO 15693 首先传输 UID
LSB。

RC663 按接收顺序填充接收缓冲区,因此:
UID [0] = 收到的第一个字节 = 64 位 UID 的 LSB UID [7] = 收到的最后一个字节 = 0xE0(MSB,固定 ISO 15693 前缀)
示例标签
UID(显示/大端顺序):E0 04 01 A2 B3 C4 D5 E6
缓冲区内容:UID [] = {E6、D5、C5、C6 4、B3、A2、01、04、E0} ───────────────────────────────────────────────────────────────────────────



───────────────────────
AN11350 表示签名是通过 UID 计算的,但没有明确规定:1.

用作 ECDSA 消息的 UID 的字节顺序
(大端显示顺序与从标签收到的 LSB 优先顺序对比)2。
如何使用 8 字节 UID 进行零填充以填充完整的 128 位哈希字段
我在下面尝试了所有四种合理的组合 — 全部返回验证
失败:
选项 A:高 8 字节哈希中的 UID 原始(LSB-First),低 8 字节哈
希 = {UID [0],UID [1],...,UID [7],0,0,0,0,0,0,0,0,0,0,0,0}
选项 B:高 8 字节中的 UID 反向(大端),低 8 字节
哈希值为零 = {UID [7],UID [6],...,UID [0],0,0,0,0,0,0,0}
选项 C:高 8 字节为零,低 8 字节哈希中的 UID 原始(LSB-first)= {0,0, 0, 0, 0, 0
, 0, 0, UID [0], UID [1],..., UID [7]} 选项
高 8 字节为零,低 8 字节哈希值中的 UID 反向(大端)= {0、0、0、0、0、0、0、0、0、0、UID [7]、UID [6]、...、UID [0]}
在 easy-ecc 中,ecc_bytes2native () 将 16 字节
哈希缓冲区视为大端
128 位整数:
p_native [1](高 64 位字)← 哈希 [0.. 7] p_native [0](低 64 位字)← 哈希 [8.. 15]
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
sig); /* 0 = 失败,1 = 通过 */ ─────────────────────────────────────────



Tags (1)
No ratings
Version history
Last update:
‎05-10-2026 02:47 AM
Updated by: