一、卡片物理层与电气特性:接触式与非接触式的底层逻辑

各位同学,咱们今天聊点硬核的。卡片物理层,说白了就是卡片和终端怎么“握手”的。我做了这么多年逆向,发现很多人一上来就扎进APDU指令里,结果连卡片为啥没响应都搞不清楚。嗯,这章咱们就把地基打牢。

1.1 接触式卡片触点定义

接触式IC卡,大家见得最多的就是银行卡。卡片上那个金色芯片,有8个触点,但实际用的只有6个。我当年第一次拆卡时,还拿万用表一个个量过,生怕搞错了。

触点编号 ISO 7816-2 名称 功能说明
C1 VCC 供电电源,通常为5V或3V
C2 RST 复位信号,低电平有效
C3 CLK 时钟信号,频率通常为1-5MHz
C4 RFU 保留未用,别碰它
C5 GND 地线,参考电位
C6 VPP 编程电压,现在基本不用了
C7 I/O 数据输入输出,半双工
C8 RFU 保留未用
避坑指南: 我曾经遇到过一台POS机,读卡时总报错。查了半天,发现是C4触点被焊锡短路了。记住,RFU引脚千万别乱接,这是厂商留的后手。

1.2 非接触式射频接口

非接触式卡,就是咱们现在用的闪付、Apple Pay那种。它用的是射频识别技术,工作频率13.56MHz。你想想看,卡片没电池,怎么工作的?

其实原理很简单:读卡器发射射频场,卡片里的线圈感应到电磁波,整流后给芯片供电。同时,数据通过负载调制的方式传回来。我当年做EMVCo认证测试时,最头疼的就是射频场强不稳定。

关键参数:
  • 工作频率:13.56 MHz ± 7 kHz
  • 通信距离:通常 0-10 cm
  • 数据传输速率:106 kbps、212 kbps、424 kbps
  • 调制方式:ASK 100% 或 ASK 10%

这里有个坑:非接触式通信的时序要求非常严格。我记得有一次,一个卡片在距离读卡器5cm时正常,但贴上去反而读不到。后来发现是负载调制过强,把读卡器接收端给饱和了。

1.3 卡片生命周期状态机

卡片不是一插电就能用的。它有自己的生命周期,从出生到报废,每个阶段都有严格的状态转换。我习惯用状态机来理解这个过程,清晰明了。

空闲状态 激活状态 就绪状态 传输状态 暂停状态 上电复位 ATR完成 收到命令 响应完成 等待时间超时 恢复信号 去激活 冷复位

这张图我画了好几次才满意。你看,卡片上电后先进入空闲状态,然后复位进入激活状态。ATR(Answer To Reset)完成后进入就绪状态,这时候才能收发命令。传输状态就是正在处理APDU。如果长时间没响应,会进入暂停状态。

注意: 我曾经见过一个案例,卡片在传输状态时突然掉电,结果状态机卡死了。下次上电时,卡片直接不响应。这就是典型的“状态不一致”问题。所以,正规的卡片都会在掉电时保存状态。

1.4 ATR/ATS 解析

ATR是接触式卡片的复位应答,ATS是非接触式的。说白了,就是卡片告诉终端:“我是谁,我能干什么”。

ATR的格式在ISO 7816-3里定义得很清楚。我当年为了解析一个诡异的ATR,翻了三天标准文档。后来发现,其实就是个字节顺序搞反了。

// 一个典型的ATR示例
// 3B 68 00 00 00 73 C8 40 12 00 90 00
// 解析:
// 3B - 初始字符,表示直接约定
// 68 - 格式字符,TA1存在,TD1存在
// 00 - TA1,无意义
// 00 - TB1,无意义
// 00 - TC1,无意义
// 73 - TD1,TA2存在,TD2存在
// C8 - TA2,特定模式
// 40 - TD2,TA3存在
// 12 - TA3,时钟频率
// 00 - 历史字节开始
// 90 00 - 历史字节结束

ATS呢,稍微复杂点。它包含在RATS命令的响应里。我习惯先看ATS的格式字节,它能告诉我卡片支持哪些协议。

ATS字节 含义 我的经验
TL ATS总长度 别超过20字节,否则读卡器可能不认
TO 格式字节 bit0=1表示TA1存在,bit1=1表示TB1存在
TA1 传输速率相关 0x80表示106kbps,0x90表示212kbps
TB1 帧等待时间 这个值设大了,交易会变慢
TC1 启动帧保护时间 设小了容易丢数据
小技巧: 我解析ATR/ATS时,喜欢用十六进制编辑器先看一眼。如果看到连续的0x00或0xFF,大概率是卡片没初始化好。有一次,我拿到一张测试卡,ATS全是0xFF,结果发现是射频场没调好。

嗯,说到这,我想起一个经典案例。有一次做互操作性测试,一张卡在A厂家的读卡器上正常,在B厂家的读卡器上就报错。最后发现,是ATS里的FWI(帧等待时间指数)设得太小,B厂家的读卡器处理速度慢,导致超时。所以,ATS的参数设置,一定要考虑兼容性。

好了,物理层的东西就聊到这。记住一句话:物理层搞不定,上层协议再漂亮也是白搭。下一章咱们聊APDU指令,那才是真正开始干活的地方。


专注资料整理