[toc]
CPU卡发卡流程
前言
本人要学习一个新东西最好的方法是是需要知道到底该怎么做,然后回过头去看理论会理解的比较快, 本章主要是对复旦微电子CPU卡COSFMCOS 2_0用户手册里的内容的个人理解。具体的cos命令参考CPU卡开发指南(二)基本指令,本章不重复阐述。
发卡流程
一般地,卡片供应商提供卡片时,已经对卡片进行过初始化(主要用于对卡片进行测试),亦即卡片上已经建立了主文件(MF)及主密钥文件(MF下的Keyfile文件),主密钥文件中也已写入了初始卡片主控密钥。
- 传输认证(外部认证)
- 卡片擦除
- 目录文件及用户密钥的创建及写入
- 数据(二进制数据,记录数据)的写入
外部认证
对于传输通道的认证,个人觉得最通俗的理解就是获取读写权限,允许对里面的信息进行增删改的操作;默认的传输密钥为8个字节的0xFF,即:FFFFFFFFFFFFFFFF。
在对CPU卡建立特定的卡结构及写入密钥和数据之前,程序设计中的第一步应该对卡片进行外部认证。外部认证所使用的密钥正是初始卡片主控密钥。
外部认证主要分为以下几步。
- 卡片上电复位
- 获取随机数
- 对随机数进行DES加密
- 外部认证
擦除卡片
擦除卡片里面的所有数据,擦除成功之后,卡片即成为一张空白卡片。
许多发卡程序在设计过程中,没有考虑到擦除卡片上已有的卡片结构,而是在完成外部认证后直接改写原有卡片的主密钥文件的卡片主控密钥。常见问题是由于原有主密钥文件创建时的空间大小不够,而发卡程序试图写入除卡片主控密钥外还想写入卡片维护密钥时,势必造成写入空间不够而导致写入不成功。
目录文件及用户密钥的创建及写入
往空白卡中创建目录结构密钥和用户数据。
为了独立地管理一张卡上不同应用之间的安全问题,CPU卡中的每一个应用放在一个单独的ADF中。各个ADF及其下属各文件数据的访问(包括改写、读取)只能应用该ADF下的密钥文件中的密钥数值。为讨论方便,此处假设只有一个ADF。
MF文件
MF文件是ROM的根目录文件,不会被擦除,所以不需要创建。
- 选择MF文件
- 建立密钥文件
- 添加外部认证密钥
DF文件
在MF文件建立DF目录
- 建立DF文件
- 建立密钥文件
- 添加密钥(PIN码)
EF文件(基本文件)
在DF文件下建立EF文件,EF文件为FMCOS的基本文件,在EF文件中可以写入数据
- 建立EF文件
- 选择EF文件
- 写入用户数据
读卡流程
在发行的卡读取到卡中的数据
- 上电复位(复位自动选择到MF文件)
- 选择DF文件
- 验证PIN码
- 选择EF文件
- 读取EF文件