恢复 MIFARE Classic 密钥
如果使用 read https //docs flipper net/zero/zh/nfc/read 功能无法读取 mifare classic® 卡片的全部扇区,或者已读取的扇区不足以获得访问权限,你可以尝试利用 mifare classic nfc 卡片的漏洞来获取访问权限。 本页将介绍如何在能否接触卡片的不同情况下执行 mfkey32 攻击,以及无需接触读卡器即可计算密钥的仅用卡片攻击。 mfkey32 攻击 mfkey32 攻击 利用了 https //www cs bham ac uk/ garciaf/publications/dismantling mifare pdf crypto 1 加密算法中的弱点。mfkey32 是一种工具/算法的名称,用于从读卡器的 crypto 1 nonce(一次性随机数)对中恢复 mifare classic 密钥。其原理是恢复 crypto 1 线性反馈移位寄存器的初始状态,该状态中包含密钥。 同时能接触读卡器和卡片时 执行 mfkey32 攻击的最佳方式是同时能接触到卡片,即使并非所有扇区都被读取也可以。获得读卡器的密钥后,你就能读取卡片更多的扇区,这些数据可能已足以获得访问权限。 要获取读卡器的密钥并读取 mifare classic 卡片,请执行以下操作: 用 flipper zero 读取并保存卡片 https //docs flipper net/zero/zh/nfc/read 。 转到 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 https //docs flipper net/zero/zh/mobile app 并与 flipper zero 同步。 转到 tools > mfkey32 (extract mf keys) 。 flipper lab 使用 usb c 数据线将 flipper zero 连接到电脑。 在电脑上访问 lab flipper net https //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 后,请 重新读取卡片 。已找到的密钥数和已读取的扇区数可能会增加,这说明已经收集到所需数据。 模拟该卡片 https //docs flipper net/zero/zh/nfc/read#nfc 1 ,并将 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 https //docs flipper net/zero/zh/mobile app 并与 flipper zero 同步。 转到 tools > mfkey32 (extract mf keys) 。 flipper lab 使用 usb c 数据线将 flipper zero 连接到电脑。 在电脑上访问 lab flipper net https //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 卡片的漏洞 https //eprint iacr org/2024/1275 pdf 。攻击目标是恢复卡片的数据和密钥,从而可以克隆和模拟该卡片。 flipper zero 会根据卡片类型和可用数据执行多种仅用卡片的攻击:nested attack、static nested attack 和 hardnested attack。这些攻击从读取卡片阶段(nfc > read)开始。如果读取失败,flipper zero 会收集并保存卡片 nonce,然后运行 mfkey 应用计算密钥。计算出的密钥会被添加到 mifare classic 密钥的 user dictionary 中。 要获取卡片密钥并模拟卡片,请执行以下操作: 读取卡片以收集 nonce。 转到 more > crack nonces in mfkey32 。 按 save 保存卡片。 按 run 打开 mfkey https //lab flipper net/apps/mfkey 应用。 按 确认键 %ok% 开始计算。 等待从收集到的 nonce 中计算出卡片密钥—— 这需要几分钟时间 。之后,新密钥会自动添加到 user dictionary 中。 重新读取卡片,解锁此前受该密钥保护的扇区。 模拟该卡片 https //docs flipper net/zero/zh/nfc/read#nfc 1 ,并将 flipper zero 贴近读卡器以获得访问权限。 如果 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 的注册商标。