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
- 打开 RFID Discover,连接读卡器(如 Pegoda3),选中卡片;
- 操作路径:
Create Application→ 配置参数:- App ID:示例 010203(自定义需符合格式);
- ISO Compliance:勾选 “Allow ISO File IDs within Application”;
- 密钥配置:密钥数量设为 01,加密模式选 3K3DES/AES(示例用 3K3DES);
- 访问权限:按需求配置(如允许无主密钥目录访问);
- 点击
Create App,完成后通过Select App选中该应用(AID=010203)。
(2)创建 ISO 文件并选择 FID
- 操作路径:
Create File→ 配置 ISO 文件参数:- File Type:选择 Standard Data File(标准数据文件);
- ISO File ID:设为 0001(需与后续选择命令匹配);
- File Size:示例 640000(按实际需求设置);
- 访问权限:Read Access=00、Write Access=80、Change Access=80(自定义需与密钥权限匹配);
- 点击
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);
- 操作流程:
- 发送挑战码请求指令,获取卡片返回的挑战数据;
- 按 3K3DES 算法计算响应数据,通过
INTERNAL AUTHENTICATE(0x88)命令发送至卡片; - 成功标志:日志显示 “AUTHENTICATED”,状态码返回
9000。
步骤 5:数据读写操作
(1)读取数据(READ BINARY 命令)
- 发送 APDU:按包装格式构造指令,INS=0xB0,Data 字段指定读取偏移量和长度;
- 成功标志:卡片返回指定长度的数据,状态码
9000。
(2)写入数据(UPDATE BINARY 命令)
- 发送 APDU:INS=0xD6,Data 字段包含写入偏移量和待写入数据;
- 成功标志:日志显示 “UPDATE BINARY SUCCESS”,状态码
9000。
4. 关键避坑事项
- LE 字节不可省略:必须固定为 0x00,使用其他值会导致命令执行失败;
- 命令长度限制:包装后总长度≤55 字节,超长需拆分执行;
- 密钥类型匹配:认证密钥的加密模式(3K3DES/AES)必须与文件创建时一致,否则认证失败;
- 通信模式一致性:身份验证后首个命令为 ISO 格式时,后续需全程使用包装 APDU,不可混合原生命令;
- 权限配置:创建文件时的访问权限需与认证密钥权限匹配,否则无法执行读写操作。
ISO/IEC 7816-4 在 MIFARE DESFire EV1 上的实现核心是 “命令包装 + 流程合规”:通过固定格式将原生 DESFire 命令转为 ISO 兼容 APDU,严格遵循协议层激活、文件选择、认证、读写的流程顺序,同时注意密钥匹配、长度限制等细节。该实现使 MIFARE DESFire EV1 能无缝适配 ISO 标准设备,拓宽智能卡应用的兼容性场景。
阅读全文
183