前些日子在研究学校的一卡通安全,在此记录一下一卡通破解的全过程,仅用作学习交流,切勿用于违法用途
其他几篇: 一卡通(M1卡)破解过程记录——准备篇 获取扇区密钥 数据分析篇
理论篇参考了国内外的一些文献,写的比较杂乱,如有错误请指正,有条件的推荐去谷歌一些外文文献了解其原理,如《Attack.MIFARE》、《Dismantling_MIFARE_Classic》、《Pickpocketing.Mifare》、《The-MIFARE-Hack-1》和《A Practical Attack on the MIFARE Classic》等。
M1卡扇区密钥及控制属性
M1卡的块3数据直接决定了M1卡的访问权限,在使用M1卡之前我们需要设定好合适的控制块,从而使M1卡可以在一个RFID系统下的多台读卡器上正常工作。在M1卡设计之初为了保障其兼容性,恩智浦公司对控制块的设置有着统一的规范,而在M1卡发卡后RFID系统管理者根据实际需要设定每个扇区各自的密码及存取控制字节。在后续的对一卡通的攻击过程中,我们需要使用正确的控制属性来修改数据并确保其能在其他读卡器上被正常识别。
大部分情况下我们只需要知道每个扇区的块3(即第4块)掌握整个扇区的控制权限,想要对扇区操作需先获取块3内容,对块3内容操作务必要小心,如果错误操作了控制块就会导致卡被锁死。如果使用的是PHILIPS原始芯片的卡片,且控制字 = FF078069时,通过某台读卡器进行B密钥验证后可读写卡片,说明这台读卡器有BUG。最大的可能性是这个读卡器并不区分AB密钥。
我们可以做个简单的实验,将AB密钥设为不同的值,例如先将密钥BLOCK改写为如下:111111111111FF078069222222222222此时KeyA = 111111111111, KeyB = 222222222222然后用可以通过B密钥读写的读卡器进行操作,就会发现问题所在。
FF FF FF FF FF FF FF 07 80 69 FF FF FF FF FF FF
密钥A 存取控制 密钥B
在块3存取控制字节中共有三个控制位,对应不同数据块或控制块的读写条件,定义为:"CmXn",其中Cm代表每块控制位号(C1~C3),X代表某块所属扇区号(0~15), n代表该扇区内某块号。例如C173 表示为7扇区内块3的第1控制位,其他扇区和块的控制位表示法以此类推。
控制位表示方法
存储块 |
控制位1 |
控制位2 |
控制位3 |
存储块属性 |
块0 |
C1X0 |
C2X0 |
C3X0 |
用户数据块,(0区0块除外) |
块1 |
C1X1 |
C2X1 |
C3X1 |
用户数据块 |
块2 |
C1X2 |
C2X2 |
C3X2 |
用户数据块 |
块3 |
C1X3 |
C2X3 |
C3X3 |