概述:CPU卡包含一个微处理器,其功能相当于一台微型计算机。CPU卡内集成电路中包括中央处理器(CPU)、只读存储器(ROM)、随机存储器(RAM)、电可擦除可编程只读存储器(EEPROM)等。
使用FMCOS,由传输管理、文件管理、安全体系、命令解释四个功能模块组成。
传输管理:监督卡与终端之间的通信,保证数据正确地传输。
文件管理:区别于其他卡按区块存储数据的方式。CPU卡将用户数据以文件的形式存储在EEPROM中,保证访问文件的快速性和安全性。
安全体系:涉及对卡的鉴别与核实,对文件访问时的权限控制机制。
命令解释:根据接收到的命令检查各项参数是否正确,执行相应的操作。
以上这些概念性的东西都是卡与在文档中查到的,因此只说了大概,下面详细讲一下CPU卡发卡的具体流程。
安全机制:
FMCOS的每个目录都有一个安全状态寄存器,共有16中安全状态,用十六进制数0-F来表示。当前目录的安全状态在复位或者重新选择目录后被置为0,在当前目录下的口令校验或者外部认证指令通过后更改安全状态的值为密钥规定的后续状态。
对于FMCOS的所有文件,在创建时都需要设置它的访问权限,包括读权限、写权限、使用权限、更改权限等。用1个字节的十六进制XY数表示。当该目录此时的安全状态值>=Y并且<=X时,则你拥有该文件相应的权限;若X=0,则安全状态>=Y时,你拥有该文件相应的权限;当X=Y时,安全状态=Y才会拥有该文件相应的权限。如果你不想让人让问某个文件,你可以将该文件的操作权限设为XY(Y>X)
发卡:
所需设备:
1、 复旦CPU卡
2、 D8非接触式读卡器
3、 ESAM卡(发卡母卡,里面存储了需要装载到CPU卡内的所有密钥)
4、 PC机
5、 开发语言使用VB2005
发卡流程:
1、 连接读卡器,打开读卡器端口。
2、 寻卡,CPU卡和ESAM卡上电复位,检查CPU卡和ESAM卡是否放在读卡器的正确位置。
3、 首先需要记住的是,无论是对CPU卡还是ESAM卡做任何操作,你都需要选择对应的目录。
4、 对CPU卡做外部认证:
CPU卡MF目录下的Key文件里有一个主控密钥,由该密钥的属性设置来决定你是否有权限对CPU卡进行卡片初始化、MF擦除以及卡结构修改等权限。
所谓外部认证,就是检查你是否有合法的权限对CPU卡进行各种操作。首先你需要拥有主控密钥,通常你并不知道主控密钥的内容(除非是未经初始化过的卡,初始主控密钥由卡片制造商决定,我用的卡初始密钥为全F),主控密钥储存在ESAM卡中,你需要通过SAM卡提供的分散指令(两次通用DES计算),得到主控密钥CCk。然后通过CPU卡提供的取随机数指令,取得8字节随机数sRandom(这个随机数不仅返回给终端,而且还存储在CPU卡内某一位置),用CCK对sRandom做DES加密,得到结果sRet。然后使用外部认证指令将sRet发送到CPU卡,CPU卡使用MF下的主控密钥对sRet做解密,将得到的结果与刚才送给终端的随机数比较,如果相同,则外部认证通过,CPU卡的安全寄存器状态置为主控密钥设置的后续状态,同时你也拥有了该后续状态值所对应的操作的权限。如果认证不通过,错误次数减一,你可以使用另外的主控密钥继续做外部认证,成功则错误次数清0。千万记住错误次数不能超过主控密钥设置的允许最大错误次数(空卡默认是3次),否则将被锁卡。
因为我们不清楚要用来发卡的CPU卡是空卡还是已经初始化过的,所以在做外部认证的时候我们需要先使用厂商提供的初始密钥,再使用ESAM卡中的主控密钥。
5、 擦除MF:
MF默认创建,你只能清除MF下的所有内容,不能删除MF。
6、 建立MF下的文件:
MF的目录结构包括:
- 密钥文件
- 目录数据文件
- 基本文件EF(包括二进制文件、记录文件等)
- 目录文件DF
密钥文件是你在创建一个目录时首先需要建立的,密钥文件里的各种密钥控制你对该目录以及该目录下内容的操作权限。
指令:80E00000073F005001AAFFFF
文件标识:0000
文件类型:3F
文件空间:0050(关于文件空间的设置,参加:文件空间)
读权限:01
写权限:AA
密钥文件建立后,你需要向其中写入各种密钥,包括主控密钥、维护密钥等。
然后是创建目录数据文件,变长记录文件,说明MF下有哪些目录。
最后创建EF和DF
7、 建立3F01目录下的文件
通用先建立Key文件并向Key文件中装载密钥
由于3F01是ADF,所以不需要创建目录数据文件
再建立电子钱包/存折文件、电子钱包交易明细记录文件等
电子钱包/存折文件、电子钱包交易明细文件都是由PBOC规定了如何来创建维护的。
8、 其他目录的创建方法同上
文件空间
文件头:11字节(文件类型+文件标识符+文件主体空间大小+权限+校验等)
每个基本文件所占的EEPROM空间:11字节文件头+文件主体空间
定长、普通钱包和循环文件的主体空间:记录个数x记录长度(密钥文件的记录长度为数据长度+8)
每个DF所占的EEPROM空间:11字节DF头+DF下所有文件的空间和+DF名称长度