-
-
[原创]当全加密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 混合卡似乎都存在有相同的问题。
确认的方式是通过后门密钥 A31667A8CEC1
、 A396EFA4E24F
等尝试是否能够读取数据。
如今,如今再使用 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期)