AD

接触式加密IC卡

加密是指卡片的写操作权限受口令保护。卡片存储区域包含3个部分,应用存储区,口令存储区,和写保护控制区。其中对卡操作重点观察前两个区域。
以西门子SLE4442的加密卡为例:
应用存储区大小为256字节,其中前32个字节存放西门子的厂商信息。
在重置后发出读指令(FF B0 00 00 00 20,这是读卡器的控制字),读取卡片前32个字节的内容,返回了32个字节和9000(表示操作未产生错误)。
前32个字节受写保护,一次写入无法修改(从硬件上烧断熔丝来阻止重写操作)。
应用存储区的33-256字节就是不同单位使用卡片时自行定制的了,通常包含的数据可以有:卡标识(说明卡的用途),余额,次数,身份ID,校验值等内容。
口令存储区包含卡片三个字节的口令,以及一个字节口令尝试次数计数器(允许最多错误3次,超过就锁卡)。每次口令尝试失败都会导致计数器数值减少,口令校验成功会把计数器恢复初始最大次数。(针对暴力破解的措施)
卡片应用区的数据可以被任意读取,不受限制,但修改数据的操作前需要先通过口令验证,否则写操作是无效的。SLE4442默认口令是FF FF FF(一般卡片使用者都会更改的)。口令校验成功前如果发出读命令去读口令存储区,返回当前计数器的数值和三个零,校验过后读出来的内容是计数器数值和三个字节的口令值。

如何判断卡内数据的用途,一般使用差异对比法或者变量观察法。

差异对比就是根据卡的用途,对比2张或者多张数据不相同的地方。然后在进一步进行验证。

变量观察法,就是观察卡每次使用变化的数据,然后根据卡的用途进行验证推测。

如何获取口令:

1.原始方式:因为前面提到口令存储区域包含一个字节的口令尝试计数器。如果是洗衣机卡,那么可以尝试两次口令,如果不争取,就插一次洗衣机,因为洗衣机肯定会发送正确的口令给卡片,然后累计的2次错误就会清零。在进行口令尝试。不过因为三个字节的口令空间为2^8*2^8*2^8,计4000万个口令,所以可行性不大。

2.搭线窃听,获取通信过程中的口令,这个方法是最常见的。

3.双卡联立。一张卡插入洗衣机,一张插入读卡器,然后通过插在洗衣机里的卡内容直接获取到口令。(这个我还有点儿没看明白,http://topic.csdn.net/u/20071110/15/cfc7e731-8e43-4c95-ad73-840c5dcfdc64.html

电表是一卡一表,而不是洗衣机那种一机多卡形式。无状态的卡片只要每次都还原数据内容和口令,与前一次相同就能不断重复使用(比如对于洗衣卡,即使不知道数据含义,但只要每次还原内容,就能保证总有剩余次数)。但 电卡和电表可以有状态字段存在,即每次通信会在电表和电卡内留有一个状态,由于不知道怎样通过一个状态计算下一个状态并填写到卡内,所以卡数据就不会被电 表认可。如何计算卡下一状态字段恐怕也就卡务中心充电的电脑才知道。如果需要进一步分析就需要能够拿到电表内或者卡务中心充电电脑内的程序了,这事儿就比 较困难了。

文章参考:http://bbs.pediy.com/showthread.php?t=151259

 

 

 

 

评论

此博客中的热门博文

简单粗暴导出小米便签

我——终于一个人了

多种方法绕过POWERSHELL的执行策略