关于 NFC
NFC(近场通信:Near Field Communication)起源 RFID(免接触射频识别:Radio Frequency Identification),由索尼和飞利浦联合开发,初期用于商城无线标签取代条码,后广泛应用于门禁、考勤、支付等数据传递场景。
| 对比 | NFC | RFID | 蓝牙 | 红外 |
|---|---|---|---|---|
| 频率 | 13.56MHz | 125KHz-135KHz 13.56MHz 860MHz-960MHz | 2.4GHz | 38KHz |
| 距离 | <0.1m | <10m | <300m | <1m |
| 速率 | 106kb/s、212kb/s 424 kb/s、848kb/s | 2Mbps | 24Mbps | 115.2kp/s、4Mb/s |
NFC 通信的物理基础为电磁感应原理,基于此有两种工作模式:被动模式中发起方(即主设备)需要有供电来提供射频场;主动模式中双方都需要主动产生射频场进而获得更快的连接速率。NFC 支持四种协议:FeliCaTM(即 Type-F),ISO14443A、B(Type-A、Type-B 是飞利浦的 Mifare 标准,识别距离近<10cm安全性高),ISO15693(针对需要高频清晰场的远距离场合);具体有三种应用场景:
- 卡模式:相当于一张采用 RFID 技术的 IC 卡,如,门禁卡
- 读卡器模式:从中介媒体中读取信息,如,触碰连 WiFi
- P2P 模式:双向通信,如相机触碰导出照片
卡片选型
ID 卡
身份识别卡,一种含固定的编号、不可写入的低频感应卡(
125KHz),一般用于门禁。
- ID 授权卡:出厂固化了 ID,只读授权卡
T5577/5200、EM4305:可擦写的复制卡- 5577 是原装芯片,5200 是兼容芯片能兼容 5577
8211/8268/8310:能穿防火墙的可擦写复制卡
IC 卡
集成电路卡,容量大可读写有加密功能的高频卡(
13.56MHz), 主要用于一卡通、消费系统等。
- M1 卡:卡号块(
0扇区-0号块)不可擦写的授权卡,其他扇区可擦写- 其中 S50 容量为
1KB分 16 个扇区各扇区有独立密码和访问控制,S70 容量为4KB
- 其中 S50 容量为
- UID 卡:卡号块可擦写的复制卡,卡号可通过后门指令修改
- CUID 卡:能穿防火墙的可擦写复制卡,卡号只能由普通指令修改
- 由于 CUID 不响应后门指令,所以防火墙无法通过后门指令检测克隆卡
- 不响应后门指令可能导致数据一旦写错,无法再读取和格式化(即报废)
- FUID 卡:只能写入一次的的复制卡
- 写入一次后同 M1 卡,可用于突破 CUID 克隆检查
- UFUID 卡:支持手动锁卡,锁定前同 UID 卡,锁定后同 FUID 卡
- GTU/GDM 卡:能自动复位数据的复制卡,用于突破滚码防复制机制
根据以上卡特性总结如下:M1 为不可改卡号的原卡(需要系统授权),UID 卡可用来复制 M1 卡;但防火墙系统会通过后门指令修改卡号进而检查是否是复制卡,此时需要 CUID 卡因为它不会响应后门指令;若防火墙通过普通指令修改卡号则需要 FUID/UFUID 卡锁定卡号区块;对于有滚动码的刷卡系统,则可需要 GTU/GDM 的自动复位能力用滚动复位码突破之(但这并不是突破滚码机制的银子弹,参考滚动码。
M1 卡认证过程
Mifare Classic 1K 卡有 16 个扇区,每个扇区含 4 个块,每个块可以保留16B数据。每个扇区的第 4 个块是该扇区的独立密钥和访问控制(独立是一卡多用的关键):访问控制位决定了认证通过后对各块数据的读写支持(如FF078069在认证通过后可对块 0、块 1、块 2 进行读写和加减值操作)。密钥用在三轮认证阶段的Crypto-1算法(但该私有算法 2008 年被突破,进而可逆向计算出扇区中的秘钥)里:
- 读写器指定目标扇区,向卡发送身份验证请求(含操作类型:读或写,这相当于选择了密钥)
- 卡向读写器发送明文随机数
Nt(长度4B) - 读写器收到
Nt后生成一个新随机数Nr,并将两个随机数一起加密为8B的数据发给卡片 - 卡解密得到
Nt与Nr,Nt 验证通过后再加密Nr发回给读卡器 - 读写器解密得到
Nr后验证,若通过则认证成功
防伪机制
常见的防伪手段有:
- 加密:通过用 3 号块对扇区数据进行加密
- 单加密很容易通过 PN532、PM3 等工具破解,但还需要辨识数据的业务用途,如梯控卡的楼层、有效期。
- 篡改:刷卡系统通过后台指令尝试写入 0 扇区
- 若写入成功,则卡片作废(表现为 UID 卡复制后只能正常使用一次)
- 滚码:每次刷卡,系统都从特定扇区读取验证一段校验码,并写入新的校验码
- 滚动码在系统内和卡号一一对应,若下次同一卡号中的滚码对不上则认为是伪造卡
- 卡号校验码:卡号在 0 扇区 0 块前
4B,通常第5B为前四个字节的亦或值;部分系统还会在其他区块放一个特定的卡号校验码,这个值和有效期、楼号|梯号|层号、权限码等一样属于业务层的校验。