恢复 MIFARE Classic 密钥

如果使用 Read 功能无法读取 MIFARE Classic® 卡片的全部扇区,或者已读取的扇区不足以获得访问权限,你可以尝试利用 MIFARE Classic NFC 卡片的漏洞来获取访问权限。
本页将介绍如何在能否接触卡片的不同情况下执行 MFKey32 攻击,以及无需接触读卡器即可计算密钥的仅用卡片攻击。
MFKey32 攻击
MFKey32 攻击利用了 Crypto-1 加密算法中的弱点。MFKey32 是一种工具/算法的名称,用于从读卡器的 Crypto-1 nonce(一次性随机数)对中恢复 MIFARE Classic 密钥。其原理是恢复 Crypto-1 线性反馈移位寄存器的初始状态,该状态中包含密钥。
同时能接触读卡器和卡片时
执行 MFKey32 攻击的最佳方式是同时能接触到卡片,即使并非所有扇区都被读取也可以。获得读卡器的密钥后,你就能读取卡片更多的扇区,这些数据可能已足以获得访问权限。
要获取读卡器的密钥并读取 MIFARE Classic 卡片,请执行以下操作:
用 Flipper Zero 读取并保存卡片。
转到 Main Menu → NFC → Saved → 已保存卡片的名称 → Extract MF Keys。Flipper Zero 会模拟这张卡片以执行 MFKey32 攻击。

如下图所示,用 Flipper Zero 触碰读卡器。靠近读卡器时,Flipper Zero 会收集读卡器的 nonce。根据读卡器的不同,你可能需要多次触碰,直到收集齐全部 10 个 nonce。
在 Flipper Zero 屏幕上,每次触碰读卡器后,已收集的 nonce 对数量都应当增加。如果数量没有增加,说明读卡器并未尝试认证 Flipper Zero 模拟的卡片。

按 确认键%ok% 把收集到的 nonce 对保存到 microSD 卡。收集到所需数量的 nonce 对后,屏幕会显示 Completed 提示。之后,你可以按 确认键%ok% 查看捕获到的数据,包括数据所属的扇区和密钥。

从收集到的 nonce 中恢复密钥。可以通过以下方式完成:
Flipper Mobile App
- 在手机上运行 Flipper Mobile App 并与 Flipper Zero 同步。
- 转到 Tools → Mfkey32 (Extract MF Keys)。
Flipper Lab
- 使用 USB-C 数据线将 Flipper Zero 连接到电脑。
- 在电脑上访问 lab.flipper.net。
- 转到 NFC tools,然后点击 GIVE ME THE KEYS 按钮。
MFKey 应用
如果手边没有智能手机或电脑,你也可以只用 Flipper Zero 从收集到的 nonce 中恢复密钥。请注意,受设备算力限制,恢复密钥需要几分钟时间。
- 在 Flipper Zero 上转到 Main Menu → Apps → NFC。
- 运行 MFKey 应用,然后按 确认键%ok%。
恢复出的密钥会显示在屏幕上,之后可以添加到 User dictionary 中。在某些情况下,由于读卡器无法正确识别 Flipper Zero 的模拟,可能无法从 nonce 中恢复出密钥。
把新密钥添加到 User dictionary 后,请重新读取卡片。已找到的密钥数和已读取的扇区数可能会增加,这说明已经收集到所需数据。
模拟该卡片,并将 Flipper Zero 贴近读卡器以获得访问权限。

只能接触读卡器时
即使无法接触卡片,你也可以尝试获取读卡器的密钥,并把它们添加到 User dictionary 中以扩充字典。
要获取并保存读卡器的密钥,请执行以下操作:
转到 Main Menu → NFC → Extract MF Keys。Flipper Zero 会模拟一张 NFC 卡片以执行 MFKey32 攻击。

如下图所示,用 Flipper Zero 触碰读卡器。靠近读卡器时,Flipper Zero 会收集读卡器的 nonce。根据读卡器的不同,你可能需要多次触碰,直到收集齐全部 10 个 nonce。
在 Flipper Zero 屏幕上,每次触碰读卡器后,已收集的 nonce 对数量都应当增加。如果数量没有增加,说明读卡器并未尝试认证 Flipper Zero 模拟的卡片。

按 确认键%ok% 把收集到的 nonce 对保存到 microSD 卡。收集到所需数量的 nonce 对后,屏幕会显示 Completed 提示。之后,你可以按 确认键%ok% 查看捕获到的数据,包括数据所属的扇区和密钥。

从收集到的 nonce 中恢复密钥。可以通过以下方式完成:
Flipper Mobile App
- 在手机上运行 Flipper Mobile App 并与 Flipper Zero 同步。
- 转到 Tools → Mfkey32 (Extract MF Keys)。
Flipper Lab
- 使用 USB-C 数据线将 Flipper Zero 连接到电脑。
- 在电脑上访问 lab.flipper.net。
- 转到 NFC tools,然后点击 GIVE ME THE KEYS 按钮。
MFKey 应用
如果手边没有智能手机或电脑,你也可以只用 Flipper Zero 从收集到的 nonce 中恢复密钥。请注意,受设备算力限制,恢复密钥需要几分钟时间。
- 在 Flipper Zero 上转到 Main Menu → Apps → NFC。
- 运行 MFKey 应用,然后按 确认键%ok%。
恢复出的密钥和扇区编号会显示在屏幕上,之后可以添加到 User dictionary 中。在某些情况下,由于读卡器无法正确识别 Flipper Zero 的模拟,可能无法从 nonce 中恢复出密钥。
仅用卡片的攻击
这类攻击可以直接在卡片上进行,利用的是 MIFARE Classic 卡片的漏洞。攻击目标是恢复卡片的数据和密钥,从而可以克隆和模拟该卡片。
Flipper Zero 会根据卡片类型和可用数据执行多种仅用卡片的攻击:nested attack、static nested attack 和 hardnested attack。这些攻击从读取卡片阶段(NFC → Read)开始。如果读取失败,Flipper Zero 会收集并保存卡片 nonce,然后运行 MFKey 应用计算密钥。计算出的密钥会被添加到 MIFARE Classic 密钥的 User dictionary 中。
要获取卡片密钥并模拟卡片,请执行以下操作:
如果 MFKey 应用无法计算出密钥
- 同时长按 左方向键%left% 和 返回键%back% 5 秒重启 Flipper Zero。
- 删除存放已收集 nonce 的文件 /ext/nfc/.nested.log,然后重新收集 nonce 并运行 MFKey。
- 删除存放用户密钥的文件 /ext/nfc/assets/mf_classic_dict_user.nfc,然后重新收集 nonce 并运行 MFKey。此操作将永久删除所有用户密钥。如果你希望保留这些密钥,请在删除前把该文件下载到电脑备份。
MIFARE 和 MIFARE Classic 是 NXP B.V. 的注册商标。
