美文网首页
FMCOS外部认证死锁的解决办法

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

作者: 寻水的鱼Chock | 来源:发表于2019-02-18 17:40 被阅读0次

由于是第一次接触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:如果你卡片很多,死锁后丢掉即可,土豪随意。而我需要开发一个应用,手上只有两张测试卡片。

相关文章

网友评论

      本文标题:FMCOS外部认证死锁的解决办法

      本文链接:https://www.haomeiwen.com/subject/mnkzeqtx.html