智能卡(IC 卡)简单介绍与安全防范(以 M1 卡为例)

in 技术技巧分享 with 1 comment

摘录自我多年前高中时候写的一篇调查报告,所以看上去很浅显 :-)

简介

Mifare Classic 1(以下简称 M1 卡)是目前世界上应用较多的智能卡,是在我国被广泛用于公交、小额支付和门禁等各种系统的智能卡。
M1 卡原则上是一个有着额外功能的存储器卡,它有 16 个扇区(Sector),每个扇区有 4 个数据块(Block),而每个数据块又可以写入 16 字节(Byte)的数据,因此 M1 卡的容量为 1KB。
每一个扇区中最后一个块被称为扇尾(Sector Trailer),存储的是该扇区的访问密钥 A 和密钥 B(Key A & Key B),以及控制位(Access Bit)。扇尾的两个密钥都是用来认证的,访问条件定义了对该扇区的哪种操作是可行的,读卡器在进行任何存储操作前都要认证扇区。

其中扇区 0 的块 0 有特殊的数据:前4个数据字节包括唯一的卡验证号(UID),后面跟着一个字节的位计数检查(BCC),这个位计数检查通过连续异或所有的 UID 字节可以计算出来,剩下的字节用来存储制造商的数据(下图)。这个数据块是只读的,但是国内有很多厂家生产着可以修改所有数据的 M1 卡,这使 M1 卡的复制成为了可能。

目前国内有很多的 M1 卡应用系统从来没有密钥管理的概念,发出的卡不仅所有扇区的密钥相同,而且所有卡的密钥都一样(很多都使用出厂时默认的密钥)。一旦一张卡被破解,系统内所有的卡都等于被破解。

防御对策

应用层防御

  1. UID认证
    每张M1卡都有一个唯一辨认号UID,它保存在0扇区0模块中,只可读不可写,所以除非到工厂定制,否则是不可能被复制的。规模不大或系统资源丰富的应用系统可以在M1卡原有的认证流程后再加上UID认证的机制,来辨别卡的真伪。
  2. 后台建账
    定期核对为每张卡建立账户,记录每次(天)充值、消费和余额信息。并尽量每天对账,找出可疑账户记录。
  3. 应用层数据保护终端对存储在数据块中的应用数据(电子钱包余额等)使用较强的算法进行加密后再写入,或对关键数据进行加密计算后将密码与数据一并保存在数据块,读入时进行验证。此方法只能解决部分问题。

IC 卡加密(一般方法)

  1. 固定加密
    即密码固定,NFC可直接破解出密码和数据,用普通卡就可实现复制。破解后,可知悉所有同类卡密码。
  2. 一卡一密
    即密码随卡号变化,可通过NFC破解出密码和数据,用UID卡就可实现复制,但每张同类卡都需要重新破解方可知其密码。
  3. 全加密
    即IC卡16扇区均加入密码,密码可通过专用工具破获,密码已知后,用NFC破解出数据,写入普通卡或UID卡,实现复制。
  4. 动态码加密

    1. 替代性复制,卡与原卡的读写先后顺序决定了两者的有效性,且两者必居其一,如果其中一张卡先被读写,则另一张卡将剥夺权限(复制卡与原卡仅一张有效)。
    2. 动态码可以通过修改数据的方法复制(如将动态码部分改回初始值,用户编号改为其他编号)。
    3. 每刷卡一次,卡内数据需变化一次(写一次卡),由于动态码读写频繁,读卡过程中反复写卡,大幅降低卡片的使用寿命。在读卡的过程中写卡需要一定的读卡周期,如若读卡周期不完整,就会导致 IC 卡的永久损坏。
    4. 每个电梯控制都需要相应的数据,动态码的引入会占据存储容量,由于存储受容量限制,只可控制部分电梯,造成了用户卡多张的现象,极为不便。

综述,以上方法虽然增加了复制难度,但未及根本,不能真正的解决复制问题,现在有 CPU 卡可以很大程度上提高安全性,本文不多赘述,感兴趣的小伙伴可以在网上搜索相关资料。

Responses
  1. 这种经常拿来破解 是吧?

    Reply