CC-BY-SA-4.0 | © 2026 KY (kyshipit)
第1章 申明
本文讲解NFC技术原理、汽车NFC钥匙系统通用硬件架构及诊断通信协议,内容均基于公开标准(ISO 14229、ISO 15765-2、NFC Forum规范)和通用工程常识。文中不涉及任何特定车型、厂商或非公开业务细节,不构成产品规格或商业泄密,仅供技术参考,按现状(AS-IS)提供。
第2章 NFC技术基础
2.1 什么是NFC
NFC(Near Field Communication,近场通信)是一种短距离无线通信技术,工作频率为13.56MHz,通信距离通常在10厘米以内。与蓝牙(通常10米级)和Wi-Fi(通常百米级)相比,NFC的通信距离极短——这一特征既是它的限制,也是它的安全优势。
NFC不是一项新技术。它的物理层基础(13.56MHz RFID)早在20世纪90年代就已标准化,NFC Forum在2004年成立后将RFID的高频子集规范化,定义了更完整的协议栈和应用场景。目前NFC已被广泛应用于移动支付、门禁控制、公共交通等领域。
NFC的通信速率通常在106kbps、212kbps、424kbps三个档位,部分新标准支持更高的速率。汽车钥匙场景通常只需要106kbps就足够——因为每次交互的数据量极小,通常只有几十到几百字节,不需要高速传输。
2.2 NFC和RFID的关系
RFID(Radio Frequency Identification,射频识别)是一个更广泛的技术范畴,涵盖所有通过无线电波识别目标对象的技术。RFID的工作频率覆盖低频(125kHz)、高频(13.56MHz)、超高频(800-900MHz)和微波(2.45GHz)等多个频段,通信距离从几厘米到几十米不等。
NFC是RFID的一个子集,专门指工作在高频13.56MHz、通信距离极短(10厘米内)、支持双向交互的RFID系统。传统RFID通常是单向的——读卡器主动发信号,标签被动响应,标签不能主动发起通信。NFC则支持双向通信,两个NFC设备都可以主动发送数据(取决于工作模式)。
简单说:所有的NFC设备都是RFID设备,但RFID设备不一定是NFC设备。NFC = 高频13.56MHz + 极短距离 + 双向通信能力。
2.3 NFC的三种工作模式
NFC设备可以工作在三种不同的模式下,分别对应不同的应用场景:
读卡器模式(Reader/Writer Mode)
读卡器模式是NFC最基础的工作模式。设备主动发射13.56MHz载波信号,产生射频场,读取或写入被动标签(如NFC卡片或NFC标签贴纸)中的数据。在这种模式下,读卡器是有源设备(有电池供电),标签是无源设备(依靠感应读卡器的电磁场获取工作电源)。
读卡器发送指令帧,标签收到后解析指令、执行操作(读取数据或写入数据),然后通过负载调制方式将响应数据回传给读卡器。整个过程由读卡器主导,标签只被动响应。
典型应用:手机查公交卡余额、POS机读取银行卡信息。
卡模拟模式(Card Emulation Mode)
卡模拟模式恰好相反:设备把自己模拟成一张卡片(或标签),等待外部读卡器来读取。在这种模式下,设备是被动的——不主动发射信号,读卡器问什么就答什么。
卡模拟模式分为基于主机的卡模拟(HCE,Host Card Emulation)和基于安全元件的卡模拟两种。HCE是Android 4.4引入的软件方案,应用在用户空间处理NFC数据,安全性较低但实现灵活;基于安全元件的方案将密钥存储在独立硬件中,安全性更高。
典型应用:手机刷门禁、手机刷地铁闸机。
点对点模式(Peer-to-Peer Mode)
点对点模式下,两个NFC设备都主动,可以双向传输数据。两个设备靠近后协商通信角色,然后互相发送数据。
点对点模式最早用于安卓手机之间的“碰一碰传联系人”和“碰一碰传照片”。但NFC的数据传输速率最高只有424kbps,传输大文件速度太慢,所以后来被蓝牙和Wi-Fi直连取代。现在点对点模式主要被用于“碰一碰配对”——两台设备碰一下,NFC交换蓝牙或Wi-Fi的配对信息,然后断开NFC连接,后续大数据传输通过蓝牙或Wi-Fi完成。
2.4 NFC物理层通信原理
2.4.1 电磁感应与13.56MHz载波
NFC通信的物理基础是电磁感应。读卡器端有一个天线线圈,通电后线圈周围会产生磁场。这个磁场不是静态的,而是以13.56MHz的频率快速变化——这就是“载波”。
法拉第电磁感应定律告诉我们:变化的磁场会在附近的导体线圈中感应出电动势。当卡片靠近读卡器时,卡片天线线圈处于读卡器产生的交变磁场中,线圈两端出现感应电压。这个感应电压经过卡片内部的整流和稳压电路处理后,为卡片芯片提供工作电源。
读卡器和卡片的耦合本质上是一个松耦合的空心变压器。初级线圈在读卡器侧,次级线圈在卡片侧。耦合系数取决于两者之间的距离和相对方向——10厘米以内的通信距离要求就是为了保证足够的耦合系数,使卡片能获得足够的感应电压。
2.4.2 被动设备取电机制
NFC卡片没有电池,它的工作电源完全来自读卡器发射的射频场。卡片天线线圈感应到的交流电压经整流桥变为直流,再经过稳压电路稳定到芯片的工作电压(通常是1.8V或3.3V),然后为卡片的数字电路和存储器供电。
NFC Forum规范要求读卡器必须提供足够的射频场强度,以保证在10厘米的通信距离内,被动设备能获得至少1.5A/m的磁场强度以可靠取电。实际芯片的灵敏度通常优于这个要求,但天线尺寸和线圈圈数决定了实际感应电压——手机NFC天线的尺寸受限,取电能力不如专用卡片,所以手机在卡模拟模式下部分操作仍需电池辅助。
2.4.3 负载调制与数据回传
被动设备不能主动发射射频信号——它没有自己的射频发射器,即使有微弱电流也不足以驱动信号发射。那么卡片怎么把数据回传给读卡器呢?答案是负载调制。
卡片端有一个负载电阻,通过开关控制这个电阻是否接入天线回路。当开关闭合时,额外电阻接入天线回路,改变了天线的总阻抗;当开关断开时,阻抗恢复。这种阻抗变化会改变读卡器天线电流的幅值——读卡器检测到电流的微小波动,经过解调后恢复出卡片发送的数据。
卡片通过控制开关的通断节奏(开/关对应二进制数据的0/1),把自己的数据“调制”在读卡器的载波上。这个数据回传的能量来源仍然是读卡器发射的场,卡片只是改变了这个场的负载特性,而不是自己产生一个信号去发射。
2.5 NFC协议栈层次
NFC协议栈从物理层到应用层大致分为以下层次:
- 物理层:13.56MHz载波,ASK调制,曼彻斯特编码或改进型米勒编码,定义了射频信号的调制方式、编码方式和数据速率
- 链路层:负责帧格式定义、碰撞检测与处理、流控和错误检测
- LLCP:NFC Forum定义的逻辑链路控制协议,负责连接管理、数据交换、服务发现
- NDEF:NFC Forum定义的数据交换格式,由多条记录组成,每条记录包含类型、长度和载荷
- SNEP:用于两个NFC设备之间交换NDEF消息的应用层协议
在汽车NFC钥匙系统中,并非所有场景都完整实现NFC Forum定义的全协议栈。部分实现直接基于物理层和链路层运行自定义数据格式——汽车钥匙交互的数据量小、安全要求高、交互流程固定,使用精简的自定义协议比完整协议栈更可控、更轻量。
第3章 汽车NFC钥匙系统硬件架构
3.1 整体拓扑
一辆具备NFC数字钥匙功能的车辆,其NFC子系统在整个车辆网络中的位置是:NFC模块作为一个独立ECU节点挂在CAN总线上,与车身域控制器、门锁控制器、PEPS(被动进入/被动启动)系统等节点通信。
NFC模块内部的核心硬件组件包括:NFC天线(通常安装在门把手内部、B柱或中控台)、NFC射频控制器芯片(负责物理层信号的调制解调)、主控MCU(负责协议栈和应用逻辑)、硬件安全模块(HSM,负责密钥存储和加密运算)、CAN收发器(负责CAN总线物理信号的转换)。
NFC模块的工作流程是:用户将NFC卡片或手机靠近车门天线,射频控制器检测到场强变化,唤醒主控MCU;MCU通过射频控制器读取卡片数据,调用HSM进行加密认证;认证通过后,MCU通过CAN总线向车身域控制器发送解锁指令;车身域控制器执行门锁动作。
3.2 NFC天线与射频控制器
NFC天线是一个绕制在铁氧体磁片上的线圈。天线的电感量、Q值(品质因数)和谐振频率决定了辐射效率和通信距离。天线与匹配电容共同构成LC谐振回路,谐振频率必须精确调谐到13.56MHz。
天线设计的关键参数包括:
| 参数 | 说明 |
|---|---|
| 电感量 | 决定谐振频率,需配合外部电容调整到13.56MHz |
| Q值 | 影响带宽和辐射效率,Q值过高对温度变化和周边金属敏感 |
| 场强分布 | 影响有效通信区域的大小和方向性 |
| 天线阻抗 | 需与射频控制器输出阻抗匹配以实现最大功率传输 |
在汽车环境中,NFC天线通常安装在金属门把手内部,周围有金属和塑料结构。金属对13.56MHz磁场有屏蔽和涡流损耗效应,大幅影响天线的辐射效率。设计时通常需要在天线背面加装铁氧体磁片,将磁场与金属结构隔离,同时用有限元仿真软件优化天线布局。
射频控制器是负责物理层和部分链路层功能的芯片。它的工作包括:
- 产生13.56MHz载波信号
- 调制载波发送数据(ASK调制)
- 解调负载调制信号接收数据
- 检测卡片靠近(通过场强或相位变化)
- 处理多卡碰撞(多张卡同时靠近时的仲裁)
- 控制发射功率(调整射频输出强度)
- 支持低功耗卡片检测模式(车辆休眠时极低功耗监听)
控制器与主控MCU之间通常通过SPI或I2C接口连接。MCU通过该接口向控制器下发命令(如“开启射频场”、“发送数据帧”、“读取接收数据”),控制器将射频层事件(如“卡片进入场区”、“数据帧接收完成”)上报给MCU。
3.3 主控MCU
主控MCU是NFC模块的"大脑",运行嵌入式实时操作系统,负责任务调度、中断管理、外设驱动和协议栈处理。
MCU的核心职责:
- UDS诊断协议处理:接收并解析来自CAN总线的诊断请求,调用相应服务处理函数,构造并发送诊断响应
- NFC状态机管理:管理NFC模块的配置状态和运行状态
- 射频控制器驱动:通过SPI/I2C接口与射频控制器交互,收发NFC数据
- HSM调度:将加密运算请求转发给HSM,获取运算结果
- CAN通信管理:通过CAN收发器与车身网络通信,发送指令、上报状态
- 电源管理:管理模块的电源模式(运行/休眠/唤醒),监控电源状态
- 诊断数据存储:管理Flash/EEPROM中存储的配置信息和诊断信息
车规级MCU普遍采用多核架构,不同核心分工协作:一个核心负责应用逻辑、协议栈和状态机管理,另一个核心负责安全相关的密钥存储、加密运算和物理攻击防护。两个核心通过共享内存和核间中断进行数据交换,应用核心无法直接访问安全核心的私有存储区域。
3.4 硬件安全模块HSM
HSM(Hardware Security Module,硬件安全模块)是集成在主控MCU内部的独立安全子系统。它不是软件层面的安全隔离,而是硬件级别的隔离——拥有独立的CPU、独立的存储区域、独立的时钟域和独立的电源域。
HSM的核心特性是物理隔离。主CPU(运行应用逻辑的那个核心)无法直接读取HSM内部的存储内容。主CPU与HSM之间的交互是“请求-响应”模式——主CPU发送运算请求给HSM,HSM在内部完成计算后返回结果,主CPU不参与计算过程,也不接触中间数据。
HSM的主要功能:
| 功能 | 说明 |
|---|---|
| 安全密钥存储 | 根密钥存储在HSM专用安全Flash中,主CPU无法通过任何方式访问 |
| 加密运算加速 | 集成硬件加密引擎,支持AES、RSA、ECC等算法 |
| 安全启动 | 上电时验证固件数字签名,防止恶意代码运行 |
| 物理攻击防护 | 电压/温度/频率异常检测、金属防护层、光敏探测等 |
主CPU与HSM的通信机制:
主CPU通过专用的硬件通信通道(如邮箱机制或共享寄存器)向HSM发送命令。每条命令包含操作码、参数和数据的长度。HSM收到命令后解析并执行,执行完成后通过中断或状态寄存器通知主CPU,并将结果写入共享区域。
通信协议通常包含以下安全措施:
- 命令格式固定,拒绝非法命令
- 访问权限检查(某些命令要求特定权限级别)
- 防重放攻击的时间戳或计数器
- 通信完整性校验(如CRC或MAC)
3.5 CAN总线收发器
CAN总线收发器是MCU与CAN物理总线之间的接口芯片。它的功能是:将MCU发送的TX数字信号(TTL/CMOS电平)转换为差分信号(CAN_H和CAN_L之间的电压差)发送到总线上;同时接收总线上的差分信号,转换为RX数字信号给MCU。
收发器还具备以下特性:
| 特性 | 说明 |
|---|---|
| 总线保护 | 防止短路和过压损坏 |
| 共模抑制 | 抑制共模干扰,增强抗噪性 |
| 待机模式 | 低功耗模式下保持总线唤醒能力 |
| 远程唤醒 | 检测到总线活动后唤醒MCU |
车规级CAN收发器通常符合ISO 11898-2标准,支持经典CAN(最高1Mbps)或CAN FD(最高5Mbps)。收发器的工作温度范围通常为-40℃至125℃,满足汽车环境要求。
NFC模块通过CAN收发器连接到车辆CAN总线网络,与车身域控制器、BCM、PEPS等节点通信。NFC模块在总线上是一个独立节点,拥有唯一的节点地址和报文过滤配置。
第4章 汽车诊断通信协议基础
4.1 UDS诊断协议概述
4.1.1 UDS是什么
UDS(Unified Diagnostic Services,统一诊断服务)是ISO 14229标准定义的一套汽车诊断通信协议。它规定了诊断仪(Tester,通常是产线设备或售后诊断工具)与ECU之间的通信规则——包括请求格式、响应格式、服务ID定义、参数编码、执行流程和错误处理。
UDS的“统一”体现在两个方面:
- 服务统一:所有ECU都支持相同的服务ID,诊断仪不需要为不同ECU编写不同的协议代码
- 接口统一:UDS定义了一致的应用层接口,诊断仪使用相同的流程访问不同ECU
UDS是独立于物理传输介质的协议层。它不关心数据是通过CAN总线、LIN总线、FlexRay还是以太网传输的——UDS的应用层定义在ISO 14229-1中,传输层适配到具体总线的规则定义在对应的协议中(CAN对应ISO 15765-2,以太网对应ISO 13400等)。
4.1.2 请求/响应模型
UDS采用客户端-服务器模型,通信始终由客户端(诊断仪)发起:
- 诊断仪发送一个请求报文,包含服务ID和参数
- ECU收到请求后执行对应操作
- ECU返回一个响应报文,包含执行结果
肯定响应:ECU成功执行请求后返回。响应码为请求的服务ID + 0x40。例如请求是0x10,肯定响应是0x50。
否定响应:ECU无法执行请求时返回。响应格式为0x7F + 原服务ID + 否定响应码(NRC)。常见NRC包括:
| NRC | 含义 |
|---|---|
| 0x10 | 一般拒绝 |
| 0x11 | 服务不支持 |
| 0x12 | 子功能不支持 |
| 0x13 | 消息长度错误 |
| 0x22 | 条件不满足 |
| 0x31 | 请求超出范围 |
| 0x33 | 安全访问拒绝 |
| 0x35 | 密钥无效 |
| 0x36 | 超过尝试次数 |
| 0x37 | 等待时间未到 |
| 0x78 | 响应待定 |
4.2 ISO 15765-2网络层协议
4.2.1 为什么需要传输层
经典CAN数据帧的数据域最多只有8个字节。UDS诊断请求和响应的数据量经常超过8字节——例如读取某个DID可能返回几十字节的数据,写入某些数据可能携带十几甚至更长。
ISO 15765-2定义了如何在CAN总线上传输长度不确定的数据。它在UDS应用层和CAN数据链路层之间增加了一个网络层,负责:
| 功能 | 说明 |
|---|---|
| 分包 | 将应用层传递下来的长数据拆分成多个CAN帧发送 |
| 组包 | 将接收到的多个CAN帧重新组合成完整数据交给应用层 |
| 流控 | 接收方控制发送方的发送节奏,避免接收缓冲区溢出 |
| 错误处理 | 检测传输过程中的错误(如帧丢失、顺序错乱) |
ISO 15765-2是无连接、无确认的传输层协议。“无确认”指的是协议本身不提供端到端的确认机制——发送方发了数据后,协议层不负责确认对方收到了全部数据。确认的责任在应用层(UDS层),UDS的肯定响应就是对“数据已接收并处理”的确认。
4.2.2 四种帧类型
ISO 15765-2定义了四种帧类型,通过N_PDU第一个字节的高四位(N_PCItype)区分:
| 帧类型 | N_PCItype值 | 用途 |
|---|---|---|
| 单帧(SF) | 0 | 数据长度≤7字节时使用,一帧完成 |
| 首帧(FF) | 1 | 长数据传输的第一帧,声明总长度 |
| 连续帧(CF) | 2 | 首帧之后的数据帧,带顺序号SN |
| 流控帧(FC) | 3 | 接收方发送,控制发送方的发送节奏 |
单帧:当数据总长度不超过7字节时使用,一个CAN帧就包含了全部数据。
首帧:当数据总长度超过7字节时,第一帧是首帧,用于声明本次传输的数据总长度。接收方根据总长度准备缓冲区,等待后续连续帧。
连续帧:首帧之后的数据帧都是连续帧。连续帧按顺序编号(SN从0开始递增),接收方根据SN组装数据。如果发现SN跳号,接收方丢弃整个多帧消息。
流控帧:接收方在收到首帧后发送流控帧给发送方,通过BS和STmin参数控制发送方的发送节奏。
4.2.3 流控参数BS和STmin
| 参数 | 全称 | 含义 |
|---|---|---|
| BS | Block Size | 发送方每发N个连续帧后暂停并等待流控帧;0表示不用再等 |
| STmin | Separation Time Minimum | 两个连续帧之间的最小间隔时间 |
| FS | Flow Status | 流状态:0=继续发送,1=等待,2=溢出 |
BS的值可以是0x00-0xFF:
- 0x00:发送方一次性发送所有连续帧,不需要额外流控帧
- 0x01-0xFF:发送方每发完N个连续帧后暂停,等待接收方发新的流控帧
STmin的值可以是:
- 0x00-0x7F:绝对时间,单位毫秒(ms)
- 0xF1-0xF9:微秒值(0xF1=100μs,0xF9=900μs)
FS的值:
- 0(CTS):继续发送
- 1(WT):等待,发送方暂停
- 2(OVFLW):溢出,发送方中止
4.3 UDS常用服务简介
以下服务的功能说明均基于ISO 14229标准定义,不涉及具体业务场景下的使用。
4.3.1 诊断会话控制(0x10)
0x10服务用于切换ECU的诊断会话模式。诊断会话决定了ECU对外开放哪些诊断服务。
| 子功能 | 会话模式 | 说明 |
|---|---|---|
| 0x01 | 默认会话 | 正常运行模式,仅开放基本诊断服务 |
| 0x03 | 扩展会话 | 开放更多诊断服务 |
| 0x04 | 编程会话 | 开放引导加载和Flash编程服务 |
请求格式:0x10 + 子功能号。ECU收到请求后切换会话模式,返回肯定响应0x50 + 子功能号 + 可选参数。ECU在同一时间只能处于一种诊断会话模式,上电或复位后默认进入默认会话。
4.3.2 通过ID读取数据(0x22)
0x22服务用于通过DID读取ECU内部的数据。DID是2字节的标识符(0x0000-0xFFFF),每个DID对应ECU内部的特定数据对象——可能是一个配置值、一个状态寄存器、一段存储区域的内容或一个计算结果。
请求格式:0x22 + DID_High + DID_Low。 肯定响应格式:0x62 + DID_High + DID_Low + 数据。 否定响应格式:0x7F + 0x22 + NRC。
4.3.3 通过ID写入数据(0x2E)
0x2E服务用于通过DID向ECU写入数据。
请求格式:0x2E + DID_High + DID_Low + 待写入数据。 肯定响应格式:0x6E + DID_High + DID_Low。 否定响应格式:0x7F + 0x2E + NRC。
写入操作通常要求ECU处于扩展会话或编程会话模式下,且部分敏感DID要求先通过安全访问认证。
4.3.4 安全访问(0x27)
0x27安全访问服务实现了一种Challenge-Response认证机制。
| 操作 | 子功能类型 | 说明 |
|---|---|---|
| 请求种子 | 奇数(0x01/0x03/0x05...) | 诊断仪请求种子,ECU返回随机数 |
| 发送密钥 | 偶数(0x02/0x04/0x06...) | 诊断仪发送密钥,ECU验证 |
子功能号成对使用:0x01/0x02为一对,0x03/0x04为一对,0x05/0x06为一对。不同对可以代表不同的安全级别或不同的访问权限。
认证流程:
- 诊断仪发送0x27 + 奇数子功能号请求种子
- ECU生成随机数种子(通常4或8字节),返回0x67 + 子功能号 + 种子
- 诊断仪用内部算法计算密钥,发送0x27 + 偶数子功能号 + 密钥
- ECU验证密钥,通过返回0x67 + 偶数子功能号,失败返回否定响应
否定响应码0x35表示密钥无效,0x33表示安全访问拒绝,0x36表示超过尝试次数,0x37表示等待时间未到。
4.3.5 例程控制(0x31)
0x31例程控制服务用于启动、停止和查询ECU内部预定义的例程。例程不是简单的读写操作,而是一段需要执行的操作流程——可能涉及多个步骤、可能耗时较长、可能产生中间状态。
RID(Routine Identifier)是2字节的例程标识符,每个RID对应ECU内部一个特定功能例程。
| 子功能 | 操作 | 请求格式 | 响应格式 |
|---|---|---|---|
| 0x01 | 启动例程 | 0x31 0x01 + RID + 参数 | 0x71 0x01 + RID + 状态 |
| 0x02 | 停止例程 | 0x31 0x02 + RID + 参数 | 0x71 0x02 + RID + 状态 |
| 0x03 | 请求结果 | 0x31 0x03 + RID | 0x71 0x03 + RID + 结果 |
例程控制适用于任何需要异步执行或需要轮询进度的内部操作。启动例程后通过0x03轮询进度,完成后通过0x02停止。
4.3.6 清除诊断信息(0x14)
0x14服务用于清除ECU中存储的故障码。请求中携带清除范围和分组参数,ECU收到后清除匹配条件的故障码记录,返回0x54肯定响应。
第5章 诊断协议格式解析
5.1 ISO 15765-2帧格式
5.1.1 单帧(SF)格式
当数据总长度不超过7字节时使用单帧。
| 字节位置 | 内容 | bit7-4 | bit3-0 |
|---|---|---|---|
| N_PCI字节0 | 帧类型 + 数据长度 | 0000 | SF_DL(1-7) |
| N_PCI字节1~N | 有效数据 | — | — |
SF_DL表示本帧携带的有效数据字节数。例如第一个字节为0x03,表示本帧携带3字节有效数据。
5.1.2 首帧(FF)格式
当数据总长度超过7字节时,第一帧为首帧。
| 字节位置 | 内容 | bit7-4 | bit3-0 |
|---|---|---|---|
| N_PCI字节0 | 帧类型 + 总长度高4位 | 0001 | FF_DL[11:8] |
| N_PCI字节1 | 总长度低8位 | FF_DL[7:0] | — |
| N_PCI字节2~N | 部分有效数据 | — | — |
总长度FF_DL = (字节0的低4位 << 8) + 字节1,范围1-4095字节。首帧最多携带6字节有效数据(8字节CAN帧减去2字节N_PCI)。
5.1.3 连续帧(CF)格式
首帧之后的数据帧为连续帧。
| 字节位置 | 内容 | bit7-4 | bit3-0 |
|---|---|---|---|
| N_PCI字节0 | 帧类型 + 顺序号 | 0010 | SN(0-15) |
| N_PCI字节1~N | 有效数据 | — | — |
SN从0开始,每发送一帧加1,到15后回到0。接收方检查SN连续性,发现跳号则丢弃整个多帧消息。
5.1.4 流控帧(FC)格式
接收方在收到首帧后发送流控帧给发送方。
| 字节位置 | 内容 | bit7-4 | bit3-0 |
|---|---|---|---|
| N_PCI字节0 | 帧类型 + 流状态 | 0011 | FS |
| N_PCI字节1 | 块大小 | BS | — |
| N_PCI字节2 | 最小间隔时间 | STmin | — |
FS流状态取值:0=继续发送(CTS),1=等待(WT),2=溢出(OVFLW)。
5.2 安全访问协议格式(0x27)
5.2.1 请求种子格式
| 方向 | 格式 | 说明 |
|---|---|---|
| 请求 | 0x27 + 奇数子功能号 | 子功能号为0x01/0x03/0x05... |
| 肯定响应 | 0x67 + 子功能号 + 种子数据 | 种子通常4或8字节 |
| 否定响应 | 0x7F 0x27 + NRC | NRC如0x33/0x36/0x37 |
5.2.2 发送密钥格式
| 方向 | 格式 | 说明 |
|---|---|---|
| 请求 | 0x27 + 偶数子功能号 + 密钥数据 | 子功能号为0x02/0x04/0x06... |
| 肯定响应 | 0x67 + 偶数子功能号 | 验证通过 |
| 否定响应 | 0x7F 0x27 + NRC | NRC=0x35表示密钥无效 |
5.2.3 否定响应码说明
| NRC | 含义 |
|---|---|
| 0x33 | 安全访问拒绝(会话模式不匹配或已锁定) |
| 0x35 | 密钥无效(计算值与期望值不一致) |
| 0x36 | 超过尝试次数(失败次数超限被锁定) |
| 0x37 | 等待时间未到(锁定延迟计时器未到期) |
5.3 例程控制协议格式(0x31)
5.3.1 启动例程(0x01)
| 方向 | 格式 | 说明 |
|---|---|---|
| 请求 | 0x31 0x01 + RID(2字节)+ 可选参数 | RID范围0x0000-0xFFFF |
| 肯定响应 | 0x71 0x01 + RID + 状态信息 | 状态标志指示启动结果 |
| 否定响应 | 0x7F 0x31 + NRC | — |
5.3.2 请求结果(0x03)
| 方向 | 格式 | 说明 |
|---|---|---|
| 请求 | 0x31 0x03 + RID(2字节) | — |
| 肯定响应 | 0x71 0x03 + RID + 状态/结果数据 | 含进度百分比/执行状态/结果 |
| 否定响应 | 0x7F 0x31 + NRC | — |
此子功能常用于轮询耗时操作的执行进度。
5.3.3 停止例程(0x02)
| 方向 | 格式 | 说明 |
|---|---|---|
| 请求 | 0x31 0x02 + RID(2字节)+ 可选参数 | — |
| 肯定响应 | 0x71 0x02 + RID + 停止状态 | 停止时的最终状态标志 |
| 否定响应 | 0x7F 0x31 + NRC | — |
第6章 NFC安全机制原理
6.1 短距离通信的物理安全性
NFC通信距离极短(10厘米以内),这在物理层面提供了第一道安全屏障。攻击者要截获NFC通信信号,必须将窃听设备放置在10厘米以内——这个距离在物理上极难隐蔽实施。
相比蓝牙(10-100米)和Wi-Fi(百米级),NFC的通信距离短了1-3个数量级。远距离无线通信的攻击者可以在数十米外用高增益天线截获信号,而NFC的13.56MHz近场耦合信号衰减极快——场强与距离的三次方成反比,10厘米外的信号强度已经衰减到无法有效解调的水平。
NFC的极短通信距离使得中间人攻击几乎不可能实施:攻击者必须同时靠近读卡器和卡片,且保持两个有效链路,这在物理上无法做到。
6.2 随机种子与Challenge-Response认证原理
Challenge-Response认证机制是NFC安全访问的核心。它的基本逻辑是:
- 验证方生成一个随机数种子(Challenge),发送给被验证方
- 被验证方用自己的密钥和收到的种子,通过特定算法计算出响应值(Response),发回给验证方
- 验证方用同样的算法和相同的种子以及自己存储的密钥副本计算期望值,与收到的响应值比对
- 匹配则认证通过,不匹配则拒绝
为什么这种机制安全:
| 安全特性 | 说明 |
|---|---|
| 每次Challenge不同 | 随机数种子每次请求重新生成,截获的Response下次无效 |
| 密钥不在链路上传输 | 通信链路上只传输种子和计算结果,密钥本身不出现 |
| 无法反推密钥 | 攻击者即使获取Challenge和Response,也无法反推出密钥 |
| 防重放攻击 | 新旧Challenge不同,旧的Response无法用于新的Challenge |
6.3 硬件安全模块HSM的隔离保护原理
HSM的硬件隔离提供了比纯软件安全方案更强的保护:
| 保护机制 | 说明 |
|---|---|
| 密钥存储隔离 | 密钥存储在HSM专用安全Flash中,主CPU地址空间不可访问 |
| 密钥运算隔离 | 加密运算在HSM内部完成,主CPU只获取运算结果,不接触密钥 |
| 密钥永不导出 | 不存在“导出密钥”的接口,密钥一旦写入永不离开HSM |
| 物理攻击防护 | 金属防护层、主动屏蔽层、电压/温度/频率异常检测、光敏探测 |
第7章 NFC与其他短距无线技术的对比
7.1 三种技术核心特征对比
| 参数 | NFC | 蓝牙经典 | 蓝牙低功耗(BLE) | UWB |
|---|---|---|---|---|
| 工作频率 | 13.56MHz | 2.4GHz | 2.4GHz | 3.1-10.6GHz |
| 通信距离 | 0-10cm | 10-100m | 10-100m | 1-10m |
| 数据速率 | 106-424kbps | 1-3Mbps | 1-2Mbps | 6.8-27Mbps |
| 功耗 | 极低 | 中高 | 低 | 中 |
| 连接建立时间 | <0.1s | ~1s | <0.1s | <0.1s |
| 测距精度 | 无 | 米级 | 米级 | 厘米级 |
7.2 各自适用场景
| 技术 | 优势 | 典型场景 |
|---|---|---|
| NFC | 极短距离高安全性、被动设备零功耗、连接快 | 身份验证、门禁、支付、设备配对 |
| 蓝牙 | 中等距离、低功耗、设备兼容性广 | 持续数据连接、音频传输、传感器数据采集 |
| UWB | 高精度测距、抗中继攻击 | 高精度定位、安全距离测量、位置追踪 |
第8章 总结
本文围绕NFC技术、汽车NFC钥匙系统的硬件架构和汽车诊断通信协议三个方面,系统梳理了NFC从物理原理到应用实现的知识体系:
NFC技术层面:NFC工作在13.56MHz频段,通信距离10厘米以内,通过电磁感应实现短距离无线通信。三种工作模式覆盖了不同的应用场景。被动设备通过负载调制方式回传数据,不依赖自身电源。
硬件架构层面:汽车NFC钥匙系统的核心组件包括NFC天线与射频控制器、主控MCU、硬件安全模块HSM和CAN总线收发器。HSM提供硬件隔离的安全存储和加密运算能力,根密钥不离开HSM的安全边界。NFC模块通过CAN总线与车身网络通信。
诊断通信协议层面:UDS(ISO 14229)定义了诊断仪与ECU之间的请求/响应模型。ISO 15765-2网络层通过单帧、首帧、连续帧、流控帧四种帧类型实现长数据的可靠传输。0x27安全访问通过Challenge-Response机制实现认证,0x31例程控制支持耗时操作的异步执行。
以上全部内容均基于公开的ISO标准和通用的电子工程技术常识,不涉及特定业务实现细节。
附录A:术语表
| 术语 | 英文全称 | 解释 |
|---|---|---|
| NFC | Near Field Communication | 13.56MHz、10cm以内的短距离无线通信技术 |
| RFID | Radio Frequency Identification | 通过无线电波识别目标的技术统称 |
| HSM | Hardware Security Module | 集成在MCU内的独立安全子系统 |
| MCU | Microcontroller Unit | 汽车ECU的主控处理器 |
| CAN | Controller Area Network | 汽车电子控制单元之间的标准通信总线 |
| ECU | Electronic Control Unit | 汽车上的电子控制单元 |
| UDS | Unified Diagnostic Services | ISO 14229定义的汽车诊断通信协议 |
| DID | Data Identifier | UDS中用于标识ECU内部数据的2字节编号 |
| RID | Routine Identifier | UDS例程控制中用于标识例程的2字节编号 |
| SID | Service Identifier | UDS中用于标识服务类型的ID |
| NRC | Negative Response Code | UDS否定响应中指示错误类型的编码 |
| SF | Single Frame | 数据不超过7字节时的单帧传输 |
| FF | First Frame | 多帧传输的第一帧 |
| CF | Consecutive Frame | 多帧传输的后续帧 |
| FC | Flow Control Frame | 接收方控制发送方节奏的帧 |
| BS | Block Size | 流控帧参数,控制连续帧发送数量 |
| STmin | Separation Time Minimum | 流控帧参数,控制连续帧最小间隔 |
| Challenge-Response | — | 基于随机数的双向认证机制 |
-----------------------------------------------------------
📝 相关内容托管GitHub,更新以仓库为准
📌 如有疏漏,欢迎指正。
🔗 GitHub仓库:kyshipit/tech‑notes
-------------------------------------------------------------

375

被折叠的 条评论
为什么被折叠?



