【IoT】ISO7816 NFC 之 CPU 卡浅析及操作命令简介

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: CPU卡指令

CPU 卡浅析:

CPU 卡可适用于金融、保险、*、政府行业等多个领域,具有用户空间大、读取速度快、支持一卡多用等特点,并已经通过中国人民银行和国家商秘委的认证。

CPU 卡又叫智能卡,卡内具有中央处理器(CPU)、随机存储器(RAM)、程序存储器(ROM)、数据存储器(EEPROM)以及片内操作系统(COS)。

金融智能卡:

符合《中国金融集成电路(IC卡)规范》,通过了中国人民银行检测,支持一卡多用,支持多种文件类型,支持中国人民银行认可的 Single DES、Triple DES 算法,支持中国人民银行规定的电子钱包和电子存折功能。

社保卡:

支持一卡多用,各应用之间相互独立。符合《社会保障(个人)卡规范》和《中国金融集成电路(IC)卡规范》,并通过了劳动和社会保障部检测。

电子商务智能卡:

能够快速完成RSA算法的签名、认证、加密、解密运算,可在卡片内生成1024位RSA密钥对,支持一卡多用,各应用之间相互独立。符合《中国金融集成电路(IC)卡规范》,并已通过国家商业密码管理委员会的安全测试。
终端安全控制模块:符合《中国金融集成电路(IC卡)PSAM卡规范》,包括普通PSAM卡和高速PSAM卡。

SAM卡:

安全存取模块SAM是智能卡应用系统中安全控管的核心。

SIM卡:

移动通讯用户识别卡,符合GSM11.11,手机不但可以传输语音数据,还可以进行金融交易,电子商务等多种应用。

CPU 卡的标准化:

由于当前世界各国经济正在向国际化方向发展,全球化的金融服务系统纷纷建立起来,这就带来了一个卡的互操作性问题。同一张卡,在不同的国家、不同的环境下都要能够使用。要解决这个问题,只有制定一系列国际标准,使CPU卡及其接口设备制造商按照统一的标准,制造统一接口规格的产品,以保证不同国家、不同行业都采用统一的CPU卡软硬件技术规范开发应用系统,这样才能实现不同厂家生产的CPU卡之间的互换性和接口设备的共享。

国际标准化组织从1987年开始,相继制定和颁布了CPU卡的国际标准。有关CPU卡本身的标准有:

ISO 10536:识别卡-非接触式的集成电路卡

ISO 7816:识别卡-带触点的集成电路卡

ISO7816-1:规定卡的物理特性。卡的物理特性中描述了卡应达到的防护紫外线的能力、X光照射的剂量、卡和触点的机械强度、抗电磁干扰能力等等。

ISO7816-2:规定卡的尺寸和位置。

ISO7816-3:规定卡的电信号和传输协议。传输协议包括两种:同步传输协议和异步传输协议

ISO7816-4:规定卡的行业间交换用命令。包括:在卡与读写间传送的命令和应答信息内容;在卡中的文件、数据结构及访问方法;定义在卡中的文件和数据访问权限及安全结构。
有关金融领域CPU卡应用的标准有:

ISO 9992:金融交易卡-集成电路卡与受卡接受设备之间的信息

ISO 14443:识别卡-非接触卡规范(距离10cm)

ISO 10202:金融交易卡-使用集成电路卡的金融交易系统的安全结构

EMV:支付系统的集成电路卡规范和支付系统的集成电路卡终端规范

中国金融集成电路(IC)卡规范:1998年3月中国人民银行等近十家金融单位在采用国际标准和国外先进技术的原则下,以ISO标准和Europay、Mastercard、Visa三大组织研制的EMV96为基础,结合国内CPU卡的应用实际需要,对我国金融CPU卡的基本应用作出了具体规定。
ISO和其它组织还有很多标准和规范涉及到CPU卡的应用,可根据需要查阅有关的标准。

CPU卡生产流程

一张卡从制造出来到销毁的整个过程成为生命周期。IC卡的生命周期一般可分为:

1.芯片制造:IC卡厂家通过特定的制造工艺在硅片上整齐地排列上一个个电路。
2.模块封装:将许多各种芯片安装在已制造好的有8个触点的印刷电路板上。
3.卡片制造:将卡的操作系统等卡片控制系统掩模到模块中。
4.卡片封装:将掩模好的模块镶嵌到塑料基片中。
5.卡片初始化:设置卡片的基本参数。
6.安装发行密钥:将发行单位的密钥写到卡上。
7.卡片个人化:建立应用文件并写入持卡人基本资料。
8.卡片应用:持卡人用卡完成各种卡的功能。

操作命令示例:

厂家初始设定外部认证密钥为 FF FF FF FF FF FF FF FF

1、外部认证

1.1、取 4 字节随机数 00 84 00 00 04

1.2、程序用外部认证秘钥 FFFFFFFFFFFFFFFF 和获取的 4 字节随机数加密,生成 8 字节加密数据

1.3、发送 00 82 00 00 08 + 8 字节加密数据

2、删除 MF 下面文件

80 0E 00 00 00

00 A4 00 00 00

4、建立 MF 下密钥文件

80 E0 00 00 07 3F00B001F0FFFF

//80 E0 00 00 07 3F005001F0FFFF

5、增加密钥

5.1、文件线路保护密钥


 80 D4 01 00 0D 36F0F0FF33FFFFFFFFFFFFFFFF

5.2、外部认证密钥


 80 D4 01 00 0D 39F0F0 AA 55 1122334455667788
 
 //80 D4 01 00 15 39F0F0 AA 88FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
 
 后续状态 AA,错误计算 55

5.3、解锁口令密钥


 80 D4 01 00 0D 37F0F0FF 55 1122334455667788

 错误计算 55,密钥 1122334455667788

5.4、口令密钥


 80 D4 01 00 08 3AF0EF 44 55 123456   
 
 后续状态 44,错误计算 55,pin 123456

5.5、重装密钥


 80 D4 01 00 0D 38F0F0FF 55 0102030405060708
 
 错误计算 55,密钥 0102030405060708

5.6、线路保护


 80 D4 01 00 0D 36F0F0FF 55 0102030405060708
 
 错误计算 55,密钥 0102030405060708

6、建立电子钱包 DF

80 E0 3F 01 0D 38 05 20 F0F095FFFF4444463031

//80 E0 3F 01 11 3804FFF0FA95FFFFA00000000386980701

文件 ID 82,select file 返回为 00 02

文件标示 3F 01

空间大小 05 20

DF 名称 DDF01

7、选择电子钱包 DF

00 A4 00 00 02 3F 01 00

8、建立 DF 下密钥文件

80 E0 00 00 07 3F018F95F0FFFF

9、增加密钥

9.1、主控密钥


 外部认证密钥 
 
 80 D4 01 00 0D 39F0F0 33 55 1122334455667788
 
 后续状态 AA,错误计算 55 
  

9.2、圈存密钥


 80 D4 01 00 0D 3FF0F000003F023F023F023F02    
  

9.3、圈提密钥


 80 D4 01 00 0D 3DF0F000013D023D023D023D02
  

9.4、消费密钥


 80 D4 01 00 0D 3EF0F000013E023E023E023E02
  

9.5、透支限额


 80 D4 01 00 0D 3CF0F000013C023C023C023C02
  

9.6、线路保护


 80 D4 01 01 0D 36F0F0FF 55 0102030405060708
  错误计算 55,密钥 010203040506070
  

9.7、重装口令密钥


 80 D4 01 01 0D 38F0F0FF 55 0102030405060708
 
 错误计算 55,密钥 0102030405060708

9.7、口令密钥


 80 D4 01 01 08 3AF0EF 44 55 123456   
 
 后续状态 44,错误计算 55,pin 123455

9.8、解锁口令密钥


 80 D4 01 01 0D 37F0F0FF 55 1122334455667788
 
 错误计算 55,密钥 1122334455667788

9.9、MAC密钥


 80 D4 01 01 0D 32F0F000013202320232023202

10、建立钱包文件

 80 E0 00 02 07 2F0208F000FF18

11、建立钱包应用基本数据文件 A8

 80 E0 00 15 07 A8001EF0F0FF02

//80E0001507A8001EF0F0FFFF
  

12、建立钱包持卡人基本数据文件 A8

 80 E0 00 16 07 A80027F0F0FF02
  
 //80E0001607A80037F0F0FFFF
  

13、建立交易明细文件 2E

  
 80 E0 00 18 07 2E0A17F1EFFFFF

 //80E00017072A0A10F0F0FFFF

14、MF 下读余额

14.1、选择电子钱包文件夹

00 A4 00 00 02 3F0100

80 5C 00 02 04

14.2、验证 PIN,PIN 是 123456


00 20 00 01 03 123456

14.3、圈存初始化,圈存密钥为 3F023F023F023F02


执行指令

80 50 00 02 0B 01 00001234 00000000000110

密钥标识 01,交易金额 00001234,终端机编号 000000000001

返回

00 00 00 00 00 00 00 01 CAB24782 67AE64BA

MAC1=67AE64BA

过程密钥(SESLK) = 圈存密钥(DLK)和 4随机数 + 2 字节交易序号 + 8000 生成  

也就是 3F023F023F023F02 和 CAB24782+0000+8000 加密

得出 FA0645615347A270 (SESLK1)

密钥 FA0645615347A270 和余额 + 交易金额 + 交易类型标识 + 终端机编号

(不足补80)加密


也就是 FA0645615347A270 和 00000000000012340200000000000180

得到 1FB2262D0435B1A3444C2A1A1FAAE7A3  

结果和 MAC1 不一致

卫朋

人人都是产品经理受邀专栏作家,CSDN 嵌入式领域新星创作者、资深技术博主。2020 年 8 月开始写产品相关内容,截至目前,人人都是产品经理单渠道阅读 56 万+,鸟哥笔记单渠道阅读200 万+,CSDN 单渠道阅读 210 万+,51CTO单渠道阅读 180 万+。

卫朋入围2021/2022年人人都是产品经理平台年度作者,光环国际学习社区首批原创者、知识合作伙伴,商业新知 2021 年度产品十佳创作者,腾讯调研云2022年达人榜第三名。

文章被人人都是产品经理、CSDN、华为云、运营派、产品壹佰、鸟哥笔记、光环国际、商业新知、腾讯调研云等头部垂直类媒体转载。文章见仁见智,各位看官可策略性选择对于自己有用的部分。

相关文章
|
4月前
|
运维 Linux
Linux系统调优详解(二)——CPU负载查看相关命令
Linux系统调优详解(二)——CPU负载查看相关命令
126 10
|
4月前
|
缓存 运维 Linux
Linux系统调优详解(三)——CPU状态查看相关命令
Linux系统调优详解(三)——CPU状态查看相关命令
67 1
|
4月前
|
Linux
|
4月前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
242 10
|
4月前
|
传感器 物联网 5G
物联网的通信技术以及Wi-Fi、一键配网技术、BLE、GPRS(2G)、LTE-Cat1 、NB-IoT简介
物联网的一个重要的特点是接入了网络,因此这些设备才能将传感器采集的数据上传到云平台,然后根据平台对数据的分析做出反应。而这种接入网络的技术,就是通信技术,是物联网的基础之一。通信的方式可以分为有线和无线两种方式,因为有线通信的成本较高,无线通信技术在物联网中应用比较广泛。
193 1
|
4月前
|
传感器 存储 机器学习/深度学习
物联网(IoT)简介:定义、技术与应用
【5月更文挑战第30天】物联网(IoT)是将物品通过嵌入式系统、传感器及通信技术连接至互联网,实现物物、物人交互和数据共享的技术。其关键包括传感器、通信、嵌入式系统、云计算和人工智能技术。物联网应用于智能家居、智慧城市、工业自动化、农业和健康医疗等领域,通过Arduino等平台可实现简单数据传输。随着技术发展,物联网将深远影响人们生活和工作方式。
366 3
|
2月前
|
监控 Unix Linux
ps aux 命令使用查看内存、cpu使用排名与top的区别
ps aux 命令使用查看内存、cpu使用排名与top的区别
277 1
|
3月前
|
Linux 数据处理
Linux中的nproc命令:轻松查看系统CPU核心数
`nproc`命令在Linux中用于查看CPU核心数,简洁高效,无参数直接运行。它读取`/proc/cpuinfo`获取信息,适用于资源分配。例如,`nproc`显示核心数,`nproc --all`(非标准选项,可能需结合其他命令)展示更多详情。在脚本中,可将`nproc`输出赋值给变量以适应动态资源管理。使用时注意文件访问权限,检查结果准确性,并结合其他工具如`lscpu`获取更全面硬件信息。
|
2月前
|
监控
主机状态监控,通过top命令查看CPU、内存使用情况,ctrl + c退出,输入top整个页面就变成一个任务管理器的形式了,Ctrl + C直接退出,Q也可以退掉了
主机状态监控,通过top命令查看CPU、内存使用情况,ctrl + c退出,输入top整个页面就变成一个任务管理器的形式了,Ctrl + C直接退出,Q也可以退掉了
|
3月前
|
缓存 监控 Linux
深入了解Linux的`lscpu`命令:你的CPU信息专家
`lscpu`是Linux下的命令行工具,用于获取CPU详细信息,如架构、核心、线程、缓存和型号。它从系统文件读取数据,提供实时信息,支持多种输出格式,如扩展视图、解析格式。常用参数包括显示所有CPU (`-a`)、在线CPU (`-b`) 和可解析格式 (`--parseable`)。结合其他工具,`lscpu`在系统管理和性能调优中十分有用。