当前位置: 首页>編程日記>正文

IC卡(智能卡)APDU通讯总结

IC卡(智能卡)APDU通讯总结

前言

总所周知,IC卡(智能卡)在身份验证、公共交通、门禁系统、银行、保险等领域随处可见。本文介绍IC卡读写器涉及一些简单概念和IC卡APDU通讯,概念并不做过多深入,了解即可,着重应用,少走弯路。

IC卡基本概念和相关知识

IC卡 (Integrated Circuit Card,集成电路卡),也称智能卡(Smart card)、智慧卡(Intelligent card)、微电路卡(Microcircuit card)或微芯片卡等。它是将一个微电子芯片嵌入符合ISO 7816标准的卡基中,做成卡片形式。IC卡与读写器之间的通讯方式可以是接触式,也可以是非接触式。由于IC卡具有体积小便于携带、存储容量大、可靠性高、使用寿命长、保密性强安全性高等特点,IC卡的概念是在20世纪70年代初提出来的,法国的布尔公司于1976年首先创造出了IC卡产品,并将这项技术应用于金融、交通、医疗、身份证明等行业,它将微电子技术和计算机技术结合在一起,提高了人们工作、生活的现代化程度 。

IC卡种类

简单分类可以按照下面:
按功能分为复合卡(可刷、又可插、还能碰触)和普通卡(碰触,如二代身份证)
按卡片协议类型:卡片类型ISO 14443 A类和B类、ISO 7816 A、B和C类等
按智能卡接口:PICC (非接触)、ICC(接触)、SAM

日常生活常见的ID卡、公交卡、社保卡、CPU卡、M1卡、、SAM卡、PSAM卡等等都属于IC卡,还有我们的二代身份证属于CPU卡或ID 卡,确切来说属于非接触式CPU卡(采用的标准ISO 14443 TYPE B协议),里面的芯片采用的加密算法是国密(SM1),芯片的提供商有大唐微电子、华虹、华大和同方微电子等厂商。手机去感应非接触式CPU卡一般都是通过NFC,想用手机去感应身份证有两个前提,一你手机支持NFC功能,二你得知道对操作身份证的指令,比如读取身份证号的指令,知道指令后你就可以开发个手机app然后进行感应读取身份证了。

注:同一张卡可能存在多种叫法,不同卡功能、用途、协议不尽相同,具体情况具体分析。

非接触接口和接触式接口区别

非接触接口:

  • 读写速度达 848 Kbps
  • 内置天线用于访问非接触式标签,卡片读取距离可达 50 mm(视标签的类型而定)
  • 支持 ISO 14443 第 4 部分的 A 类和 B 类卡,以及 MIFARE Classic® 系列卡片
  • 内建防冲突特性(任何时候都只能访问 1 张标签)
  • 支持扩展的 APDU(最大 64 KB)

接触式接口:

  • 支持 ISO 7816 A 类、B 类和 C 类卡(5 V、3 V 和 1.8 V)
  • 支持 CAC(通用权限卡)
  • 支持 PIV (个人身份验证卡)
  • 支持符合 T=0 或 T=1 协议的微处理器卡
  • 支持各类存储卡
  • 支持 PPS(协议和参数选择)
  • 具有短路保护功能
  • 支持扩展的 APDU (T=1:最多 64 K 字节;T=0:最多 512+10 字节)

SAM 接口:

  • 一个 SAM 卡槽
  • 符合 ISO 7816 的 SAM 卡槽(A 类)

注:上面区别来自某款读卡器介绍,用来辅助认知,实际读卡器特点以具体设备为准

异步半双工传输协议T=0或T=1

在传输协议中定义了两种协议:字符传输协议(T=0)和块传输协议(T=1)。IC卡可以选择支持T=0协议或者T=1协议,终端一般都支持这两种协议。在ATR中的TD1规定了后续传输中所采用的传输协议(T=0或T=1),如果TD1在ATR中不存在的话则假定采用T=0。如果在ATR之后卡片与终端之间没有参数协商的PTS过程的话(详细细节可参考ISO7816相关部分),由IC卡指定的协议将在复位应答之后立即被采用。

ATR

ATR也叫复位应答,是一个字节序列,这些字节是由卡作为对复位命令的响应发送给读卡器的。在I/O电路上,每个成功的复位操作都会导致I/O上的一个由初始字符TS开始,后跟最多32个字符的复位应答。ATR的作用是告诉读卡器,我是一张什么样的卡片,以便读卡器知道接下来该以什么样的方式和卡片通信。

APDU( ApplicationProtocol data unit)

进行APDU通讯的前提是:

  1. 有读卡器(必选)和对应的SDK通讯包(可选)
  2. 知道IC卡的APDU命令

下面介绍一下常见的银行卡,身份证,社保卡用的通讯格式APDU,APDU通讯的连接方式可以是串口或USB

APDU格式

APDU是智能卡与智能卡读卡器之间传送的信息单元

CLAINSP1P2LcDataLe
指令类别指令码参数P1参数P2Data的长度(不超过255个字节)返回数据表示响应时回答的数据字节数,0表是需要最大可能长度(不超过255个字节)

命令格式分类

由具体应用分为4种命令报文结构如下:

① 情形1

CLA INS P1 P2 00

② 情形2

CLA INS P1 P2 Le

③ 情形3

CLA INS P1 P2 Lc Data

④ 情形4

CLA INS P1 P2 Lc Data Le

注:从终端设备(Android 或Windows)发出的命令和卡片信息必须按照上面的四种格式发送

响应报文

响应数据 响应状态码

Data SW1 SW2

DATA: 返回给用户的数据,即命令的执行结果。

SW1、SW2: 返回命令处理的状态。

响应也对应上面四种情形

① 情形1

SW1 SW2

② 情形2

Le字节的Data SW1 SW2

③ 情形3

SW1 SW2

④ 情形4

Le字节的Data SW1 SW2

响应码含义

9000 正常 成功执行
6200 警告 信息未提供
6281 警告 回送数据可能出错
6282 警告 文件长度小于Le
6283 警告 选中的文件无效
6284 警告 FCI格式与P2指定的不符
6300 警告 鉴别失败
63Cx 警告 校验失败(x-允许重试次数)
6400 出错 状态标志位没有变
6581 出错 内存失败
6700 出错 长度错误
6882 出错 不支持安全报文
6981 出错 命令与文件结构不相容,当前文件非所需文件
6982 出错 操作条件(AC)不满足,没有校验PIN
6983 出错 认证方法锁定,PIN被锁定
6984 出错 随机数无效,引用的数据无效
6985 出错 使用条件不满足
6986 出错 不满足命令执行条件(不允许的命令,INS有错)
6987 出错 MAC丢失
6988 出错 MAC不正确
698D 保留
6A80 出错 数据域参数不正确
6A81 出错 功能不支持;创建不允许;目录无效;应用锁定
6A82 出错 该文件未找到
6A83 出错 该记录未找到
6A84 出错 文件预留空间不足
6A86 出错 P1或P2不正确
6A88 出错 引用数据未找到
6B00 出错 参数错误
6Cxx 出错 Le长度错误,实际长度是xx
6E00 出错 不支持的类:CLA有错
6F00 出错 数据无效
6D00 出错 不支持的指令代码
6900 出错 不能处理
6901 出错 命令不接受(无效状态)

61xx 正常 需发GET RESPONSE命令

6600 出错 接收通讯超时
6601 出错 接收字符奇偶错
6602 出错 校验和不对
6603 警告 当前DF文件无FCI
6604 警告 当前DF下无SF或KF
9301 出错 资金不足
9302 出错 MAC无效
9303 出错 应用被永久锁定
9401 出错 交易金额不足
9402 出错 交易计数器达到最大值
9403 出错 密钥索引不支持
9406 出错 所需MAC不可用

**上面的61XX的意思是,命令执行成功,还有 XX 字节需要通过 Get Response 命令取回,命令是00 C0 00 00XX(T=0)00 C0 00 01XX(T=1),这个是非常重要,会影响后续数据取回,
不要以为返回61XX理解为发错命令或者没有想要的数据返回。
**

读卡器APDU流程

接触过的读卡器基本都下面这些步骤,基本相同,不同的是命令发送和数据解析

ICC(接触读取),ISO 7816

  1. 打开阅读器
  2. 对卡片上电
  3. 获取ATR(接触卡状态检测,是否存在卡片)和协议
  4. APDU通讯
  5. 下电
  6. 关闭阅读器

PICC(非接触读取),ISO 1443

  1. 打开阅读器
  2. 寻找卡片
  3. APDU通讯
  4. 关闭阅读器

读卡器与卡交互指令

1.读卡器与卡交互第一步一般是选择应用

比如:一张银联IC卡里面可能有多个应用,所谓应用就是卡片和终端之间的应用协议和相关的数据集,读卡器和卡的交互其实就是和应用的交互,卡的交易其实就是选择某个应用做交易。但目前卡商所生产的卡基本上都是一个应用,即便如此,但根据银联卡的规范,应用选择这个步骤也是必不可少的。

  1. 第二步根据上面的返回数据做下一步操作,并最终拿到结果

注:

  • 如果是银联卡,响应数据是TLV格式,解析TLV格式的解析复杂,但有规则,数据内容需要参考银联卡协议规范进行提取;
  • 如果是其它卡,响应数据就是想要的数据是直接数据,进行转码就可以达到想要的数据

小结

上面只是简单介绍了读卡器APDU通讯涉及到的基础知识,深入理解这些协议和规范还是比较复杂的,应用层开发的话了解即可,希望对应Android或Windows应用开发(涉及到读卡的应用)的人员有所帮助,上文如有错误请指出修正。

其它文章:IC卡(银行卡)APDU数据格式TLV解析


https://www.fengoutiyan.com/post/14994.html

相关文章:

  • ic卡是什么卡
  • 智能ic卡
  • ic卡ip卡iq卡统统交出来
  • ic卡工作原理
  • ic卡协议
  • 智能卡芯片
  • 获取ic卡物理卡号
  • ic卡数据
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機