扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

ISO/IEC 7816-4 APDU 在 MIFARE DESFire EV1上的实操实现

2小时前
183
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

MIFARE DESFire EV1 智能卡通过 ISO/IEC 7816-4 标准 APDU(应用协议数据单元)实现标准化通信,核心是将原生 DESFire 命令包装为 7816-4 兼容格式,支持文件选择、读写、认证等关键操作。本文基于 RFID Discover V5.0.0 工具,详解从应用创建、协议激活到数据读写的完整流程,涵盖 APDU 格式规范、操作步骤与避坑要点,适用于智能卡门禁、支付、溯源等 ISO 兼容场景。

1. 核心基础:APDU 格式与支持命令集

1.1 原生 DESFire 命令的 7816-4 包装格式(Case 4 APDU)

MIFARE DESFire EV1 的原生命令需按以下结构包装,确保符合 ISO 7816-4 规范:
字段 字节数 取值 / 说明
CLA 1 固定为 0x90
INS 1 MIFARE DESFire 原生命令码
P1/P2 各 1 字节 固定为 0x00
LC 1 包装数据的长度(原生命令参数长度)
Data 可变 MIFARE DESFire 命令参数
LE 1 固定为 0x00(允许任意长度响应,不可省略)
  • 关键限制:包装后的总命令长度不超过 55 字节,需严格遵守避免通信失败。

1.2 支持的 ISO 7816-4 核心命令集

按 ISO/IEC 7816-4 条款 6 要求,MIFARE DESFire EV1 支持以下关键命令:
  • 0xA4:SELECT FILE(选择文件)
  • 0xB0:READ BINARY(读取二进制数据)
  • 0xD6:UPDATE BINARY(更新二进制数据)
  • 0xB2:READ RECORDS(读取记录)
  • 0xE2:APPEND RECORD(追加记录)
  • 0x84:GET CHALLENGE(获取挑战码)
  • 0x88:INTERNAL AUTHENTICATE(内部认证)
  • 0x82:EXTERNAL AUTHENTICATE(外部认证)

1.3 响应包装规则

命令执行后的响应按 ISO 7816-4 格式返回,核心为状态码字段SW1(状态字节 1),成功响应通常伴随9000状态码(表示操作成功)。

2. 关键前提:通信模式约定

  • 身份验证后的第一个命令决定通信模式:若为 ISO 7816-4 格式 APDU,则后续所有命令必须按相同格式包装;
  • 成功建立 ISO/IEC 14443-4 通信后,首个 APDU 需为 ISO SELECT FILE 命令,否则通信无法正常启动。

3. 完整实现流程(RFID Discover V5.0.0 实操)

步骤 1:创建 ISO 兼容应用与文件

(1)创建应用并选择 AID

  1. 打开 RFID Discover,连接读卡器(如 Pegoda3),选中卡片;
  2. 操作路径:Create Application → 配置参数:
    • App ID:示例 010203(自定义需符合格式);
    • ISO Compliance:勾选 “Allow ISO File IDs within Application”;
    • 密钥配置:密钥数量设为 01,加密模式选 3K3DES/AES(示例用 3K3DES);
    • 访问权限:按需求配置(如允许无主密钥目录访问);
  3. 点击Create App,完成后通过Select App选中该应用(AID=010203)。

(2)创建 ISO 文件并选择 FID

  1. 操作路径:Create File → 配置 ISO 文件参数:
    • File Type:选择 Standard Data File(标准数据文件);
    • ISO File ID:设为 0001(需与后续选择命令匹配);
    • File Size:示例 640000(按实际需求设置);
    • 访问权限:Read Access=00、Write Access=80、Change Access=80(自定义需与密钥权限匹配);
  2. 点击Create File,通过Get ISO File IDs验证文件创建成功,再通过Select EF under Current DF选中文件(FID=0001)。

步骤 2:激活 ISO/IEC 14443-4 协议第四层

  • 操作逻辑:通过读卡器发送激活指令,建立 Layer 4 通信链路;
  • 关键日志:发送指令后,卡片返回 ATS(Answer To Select)数据(示例:7577810280),日志显示 “STATUS SUCCESS” 即激活成功。

步骤 3:执行 ISO SELECT FILE 命令(核心步骤)

  • 前提:应用中已创建 ISO File ID(示例 0001);
  • 发送 APDU 指令:00A4000002010000(解析:CLA=00、INS=A4、P1/P2=00、LC=02、Data=0100(ISO File ID=0001)、LE=00);
  • 成功标志:卡片返回9000状态码,日志显示 “phalMfdf_isoSelectFile - LEAVE-STATUS SUCCESS”。

步骤 4:ISO 文件认证(密钥类型匹配)

  • 核心要求:认证密钥类型必须与创建文件时选择的加密模式一致(示例为 3K3DES);
  • 操作流程:
    1. 发送挑战码请求指令,获取卡片返回的挑战数据;
    2. 按 3K3DES 算法计算响应数据,通过INTERNAL AUTHENTICATE(0x88)命令发送至卡片;
    3. 成功标志:日志显示 “AUTHENTICATED”,状态码返回9000

步骤 5:数据读写操作

(1)读取数据(READ BINARY 命令)

  • 发送 APDU:按包装格式构造指令,INS=0xB0,Data 字段指定读取偏移量和长度;
  • 成功标志:卡片返回指定长度的数据,状态码9000

(2)写入数据(UPDATE BINARY 命令)

  • 发送 APDU:INS=0xD6,Data 字段包含写入偏移量和待写入数据;
  • 成功标志:日志显示 “UPDATE BINARY SUCCESS”,状态码9000

4. 关键避坑事项

  1. LE 字节不可省略:必须固定为 0x00,使用其他值会导致命令执行失败;
  2. 命令长度限制:包装后总长度≤55 字节,超长需拆分执行;
  3. 密钥类型匹配:认证密钥的加密模式(3K3DES/AES)必须与文件创建时一致,否则认证失败;
  4. 通信模式一致性:身份验证后首个命令为 ISO 格式时,后续需全程使用包装 APDU,不可混合原生命令;
  5. 权限配置:创建文件时的访问权限需与认证密钥权限匹配,否则无法执行读写操作。
ISO/IEC 7816-4 在 MIFARE DESFire EV1 上的实现核心是 “命令包装 + 流程合规”:通过固定格式将原生 DESFire 命令转为 ISO 兼容 APDU,严格遵循协议层激活、文件选择、认证、读写的流程顺序,同时注意密钥匹配、长度限制等细节。该实现使 MIFARE DESFire EV1 能无缝适配 ISO 标准设备,拓宽智能卡应用的兼容性场景。

相关推荐