RuView BFLD 深度解析:为 WiFi 感知堆栈打造的波束赋形反馈隐私门控层
【免费下载链接】RuViewπ RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.项目地址: https://gitcode.com/GitHub_Trending/wi/RuView
BFLD(Beamforming Feedback Layer for Detection,波束赋形反馈检测层)是 RuView / wifi-densepose 生态中的隐私安全层:它从 IEEE 802.11ac/ax 明文波束赋形反馈(BFI)中持续度量"当前 RF 数据是否已具备个体识别能力",并以identity_risk_score与privacy_class字节门控一切出站数据。读完本文,你将掌握 BFLD 的三项结构性隐私不变式、四类隐私等级的数据暴露边界、风险评分与哈希轮换的底层实现,以及它如何接入 Home Assistant、Matter 与 MQTT 自动化生态。
BFLD 的完整设计档案位于 docs/research/BFLD/(11 个文件的研究包),其总体架构决策已沉淀为 ADR-118,而对应的 Rust cratewifi-densepose-bfld已在仓库的 v2/crates/wifi-densepose-bfld/ 落地实现,本文的源码级佐证均取自该 crate。
1. 问题背景:明文 BFI 是"会广播身份的协议产物"
BFLD 的存在建立在两个物理层事实之上。
1.1 CSI 与 BFI 的泄露画像差异
- **CSI(信道状态信息)**是接收端在全部子载波与天线对上测得的复信道频率响应,矩阵规模为 Ntx × Nrx × Nsubcarrier,稠密且高维。获取 CSI 需要固件级改造(如 Atheros CSI Tool、面向树莓派 BCM43455c0 的 Nexmon CSI patch)或专用软件无线电,属于"研究仪器"。
- BFI(波束赋形反馈信息)则是 STA 回传给 AP 的压缩信道表示。802.11ac/ax(IEEE 标准 9.4.1.52 节)中,AP 先发 NDP sounding 帧,STA 测量信道后对右奇异向量做 Givens 旋转压缩,得到 Phi(φ,[0, 2π))与 Psi(ψ,[0, π/2))两组角度:802.11ac 分别量化为 7/5 bit,802.11ax 默认为 4/2 bit。STA 将量化角度装入 VHT/HE Compressed Beamforming Report(CBFR)帧发回。
关键在于:CBFR 是管理面帧,而非 802.3 数据帧。它在 WPA2/WPA3 关联加密协商之前就以明文发送——即使开启 PMF(受保护管理帧),2025 年的商品 AP 也默认不加密波束赋形交换中的 action 帧。因此提取 CSI 需要设备物理访问与固件修改,而提取 BFI 只需要一张支持 monitor 模式的网卡加一个 CBFR 解析器,且帧向全方向广播,附近攻击者以与 AP 几乎相同的 SNR 即可收到。
1.2 已被学术界证实的两条攻击路径
研究包 01-sota-survey.md 梳理了两个 2024–2025 年的独立研究结论:
- BFId(KIT,ACM CCS 2025):仅凭 BFI(不含 CSI)即可在 197 人数据集上实现 >90% 的再识别准确率,且只需 5 秒采集(约 10 Hz sounding 下的 600 帧 CBFR)。BFI-only 的识别精度与 CSI-only 相当,证明 Givens 角度压缩保留了身份判别性方差。
- LeakyBeam(NDSS 2025):用商品硬件可在 20 米外穿墙检测占用,真实环境 TPR 82.7%、TNR 96.7%。它证明 BFI 编码了人体进入房间引起的信道扰动。
对 RuView 而言,这个问题的现实意义在于:现有 rvCSI 感知管线(ADR-095/ADR-096)基于 CSI 输出 presence、motion、person_count 等事件,却没有任何一层显式度量"这些输出是否来自可识别个体的数据"。BFLD 正是填补这一缺口的隐私层。
2. BFLD 的核心思想:免疫系统,而非监控镜头
设计文档 02-soul.md 用一个比喻定义了 BFLD 的立场:免疫系统不会给遇到的每个病原体建立档案——它按类型分类、按比例响应、把详细记录留在体内。BFLD 同样不"生产"身份,而是守卫"身份的意外生产":检测 RF 数据何时从"环境感知"滑向"身份记录",并在本地响应——抬高风险分、限制出站数据、轮换标识符。
这一区分是结构性的:同一物理信号既驱动 presence 检测,也被 BFId/LeakyBeam 用于再识别。BFLD 无法抑制底层物理,但可以保证节点的输出不可识别,即使其输入本可支持识别。
由此衍生出三类输出等级的判定表(隐私类与可逆性):
| 输出 | 隐私类 | 可逆性 |
|---|---|---|
| Presence(是/否) | 2 — anonymous | 不可逆为身份 |
| Motion 幅度(0..1) | 1 — derived | 不可逆为身份 |
| Person count(整数) | 1 — derived | 不可逆为身份 |
| Zone activity | 1 — derived | 不可逆为身份 |
| Identity risk score | 1 — derived | 是风险分,不是身份 |
| RF signature hash | 1 — derived | 每日轮换,不可逆 |
| Identity embedding | 0 — raw | 可直接还原为生物特征 |
| 原始 BFI 矩阵 | 0 — raw | 可直接还原为生物特征 |
这张表不是政策清单,而是被编入帧格式的约束:每个BfldFrame携带的privacy_class字节在数据离开节点前于 emitter 边界强制检查;任何想发送 class-0 数据的代码必须主动绕过编译期安全检查,而非仅仅忘记设一个 flag。
3. 三项结构性不变式(不可配置、非政策)
BFLD 的核心是三条无论操作者如何配置都成立的结构性属性(而非访问控制规则):
不变式 I1:原始 BFI 永不离开节点
BFI 矩阵被 extractor 摄取后仅在本地消费,不序列化到任何出站通道。在已实现的 crate 中,这一点由Sinkmarker-trait 层级与PrivacyClass::Raw.allows_network() == false联合强制(见 crate README)。MQTT 发射器(mqtt.rs/rumqttc_publisher.rs)不存在序列化 BFI 矩阵的代码路径;ruview/<node_id>/bfld/raw/state主题默认禁用,即使启用也只发布元数据摘要(子载波数、时间戳、SNR 范围),而非角度矩阵。
不变式 I2:身份嵌入仅存于内存
用于计算identity_risk_score的 RuVector 嵌入驻留在内存环形缓冲区中(默认 10 分钟),从不落盘、从不序列化进任何 MQTT 主题、即使privacy_class = 0也不进入BfldFrame载荷。源码实现位于 embedding_ring.rs:EmbeddingRing是固定容量(RING_CAPACITY = 64)的 FIFO,满时 push 会驱逐并返回最旧条目,使该条目的Drop执行、f32 存储被 zeroize;其IdentityEmbedding类型刻意不实现Serialize/Clone/Copy,并在Drop时清零存储。数学基础是:风险分只是嵌入在四个因子上的标量投影,下游任何消费者都不需要完整向量。
不变式 I3:跨站点身份匹配在密码学上不可能
rf_signature_hash的计算式为:
rf_signature_hash = BLAKE3-keyed(site_salt, day_epoch || features)site_salt是节点首次启动时生成的 256 位站点级密钥,存于 NVS/安全存储,永不传输;day_epoch = floor(unix_time_utc / 86_400),UTC 午夜翻转,同一人的哈希每天变化。
源码见 signature_hasher.rs:SITE_SALT_LEN = 32、RF_SIGNATURE_LEN = 32、SECONDS_PER_DAY = 86_400,compute()用Hasher::new_keyed(&site_salt)将day_epoch小端字节与特征字节流输入。由于 BLAKE3 是密钥化的 PRF,两个站点的节点观察同一人会产生不相交哈希空间中的独立值;即使攻击者同时拿到两个节点的哈希流,也无法判断同一人是否到访过两个站点——跨站点再识别是结构性不可能,而非政策承诺。测试套件tests/signature_hasher.rs直接覆盖了 ADR-120 中跨站点 Hamming 距离验收准则。
4. privacy_class 字节:四级数据暴露表
privacy_class是节点允许发出什么的唯一权威分类器,由隐私门(privacy_gate.rs)根据identity_risk_score与操作者配置为每个出站BfldFrame设置。研究包 04-privacy-gating.md 给出了四级完整字段表:
Class 0 — raw(仅限受控研究/红队)
| 字段 | 是否发布 | 说明 |
|---|---|---|
| presence / motion / person_count | 是 | 布尔 / 0..1 float / u8 |
| identity_risk_score | 是 | f32 |
| rf_signature_hash | 是 | 轮换 blake3,32 字节 hex |
| zone_activity / confidence | 是 | |
| compressed_angle_matrix | 是 | 每子载波 Phi/Psi——敏感面 |
| amplitude_proxy / phase_proxy / snr_vector | 是 | |
| bfi_matrix(原始) | 永不 | 序列化前丢弃,不在线格式中 |
| identity_embedding | 永不 | 仅本地 RAM,不在线格式中 |
Class 1 — derived(诊断默认,操作者显式 opt-in)
发布 presence、motion、person_count、identity_risk_score、rf_signature_hash(仅轮换哈希)、zone_activity、confidence、snr_vector(仅每流聚合);压缩角度矩阵、amplitude/phase proxy 一律清零。
Class 2 — anonymous(所有标准部署的默认)
发布 presence、motion、person_count、zone_activity、confidence;identity_risk_score与rf_signature_hash被抑制,所有角度/幅度/相位字段清零。
Class 3 — restricted(护理设施、医疗、客房等最高隐私场景)
仅发布 presence(布尔),motion 与 person_count 也抑制——等价于一个被动红外传感器。
4.1 源码级强制:单调降级与零化
已实现的 privacy_gate.rs 通过PrivacyGate::demote()强制单调类转换:只允许从低编号(信息密度高)向高编号(信息密度低)降级,不存在promote操作。降级时:
- 校验目标类的数值严格大于等于当前类(Derived(1)→Anonymous(2) 合法,反向禁止,否则返回
BfldError::InvalidDemote); - 目标 ≥ Anonymous 时清零
compressed_angle_matrix与可选csi_delta; - 目标 ≥ Restricted 时额外清零
amplitude_proxy与phase_proxy; - 重新同步
header.privacy_class并重算payload_crc32。
清零用black_box守卫的循环执行以对抗死存储消除(dead-store elimination),保证写操作可观测。
4.2 未来字段的默认拒绝姿态
04-privacy-gating.md 规定:任何新增进BfldFrame或事件 JSON 的字段必须先分类再发布——通过#[privacy_class(minimum = N)]注解或privacy_gate.rs中的等价运行时检查声明最小隐私类,配套单元测试断言低类包含、高类省略,并由 crate 内自定义#[must_classify]lint 强制:任何缺少分类属性的公开字段产生编译警告并升级为 CI 错误。
5. identity_risk_score:四因子乘法评分与门控动作
研究文档给出的评分公式为:
identity_risk_score = clamp(separability × temporal_stability × cross_perspective_consistency × sample_confidence, 0, 1)源码实现于 identity_risk.rs,且补充了关键设计意图:乘法组合在不确定下是保守的——任一因子接近 0 都会把总分压向 0,即"不确定时报告低风险",这是隐私优先的默认偏向。score()函数将每个输入 clamp 到 [0,1],NaN 按 0.0 处理(同样符合隐私保守偏向)。
分数确定性地映射到GateAction(ADR-121 §2.4):
| 分数区间 | 动作 | 效果 |
|---|---|---|
| score < 0.5 | Accept | 正常发布 |
| 0.5 ≤ score < 0.7 | PredictOnly | 发布但降低 confidence 标记 |
| 0.7 ≤ score < 0.9 | Reject | 丢弃事件 |
| score ≥ 0.9 | Recalibrate | 丢弃事件并轮换site_salt |
阈值常量PREDICT_ONLY_THRESHOLD = 0.5、REJECT_THRESHOLD = 0.7、RECALIBRATE_THRESHOLD = 0.9均在源码中定义,边界语义为下界包含(score = 0.7 即 Reject)。Recalibrate动作会触发EmbeddingRing::drain()——一次性清空所有嵌入槽位,使未来哈希与过去完全失联。
研究包 01-sota-survey.md 还指出了评分与攻击文献的校准关系:BFId 证明了身份再识别精度是时间窗口的函数,BFLD 的identity_risk_score应与之单调相关——高分(>0.7)对应 BFId >80% 精度的窗口,低分(<0.2)对应接近随机的窗口。
6. 哈希轮换与身份嵌入生命周期
6.1 rf_signature_hash 的构造与轮换
04-privacy-gating.md 给出完整构造:
site_salt := blake3_keyed_hash(secret="bfld-site-seed", data=node_mac_address) # 首次启动生成一次,存 NVS,32 字节,永不传输 day_epoch := floor(timestamp_ns / 86_400_000_000_000) # 每个 UTC 日一个新 epoch ephemeral := mean_angle_delta ‖ subcarrier_variance ‖ burst_motion_score # 当前窗口特征的小型定长摘要,非身份特异 rf_signature_hash := BLAKE3(key = site_salt, input = day_epoch_bytes(8) ‖ ephemeral_features(24))轮换的语义分三层:
- 跨站点隔离:BLAKE3 是密钥化 PRF,
salt_A ≠ salt_B时即使输入day ‖ features完全相同,两个哈希也伪随机独立; - 站内当日聚类:同一天同一站点内,同一人的帧产生相近(非相同)哈希——这是刻意设计,允许会话内的事件聚类,但不允许身份恢复;
- 跨日失联:轮换时刻一到,所有既有哈希与未来值在密码学上断连,节点操作者本人也无法跨日关联日志。
6.2 嵌入生命周期
BFI 帧到达 → 特征提取 → RuVector 嵌入 Vec<f32,128> ├─→ identity_risk_score(标量投影;class 1 发布 / class 2-3 抑制) └─→ 内存环形缓冲(EmbeddingRing,容量 64,no_std,无堆分配) → 永不落盘、永不序列化、重启即失 → 留存窗口后丢弃(Drop 时 zeroize)环形缓冲服务于两个目的:temporal_stability需要对比当前嵌入与近期嵌入;一致性门(coherence gate)需要近期帧判断新帧是既有轨迹延续还是新事件。两者都只需嵌入在计算期间存于 RAM——都不需要持久化。crate 中的 coherence_gate.rs 独立成模块,并在 tests/coherence_gate.rs 中验证。
7. 威胁模型:六类对手与五条攻击树
03-security-threat-model.md 定义了六类对手:
| 对手 | 能力 | BFLD 的相关性 |
|---|---|---|
| A1 被动嗅探者(好奇邻居) | monitor 模式网卡 + Wi-BFI/tcpdump,零网络关系 | LeakyBeam 威胁;BFLD 无法阻止空中捕获,但确保自身输出不助长其工作 |
| A2 定向跟踪者 | A1 + 目标 MAC 地址 + 时间关联 | 若哈希长期稳定即可跨会话关联;每日轮换切断此关联 |
| A3 ISP/运营商 | 可访问 MQTT broker、HA、云端 | 隐私门在节点边界拦截,操作者无法意外发布身份相关数据 |
| A4 国家/执法机关 | 强制访问存储与日志 + 取证 | 若不变式成立,broker 仅存 presence/motion/count/轮换哈希,均不可单独再识别 |
| A5 被攻陷的 AP 固件 | 修改 sounding 调度提取更高分辨率 BFI | 系统自归一化:更可分的 BFI 会抬升identity_risk_score并标记为高风险 |
| A6 供应链攻陷节点 | 移除隐私门或加入外泄路径 | ADR-028 witness-bundle 模式 + AC6 确定性帧哈希:被篡改的二进制在 verify 时必然失败 |
五条攻击树覆盖:AT-1 被动捕获→身份推断(BFLD 不阻止空中接口,但拒绝提供第 4 步的"关联锚点");AT-2 跨站点哈希关联(被 site_salt 结构性阻断);AT-3 风险分时序侧信道(默认不发布 + MQTT ACL 本地化 + class 3 将风险分清零);AT-4 MQTT 主题枚举(默认 mosquitto ACL 拒绝匿名通配订阅 + 建议 TLS/客户端证书);AT-5 Matter cluster 滥用(Matter 边界拒绝一切身份字段)。
威胁模型还以每隐私类为单位给出残余威胁分析:class 0 的角度序列具有身份判别性,仅限受控研究;class 1 存在 AT-3 时序侧信道残余;class 2 的时间占用模式可能泄露日程(非身份);class 3 等价于被动 IR 传感器,残余威胁最小。
8. 生态集成:Home Assistant、Matter、MQTT 与联邦
8.1 Home Assistant:6 个新实体
05-automation-integration.md 定义 BFLD 在 sensing-server 既有 21 实体(ADR-115)之上新增的实体:
| 实体 | 类型 | privacy_class | 默认 |
|---|---|---|---|
binary_sensor.bfld_presence | 布尔 | 2 | ON |
sensor.bfld_motion | 0..1 float | 2 | ON |
sensor.bfld_person_count | 整数 | 1 | ON |
sensor.bfld_confidence | 0..1 float | 2 | ON |
sensor.bfld_identity_risk | 0..1 float(诊断) | 1 | OFF |
sensor.bfld_zone_activity | 字符串 | 2 | ON |
bfld_identity_risk在 HA 模型中归类为诊断实体,UI 默认隐藏且不进 recorder 历史,除非显式启用——与 class-1 字段的操作者 opt-in 姿态一致。配套三个 HA blueprints:presence 驱动灯光(仅 class-2 数据)、motion 驱动 HVAC、身份风险异常通知(唯一触碰 class-1 字段的蓝图,用于提醒操作者环境变化使 RF 信道更可区分)。crate 内已有 ha_discovery.rs 实现 MQTT discovery 载荷生成,并有 tests/ha_discovery.rs 验证。
8.2 Matter:最小暴露面
Matter 只暴露 Occupancy Sensing(0x0406,presence→Occupancy属性 bit 0)、Motion Detection(0x040E 提案)与 People Count(厂商扩展)。以下字段无论操作者如何配置都不得经 Matter 暴露:identity_risk_score、rf_signature_hash、raw_bfi、identity_embedding、compressed_angle_matrix,以及任何未来分类为 class < 2 的字段。该拒绝逻辑在 v2/crates/cog-ha-matter/ 中实现,BFLD 事件在填充 Matter 属性报告前被过滤。
8.3 MQTT 主题树与 ACL 建议
ruview/<node_id>/bfld/ presence/state # "true"|"false" — class 2 motion/state # "0.42" — class 2 person_count/state # "1" — class 1 identity_risk/state # "0.71" — class 1,默认禁用 raw/state # 默认禁用,class 0 仅元数据 zone_activity/state # "living_room" — class 2 confidence/state # "0.88" — class 2 events/bfld_update # 完整 JSON 事件 — 默认仅 class 2 字段推荐的 mosquitto ACL:BFLD 节点只写自身子树;HA 只读 presence/motion/count/zone/confidence/events;identity_risk 的读取规则需操作者显式添加;匿名客户端默认无任何访问权;raw 主题默认从不写入。BFLD 的 MQTT 发布端在 crate 中已实现(mqtt_topics.rs、rumqttc_publisher.rs,mqttfeature 引入rumqttc 0.24),并配有 live-broker 集成测试(tests/mosquitto_integration.rs,可用BFLD_MQTT_BROKER=tcp://localhost:1883解锁)。
由于 BFLD 发布标准 MQTT 载荷与一致主题结构,Node-RED 与 OpenHAB 无需任何插件即可直接消费(研究包中给出了 Node-RED flow 与 OpenHAB items 文件示例)。
8.4 cognitum 联邦:身份字段在节点边界剥离
cognitum-v0(Pi 5 家电,运行 ruview-mcp-brain 于 9876、cognitum-rvf-agent 于 9004、ruvector-hailo-worker 于 50051)是跨房间关联的舰队协调器。关键约束:身份字段在节点边界、本地 BFLD emitter 处剥离,而非在 cognitum-v0 处。联邦主题仅转发 presence/motion/person_count/events;identity_risk/state与raw/state为节点本地主题,不参与联邦。cognitum-rvf-agent 用时间与空间邻近性做多房间占用关联("人从客厅节点移到厨房节点"),不需要也不接收身份信息。未来扩展点:将identity_risk_score计算卸载到 Hailo-8 加速器(ruvector-hailo-worker 于 50051),嵌入仍留在 cognitum-v0 本地——明确不在当前规范范围内。
9. 实现:crate 布局、公共 API 与验收准则
9.1 模块布局与复用地图
规划文档 06-implementation-plan.md 设计的模块布局,在仓库中已实际落地为 v2/crates/wifi-densepose-bfld/src/:lib.rs(公共 API:BfldPipeline、BfldFrame、BfldEvent)、frame.rs(序列化 + CRC32 + magic)、extractor.rs对应能力的 BFI 捕获接口、features.rs的特征计算、identity_risk.rs、privacy_gate.rs、emitter.rs、mqtt相关模块,以及独立的coherence_gate.rs、embedding.rs、embedding_ring.rs、signature_hasher.rs、privacy_mode.rs、soul_channels.rs等。测试目录 tests/ 包含 60+ 个测试文件,覆盖帧往返、隐私门降级、哈希轮换、身份风险分数、MQTT 路由、确定性、presence 延迟等全部验收点。
crate 插在wifi-densepose-signal(BFI 归一化、时间窗)与wifi-densepose-sensing-server(MQTT/HA 集成)之间,默认构建不依赖训练管线与神经网络推理 crate。从规划文档的复用地图看,BFLD 复用 RuvSense 的coherence_gate.rs(嵌入门控)、multistatic.rs(跨视角一致性)、cross_room.rs(环境指纹)、longitudinal.rs(Welford 统计)、adversarial.rs(物理不可能信号检测,对应 A5 威胁),以及 RuVector 的ruvector-attention(子载波空间注意力)、ruvector-mincut(人员分离)、ruvector-temporal-tensor(时间窗压缩)。cog-ha-matter与wifi-densepose-ruvector/viewpoint/的 fusion 模块亦在其复用列表中。
9.2 公共 API 速览
crate README 给出的最小进程内消费者:
use wifi_densepose_bfld::{ BfldConfig, BfldPipeline, IdentityEmbedding, SensingInputs, SignatureHasher, EMBEDDING_DIM, SITE_SALT_LEN, }; let mut pipeline = BfldPipeline::new( BfldConfig::new("seed-01") .with_signature_hasher(SignatureHasher::new([0xAB; SITE_SALT_LEN])), ); let event = pipeline .process( SensingInputs { /* timestamp, presence, motion, ... */ timestamp_ns: 1_700_000_000_000_000_000, presence: true, motion: 0.42, person_count: 1, sensing_confidence: 0.91, sep: 0.2, stab: 0.2, consist: 0.2, risk_conf: 0.2, rf_signature_hash: None, }, Some(IdentityEmbedding::from_raw([0.05; EMBEDDING_DIM])), ) .expect("low-risk emit"); println!("{}", event.to_json().unwrap());生产形态是 worker 线程 + HA-DISCO 发布(BfldPipelineHandle::spawn,示例见 examples/bfld_handle.rs),可运行cargo run -p wifi-densepose-bfld --example bfld_minimal与cargo run -p wifi-densepose-bfld --example bfld_handle体验。
9.3 线格式
frame.rs 定义了BFLD_MAGIC: u32 = 0xBF1D_0001,头部含 magic、version、哈希化后的 AP/STA 标识、quantization 字节、privacy_class字节、压缩特征载荷与 CRC32(详见 ADR-119,86 字节头部 + 载荷分节 + CRC-32/ISO-HDLC)。测试 tests/frame_roundtrip.rs 验证序列化往返与 CRC32 确定性,tests/payload_sections.rs、tests/header_roundtrip.rs覆盖头部与分节细节。
9.4 七条验收准则与 CI 映射
| AC | 准则 | 测试 |
|---|---|---|
| AC1 | 商品 WiFi 5/6 捕获(80/160 MHz,2×2 MIMO 起步) | ac1_commodity_wifi_capture |
| AC2 | presence 延迟 ≤ 1s(自首个非空 BFI 帧) | ac2_presence_latency(CI 用 200ms 更紧阈值) |
| AC3 | motion 发布 ≥ 1 Hz | ac3_motion_hz |
| AC4 | 原始 BFI 字节永不出现于序列化输出(1000 随机输入 fuzz) | ac4_raw_bfi_absent |
| AC5 | privacy_mode 抑制全部身份派生字段 | ac5_privacy_mode(+ 1000 输入 fuzz) |
| AC6 | 相同输入 → 位级相同输出(跨平台确定性) | ac6_deterministic_hash |
| AC7 | csi_matrix = None时管线仍产出合法事件 | ac7_csi_optional |
crate 的测试目录已落地对应覆盖,例如 tests/presence_latency.rs、tests/motion_publish_rate.rs、tests/pipeline_determinism.rs、tests/event_privacy_gating.rs。另有tests/hash_rotation.rs验证跨站点隔离(不同 salt、相同输入 → 哈希必异)与每日轮换(同一 salt、午夜前后 1 秒 → 哈希必异)。
9.5 ESP32 能力边界与捕获路径
06-implementation-plan.md 的 ESP32 评估结论是明确的:ESP32-S3 的esp_wifi_csi_set_config()只产出 Espressif HT20 格式 CSI(每子载波幅度+相位),不公开 CBFR 帧捕获 API。因此 BFI 采集必须走主机侧嗅探:Pi 5 + BCM43456 芯片跑 Nexmon monitor 模式(舰队中 cognitum-v0 即为此硬件),过滤 Action 帧中的 VHT/HE CBFR,经 rvcsi 适配器(vendor/rvcsi/已处理 Nexmon PCap 格式)转发进 BFLD 管线。对 ESP32 固件唯一需要的改动是stream_sender.c中增加包类型字节(STREAM_PKT_TYPE_CSI 0x01/STREAM_PKT_TYPE_BFI 0x02)以区分 CSI 与 BFI 帧。
9.6 分阶段落地
规划六阶段:P1 帧格式+extractor 桩(2 周)→ P2 特征提取+身份风险(3 周)→ P3 隐私门+MQTT(2 周)→ P4 HA 集成(1 周)→ P5 Matter 暴露(1 周)→ P6 cognitum 联邦(1 周),总计约 10.5 工程师周。
10. 评估与基准策略
07-benchmarks-and-evaluation.md 定义了 BFLD 的度量体系:
- Presence:延迟 p50 < 500ms、p95 < 1000ms(AC2);空房误报率 < 5%、漏报率 < 2%(以 ADR-079 相机真值协议为地面真值);
- Motion:与相机推导幅度 MAE < 0.1;持续运行 ≥ 1 Hz(AC3);onset 延迟 p95 < 750ms;
- Person Count:1–3 人计数准确率 > 85%、MAE < 0.5(依赖
ruvector-mincut,4+ 人需多 AP 覆盖); - Identity Risk 校准(BFLD 的新颖评估维度):定义
E[acc(t) | r(t) = v]随 v 单调递增为"已校准",用 BFId 分类器滑窗精度与风险分做 Spearman 相关,目标 rho > 0.5; - Privacy-mode 误报率:目标0%(硬性正确性要求,非统计目标),由 AC5 fuzz 验证。
红队协议包括三个攻击实验:哈希再识别攻击(跨 3 天,预期失败,成功率 ≤ 1/N + 0.05)、跨站点再识别(哈希匹配结构性失败;分类器若拿到原始角度序列可能成功——但 BFLD 不发布这些)、风险分时序侧信道(攻击者只能学到"有人在场",等价于 class 2 已发布的 presence 信息)。
对比基线表明隐私门控的显式代价:无门控的 BFI+CSI 融合管线估计 F1 ≈ 0.97,BFLD class 2 目标 F1 0.93——这是"身份安全换取适度效用"的明确权衡。CI 中每个触碰 BFLD 的 PR 都运行三项持续评估:确定性哈希(AC6)、隐私模式字段抑制 fuzz(AC5)、延迟冒烟(AC2,200ms 紧阈值)。
11. 溯源与证据链:审计与见证
研究包与 crate 为 BFLD 提供了多层可审计性:
- 网络级审计:tcpdump 抓取 1883/8883 端口,在 PCAP 中检索 BFI magic 字节
BF 1D 00 01——class ≥ 2 时不应出现; - 节点自检(P3 起规划):
wifi-densepose bfld audit --duration 60s输出 raw_bfi/embedding 出现次数与 privacy_class 分布; - CI 确定性校验:
verify_bfld.py结构对齐 ADR-028 的 witness-bundle 模式——固定种子合成 BFI 输入(512 字节、PRNG seed=117)→ 提交期望 SHA-256 → 篡改二进制(A6 威胁)在下次 verify 时必然失败。AD-028 见证日志 docs/WITNESS-LOG-028.md 预留了 BFLD 分节。
12. 未来方向与设计前瞻
- WiFi 7(802.11be):MLO 多链路操作将 sounding 频率提升 3–5 倍,身份分类器的训练数据量同步增长。BFLD 的帧格式(magic
0xBF1D_0001+ version 字节)为协议演进预留扩展,特征提取模块可插拔,WiFi 7 extractor 可无侵入接入——不变式保持不变; - AI/ML 压缩反馈:802.11bn/Wi-Fi 8 研究组正探索神经码本压缩 BFI,其隐空间可能比原始角度更具身份判别性,BFLD 需兼容压缩编码;
- 差分隐私融合(明确列为未来扩展而非本 ADR 范围):
identity_risk_score可作为自适应 epsilon 选择器——高风险帧收紧隐私预算(更多噪声),低风险帧原样通过; - ZK 证明:未来可用零知识证明声明"风险分确由声称的输入算出"而不泄露输入(与 ADR-028 witness 思路同源)。
结语
BFLD 把"WiFi 感知输出是否已滑入身份记录"这一隐性、静默的风险,转变成每个事件上可见、可审计的显式信号。它不承诺阻止空中的被动嗅探(那是物理层问题),而是承诺节点的自身输出不可识别——并通过类型系统(Sink层级、无Serialize的嵌入)、密钥化哈希轮换与单调隐私门,把承诺变成结构性事实。对于在共享办公、客房、护理设施等场景部署 RuView 的团队,这套 docs/research/BFLD/ 研究档案 + ADR-118 架构决策 +wifi-densepose-bfldcrate 的组合,提供了从威胁建模、机制设计到可运行实现的完整参考。
【免费下载链接】RuViewπ RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.项目地址: https://gitcode.com/GitHub_Trending/wi/RuView
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考