浅谈 M1 卡(水卡、饭卡、开水卡和门禁卡等)的破解与复制 —— 理论知识篇#
声明:破解卡片只为科学研究所用,并探讨数据加密升级的必要性。
本文只作技术研究、学习交流之用,切勿用于非法用途,否则后果自负!!!
前言
最近一直在研究单片机及硬件相关的知识(非本专业,纯属个人爱好),偶然间看到网友发了破解学校水卡相关的帖子。于是就想着研究(破解)一下学校的一卡通安全,顺便记录一下过程。
注:全文分为 6 个篇章,本文为 [理论知识篇],后续我会持续更新。
由于篇幅较长,重点部分我已 [加粗标出]。
1. 概述
首先,在破解卡片之前,有必要先了解一下目前市面上常见卡片的相关知识,即 IC 卡与 ID 卡。
1)IC 卡(Integrated Circuit Card),也称智能卡 (Smart Card)、微芯片卡。常见的 IC 卡有二代身份证、手机 SIM 卡、校园一卡通等。分为非接触式 IC 卡与接触式 IC 卡。本文中 M1 卡为非接触式 IC 卡。
M1 卡
2)ID 卡(Integrated Circuit Card),即身份识别卡。ID 卡无法写入数据,只有固定的 ID 编号,无任何保密功能 。
总结:ID 卡是只读的,仅仅记录卡号,无法加密,故安全性低;IC 卡可以读写,可以加密,IC 卡数据的读取、写入等操作需相应的密码认证,卡片内每个区块有不同的密码保护(后文会详细讲解)。
2.IC 卡的分类
作为准备工作,首先需要确认卡片的类型,这关系到卡片是否能破解。
此处采用手机 App 查看卡片数据最为方便,前提是手机支持 NFC 功能。或者直接使用 PN532、ACR122u 读卡器(后续破解用到的设备)。当然,可以采取简单粗暴的方式 —— 通过观察卡片的外观来判断(方法请自行上网搜索,不再赘述),不过不一定准确。
通过 SAK,可以判断卡的类型,如下图所示:
红色方框内即为 SAK 信息
(使用 Mifare Classic Tool 软件查看,文末会给出下载链接)
其中:
SAK:08 为 M1 卡或 S50 卡 —— 通常可以破解
SAK:18 为 S70K 卡 —— 通常可以破解
SAK:20 为 CPU 卡 —— 无法破解
SAK:28 为 CPU 模拟卡 —— 模拟 M1 卡结构,极少部分可解
本文中所提到的 M1 卡,全称 NXP Mifare1 系列卡片,属于非接触式 IC 卡,常用于一卡通,公交等系统。常见的有卡式和钥匙扣式。如下图所示:
左为卡式,右为钥匙扣式
M1 卡的容量通常为 1KB(注意这里的单位是 bytes,而非 bit,换算为位的话应该是 8Kb)。虽然存储空间比较小,但 M1 卡的结构仍较为复杂。
3. 扇区与块
M1 卡共有 16 个扇区(0~15 扇区),每个扇区有 4 个块(0~3),每个块可以保存 16 字节的内容。即 16 (扇区)*4 (每个扇区有 4 个块)*16 (每块为 16 字节)=1024bytes=8192bits;
如下图所示:
某空白 M1 卡的第 4、5 扇区
其中第 0、1、2 个块用来存放数据,第 3 个块用来存放密钥。如上图所示,块的序号已用红色字体标注。密钥分为密钥 A 与密钥 B,密钥 A、B 中间的为控制位。
[控制位决定该块的访问权限,读者可自行查阅相关资料,本文不再赘述]
例如扇区 5 中块 3:其中”FF078069” 为控制位,左右侧密钥 A 与 B 相同,即”000000000000”(本例中所用的 M1 卡为空白卡,无任何数据和密钥)。
通常情况,只要知道了某扇区的块 3,就可以掌握本扇区的控制权限(读、写数据等)。同时,M1 卡的每个扇区都可以设置不同的密钥。
还有,每个 M1 卡都有唯一的序列号(UID),存放在 0 扇区 0 块中。其中,前 4 个字节为卡的 UID,第 5 个字节是校验位,剩下则为厂商数据,并且该块无法被修改(也有可修改的卡片,后文中将会提到)。
所以,若要读取和修改 M1 卡数据,首先必须先获得各个扇区的密钥,除非该卡片未加密。具体方法后文会详细阐述。
由此可见,能否破解 M1 卡密钥是破解整卡的关键因素。