智能卡直接串行接口与个性化阶段

在本文中,将探讨如何与凤凰编程器接口进行交互,以便更深入地了解智能卡的个性化阶段。智能卡通常由不同的公司组装:一家公司制造树脂,另一家公司制造多晶硅芯片,第三家公司安装固件,第四家公司执行个性化(创建目录和文件结构)。通常,制造商使用一个历史性的ATR字节来指示卡片所处的阶段。具体来说,将在本实验室中使用一个智能卡固件,该固件在智能卡每次改变阶段时更新H4(第四个历史字节)。

智能卡的制造状态

首先,智能卡处于制造状态,并且在制作包含预个性化密钥的文件之前不会过渡到个性化状态;这是为了保护组装固件的公司和生成文件系统的公司之间的物流。

实验室设置

代码使用

应用程序使用Swing来绘制应用程序的图形部分。启动后,它创建一个专用于与RS-232串行端口通信的线程。串行通信的类被命名为CommSerie,并且SerialPort对象被抽象在puertoSerie属性中。设置RTS线为5V,然后为0V重置智能卡,并在大约40000个时钟周期后获取ATR。接下来,通过读取串行I/O缓冲区,以byte[]的形式获取ATR。ATR格式如下:

----------------------------------------------- | TS | T0 | TB | H1 || H2 | H3 | H4 | H5 | H6 | -----------------------------------------------

历史字节是H1..H6;在本实验室中,H4字节(第11-12个字符串)包含有关智能卡生命周期阶段的信息。这是读取它的代码:

public void enviaReset(){ // 在低电平开始时启动ATR puertoSerie.setRTS(true); puertoSerie.setRTS(false); }

读取后,将其与相应的状态进行比较,映射在'Constantes'接口中。

if (estado.equals(Constantes.ESTADO_FABRICACION)) sol = "制造阶段。无法个性化"; else if (estado.equals(Constantes.ESTADO_PREPERSONAL)) sol = "预个性化阶段。可以重用"; else if (estado.equals(Constantes.ESTADO_PERSONALZDA)) sol = "卡片已个性化。无法重用"; else if (estado.equals(Constantes.ESTADO_OFFLINE)) sol = "请给读卡器通电并插入卡片"; else sol = "卡片处于未知阶段。无法重用";
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485