文章介绍了复某微发行的FM11RF08(S)卡存在的后门密钥和可预测随机数问题,以及由此引发的三种攻击方式。这些问题使得全加密卡在短时间内可被解密,除了更换卡片外,没有好的解决方案。文章还提到目前市面上的M1卡加密已形同虚设,CPU卡将是大势所趋。
复某微的FM11RF08(S)卡作为M1卡的对标卡,提供了数据加密保护。但相对于NXP原厂卡,它存在安全隐患,如NACK、Nested攻击等。
论文提到了三种攻击方式,包括利用官方API读取零扇区全部内容、利用后门密钥读取所有数据内容、利用可预测伪随机数进行全卡解密。
目前市面上存在工具可以测试卡片是否存在问题,并自动进行全卡解密转储。除了FM11RF08S,其他如M1卡和CPU混合卡也存在相同问题。如今使用M1卡不再安全,推荐使用CPU卡。
复某微发行的 FM11RF08(S) 作为 M1 卡的对标卡,其提供了对于数据的加密保护。相对于 NXP 原厂的卡,能够有效避免类如 NACK、Nested 攻击。
最初在 2024 年 8 月 12 日,来自夸克实验室的 Philippe Teuwen 发表了题目为MIFARE Classic: exposing the static encrypted nonce variant(https://eprint.iacr.org/2024/1275)的论文。在 2024 年 11 月 8 日的时候修订提交了第二版。在文章中,完整地描述了来自复某微 FM11RF08(S) 芯片存在后门密钥和可预测随机数的问题。通过这些问题,可以在很短的时间内解密全加密卡,除了全量更换卡片外,没有好的解决方案。
在论文中提到了三种不同的攻击方式,而目前大部分网上的推文都仅关注了一种方式,所以认为影响范围不大。而实际上,目前市面上的 M1 卡加密已经形同虚设,CPU 卡将是大势所趋。
在论文中提到了三种不同的攻击方式,用于不同的场景。
1. 利用官方 API 读取零扇区全部内容
这一种方式是最简单的,也是令我感到最奇怪的。这看起来似乎是官方预留的后门。将 0 块的数据发送到复某微提供的 API 接口,就可以获得整个零扇区的 keyA 密钥,而不论是否对零扇区进行加密。由于 0 块是不加密的,因此可以直接获得 0 块 ~ 3 块的全部数据。
wget -q --header="Content-Type: application/text; charset=utf-8"
--post-data "1C4C7563460804000475DE7AFD3B8890" -O -
https://rfid.fm-uivs.com/nfcTools/api/getKeyA | json_pp
{
"code" : 0,
"data" : "0543C7A1F992",
"message" : "success"
}
后面论文也提到,还发现了一个专用于读取零扇区的密钥A31667A8CEC1
。因此读取零扇区有以下三种方式,后面两种应当是不得存在量产卡中的:
1.通过预先设置的加密密钥
2.通过复某微 API 请求密钥
3.后门密钥
2、利用后门密钥读取所有数据内容
这里加了数据 限定是由于这种方法只能够读取所有的数据块内容,而不能够读取控制块的内容。
论文中提到,通过 fuzz 的方式获取到A396EFA4E24F
这一个密钥。如果使用该密钥对任一扇区进行鉴权,即可获得其他所有扇区的读取权。
hf mf ecfill -c 4 --key A396EFA4E24F
这个方案可以导出数据,也可以嗅探到 nonce,但是无法导出密钥,所以似乎是无法实现复制卡的。但是,事实上 Crypto-1 的加密算法强度并没有那么高,只要让读卡器认为密码正确就行了。因此,伪造卡的风险很高。
3、利用可预测伪随机数进行全卡解密
相对于前两种方法,这个方法我更倾向于是 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)
python fm11rf08s_recovery.py --port COM1
参考文献
Teuwen, P. (2024).MIFARE Classic: Exposing the Static Encrypted Nonce Variant. Cryptology ePrint Archive, Paper 2024/1275. Retrieved fromhttps://eprint.iacr.org/2024/1275
看雪ID:wx_张三_488
https://bbs.kanxue.com/user-home-903160.htm
*本文为看雪论坛优秀文章,由 wx_张三_488 原创,转载请注明来自看雪社区