1. 背景
最近在学习了解 RFID 射频卡的安全,在搜遍了 Google/Baidu 之后,发现无论中文社区还是英文社区,对 RFID 安全的介绍都很难找到一篇大而全的介绍文章,维基百科甚至还出现了前后矛盾的词条 :)
同时又由于各个 RFID 芯片厂商多采用自家的专有协议,ISO 国际化标准不完善,中文安全圈围绕着 Proxmark3 讲来讲去(抄来抄去)没有几篇能够系统介绍RFID安全的,硬件圈共享出来的相关资料也是少之又少,名词、术语混用的不规范现象司空见惯;
因此决定整理这篇文章,侧重 RFID 相关概念梳理、卡片家族介绍、攻击方式介绍以及卡片选型建议,不包含具体的卡片攻击破解教程(请合理使用搜索引擎)
2. RFID 射频卡常见概念介绍
2.1 相关协议介绍
-
ISO 14443
非接触集成电路卡(距离10cm左右),也有资料称其为身份识别卡 Identification cards,定义了 TYPE A, TYPE B 两种类型协议,工作频率均为 13.56MHz,通信速率为106kbit/s,二者不同主要在于载波调制方式、数据编码方案以及协议初始化过程。1231) TYPE A采用开关键控(On-Off keying)的Manchester编码 ==> 常见于MIFARE Classic系列(M1)以及后续兼容系列卡片2) TYPE B采用NRZ-L的BPSK编码 ==> 常见于 CPU 卡,如 Atmel的CryptoRF芯片和二代身份证等因此:TYPE B 与 TYPE A相比,具有传输能量不中断、速率更高、抗干扰能力强(通过冗余校验)的优点。二代身份证采用的就是 IS014443 TYPE B协议(仅兼容ISO14443部分协议,具体见下文 4.2 节)
-
ISO 15693
同 ISO 14443 一样工作在13.56MHz的频率下,工作距离提高到1~1.5米,调制方式、冲突检测机制等均存在差异 -
ISO 10536
主要发展于1992到1995年间,由于这种卡的成本高,与接触式IC卡相比优点很少,因此这种卡从未在市场上销售 -
ISO 7816
识别卡/智能卡,(带触点的)接触式集成电路卡,其中 ISO/IEC 7816-4:2013 定义了数据安全交互规范,不仅适用于接触式智能卡,同样适用于ISO14443和ISO15693两种协议的非接触式卡片 -
ISO/IEC 18092
这个标准规定的是近场通信卡(Near Field Communication),这个标准与ECMA-340是同一标准,而ECMA的标准文档是可以免费获取的。这个是比前面两个要新的一种技术
2.2 主要卡片类型
RFID 射频卡的分类非常混乱,以及由于部分没有ISO标准支持,业界对名词、术语的使用也非常随意,不同维度的分类相互交错,界限模糊; 下面分类经充分梳理后仍明显存疑,仅供参考
2.2.1 按供电方式分
-
被动式
-
被动式低频卡,(proximity cards), 工作在 125kHz,存储空间有限(与传统磁条卡大致相当),主要存储不可写的ID信息,常被称为ID卡(HID), 多作门禁卡用; 相关卡片均为私有协议;工作距离< 50cm;
-
被动式高频卡,(contactless smartcards), 工作在13.56MHz,存储容量较大,被称为IC卡,甚至具有CPU、RAM等组件(CPU卡),可作图书馆、支付等用途;主要协议为ISO 14443 A/B、15693、18000;工作距离<10cm;
-
-
主动式 (下面两种分类从维基百科摘录,部分准确性存疑)
-
主动式低频卡,(vicinity cards), 工作在125kHz,由内置锂电池供电,工作距离 <2m;
(维基百科将这种125kHz主动式卡片称为vicinity cards(https://en.wikipedia.org/wiki/Proximity_card#Active_cards),而vicinity cards词条页面直接跳转IEC_15693词条页面,并显示其工作在13.56MHz且为被动式供电。这里我认为这是一个错误,vicinity cards应该指的是工作在13.56MHz下的被动式卡片,已经编辑了词条添加”dubious“提示) -
主动式超高频卡,如UHF (Ultra High Frequency),工作在860~ 960 Mhz,工作距离>10m,常用在车辆身份识别场景(如停车场等)
(参考:https://en.wikipedia.org/wiki/Proximity_card
-
2.2.2 按工作距离分
-
密耦合卡: Close-Couple ICC, 作用距离 <2cm
-
近耦合卡: Proximity ICC, 多使用 ISO 14443 协议,作用距离 < 15cm;
-
疏耦合卡: Vicinity ICC, 被动式高频非接触卡,工作在13.56MHz下,多使用 ISO 15693协议,传输距离约 1m
-
远距离卡: 作用距离 >10m
(参考1:https://www.rfidjournal.com/blogs/experts/entry?11851
(参考2:http://blog.sina.com.cn/s/blog_c27e00840101j94z.html
2.2.3 按安全水位分
-
存储器卡
包括IC卡或ID卡,只能简单地读写信息,无加解密功能;比如上面提到的ID卡,可以理解为一种低频只读卡; 而 MIFARE Ultralight 则为一种高频的读写卡。 -
逻辑加密卡
IC卡,存在读写操作需要验证密钥,比如常见的MIFARE Classic系列卡片(Classic 系列存在多种有效攻击方式,Plus 系列在使用AES的情况下暂无有效攻击方式) -
CPU卡
读写操作需要验证口令,但是卡片内具有CPU、RAM、COS系统、DES/AES硬件加密协处理器器等组件可进行加解密计算,具备更安全严格的访问管理控制能力;
其一般会支持 ISO 7816-4 数据交互规范,而在无线电调制方式上多采用 ISO 14443 A/B 协议;(比如复旦 FM1208 CPU卡,使用 ISO14443 A 协议,且可将部分扇区模拟成M1卡片;而二代身份证部分兼容 ISO14443 B协议) -
CPU模拟M1卡
这是一个特殊的卡片类型,使用CPU卡中的某一段存储空间来模拟M1卡的存储空间,以实现对M1卡片设备的兼容(JCOP系列、复旦 FM1208 系列)
2.2.4 按读写方式分
-
只读: 卡片信息只读,常见卡片为低频ID卡,仅存储唯一的卡片 ID 号(台湾 EM4XX 系列卡、美国HID卡等)
-
读写: 卡片信息可以反复读写,比如高频 MIFARE classic 系列卡片
-
只写一次: 卡片仅允许一次性写入,写入后不可更改,读取不受限制(MIFARE Ultralight 系列(属于高频卡)
2.3 MIFARE 卡片家族介绍
-
MIFARE Classic family
该家族仅为简单的存储器卡,又被称为 M1 卡,其存储空间被划分为扇区(sector)和块(block),仅兼容 ISO14443 Type A 的 1~3部分,并通过私有协议(Crypto-1, 已被破解)进行简单的认证和访问控制。
最初在1994年发布,由于旧 Classic 卡片存在数个可被攻破的漏洞,NXP于2011年发布了 MIFARE Classic EV1(目前官网仅有此版本在售卖)-
MIFARE Classic 1K,具备1KB存储空间,分为16个扇区 ==> 被称为S50
-
MIFARE Classic 4K,具备4KB存储空间,分为32 + 8个扇区,32个扇区同M1扇区大小相同,剩余8个扇区为其他扇区4倍大小 ==> 称为S70
-
MIFARE Classic Mini, 具备320B存储空间,分为5个扇区
-
MIFARE Classic EV1,hardened 安全加固升级版本,兼容 classic 系列卡片,但是解决了由弱“伪随机数生成器”导致的 nested 攻击,和 darkside 侧信道攻击。 但后来又演变出了新的攻击方式,见下文详细介绍。
-
-
MIFARE Plus family
2008年发布,支持AES、用于替换MIFARE Classic产品线的新一代卡片,兼容 Classic 系列卡片,子类包括:MIFARE Plus S, MIFARE Plus X , MIFARE Plus SE。
但是由于为了兼容Classic系列卡片的读卡器(这些读卡器不支持AES),仍允许使用 Crypto-1 加密算法,虽然可以抵抗针对伪随机数发生器的攻击,但是无法抵御暴力破解和其他密码分析攻击。在启用不同程度的AES认证、加密等级后,分别可以解决卡片伪造、卡片读取等安全问题- MIFARE Plus EV1, 发布于2016年,优于MIFARE Plus X的地方主要有:支持每个扇区设置不同的认证算法(兼容Classic系列读卡器);支持ISO 7816-4数据交互规范;其他加密相关的改进。
- MIFARE Plus EV1, 发布于2016年,优于MIFARE Plus X的地方主要有:支持每个扇区设置不同的认证算法(兼容Classic系列读卡器);支持ISO 7816-4数据交互规范;其他加密相关的改进。
-
MIFARE Ultralight family
发布于2001年,UID占 7 Bytes 空间,存储空间大小不一,分为多个 4 Bytes 大小的pages,系列卡片均具备写保护功能;十分廉价常用于一次性认证场景(如2006年世界杯门票)-
MIFARE Ultralight Nano, 发布于2001年,共40字节存储空间,具备写保护功能,不支持加密;
-
MIFARE Ultralight EV1,发布于2012年,主要是针对原始版本的容量大小更新(48、128字节两种版本)、计数器等功能增加,兼容旧版卡片;支持密码认证(32bit 密码)
-
MIFARE Ultralight C, 发布于2008年(确实早于EV1,且功能强于EV1), 144字节存储空间,增加了3DES加密能力,密钥长度112bit; 支持密码认证 (3-pass mutual), 可有效解决卡片克隆问题(存疑)
-
-
MIFARE DESFire family
(MF3ICD40)发布于2002年,于 2010 年停止维护。2011 年被证明存在可实施的侧信道攻击(MIFARE DESFire attacks)
属于 CPU 卡片,具备卡片操作系统(COS),提供简单的文件目录访问功能。使用兼容ISO14443-4的协议,具备3DES/AES硬件加密协处理器-
初始版本:仅支持3DES,具有4KB存储空间
-
MIFARE DESFire EV1,(MF3ICD41)发布于2006年,2008年上市;支持随机ID、3DES、128bit AES,具备2KB、4KB、8KB 三个版本
-
MIFARE DESFire EV2,发布于2016年,数个安全功能升级
-
-
MIFARE SAM AV2
接触式卡片,发布于2010年,具备公钥基础设施PKI、hash算法(sha-1,sha-256等)、各种加密算法(2048bit RSA、192bit AES、168bit 3DES、Crypto-1等)。
该卡片一个主要应用场景为:将其嵌入到非接触式卡片中,这样便获得了一个具备高级加密能力的非接触式卡片
(可以参考国内银联闪付,闪光灯下可见线圈连入了接触式IC内)
2.5 Legic 卡片家族介绍
#TODO
3. 已知攻击方式
3.1 MIFARE Classic 卡片(M1)
-
1) 默认密码攻击,很多卡片在制作发行的时候使用了默认的密钥(FFFFFFFFFFFF),或者其他一些常用的弱密码;另外很多厂家只是加密了部分存有数据的扇区,其他扇区仍旧使用默认密码,这就给下面的Nested攻击提供了入口;
-
2) Nested 攻击,利用 MIFARE Classic 卡片伪随机数生成器(PRNG)的缺陷,Nested 攻击可以借助一个认证成功的扇区来获知其他扇区的密钥(知一密得全密);
(Refer:Wirelessly Pickpocketing a Mifare Classic Card -
3) Darkside 攻击,通过卡片认证错误时返回的错误码(0x5,只有4 bit)获知加密用的 keystream,控制部分条件的情况下不断进行认证,最终得到完整的keystream。 存在多个类似攻击的论文,其中Darkside在Proxmark3下耗时约1分钟。
(Refer 1:THE DARK SIDE OF SECURITY BY OBSCURITY and Cloning MiFare Classic Rail and Building Passes, Anywhere, Anytime
(Refer 2: A practical attack on patched MIFARE Classic
(Refer 3: MiFare Classic Universal toolKit (MFCUK)
3.2 MIFARE Classic hardened 卡片( M1 修复版 EV1、Plus 兼容 M1 即 SL1、CPU模拟M1)
-
1) 默认密码攻击 <略>
-
2) Hardnested 攻击, 于 2015 年公开的针对 Crypto-1 算法的利用途径,同样需要已知一个扇区的密钥来解出其他扇区的密钥,速度比 Nested 攻击慢,Proxmark3 下面破解一个扇区密钥需要数十秒
(Refer 1: Ciphertext-only Cryptanalysis on Hardened Mifare Classic Cards
(Refer 2: Mifare Classic Plus - Hardnested Attack Implementation for SCL3711 LibNFC USB reader -
3) 嗅探攻击, 无论是 MIFARE Classic 还是 MIFARE Classic EV1,均可以在读卡器处嗅探通讯数据并破解出密钥。(常用硬件设备:Proxmark3、Chameleon 变色龙)
3.3 MIFARE DESFire 卡片
- 侧信道攻击, 由于最初版本的 DESFire 卡片仅支持 3DES 加密,因此研究者们通过侧信道攻击成功获取了密钥
(Refer 1: https://en.wikipedia.org/wiki/MIFARE#MIFARE_DESFire_attacks
(Refer 2: Cloning Cryptographic RFID Cards for 25$
(Refer 3: Breaking Mifare DESFire MF3ICD40: Power Analysis and Templates in the Real World
3.4 MIFARE Ultralight 卡片
4. 生活中的卡片
4.1 常见的卡片复制/克隆场景
-
手机/手环模拟简单门禁卡
这种情况多数为仅检查卡片ID的M1卡场景,只需要让手机、手环模拟出卡片的ID即可; 大多数NXP芯片或博通芯片的NFC手机需要root权限去修改系统配置文件实现 -
手机/手环模拟加密 M1 卡
加密M1卡的场景下,在破解了M1卡的扇区密钥之后,将卡片内容dump出来,然后写入手机使用特定软件进行模拟,支持该种操作的手机型号较少,操作过程也稍微复杂
(Refer: 使用pm3及变色龙获取加密卡信息写入小米手环NFC版 -
白卡克隆 M1 卡
无论对于加密或者未加密的M1卡片,成功破解之后,即可写入空白的卡片; 这里涉及到几个概念:-
普通 M1/S50 卡:卡片ID所在 block 0,无法修改;
-
UID 卡(Gen1) : 所有block可读写,卡片ID需要特殊的后门指令进行更改,因此可被读卡设备检测到是克隆卡;
-
CUID 卡(Gen2):所有block可读写,卡片ID所在 block 0 读写方式同其他扇区,不易被读卡设备发现;
-
FUID 卡: 卡片ID所在 block 0 仅可写入一次,使用普通写指令即可完成,无法被读卡设备检测出未克隆卡;
-
-
白卡克隆低频ID卡
主要针对 EM4XX 和 HID 系列低频卡,此种低频卡只读、无加密,且仅存储卡片ID号,可使用低频白卡来进行克隆,如电商网站售卖的 T5577 卡片
4.2 生活中常见的卡片(非接触射频卡部分)
卡片 | 芯片厂商 | 兼容协议(Taginfo读取) | 卡片信息(PM3读取) | 卡片类型(根据SAK和ATQA猜测) | 是否可破解 | 备注 |
---|---|---|---|---|---|---|
上海公交卡 (2018) |
复旦微电子 | ISO7816-4 ISO14443-3 (Type A) ISO14443-4 (Type A) |
UID: 4 字节 ATQA : 00 08 SAK : 20 [1] TYPE : NXP MIFARE DESFire 4k | DESFire EV1 2k/4k/8k | Plus 2k/4k SL3 | JCOP 31/41 Prng detection error |
复旦 CPU 卡 (SAK: 20) |
No | PSE (Payment System Environment); 可看到卡片余额 |
北京公交卡 (市政一卡通, 2018) |
未知 | UID: 4 字节 ATQA : 00 08 SAK : 20 [1] TYPE : NXP MIFARE DESFire 4k | DESFire EV1 2k/4k/8k | Plus 2k/4k SL3 | JCOP 31/41 Prng detection error |
复旦 CPU 卡 (SAK: 20) |
No | ||
南京公交卡 (智汇金陵通, 2015) |
未知 | ISO7816-4 ISO14443-3 (Type A) ISO14443-4 (Type A) |
UID: 8 字节 ATQA : 03 44 SAK : 20 [1] TYPE : NXP MIFARE DESFire 4k | DESFire EV1 2k/4k/8k | Plus 2k/4k SL3 | JCOP 31/41 Prng detection error |
DESFire CPU卡 (SAK: 20) ATQA: 03 44) |
No | PSE (Payment System Environment); 不可见余额 |
杭州市民卡 (2017) |
接触式IC:未知 射频 IC:NXP |
MIFARE Classic ISO14443-2 (Type A) ISO14443-3 (Type A) |
UID : 4 字节 ATQA : 00 04 SAK : 08 [2] TYPE : NXP MIFARE CLASSIC 1k | Plus 2k SL1 Prng detection: HARDENED (hardnested) |
射频 IC: M1卡 (HARDENED 表明其为:EV1版本) |
Yes (M1部分可破解) (hardnested 攻击) |
独立的接触式IC芯片作为社保、医保身份识别, 独立的非接触式 M1 芯片作为公交卡身份识别(暂未确定余额数据是否写入卡片) |
招行银联卡 (闪付+一卡通) |
NXP | ISO7816-4 ISO14443-2 (Type A) ISO14443-3 (Type A) ISO14443-4 (Type A) |
UID : 4 字节 ATQA : 00 04 SAK : 28 [1] TYPE : JCOP31 or JCOP41 v2.3.1 Prng detection: HARDENED (hardnested) |
CPU卡 CPU模拟M1 (SAK: 28) |
Yes (M1部分可破解) (hardnested 攻击) |
M1所有扇区默认未加密,无数据; 最近10笔交易未保存在M1模拟区域,需采用特殊指令与COS交互读取; |
中国银行 (闪付) |
未知 | ISO7816-4 ISO14443-3 (Type A) ISO14443-4 (Type A) |
UID: 4字节 ATQA : 00 04 SAK : 28 [1] TYPE : JCOP31 or JCOP41 v2.3.1 Prng detection: HARDENED (hardnested) |
CPU卡 CPU模拟M1 (SAK: 28) |
Yes (M1部分可破解) (hardnested 攻击) |
同上 |
杭州银行 (闪付) |
未知 | ISO7816-4 ISO14443-3 (Type A) ISO14443-4 (Type A) |
UID: 4字节 ATQA : 00 04 SAK : 28 [1] TYPE : JCOP31 or JCOP41 v2.3.1 Prng detection: HARDENED (hardnested) |
CPU卡 CPU模拟M1 (SAK: 28) |
Yes (M1部分可破解) (hardnested 攻击) |
同上 |
二代身份证 | 未知 | ISO14443-3 (Type B) | UID: 00 00 00 00 App Data: XX XX XX XX Protocol: 00 80 90 Bit Rate: 106 kbit/s only PICC <-> PCD Protocol Type: Protocol is not compliant with ISO/IEC 14443-4 App Data Code: Application is Proprietary Frame Options: NAD is not supported Frame Options: CID is not supported Max Buf Length: 0 (MBLI) not supported |
CPU 卡 | No | 二代身份证仅兼容 ISO14443-3 B 协议,未兼容 ISO14443-4; 其自定义了选卡协议,详细参考:怎么读取二代身份证UID GA467-2013 居民身份证验证安全控制模块接口技术规范 |
5. RFID 卡片技术方案选型建议
5.1 如果你要用简单的 ID 卡
-
对于 HID、EM4XXX 等低频ID卡,或者 MIFARE Ultralight Nano 高频 ID 卡,不建议使用这种不支持加密、认证的卡片;(建议采用升级版的 MIFARE Ultralight C)
-
开发应用程序的时候请酌情评估卡片 ID 被克隆导致的后果
5.2 如果你还是要用 M1 卡
-
杜绝使用老版本的 MIFARE Classic 卡片
-
使用 MIFARE Classic EV1 版本,但必须将全部扇区加密并使用强密钥;建议不同卡片使用不同的密钥;(单张卡片上使用动态密钥的方案可有可无)
-
在卡片中使用保存滚动码、计数器、时间戳等数据,每次刷卡均校验并更新该值;防止卡片克隆(克隆并使用之后,会导致原卡片数据不同步而被发现)
-
支付场景下,请在 Server 端进行数据校验(余额、消费记录等)
(通过以上方式,可以在一定程度上解决对卡片本身的破解、克隆攻击,只有监听读卡过程中的通讯才能破解、克隆卡片,但克隆卡的使用会导致原卡片失效而被发现)
5.3 如果你考虑更高安全性的卡片
-
采用 MIFARE Plus 卡片,建议禁用对 M1 的兼容,使用 AES 加密而不是 Crypto-1;(如果必须兼容M1,请参考 5.2 节关于M1卡片的建议)
-
采用各种类型的CPU卡片,如 MIFARE DESFire 系列,复旦 FM1208 系列;(DESFire系列卡片请使用后续更新的版本,使用AES加密)
-
对于能够模拟M1卡片的CPU卡( 如 JCOP 系列、复旦 FM1208系列 ),不建议启用 M1卡片模拟的功能,如果必须开启,参考 5.2 节关于M1卡片的建议(针对M1的攻击在CPU模拟M1卡片上面仍部分存在)
6. 参考资料
-
http://tech.springcard.com/2010/dont-trust-card-serial-number/
-
https://www.commoncriteriaportal.org/files/epfiles/0426b.pdf
-
https://smartlockpicking.com/slides/Confidence_A_2018_Practical_Guide_To_Hacking_RFID_NFC.pdf
-
Ciphertext-only Cryptanalysis on Hardened Mifare Classic Cards
-
https://www.mifare.net/wp-content/uploads/2015/03/MIFARE-Ultralight-family-overview.pdf
-
Breaking Mifare DESFire MF3ICD40: Power Analysis and Templates in the Real World