30秒把车开走,PEPS中继攻击是怎么绕过钥匙认证的?
2025年6月杭州某小区地下车库一辆不到半年的某合资品牌SUV在凌晨被盗。监控回放显示两名嫌疑人一人贴近车主家墙壁距离停放的钥匙约2米另一人在车辆门把手旁操作一台平板大小的设备——30秒内解锁、启动、驶离。整个过程没有触发任何警报行车记录仪也未被触发。这就是典型的PEPSPassive Entry Passive Start中继攻击。原理不复杂攻击者用一根无线电延长线把钥匙的低频(LF)信号从车主家里中继到车旁让车以为钥匙就在附近。但这背后的工程细节远比想象中讲究——从信号采集、放大到时间窗口的精确控制每一环都有坑。一、PEPS系统的信号握手流程了解攻击前先看正常的工作流程钥匙侧(LF接收) ←── 车辆侧(LF发送) 钥匙侧(UHF发射) ──→ 车辆侧(UHF接收)车辆周期性发送125kHz LF唤醒信号覆盖范围约1.5-2米钥匙进入LF磁场后唤醒测量信号强度(RSSI)判断距离钥匙通过433MHz UHF回复认证码通常AES-128加密车辆验证认证码若通过则解锁车门核心漏洞步骤2的距离判断依赖RSSI信号强度而RSSI可以被放大器欺骗。车辆无法区分钥匙真的在1米外还是钥匙在50米外但信号被放大到同等强度。二、中继攻击的工程实现市面上的中继设备已经高度小型化整套设备成本不到3000元。攻击链分三步2.1 LF信号采集与放大车主家: 钥匙(被动) ← 中继器A发送LF查询信号 ← 钥匙回复UHF认证码 ← 中继器A接收并转发 车旁: 中继器B ← 收到A转发的UHF认证码 中继器B → 通过LF线圈注入到车辆门把手天线中继器A负责贴近钥匙中继器B负责贴近车门。关键环节是LF信号的波形保真——普通的放大器会引入相位失真导致125kHz载波上的曼彻斯特编码无法被正确解调。市面上成熟的攻击设备用的是零中频相干转发架构保持载波相位的同时线性放大。2.2 时间窗口约束PEPS系统的LF查询和UHF回复之间有严格的时序约束典型值100-200ms超时则认证失败。中继设备需要在150ms内完成完整的往返转发——这要求中继链路的单向延迟控制在50ms以内。4G/5G中继的延迟在30-80ms之间波动稳定性是大问题。最可靠的中继方案仍然是同频段模拟转发延迟1μs。// PEPS时序校验 - 车辆侧#defineLF_POLL_INTERVAL_MS50// LF轮询间隔#defineUHF_RESPONSE_TIMEOUT150// UHF回复超时窗口(ms)#defineUHF_RESPONSE_WINDOW200// 最大允许回复窗口typedefstruct{uint32_tlf_sent_timestamp;// LF查询发出时间戳uint32_tuhf_recv_timestamp;// UHF回复接收时间戳uint8_tchallenge[8];// 挑战码uint8_tresponse_expected;// 1等待回复中}peps_session_t;intpeps_verify_timing(constpeps_session_t*sess){uint32_tdeltasess-uhf_recv_timestamp-sess-lf_sent_timestamp;// 时间窗口检查 - 防御中继延迟注入if(deltaUHF_RESPONSE_TIMEOUT){log_security_event(PEPS_TIMEOUT_VIOLATION,delta);return-1;// 超时拒绝 - 可能是中继攻击}// 异常短延迟检查 - 正常钥匙回复不少于3ms (唤醒加密计算)if(delta3){log_security_event(PEPS_ANOMALOUS_FAST,delta);return-2;// 异常快速 - 可能是预计算攻击}return0;}三、UWB测距 —— 中继攻击的克星解决中继攻击的根本方法不是让RSSI更精确而是换一种距离测量方式——从信号强度换成信号飞行时间(ToF)。3.1 UWB测距原理UWBUltra-Wideband利用IEEE 802.15.4z标准通过**双向测距TWRTwo-Way Ranging**精确测量信号飞行时间车辆UWB模块 钥匙UWB模块 │── Poll ──────────→│ (t1_vehicle) │←── Response ──────│ (t2_key) │── Final ─────────→│ (t3_vehicle) 飞行时间 [(t2_key - t3_vehicle) (t1_recv - t1_vehicle)] / 4 距离 飞行时间 × 光速UWB的测距精度可以达到±10cm。光速是30cm/ns中继设备无论如何放大信号都无法改变电磁波从钥匙到车辆的物理飞行时间。中继链路哪怕多加1米线缆就会引入约3.3ns的额外延迟——在UWB测距中这是可以被检测到的。 UWB TWR双向测距安全距离校验 基于IEEE 802.15.4z 实现 importtimeimporthashlibimporthmacimportstruct# 光速 (m/s)SPEED_OF_LIGHT299792458.0# UWB时间戳精度 (15.65ps per LSB, IEEE 802.15.4z)UWB_CLOCK_TICK_NS0.01565# 每个计数 15.65皮秒classUWBSecureRanging:def__init__(self,device_id,shared_secret):self.device_iddevice_id self.shared_secretshared_secret# 预置共享密钥self.session_counter0defgenerate_scrambled_timestamp(self,raw_timestamp,challenge): 加扰时间戳(STS) - 防止攻击者预测或伪造时间戳 IEEE 802.15.4z 要求使用Scrambled Timestamp Sequence keyhashlib.sha256(self.shared_secretchallenge).digest()scrambledint(hmac.new(key,struct.pack(Q,raw_timestamp^challenge),hashlib.sha256).hexdigest()[:16],16)returnscrambled0xFFFFFFFFFFFF# 48-bit scrambled timestampdefcompute_distance_com(self,poll_tx,poll_rx,resp_tx,resp_rx,final_tx,final_rx): 双向测距计算 - 补偿时钟偏移(CoM) 返回: 距离(米) # Tround1: 钥匙侧从收到Poll到发出Response的时间t_round1(resp_tx-poll_rx)*UWB_CLOCK_TICK_NS*1e-9# Treply1: 车辆侧从发出Poll到收到Response的时间t_reply1(resp_rx-poll_tx)*UWB_CLOCK_TICK_NS*1e-9# Tround2: 车辆侧从收到Response到发出Final的时间t_round2(final_tx-resp_rx)*UWB_CLOCK_TICK_NS*1e-9# Treply2: 钥匙侧从发出Response到收到Final的时间t_reply2(final_rx-resp_tx)*UWB_CLOCK_TICK_NS*1e-9# 对称TWR公式 - 补偿时钟漂移tof(t_round1*t_round2-t_reply1*t_reply2)/\(t_round1t_round2t_reply1t_reply2)distancetof*SPEED_OF_LIGHTreturndistancedefis_key_in_range(self,distance,expected1.5,tolerance0.3): 安全距离校验 公差0.3m 1ns飞行时间远小于中继器的电磁延迟 中继链路典型增加3-5ns 0.9-1.5m额外距离 ifdistance0:returnFalse,Invalid: negative distanceifdistanceexpectedtolerance:returnFalse,fKey too far:{distance:.2f}mreturnTrue,fKey in range:{distance:.2f}m3.2 UWB vs 传统方案对比指标LFRSSI传统PEPSBLERSSIUWB测距测距方式信号强度信号强度飞行时间精度±2-3米±3-5米±10厘米中继攻击免疫❌ 完全可绕过❌ 可绕过✅ 物理免疫功耗极低中低芯片成本(2025)$1-2$1-3$3-5量产品牌TI/NXPNordic/SiliconNXP/Qorvo/Apple U1四、落地踩坑经验坑1RSSIUWB混合策略的过渡期早期UWB芯片成本高我们做过一套RSSI粗判UWB精判的混合方案。结果中继攻击者先放大LF信号骗过RSSI粗判触发了UWB测距——但UWB单次测距耗时约5ms连续3次15ms。15ms在PEPS的200ms窗口内完全够用但导致了UWB模块的功耗飙升——每次靠近车辆都触发测距钥匙电池两周就耗尽。最终方案是只在门把手触摸事件后触发UWB测距而非LF唤醒后立即触发。坑2车内UWB多天线覆盖盲区UWB是视距通信6.5GHz的穿透力远不如125kHz LF。一辆SUV需要4-6颗UWB锚点才能覆盖全车周围区域。某车型在B柱只装了一颗UWB锚点结果后座区域成了覆盖盲区——车主把钥匙放后座口袋时UWB测距信号被人体遮挡距离计算偏大触发钥匙不在车内误报。增加车顶鲨鱼鳍天线第二颗锚点后解决。坑3UWB芯片温度漂移UWB测距的核心是精确的时钟计数。高温暴晒后60°C部分UWB芯片的晶振频率漂移达±20ppm在3米测距场景下会引入±6cm的误差。虽然仍在±10cm公差内但如果叠加多人场景的多径反射误差会非线性放大。解决方案是每次测距前做自动频率校准(AFC)用车辆侧32.768kHz高精度RTC作为参考。结语中继攻击不是因为攻击者技术多高明而是PEPS系统设计之初的RSSI测距假设本身就是脆弱的。UWB测距用物理定律替代了信号强度的统计推断让中继攻击失去了存在的基础。但UWB不是银弹——它解决的是钥匙在哪的问题不解决拿钥匙的人是不是车主的问题。下一步的生物特征融合比如座椅压力分布方向盘握姿可能才是完整的答案。你们项目里UWB测距踩过哪些坑车门把手上的UWB锚点装在哪最不容易被遮挡欢迎评论区交流。