智能卡操作(非接触CPU卡又称智能卡) 总结

news/2024/11/17 23:30:52/

    1-数据传输格式和初始化

    对于刚接触智能卡的工程师来说,在阅读7816-3规范的时候,常常被其中的一些术语迷惑,读起来会觉得有些别扭。尤其是在看到复位应答中的F和D设置以及对应的etu的时候,会觉得有些复杂和难以理解。

    其实从本质上说7816-3定义了智能卡(这里指的是接触式CPU卡,对于逻辑加密卡以及非接触IC卡不在此列)和读写设备之间的通讯协议,说白了就是数据位传输的格式

    如果学习或者接触过单片机,那么对于RS232一定不会陌生,它属于异步串行通讯接口(UART),通过RxD、TxD进行数据的收发,RS232曾经是PC机的标配,但是目前在多数PC上基本不复存在了(当然还可以通过USB-232转换器来扩展)。

   接下来我们看看7816-3定义的通讯协议,其实基本上可以说是RS232的翻版并在此基础上进行的改进,7816中只有一个IO同时兼具数据收发的功能,这点和RS232用RxD和TxD进行数据收发是不同的。在RS232中我们有9600波特率、起始位、奇偶校验位、停止位这些概念,而在7816-3中都完整地保留了下来,只不过7816-3中引入了etu,没有使用bps(其实1etu=1 / 1bps),但是基本原理是一致的。etu的定义可以更加精确地描述每个数据位在传输过程中收发双方的职责和角色转换。

    根据定义在智能卡上电复位的时候 1 etu = 372 / f(372=F/D,下一段讲到) ,其中f = 读写设备通过CLK管脚提供给智能卡的时钟频率,通常在1--5 MHz(自己分频的时候注意范围)之间。etu的单位是时间单位秒(毫秒、微秒),等同于传输每个数据位所需的时间。对其取倒数得出来的就是每秒传输的数据位,也就是bps。我们取f = 3.579545 MHz,用3579545除以372结果等于9622.4约为9600 bps。

    通用的etu计算公式: 1 etu = (F / D) * (1 / f) ,F和D的值根据7816-3规范中的约定来进行设置。对于上电复位时的取值 F = 372,D = 1即作为默认值Fd和Dd。如果智能卡支持其他速率则需要在ATR中的TA1来指出其他的F和D的值,比如设定F=372,可以把D分别设定为2/4,那么智能卡能支持的通讯速率可以分别为19200/38400。

由此可见,这些参数的选择都是为了能够更好地利用当时既有的标准和技术,要知道7816-3在1989年的时候就已经制定了,按照当时的主流PC机配置把串口速率设为9600,用一个232接口芯片(比如Max232)再加上3.579545MHz的晶振,再配合几片74系列的门电路外加5伏的直流电源和几个阻容器件,这就是最基本的RS232串口读卡器了(当然这是指上个世纪80年代的时候,对于现在的智能卡芯片设计技术而言实现任意分频的控制都不是问题了,如下笔者操作的就是一个实际的例子)。

7816-3定义了智能卡和读写设备之间的通讯协议,说白了就是数据位传输的格式。ISO 7816-4规范有定义APDU(= ApplicationProtocol data unit, 是智能卡与智能卡读卡器之间传送的信息单元, (给智能卡发送的命令)指令)

2-APDU常用指令

APDU格式:

CLA   INS P1  P2 Lc  Data Le

其中:

CLA为指令类别;INS为指令码;P1、P2为参数;Lc为Data的长度;Le为希望响应时回答的数据字节数,0表最大可能长度。

举例子:

00A4040000:发送一个空的选择命令,获取卡和主安全域的信息。                                                                                         00A40400是select选择对应的CLAINS,P1和P2,后面2位是发送的文件名的长度。此命令使用文件名或应用标示符来选择IC卡内DF(专用文件)或EF(基本文件)。

eg-1:80此命令创建卡片文件系统,

80CA9F7F00:获取CPLC信息。

8050XXXXX:  双向认证并建立会话密钥。

eg-2:非接触CPU卡(智能卡)应该支持以下与应用无关的常用指令命令:

比如在PSAM卡上的要求也是按照apdu协议的操作来 定制协议的:

比如,SIM卡使用的APDU指令操作:

一个APDU可以是一个命令,也可以是命令的响应。

命令APDU的一般格式: CLA     INS     P1      P2      P3          Data

响应APDU的一般格式: Data                                    SW1     SW2

意义如下:

输入:CLA: 是指令类型,GSM应用为0xA0。INS:每个命令的指令编码,P1,P2,P3:指令参数。0xFF是个无效值,P3给出了数据单元的长度。对于传送命令,当SIM    流出数据时,P3=0表示数据的长度为256,而SIM  流入数据时P3=0表  示没有数据。

响应:SW1,SW2:命令结果是否成功的状态。

响应指令的5种情况:

  情况1:没有输入/没有输出 CLA  INS   P1 P2 P3(lgth=0x00) ==>SW1=0x90    SW2=0x00

  情况2:没有输入/输出长度已知 CLA  INS  P1 P2 P3(长度值lgth)  DATA(长度为lgth) ==>SW1=0x90     SW2=0x00

  情况3:没有输入/输出长度未知 CLA     INS     P1 P2 P3(lgth=0)==>SW1=0x9F    SW2=lgth1

GET RESPONSE CLA     INS         P1 P2 P3(lgth2)  DATA(长度leth1<=leth2) ==> SW1=0x90     SW2=0x00

  情况4:有输入/没有输出 CLA      INS         P1 P2 P3(lgth) DATA(长度为lgth) ==>SW1=0x90    SW2=0

  情况5:有输入/输出长度未知或已知 CLA     INS         P1 P2 P3(lgth) DATA(长度为lgth)==>SW1=0x9F    SW2=lgth1

GET RESPONSE CLA     INS         P1 P2 P3(lgth2)  DATA(长度lgth2<=lgth1)==>SW1=0x90    SW2=0x00

参考:https://www.cnblogs.com/hbtmwangjin/articles/8760199.html

 


http://www.ppmy.cn/news/527417.html

相关文章

java智能卡接口_java – 尝试使用智能卡I / O API读取和写入智能卡的字符串

我正在使用ACS AET65读卡器尝试将字符串存储到智能卡中,然后将其读回.我正在使用智能卡IO API,我可以获得终端并与卡连接.但是,我一直在阅读ISO 7816规范,我真的迷路了. 我需要做的就是给卡写一个3K字符串,然后再读回来.而已.根据我的研究,看起来这些卡应该安装了applet,但我确…

Arduino与RC522读卡测试代码

RC522与Arduino读卡代码 做了Arduino作品集4年多了&#xff0c;让我印象比较深刻的是每当有人用RC522的时候都会遇到同样一个问题&#xff0c;就是为什么我的卡读取不了卡号&#xff0c;我明明是用网上的教程啊&#xff1f;在这里我声明一点&#xff0c;网上的教程不一定是正确…

分享一组开关按钮

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>豆子开关</title><style>* {margin: 0;padding: 0;box-sizing: border-box;-webkit-tap-hi…

Endnote中字体大小怎么改变?

Endnote中看文献字体太小&#xff0c;可以通过以下步骤来放大 1.找到上方工具栏“Edit”下的“Preference” 2.如下图&#xff0c;在“Display Fonts”中点击右侧的“Change Font”就可以改字体啦&#xff01; PS&#xff1a;“Library”只是改变参考文献字体大小&#xff1b;“…

网页转pdf乱码问题,楷体部分出乱码

网页转PDF&#xff0c;一直正常使用&#xff0c;今天突然乱码。。。 以为是网页编码问题。。。最后看了一下处理的后的网页&#xff0c;发现没问题。。。 最后发现是wkhtmltopdf的问题&#xff0c;无法解码楷体网页 删除楷体style后&#xff0c;转化正常 记录一下

psychopy设置中文显示字体 楷体、宋体、微软雅黑

2019独角兽企业重金招聘Python工程师标准>>> 3个要点&#xff1a; 1、使用pygame引擎绘制文本 2、使用字体文件名作为标识&#xff0c;而不是字体名。如msya&#xff1a;微软雅黑&#xff0c;simkai&#xff1a;楷体&#xff0c;simsun&#xff1a;宋体。 3、把字体…

如何在线查看.woff, .ttf 文件里有什么图标

文章目录 如何解决使用步骤 如何解决 使用 百度字体编辑器 就可以在线查看.woff, .ttf 文件里有什么图标&#xff0c;支持对图标进行下载和编辑。这个网站目前是免费使用滴&#xff01; 使用步骤 第一步&#xff0c;打开任意一个.ttf 、.woff 文件&#xff0c;就可以看到文件…

字蛛(font-spider)教学——ttf/otf字体文件压缩

ttf/otf字体文件压缩 第一步、全局安装font-spider第二步、准备好文件夹第三步、在html和css文件中写入代码第四步、压缩 注意&#xff1a; 在压缩前&#xff0c;先获取完整的、包含大多数文字的字体文件 在使用font-spider前&#xff0c;确保自己的电脑已安装node环境 第一步、…