该内容由部分转载和部分自己见解。整理出来方便小白和自己后期使用。

M1卡介绍

这次我们主要介绍的是非接触式IC卡。M1卡就是非接触式IC卡中应用最广泛的卡。M1卡就是Mifare非接触式感应卡,M1卡数据保存期为10年,可改写10万次,读无限次。无电源,自带天线,工作频率为13.56MHZ.M1卡内含加密控制逻辑和通讯逻辑电路。M1卡主要有两种,一种是S50和一种是S70。主要应用:门禁、考勤、会议签到、身份识别、物流、工业自动化、各种会员卡、如售饭、地铁、公交代币卡、俱乐部等电子消费、电子门票、动物识别、目标跟踪、洗衣管理、各种一卡通等等。

M1卡存储空间

M1卡分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位。每个扇区的块0、块1、块2为数据块,可用于存储数据。而每个扇区的块3为控制块,包括密码keyA,存取控制,密码keyB。存取控制的作用是控制对应扇区记录的读写权限与keyA和keyB的关系。由于每个扇区都有独立的key和存取控制,因此M1卡可以做到一卡多用互不干扰。

每一张M1卡的0扇区0块都称作绝对地址块,这一串是在卡片出厂时厂商赋予的,代表着这张卡独立的身份识别信息。绝对地址块的内容已被固化,无法更改。

M1卡控制位计算

以下为控制位的结构,前6位为密钥A,中间4位存取控制,后6位密钥B。

例如   A1A2A3A4A5  FF078069  B1B2B3B4B5

               密码A           控制位          密码B

             字节0-5          字节6-9      字节10-15

4位控制位中前3位是真实的控制位,第4位是备用控制位,一般用不上,因此我们可以只分析前3位。

三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限。1个字节等于8个比特,而一个扇区有4个块,每个块有3个控制位,以下是控制位以比特形式的结构图,_b表示取反存储,这边用红色字体已标出。

以FF078069默认控制位为例,我们将FF078069的16进制转化为2进制如下:

FF=11 1 1 1 1 1 1;07= 0 0 0 0 0 1 1 1;80=1 0 0 0 0 0 0 0 ;69=忽略

将以上的2进制数填入表格:

将取反的数再次取反以获得原来的控制位:

存取控制中每个块都的三个控制位定义如下,同时填入上表数据:

块0,块1,块2控制位均是000,存取控制权限可对应以下表:

块3控制位001,存取控制对应如下表:

可见块0,块1,块2通过密钥A或者密钥B认证后可读,可写,可进行加值和减值操作。块3密钥A不可读,但可通过认证密钥A或B修改。验证密钥A或者密钥B后,可读可改写存取控制。验证密钥A或者密钥B后,可读可改写B密码。

综上,存取控制FF078069极不安全,我们可以自定义存取控制进行修改,只要利用上述步骤将想要的控制位列出逆向推回去即可。

M1卡认证原理

这里介绍M1卡的认证原理即三轮认证。三轮认证是保障M1卡安全的重要手段,整个过程采用Crypto-1算法加密。以下是三轮认证的过程。

1. 读写器指定要访问的区,向卡发送身份验证请求,并选择密钥A或B。

2. 卡从位块读取密钥和存取控制条件。然后,卡向读写器发送明文4字节随机数Nt。(第一轮)

3. 读写器利用密钥和随机数Nt计算生成一个新随机数Nr,并将两个随机数一起加密为8个字节的数据发送给卡片。(第二轮)。

4. 卡解密得到Nt与Nr,验证Nt,若通过再一次加密Nr并发送给读卡器(第三轮)。

5. 读写器解密得到Nr,验证通过。

三轮认证在其原理上是可靠的,但是外国研究人员发现了该算法伪随机数生成的漏洞,使得加解密所用到的伪随机数可被正确预测,从而逆向计算出了三轮认证中的扇区密钥。该漏洞的利用在后面会讲到。。。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐