首页
社区
课程
招聘
[原创]当全加密M1卡沦陷之后……
发表于: 15小时前 935

[原创]当全加密M1卡沦陷之后……

15小时前
935

复某微发行的 FM11RF08(S) 作为 M1 卡的对标卡,其提供了对于数据的加密保护。相对于 NXP 原厂的卡,能够有效避免类如 NACK、Nested 攻击。

最初在 2024 年 8 月 12 日,来自夸克实验室的 Philippe Teuwen 发表了题目为 MIFARE Classic: exposing the static encrypted nonce variant 的论文。在 2024 年 11 月 8 日的时候修订提交了第二版。在文章中,完整地描述了来自复某微 FM11RF08(S) 芯片存在后门密钥和可预测随机数的问题。通过这些问题,可以在很短的时间内解密全加密卡,除了全量更换卡片外,没有好的解决方案。

在论文中提到了三种不同的攻击方式,而目前大部分网上的推文都仅关注了一种方式,所以认为影响范围不大。而实际上,目前市面上的 M1 卡加密已经形同虚设,CPU 卡将是大势所趋。

在论文中提到了三种不同的攻击方式,用于不同的场景。

这一种方式是最简单的,也是令我感到最奇怪的。这看起来似乎是官方预留的后门。将 0 块的数据发送到复某微提供的 API 接口,就可以获得整个零扇区的 keyA 密钥,而 不论 是否对零扇区进行加密。由于 0 块是不加密的,因此可以直接获得 0 块 ~ 3 块的全部数据。

后面论文也提到,还发现了一个专用于读取零扇区的密钥 A31667A8CEC1。因此读取零扇区有以下三种方式,后面两种应当是 不得 存在量产卡中的:

通过预先设置的加密密钥

通过复某微 API 请求密钥

后门密钥

这里加了 数据 限定是由于这种方法只能够读取所有的数据块内容,而不能够读取控制块的内容。

论文中提到,通过 fuzz 的方式获取到 A396EFA4E24F 这一个密钥。如果使用该密钥对 任一 扇区进行鉴权,即可获得其他 所有 扇区的读取权。

这个方案可以导出数据,也可以嗅探到 nonce,但是无法导出密钥,所以似乎是无法实现复制卡的。但是,事实上 Crypto-1 的加密算法强度并没有那么高,只要 让读卡器认为密码正确 就行了。因此,伪造卡的风险很高。

相对于前两种方法,这个方法我更倾向于是 Crypto-1 算法和芯片设计缺陷。

由于历史的局限性,当时并没有办法实现高强度的加密握手。而且,NFC 卡本身不内置电源,且功耗极其有限,因此在当时没有办法使用真随机数发生器采集足够的熵源,于是采用了 LFSR 的方式生成伪随机数序列用于握手 nonce。(当然,随着时代发展,一些加密算法被硬件实现,其功耗能做到很低,安全性又很高。因此现在 CPU 卡在没有后门的情况下,基本是不太可能被攻破的)

不过,尽管 Crypto-1 算法先天具有一定问题,但是,在全加密的情况下想要破解,也是需要很长的时间。而复某微似乎在特定情况下,会将 同一个 明文使用两个 不同的 密钥进行加密,因此给破解带来了很大的便利。

论文作者给出了一个脚本,但是没有提供预编译的工具。于是现在对 Windows 环境进行了适配,kazutoiris/pm3-fudan 里面提供了脚本和相关工具,用于在 Windows 上测试当前的卡是否存在问题,如果存在问题将会自动全卡解密转储。(你需要提前拥有 PM3)

经过测试,之前一些全加密无漏洞卡只需要 5 分钟左右就可以全部转储。

之前认为只有 FM11RF08S 一款受到影响,但是通读论文后,发现相关的 M1 卡、CPU 混合卡似乎都存在有相同的问题。

确认的方式是通过后门密钥 A31667A8CEC1A396EFA4E24F 等尝试是否能够读取数据。

如今,如今再使用 M1 卡已经不再安全,而 CPU 卡的价格也并没有非常高昂,全面更新卡片是 极其必要 的。

kazutoiris/pm3-fudan 里面提供了脚本和相关工具,用于在 Windows 上测试当前的卡是否存在问题,如果存在问题将会自动全卡解密转储。(你需要提前拥有 PM3)

Teuwen, P. (2024). MIFARE Classic: Exposing the Static Encrypted Nonce Variant. Cryptology ePrint Archive, Paper 2024/1275. Retrieved from https://eprint.iacr.org/2024/1275


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 15小时前 被wx_张三_488编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//