CPU卡操作

发卡器可以做成多功能自定义模式,能发自定义CPU,自定义IC,读物理卡号,读身份证,以及国密CPU等,还能发系统卡。

系统卡用于配置读卡器,功能包括IC的物理卡、自定义,CPU物理卡、自定义,身份证,国密物理卡、自定义(国密自定义可能与CPU冲突,只能2选一),身份证,读卡器输出长度(26-34),读卡器通讯方式(韦根、485)等,系统卡密码、新密码。

读卡器通过系统卡激活,或密码相同时,进行读卡器配置,然后通过配置读取卡号和输出方式。

主要参考:新版FMCOS2.0用户手册.pdf

另外一个通用命令集的参考:CPU卡片 FM1208 关于发卡的流程有些不懂 有解答的吗? - 知乎

KEY:秘钥,用于认证用的。

1.CPU卡也是一个小的文件系统,有MF(根目录,类型38),DF(DDF有子目录的目录,ADF无子目录的目录。类型38),EF(基本文件,有KEY文件3F,二进制文件28等。)。参考4.4。

以下是FMCOS操作解释:

2.外部认证:每个目录都只有一个KEY文件,如果存在,需要通过外部认证后,才能访问这个目录的其他文件。

操作过程:选择目录----->取CPU卡随机数----->DES加密----->外部认证。

3.取随机数。用于第2点。

4.选择文件:通过目录名称或文件标识符来选择文件(范围:当前目录,平级目录,参考7.4)。先选择目录---->然后做外部认证和访问目录下的文件。(4.4中表明任何文件均可被选择)

5.读二进制文件:每个文件再创建的时候会添加文件标识符。通过文件标识符访问文件。

选择目录(如果需要外部认证则:----->取CPU卡随机数----->DES加密----->外部认证)----->读二进制文件。

6.写二进制文件:每个文件再创建的时候会添加文件标识符。通过文件标识符访问文件。

例子有3个例子。第一种:选择文件,写入当前文件。第2种:以文件标识符写入+mac的字符串。第3种:以文件标识符写入加密+mac的数据。如果以文件标识符写入,需要使用2-3种方式!参考11.2和11.3节

存在目录的情况下:

选择目录----->(如果需要外部认证则:取CPU卡随机数----->DES加密----->外部认证)----->(创建二进制文件)----->写二进制文件。

目录不存在的情况下:

选择根目录----->(取CPU卡随机数----->DES加密----->外部认证)---->(创建子目录DF---->(创建KEY文件----->写入KEY秘钥))----->(创建二进制文件)----->写二进制文件。

8.增加和修改秘钥,可以添加外部认证秘钥,设置线路保护密钥

如果要对根目录和子目录加密:

选择根目录----->创建MKEY文件----->写入MKEY秘钥---->创建子目录DF---->创建DKEY文件----->写入DKEY秘钥

7.删除目录文件。删除当前选择的目录所有内容

如果认证通过了,也会删除目录下的KEY文件!把CPU退成白卡:选择根目录----->(取CPU卡随机数----->DES加密----->外部认证)---->删除目录

8.创建文件:可以创建(DF,EF)。

文件类型:3F:秘钥文件,28二进制文件,38目录文件。

关于文件权限问题可以参考(7.13,和第5章安全体系,以及第8点增加/修改秘钥中的后续状态)

可以参考第6点。

9.实际应用:

发卡器发卡流程:

    a.开始---->选择MF根目录---->提取随机数---->TDES加密随机数---->(使用发卡秘钥)外部认证---->认证未通过(进入b)、认证通过(进入c)

    b.开始---->选择MF根目录---->提取随机数---->TDES加密随机数---->(使用0XFFFFFFFFFFFFFFFF秘钥)外部认证---->认证未通过(退出,因为默认秘钥和发卡秘钥都不对)

    c.删除根目录---->创建根目录秘钥文件---->写入(添加)发卡秘钥---->创建子目录DF1---->选择子目录DF1---->创建子目录秘钥文件---->写入子目录秘钥(后续状态设为88)---->创建二进制文件EF1(读写权限为0XF8)---->写入二进制内容(数据可以用des加密)

发卡器退卡流程:

   a.开始---->选择MF根目录---->提取随机数---->TDES加密随机数---->(使用发卡秘钥)外部认证---->认证未通过(退出,已退卡或秘钥不正确),认证通过(进入b)

   b.删除根目录---->创建根目录秘钥文件---->写入(添加)默认发卡秘钥0XFFFFFFFFFFFFFFFF

读卡器读卡流程:

   a.开始---->选择DF目录---->失败(说明没有发卡!不需要外部认证),成功(进入b)

   b.提取随机数---->TDES加密随机数---->(使用目录秘钥)外部认证---->认证未通过(秘钥不正确),认证通过(进入c)

   c.读二进制文件内容---->DES解密得到数据。

10.安全问题:

   a.发卡的时候会写入秘钥,通讯过程可能会被窃取,不安全。因此在发卡器不能公开! 

   b.如果一个厂家的发卡器固定秘钥。那也不安全,你卖给A,B两家,A可以通过发卡过程窃取秘钥,达到窃取B家的内容。因此做成可配置秘钥的方式,参考c。

   c.发卡器配置秘钥写入发卡器FLASH中,并可以写入一张CPU母卡片中。发卡器使用FLASH秘钥发卡,退卡参考9.   读卡器可以通过母卡或通讯配置秘钥,然后读卡。因为母卡保存的是发卡秘钥,因此也不能公开!

个人理解:

一种用户保管好密码、发卡器、母卡保证安全的卡片管理方案

背景:现在我们用CPU卡可以做到安全可靠。但是通过一些手段可以窃取发卡器读卡器和CPU卡通讯内容。CPU发卡过程需要把文件外部认证秘钥发给CPU卡,因此这个过程需要安全进行。

解释说明:

KEY_U:用户密码。

KEY_M:母卡保存的发卡秘钥,由KEY_U生成。将发送到发卡器,CPU母卡,读卡器中;其传送过程需要保密!

1.发卡器,发母卡:

a.发母卡KEY_M: 需要CPU母卡存在且没有KEY_M1,读卡器没有保存的KEY_M2,才能发卡。先写入CPU母卡文件,再保存在发卡器中。(操作需要保密,保证KEY_M安全。)

b.删除母卡KEY_M:  CPU母卡存在且读出卡片KEY_M1,读取发卡器保存的KEY_M2,读取下发的KEY_M3。如果三者相同则删除,否则提示失败。

2.发卡器,发子卡:

a.发子卡:发卡器需要存在KEY_M。向CPU卡创建和下发外部认证秘钥KEY_M,创建CPU子卡文件,写入子卡卡片号码。(不安全)

b.读子卡:向CPU外部认证秘钥KEY_M,读取CPU子卡文件的卡片号码。(安全,认证不会传输秘钥)

c.退子卡:向CPU外部认证秘钥KEY_M,通过后,对CPU卡进行退卡。(安全)

3.读卡器:

a.母卡激活读卡器:读卡器内部没有配置KEY_M可用此功能。读取CPU母卡文件,

将母卡的KEY_M写入读卡器存储中。(响3声)(操作需保密)

b.母卡释放读卡器:读卡器已存在KEY_M1可用此功能。正确读取CPU母卡文件中的KEY_M2,如果保存的KEY_M1余KEY_M2相同,则可以释放读卡器。(滴4声)(安全,不通KEY_M的母卡不能相互释放,确保了安全)

c.读卡器读子卡卡号:需要读卡器已激活。用KEY_M认证子卡文件,读取卡号。(读取成功1声, 认证失败2声)(安全)

从上面的几个处理过程,可以看出用户需要保管好:密码,发卡器,母卡!且使用他们过程中防止被通讯截取。

错误码列表:

  • 6200 “警告 信息未提供”
  • 6281 “警告 回送数据可能”
  • 6282 “警告 文件长度小于Le”
  • 6283 “警告 选中的文件无效”
  • 6284 “警告 FCI格式与P2指定的不符”
  • 6300 “警告 鉴别失败”
  • 63Cx “警告 校验失败(x-允许重试次数)”
  • 6400 “状态标志位没有变”
  • 6581 “内存失败”
  • 6700 “长度错误”
  • 6882 “不支持安全报文”
  • 6981 “命令与文件结构不相容,当前文件非所需文件”
  • 6982 “操作条件(AC)不满足,没有校验PIN”
  • 6983 “您的卡已被锁定”
  • 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 “数据无效”
  • 6F01 “连接中断”
  • 6D00 “不支持的指令代码”
  • 9301 “您的卡余额不足”
  • 9302 “MAC2错误”
  • 9303 “应用被永久锁定”
  • 9401 “您的卡余额不足”
  • 9402 “交易计数器达到最大值”
  • 9403 “密钥索引不支持”
  • 9406 “所需MAC不可用”
  • 6900 “不能处理”
  • 6901 “命令不接受(无效状态)”
  • 61xx “正常 需发GET RESPONSE命令” 读取指令00C00000xx
  • 6600 “接收通讯超时”
  • 6601 “接收字符奇偶错”
  • 6602 “校验和不对”
  • 6603 “警告 当前DF文件无FCI”
  • 6604 “警告 当前DF下无SF或KF”
  • 6E81 “卡片已离开”

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值