MIFARE Classic EV1 1K Crad 探索、复制、与解密
MIFARE Classic EV1 代表了 MIFARE Classic 产品系列的最高演进阶段,继承了所有以往版本的优良特性。它提供
1K
和4K
内存版本,分别满足不同应用需求
👆🏻来自 MIFARE官网
介绍中的 1k
和 4k
为内存容量,比较常见的为 1k
版本
通过这张来自 APP:NFC tools
的截图可以得到刚刚扫描卡片的标签类型为 MIFARE Classic 1K
上世纪的 Crypto1
算法已不安全
在 2008 年,研究人员通过切割芯片并用显微镜拍照的方式,逆向工程了 MIFARE Classic
芯片,并恢复了CRYPTO1
算法。在同一时期,其他研究人员采用软件导向方法,恢复了密码和通信协议的逻辑描述。特别是研究了 CRYPTO1
流密码的可塑性,以读取卡片的第一个扇区的所有存储块。这些先前工作的结果是对身份验证协议和加密算法的完全逆向,从而导致了多个漏洞的识别。主要漏洞之一是卡片用于生成发送给读卡器的随机数的伪随机数生成器 (PRNG
) 的设计不佳,因为可以预测卡片将使用的下一个随机数。
the Netherlands about a new card-only attack on the Crypto1 algorithm
简而言之对 Crypto1
的攻击方法为:已知卡上一个秘钥,即可导出其他所有秘钥
受影响的产品包括
- MIFARE Classic®,
- MIFARE Plus® in Security Level1 only,
- data being encrypted with Crypto1 on emulations,
- licensed products to third parties and
- counterfeit products using the Crypto1 algorithm.
官方表示已有改进方式
但使用此算法的卡直至 2023 年仍被广泛使用
👇🏻官方介绍汉化
数据完整性
以下机制是在非接触式通信链路之间实现的
读卡器和卡确保数据传输非常可靠;
•每块16位CRC
•每个字节的奇偶校验位
•位计数检查
•用位编码区分“1”、“0”和“无信息”
•通道监控(协议序列和位流分析)
内存构造
1024 × 8位EEPROM存储器由4个块组成16个扇区。一个块包含16个字节
格式如下
Manufacturer block (制造商块/扇区)
This is the first data block (block 0
) of the first sector (sector 0
). It contains the IC manufacturer data. This block is programmed and write protected in the production test. The manufacturer block is shown in Figure 6 and Figure 7 for the 4-byte NUID and 7-byte UID version respectively.
汉化: 这是第一个扇区(
扇区0
)的第一个数据块(块0
),它包含 IC 制造商的数据。该块在生产测试中被编程和写保护。图6
和图7
分别显示了4字节
的NUID
和7字节
的UID
版本的制造商块。
复制卡的注意事项(以下知识多数来自淘宝评论区看到的图片)
0
扇区不能随意读写,0
扇区的数据规则如上,0
扇区写不符合算法规则的数据会导致卡片锁死
byte0
- byte3
为 UID
byte4
为 check byte 算法 byte4 = byte0 byte1 byte2 byte3
为异或符号,不懂的话百度即可
byte4
计算代码,语言为 Python, 没有环境的话用计算器算就好了
rawUID = '33:44:55:66' # str类型, 假设这是你的UID, 记得替换为自己的UID
source = rawUID.split(':') # 切片到list
source = [int(i, 16) for i in source] # hex转int, hex本身可以xor 但这里是str类型 所以用16进制的规则将其转为int
# celc byte4
temp = source[0]
for i in range(1, 4):
temp = temp ^ source[i]
print(str(hex(temp))[2:].upper()) # hex转str, 去掉0x, 大写
byte5
为 0x08
byte6
为 0x04
byte7
为 0x00
byte5
、byte6
、byte7
是 m1
卡片类型不可随意更改,否则容易把卡写死
至此 dump
原卡 UID
计算 byte4
后将前 5 字节写入新卡即可,不过这仅仅是按照 UID
是识别的卡的复制方案
至于读加密区数据的卡,还需要解密后再写入白卡(下次再写)
引用:
-
the Netherlands about a new card-only attack on the Crypto1 algorithm
-
MIFARE Classic EV1 1K - Mainstream contactless smart card
IC for fast and easy solution development
未引用但同样值得一看: