RFID 射频卡安全梳理

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,二者不同主要在于载波调制方式、数据编码方案以及协议初始化过程。

    因此: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 按工作距离分
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 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)

3.2 MIFARE Classic hardened 卡片( M1 修复版 EV1、Plus 兼容 M1 即 SL1、CPU模拟M1)

3.3 MIFARE DESFire 卡片

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. 参考资料

发表评论

您的电子邮箱地址不会被公开。