基于Android HCE模拟Mifare EV2卡非APDU指令适配问题咨询
基于APDU协议可实现的DESfire EV2原生指令覆盖度
DESfire原生指令本身不符合ISO 7816-4 APDU结构,安卓系统自带的HCE服务默认仅识别符合ISO 7816-4规范的帧,因此原生指令无法直接触发processApduCommand()回调。
目前行业通用的ISO 7816-4封装方案(Wrapping)可以覆盖90%以上的DESfire EV2原生指令功能:
- 基础操作类:选卡、应用创建/删除、文件创建/删除、明文读写、权限配置等常规业务指令,都可以通过自定义APDU结构完整映射,无功能损失
- 安全操作类:三重DES/AES认证、会话密钥派生、MAC校验、加密传输等安全相关指令,同样可以通过封装实现全部功能,仅需HCE侧按DESfire规范处理APDU的payload字段即可
- 不可覆盖的功能仅占不到10%,主要是和底层射频传输绑定的特殊指令,比如原生卡唤醒、低功耗模式触发、非标准帧长的超时控制等,这类功能大多仅用于工业特殊场景,民用场景几乎不会涉及。
后续开发推进方案
- 首先调整PN532侧的指令逻辑,将所有DESfire原生指令封装为符合ISO 7816-4规范的APDU帧。通用封装规则为:CLA固定为
0x90,INS为原生指令操作码,P1、P2填0x00,Lc为原生指令payload长度,数据段填充原生指令完整payload,Le填0x00表示期望返回最大长度。封装完成后安卓HCE的processApduCommand()即可正常接收指令。 - 其次在HCE服务中实现解封装逻辑,收到APDU后提取payload字段,按照DESfire EV2原生指令规范处理,处理完成后将返回结果封装为APDU响应帧回传给PN532,PN532侧做对应解封装即可得到原生指令响应。
- 调试阶段优先跑通选卡、明文读文件的最简链路,再逐步验证认证、加密读写等复杂功能,最后测试业务所需的特定功能即可。
- 如果你当前场景强制要求使用原生DESfire指令、不允许做封装,只能放弃系统自带HCE服务,改用支持底层射频帧捕获的自定义NFC栈方案,这类方案需要root设备或定制ROM,开发成本会大幅提升。
内容的提问来源于stack exchange,提问作者melihozcann
相关产品推荐
相关产品推荐

