FMCOS外部认证死锁的解决办法

由于是第一次接触IC卡,参照着《FMCOS通用技术手册(复旦微电子)》进行功能测试及开发。结果在进行卡片外部认证时未注意返回状态码含义,导致卡片意外锁死。

我所使用的卡片是FM1280-169-C1,可以肯定的是只要卡片是复旦微电子生产的,我所遇到的问题都应该是适用的。

先阐述一下问题产生的过程: 卡片复位->选择主目录->外部认证(获取随机数+发送DES加密的密钥)->失败次数超过规定次数->卡片死锁

翻译为APDU指令(如果APDU出现空格,实际发送APDU时应去掉空格):

<- reset

-> ****(复位返回的数据)

<- 00A4 0000 02 3F00(选择主目录3F00)

-> 6F10840E315041592E5359532E44444630319000

<- 0084 0000 04(获取自由数)

-> 06CEE4F29000

<- 0082000008FEC63184B307AEFD(06CEE4F200000000 与秘钥 FFFFFFFFFFFFFFFF 进行单倍长DES加密得到 FEC63184B307AEFD)

-> 6983

正常情况下,最后一条指令应该返回9000,即外部认证密钥通过。但是会有各种各样的原因,比如外部认证密钥错误、计算单倍长DES错误,APDU指令错误等,然后操作错误重试次数便会将密钥锁死。

我是一开始并不知道如何计算单倍长DES,加上不知道如何使用自由数,多尝试了几次后才发觉已经锁死。。。。(获取的自由数是06CEE4F29000,其中后面的9000其实是状态码,然后计算的时候需要用0补齐16个字符,便得到06CEE4F200000000 )

解决办法:

1.尝试额外添加一条密钥,发送APDU指令

<-80D401011539F0F0AA88FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

-> 9000

<- reset

-> ****(复位返回的数据)

<- 00A40000023F00(选择主目录3F00)

-> 6F10840E315041592E5359532E44444630319000

<- 0084000004(获取自由数)

-> 06CEE4F29000(此卡片返回的内容注意需要根据卡片实际返回值为准)

<- 0082 0001 08 FEC63184B307AEFD(06CEE4F200000000 与秘钥 FFFFFFFFFFFFFFFF 进行单倍长DES加密得到 FEC63184B307AEFD,注意加粗部分

-> 9000

<- 800E000000(清除目录文件数据

-> 9000

<- 80E0 000007 3F00 6C01FAFFFF(建立密钥文件)

-> 9000

<- 80D4 01000D F9F0F0AA88 FFFFFFFFFFFFFFFF(写入密钥文件)

-> 9000

这个时候,卡片外部认证密钥便又回到了 FFFFFFFFFFFFFFFF,错误计数器也复位了。

问题顺利解决。


这个解决方法分享给大家~~~ ,此解决方法是有局限的,即只有未设置其他密钥的情况下才适用,如果第一步增加密钥错误,即意味着此方法对你无效。。。。。

PS:如果你卡片很多,死锁后丢掉即可,土豪随意。而我需要开发一个应用,手上只有两张测试卡片。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 产生死锁的四个必要条件: (1) 互斥条件:一个资源每次只能被一个进程使用。 (2) 请求与保持条件:一个进程因请...
    像敏锐的狗阅读 1,021评论 0 0
  • 死锁产生的原因和解锁的方法 产生死锁的四个必要条件: (1) 互斥条件:一个资源每次只能被一个进程使用。 (2) ...
    憩在河岸上的鱼丶阅读 1,495评论 0 4
  • 死锁概念及产生原理概念:多个并发进程因争夺系统资源而产生相互等待的现象。原理:当一组进程中的每个进程都在等待某个事...
    佘大将军阅读 3,007评论 0 0
  • 1、竞态条件: 定义:竞态条件指的是一种特殊的情况,在这种情况下各个执行单元以一种没有逻辑的顺序执行动作,从而导致...
    Hughman阅读 1,331评论 0 7
  • 《星乡》 (一) 水里的月亮, 如此的近, 如此的遥远。 折一支小船, 落在柔波里, 打捞遗落的星星。 数到一百颗...
    瓦尔登野人阅读 156评论 0 2