RuView BFLD 深度解析:以波束成形反馈(Beamforming Feedback)构建射频层身份泄漏检测与隐私门控
2026/9/8 19:27:56 网站建设 项目流程

RuView BFLD 深度解析:以波束成形反馈(Beamforming Feedback)构建射频层身份泄漏检测与隐私门控

【免费下载链接】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 生态中的一项射频层隐私原语:它把 802.11ac/ax 上以明文传输的波束成形反馈(BFI)当作传感信号 + 泄漏信号双重使用,通过identity_risk_score量化"当前捕获窗口是否足以识别具体个人",并用privacy_class字节级结构上门控身份相关数据的外发。本文以架构决策 ADR-118 为主干,融合其五个子 ADR(119–123)与v2/crates/wifi-densepose-bfld/中的真实实现,讲解 BFLD 的动机、三条结构性隐私不变量、9 大特征、身份风险评分、逐字节隐私分类、MQTT/Matter/HA 暴露边界,以及 Pi 5/Nexmon 捕获路径。读完你可掌握这套"非策略式(structural)隐私保障"设计如何在普通 WiFi 设备上落地,以及如何在当前仓库中查阅、构建与验证它。


1. 背景:明文 BFI 是 RuView 管道中未被测量的泄漏面

1.1 明文 BFI 问题

IEEE 802.11ac / 802.11ax 的波束成形反馈(BFI,Beamforming Feedback Information)在客户端(STA)与接入点(AP)之间以未加密的管理面帧交换。STA 把信道响应压缩成 Givens 旋转角度矩阵(Φ/ψ),以 VHT/HE Compressed Beamforming Report(CBFR)的形式发出。任何处于 WiFi monitor 模式、且未加入该网络的第三方设备,都能被动嗅探这些帧。

ADR-118 §1.1 引用了两篇 2024–2025 年的独立研究结果来说明该暴露的严重程度:

  1. BFId(KIT,ACM CCS 2025):仅凭 BFI 即可在 5 秒捕获内以 >90% 的准确率对 197 名个体完成重识别;
  2. LeakyBeam(NDSS 2025):仅使用明文 BFI 即可在 20 m 距离隔墙检测占用,TPR 82.7% / TNR 96.7%。

更关键的是捕获工具链完全免费可得:可 pip 安装的Wi-BFIPicoScenes、面向 BCM43455c0(Raspberry Pi 5 / 4 / 3B+)的Nexmon BFI patches。也就是说,"从空气中采下可用于身份识别的 BFI"已无任何门槛。

1.2 现有 RuView 管道的缺口

wifi-densepose / RuView 管道经由 rvCSI 运行时(ADR-095、ADR-096)处理 CSI,产出 presence、pose、vitals、zone-activity 事件。但 ADR-118 明确指出:管道中没有任何一层去度量"它正在处理的数据是否具备识别个体的能力"——无论运行在什么 regime 下,所有 CSI 在隐私意义上都被等同对待。

当部署规模扩大(养老院、酒店、共享办公室、出租物业),这一缺口就变成合规与责任问题:操作者没有任何仪表可以验证系统确实工作在匿名状态。这正是 BFLD 诞生的原因。

1.3 BFI 的另一面:它也是一种传感信号

值得注意,BFI 不只是一个威胁向量。其压缩角度矩阵携带多径几何信息,可用于 presence 与 motion 检测——尤其适合没有 MIMO CSI 可用的单 AP 部署。因此 BFLD 把 BFI 当作 CSI 之外的可选输入,而非替代品。

1.4 与 Soul Signature 研究的关系

仓库中的docs/research/soul/(Soul Signature)定义了一套基于同意的7 通道多模态生物特征,用于对登记个体做被动重识别。BFLD 与它恰好互补:

关注点Soul SignatureBFLD
意图为已登记人员创建生物特征度量并门控同一传感基底上的身份泄漏
同意模型显式登记,GDPR/HIPAA 模式默认拒绝(default-deny),所有未登记人员
运行类别必须运行在privacy_class = 1(derived)默认 class 2(anonymous)
共享资产AETHER 编码器(ADR-024)、WitnessChain(ADR-110/028)、RVF 容器、cross_room.rs(ADR-030)相同
ID 空间每个登记个体一个长生命周期不透明person_id每个未登记个体每天轮换的rf_signature_hash

在职责划分上,BFLD 是 Soul Signature 的执行层(enforcement layer)identity_risk_score决定某个 zone 是否"泄漏度高到足以登记",witness bundle 是对监管方的审计制品,而结构性隐私不变量(I1/I2/I3)确保即使在没有 Soul Signature 积极匹配登记者的 zone 里,未登记旁观者依然保持匿名。

1.5 这个 ADR "不是什么"

  • 不是对 CSI 管道的替换——rvCSI(ADR-095/096)仍对 CSI 权威负责;
  • 不是把任何外部嗅探器搬进仓库——Nexmon 捕获路径在独立适配器中(见 ADR-123);
  • 不是 Matter SDK 发布物——Matter 暴露要经过 ADR-116cog-ha-matter边界过滤。

2. 决策:新建 Rust cratewifi-densepose-bfld

ADR-118 的核心决策是在v2/crates/下新建 cratewifi-densepose-bfld,职责如下:

  1. **摄取(Ingest)**来自 CBFR 帧的 BFI 角度矩阵(Φ/ψ),可选与 CSI 融合;
  2. **计算(Compute)**九大命名特征与identity_risk_score(separability × temporal_stability × cross_perspective_consistency × sample_confidence);
  3. 门控(Gate)所有输出经由一个privacy_class字节,在 class 2(anonymous)与 class 3(restricted)下结构性阻止身份相关数据的发布;
  4. **发布(Emit)**以 JSONBfldEvent形式经 MQTT 发到ruview/<node_id>/bfld/*,并按 class 路由 topic;
  5. 三条不变量用结构而非策略来强制
    • I1:原始 BFI 绝不离开节点;
    • I2:身份嵌入仅驻留内存(不上盘、不上网);
    • I3:通过按站点密钥化的 BLAKE3 哈希、以日纪元轮换,使跨站点身份关联在密码学意义上不可能。

这套伞形决策被拆解为五个子 ADR:

子 ADR范围
ADR-119BfldFrame线格式、magic0xBF1D_0001、确定性序列化、CRC32
ADR-120privacy_class语义、BLAKE3 哈希轮换、default-deny 字段分类
ADR-121身份风险评分公式、coherence gate、泄漏估计器
ADR-122RuView 表面:HA 实体、Matter cluster 边界、MQTT topic ACL
ADR-123捕获路径:Pi 5/Nexmon 适配器 + ESP32-S3 BFI 可行性

2.1 提议的 crate 模块布局

ADR-118 §2.1 给出如下设计布局:

v2/crates/wifi-densepose-bfld/ ├── Cargo.toml └── src/ ├── lib.rs ├── frame.rs # BfldFrame (ADR-119) ├── extractor.rs # CBFR parser → BfiCapture ├── features.rs # 9 features ├── identity_risk.rs # risk score (ADR-121) ├── privacy_gate.rs # privacy_class enforcement (ADR-120) ├── hash_rotation.rs # BLAKE3 per-site rotation (ADR-120) ├── emitter.rs # BfldEvent → MQTT ├── mqtt.rs # topic routing (ADR-122) └── ffi.rs # PyO3 bindings (ADR-117 pattern)

仓库实现现状:该 crate 已在 v2/crates/wifi-densepose-bfld/src/lib.rs 落地并保持no_std兼容内核。从lib.rs的模块声明可看到实现与设计基本一致,且粒度更细:frameidentity_riskprivacy_gatesignature_hashersink(I1 的 marker-trait 层级)、coherence_gate(含SoulMatchOracle)、embedding/embedding_ring(I2 的环形缓冲)、emittermqtt_topicsha_discoveryrumqttc_publisherevent等。lib.rs 头注释也如实记录了演进状态:"P1 in progress — frame format + sink marker traits. P2–P6 follow",并注明 Soul Signature 匹配算法(soul_match/soul_channels)已实现并通过测试,但命名身份锁定仍处于>pub trait Sink {} pub trait LocalSink: Sink {} // Allowed: classes 0,1,2,3 pub trait NetworkSink: Sink {} // Allowed: classes 1,2,3 (NOT class 0) pub trait MatterSink: NetworkSink {} // Allowed: class 2,3 + cluster-filter (ADR-122) impl Emitter { pub fn publish<S: NetworkSink>(&self, sink: &S, frame: BfldFrame) -> Result<(), BfldError> { if frame.header.privacy_class == 0 { return Err(BfldError::PrivacyViolation { reason: "class 0 to NetworkSink", }); } // ... serialize and write } }

配合序列化端 ADR-119 §2.3 的规则:class 0 帧若通过NetworkSink::publish()发布会返回BfldError::PrivacyViolation,跨 sink 转发必须走显式的 class 转换(见 3.4)。

3.2 I2 的落地:身份嵌入的生命周期

身份嵌入(AETHER 编码器输出,ADR-024)被保存在一个subtle::Zeroizing<[f32; 128]>的 64 槽环形缓冲中(约 30 KB)。其生命周期规则为:

  1. 每个捕获窗口由编码器写入;
  2. 仅供identity_risk_score计算消费(ADR-121);
  3. 绝不写入磁盘、MQTT 或任何 I/O sink——类型上没有Serialize实现;
  4. 环形缓冲按 FIFO 覆写。

此外,对IdentityEmbedding施以编译期#[forbid(serde::Serialize)]lint,确保未来的 PR 无法偷偷加一个Serializederive。这与实现中 lib.rs 所述"noSerialize/Clone/Copy+Dropzeroizes storage"完全吻合。

3.3 I3 的落地:BLAKE3 keyed 哈希轮换

I3 需要一种哈希轮换方案:让同一个物理个体在不同站点、跨日边界产生不同的rf_signature_hash,且站点间无需任何带外协调。ADR-120 §2.3 给出核心函数:

pub fn rf_signature_hash( site_salt: &[u8; 32], // 首次启动生成,持久化于 TPM/KMS day_epoch: u32, // floor(unix_time_utc / 86400) features: &IdentityFeatures, ) -> Hash { let mut hasher = blake3::Hasher::new_keyed(site_salt); hasher.update(&day_epoch.to_le_bytes()); hasher.update(&features.canonical_bytes()); hasher.finalize() }

结构性跨站点隔离site_salt是每个节点独有的 256 位随机秘密、从不传输。两个站点观测同一个人,产生的哈希互不相关;操作者(或攻破单个节点的攻击者)都没有可用于跨站点桥接的密钥。这比"策略上约定不共享"更强,因为桥接在计算上不可构造

日轮换day_epoch在 UTC 午夜翻转,迫使同一人的哈希每天变化一次。跨天关联需要重新采集生物特征,而轮换主动打断了这一点。ADR-120 还权衡过"按小时轮换"(会破坏合法的"早晨在、下午又回来"运营场景)与"逐事件 nonce"(会迫使消费者在会话内跟踪同一人,反而在结构上泄漏身份),最终日边界是折衷方案。

3.4 单向 class 转换与 default-deny 字段治理

  • 只降不升:高层级帧想变成更低泄漏的帧,唯一途径是PrivacyGate::demote(frame, target_class)——断言目标 class 编号 ≥ 输入、用subtle::Zeroize清零被禁止字段、重算payload_crc32、返回新帧。没有 promote 操作:class-2 帧不可能变回 class-1,因为被丢弃的字段在 gate 可达的范围内没有留存(实现见v2/crates/wifi-densepose-bfld/src/privacy_gate.rs,测试见tests/privacy_gate_demote.rstests/event_gating_irreversibility.rs)。
  • #[must_classify]BfldFrame/BfldEvent的每个新增字段必须带此自定义属性宏;若字段未列入按 class 划分的 allow-list 表,编译直接失败。这迫使贡献者对每个新字段做出显式的隐私决策,杜绝"新字段上线六个月后才发现泄密"的常见模式。

4. 计算引擎:九大特征与identity_risk_score

ADR-118 将identity_risk_score定义为四个因子的乘积。其完整机制由 ADR-121 定义,identity_risk_score有两个消费者:

  1. 操作者:作为 HA 诊断传感器暴露(ADR-122)。相对长期基线出现尖峰,意味着 RF 环境已滑向更高泄漏 regime(新 AP 固件、更密集的 MIMO、范围内出现攻击者级嗅探器);
  2. 隐私门控(ADR-120):当分数跨过可配置阈值时,gate 自动把活动的privacy_class降级(例如 2 → 3),直到分数恢复。

4.1 九大特征

特征在一个W = 32帧的滑动窗口上计算(10 Hz 下约 3 秒):

特征定义来源模块
mean_angle_delta各子载波上 ‖ Φ_t − Φ_{t-1} ‖ 的均值extractor
subcarrier_variance子载波轴上 ‖ Φ ‖ 的方差extractor
temporal_entropyW 窗口内角度 bin 直方图的香农熵extractor
doppler_proxy均值角度时间序列的 FFT 峰值幅度features.rs
path_stability1 − ‖ Φ_t − median(Φ_{t-W..t}) ‖ / scalefeatures.rs
cross_antenna_correlationn_tx × n_rx 对间的均值 Pearson 相关features.rs
burst_motion_score高通滤波后的角速度,软阈值化features.rs
stationarity_score1 − W/2 与 W 窗口间的滚动 KL 散度features.rs
identity_separability_score与最近 AETHER 聚类质心的 top-1 余弦identity_risk.rs

前八个是传感特征(也被 presence/motion 管道使用);只有第九个依赖 AETHER 嵌入,因此要求identity_class >= 1

4.2 乘法式风险公式

pub fn identity_risk_score( sep: f32, // identity_separability_score, [0, 1] stab: f32, // temporal_stability, [0, 1] = ema(path_stability, alpha=0.1) consist: f32,// cross_perspective_consistency, [0, 1] = multistatic.rs conf: f32, // sample_confidence, [0, 1] = f(SNR, n_subcarriers, n_rx) ) -> f32 { // Clamp inputs, then multiplicative combination — any factor near 0 dominates. let s = sep.clamp(0.0, 1.0); let t = stab.clamp(0.0, 1.0); let p = consist.clamp(0.0, 1.0); let c = conf.clamp(0.0, 1.0); (s * t * p * c).clamp(0.0, 1.0) }

选乘法组合的意图是:任一弱因子都主导结果——例如 SNR 很低导致conf很低,分数就塌向 0。这与隐私目标一致:系统不确定时,分数应偏低,操作者不必被惊扰(宁可漏报、不可误报)。实现对应的评分函数与GateAction位于 identity_risk.rs,测试见 tests/identity_risk_score.rs。

4.3 校准与量化目标

分数以 KIT BFId 数据集的保留测试集为基准,对照真实重识别成功率做校准:用分段线性 isotonic regression 把原始分数映射到校准后的[0,1],使score ≥ 0.8对应校准数据集上"5 秒窗口内 >80% 重识别准确率"。校准参数独立于代码版本,存放在v2/crates/wifi-densepose-bfld/data/risk_calibration.toml——回归更新是一次纯内容 PR,无需重编译。

边界:ADR-121 如实标注——校准依赖 KIT BFId 数据集(非商业研究协议);在拿到数据前分数只作为内部触发器,不是可发布信号。

4.4 Coherence gate 与迟滞

coherence gate 消费风险分数并输出四种动作(实现于 coherence_gate.rs):

pub enum GateAction { Accept, // score < 0.5, publish normally PredictOnly, // 0.5 <= score < 0.7, publish but flag confidence Reject, // 0.7 <= score < 0.9, drop the event Recalibrate, // score >= 0.9, drop AND rotate site_salt }

Recalibrate会触发强制 site-salt 轮换,是对"持续高风险 regime"(如攻击者级嗅探器进入范围)的激进自愈响应,代价是长期聚合分析的连续性中断。为防止阈值附近的振荡,gate 采用 ±0.05 迟滞 + 5 秒防抖:分数必须越过迟滞边距并持续整个防抖窗口,动作才会切换。

4.5 计算预算与 Soul Signature 豁免

阶段目标延迟实现
特征提取(8 特征)每窗口 <3 msndarray + nalgebra,子载波向量化
可分性(到质心余弦)每窗口 <5 msRuVector RaBitQ 索引(≤1k 质心)
风险分数<0.1 ms标量乘法
gate 决策 + 迟滞<0.1 ms标量

Pi 5 单核上整窗 p95 ≤ 10 ms(目标 8 ms)。ESP32-S3 只承载提取阶段,风险评分在主机侧完成(ADR-123)。

由于 Soul Signature 本身刻意工作在高可分性 regime(其 60 秒登记协议就是要把identity_separability_score推向 1.0),默认 gate 会在其 zone 内频繁触发Recalibrate而破坏登记。ADR-121 §2.6 的两个集成点解决此问题:Recalibrate 豁免(触发前查询SoulMatchOracle,若高分簇与已登记person_id匹配成功则降级为PredictOnly;未启用soul-signaturefeature 时 oracle 为 no-op stub,行为同默认)+登记质量门槛(Soul Signature 仅在score >= ENROLL_MIN(默认 0.65)持续满 60 秒时才继续登记,中途掉线即中止并提示重试)。豁免是不对称的:只压制已知登记匹配的Recalibrate,未知的高可分性簇仍按设计触发。


5. 帧格式与线协议(ADR-119 核心细节)

BfldFrame必须满足五条硬要求:确定性(相同输入 → 逐位相同输出,witness 哈希可存活验证)、自描述(magic + version)、字节级隐私分类(接收端在解析 payload 前就知道数据类别,以便丢弃无权处理的帧)、紧凑(节点最高 10 Hz 发射,须适配未分片 MQTT 与 ESP-NOW)、字节序稳定(x86_64 的 ruvultra、aarch64 的 cognitum-v0/Pi 5 集群、Xtensa 的 ESP32-S3 必须产出相同字节)。

5.1 86 字节定长头

ADR-119 §2.1 定义了 packed、little-endian 头。值得记录的是:早期草稿把头部写成 40 字节,那是 P1 脚手架阶段发现的计数错误——实现中由const_assert_eq!强制为准确的86 字节(在 x86_64、aarch64、xtensa-esp32s3 三平台均如此,见 frame.rs 的BFLD_HEADER_SIZE校验)。magic 常量BFLD_MAGIC: u32 = 0xBF1D_0001也在该文件真实存在——bf1d在 hex-dump 中读作 "BFLD",方便 wireshark/xxd 调试。

头字段包含:magic、version、flags(bit0=has_csi_delta、bit1=privacy_mode、bit2-15 保留)、timestamp_nsap_hash[16]sta_hash[16]session_id[16]、channel、bandwidth_mhz(20/40/80/160)、rssi_dbm、noise_floor_dbm、n_subcarriers、n_tx、n_rx、quantization(0=f32、1=i16、2=i8、3=4-bit nibble packed)、privacy_class(0–3,默认 2)、payload_len、以及仅覆盖 payload 字节payload_crc32(CRC-32/ISO-HDLC)。

5.2 Payload 与确定性序列化

Payload 是定序的类型化 section 序列:

payload = compressed_angle_matrix ‖ amplitude_proxy ‖ phase_proxy ‖ snr_vector ‖ optional_csi_delta (present iff flags.bit0 set) ‖ optional_vendor_extension (length 0 allowed)

每个 section 是[u32 len_le][bytes...],CRC32 覆盖所有 section 字节(含长度前缀),不含头。确定性由三点保证:字段顺序由#[repr(C, packed)]固定;浮点量化采用规范化的 round-half-to-even + 文档化饱和(quantization=0 的 f32 禁止上线,仅限本地);CRC32 在全部 section 字节就位后最后计算。

ADR-119 还提到 witness 确定性测试:tests/determinism.rs用 200 帧 BFI fixture,在两个线程上把同一字节流序列化 1,000 次,验证所得流的 BLAKE3 逐位一致。当前仓库的 tests/pipeline_determinism.rs、tests/frame_header_size.rs、tests/serialization_throughput.rs 等即对应这批验收目标。

5.3 为什么不用现成序列化格式

ADR-119 §4 逐一否决了 Protobuf/FlatBuffers(schema 演进开销、跨 protoc 版本的 witness 哈希不稳定、对小而形状固定的字段约 3× 线膨胀)、CBOR(确定性可达成但解析面大、tag 处理对 no_std ESP32 路径是坑)、可变宽度 magic / 无 magic(共享传输上必须能区分 BFLD 帧与 rvCSICsiFrame及其他 RuView payload)、CRC 放头部(CRC 须在 payload 之后计算,放头会导致写头时倒带 buffer)。


6. 暴露表面:HA 实体、Matter 边界与 MQTT topic 路由(ADR-122)

ADR-115 已在wifi-densepose-sensing-server上交付了 RuView 的 HA 表面(21 个实体、MQTT 自动发现、mTLS、隐私模式);ADR-116 将其打包为cog-ha-mattercog。BFLD 的集成必须在不扩大既有隐私暴露面的前提下完成,四条原则是:扩展 HA-DISCO 发布 BFLD 实体;在 Matter 边界拒绝身份字段按 privacy class 路由 MQTT topic(class-2/3 进公开树、class-1 进受控research/子树、class-0 哪都不去);跨节点联邦事件在发布节点边界剥离身份派生字段,而非在联邦枢纽。

6.1 每节点新增六个 HA 实体

Entity ID类型来源字段Class 门槛诊断用
binary_sensor.<node>_bfld_presenceoccupancyBfldEvent.presence≥2
sensor.<node>_bfld_motiongauge[0,1]BfldEvent.motion≥2
sensor.<node>_bfld_person_countintBfldEvent.person_count≥2
sensor.<node>_bfld_zone_activityenumBfldEvent.zone_activity≥2
sensor.<node>_bfld_identity_riskgauge[0,1]BfldEvent.identity_risk_score==2 only
sensor.<node>_bfld_confidencegauge[0,1]BfldEvent.confidence≥2

identity_risk仅在 privacy class 2 下暴露,且打上entity_category: diagnostic,让 HA 仪表盘默认不把它提升为主卡传感器;class 3 下它被计算但不发布。

6.2 MQTT topic 树与 Mosquitto ACL

ruview/<node_id>/bfld/presence/state # class >= 2 ruview/<node_id>/bfld/motion/state # class >= 2 ruview/<node_id>/bfld/person_count/state # class >= 2 ruview/<node_id>/bfld/zone_activity/state # class >= 2 ruview/<node_id>/bfld/confidence/state # class >= 2 ruview/<node_id>/bfld/identity_risk/state # class == 2 only ruview/<node_id>/bfld/raw # class 1, OFF by default ruview/<node_id>/bfld/availability # online/offline marker

raw(class-1 derived BFI)根本不进入discovery payload,操作者必须显式订阅并知晓 research-mode 告诫;privacy_class < 1时发布端在 availability 上发MQTT_RAW_DISABLED

# Default-deny everything not explicitly granted pattern read ruview/+/bfld/+/state pattern read ruview/+/bfld/availability # Public roles cannot read identity_risk or raw user public deny read ruview/+/bfld/identity_risk/state deny read ruview/+/bfld/raw # Operator role can read identity_risk for diagnostics user operator allow read ruview/+/bfld/identity_risk/state # Research role can read raw (requires class-1 operation) user research allow read ruview/+/bfld/raw

该 ACL 模板随 cog 以cog-ha-matter/etc/mosquitto.acl.d/bfld.conf提供。仓库当前 mqtt_topics.rs 与 tests/mqtt_topic_routing.rs、tests/mosquitto_integration.rs(需要BFLD_MQTT_BROKER=tcp://localhost:1883环境变量解锁 live-broker 套件)即对应本节的 topic 与 ACL 逻辑。

6.3 Matter 边界:结构性窄化

cog-ha-matter仅通过三个 Matter cluster暴露 BFLD:

Matter cluster来源实体说明
Occupancy Sensing (0x0406)binary_sensor.<node>_bfld_presence报告二值占用 + uncertainty(由confidence映射)
Boolean State (0x0045)sensor.<node>_bfld_motion >= 0.3阈值化;原始 motion 不暴露
Occupancy Sensing extensionsensor.<node>_bfld_person_count使用 occupancy-sensor 的 count

明确不经过 Matteridentity_risk_scorerf_signature_hashidentity_embeddingrawBFI、zone_activity(zone ID 是站点相关的,而 Matter 是跨站点表面)、confidence(仅 HA 诊断)。理由在 ADR-122 §4 Alt 1 说得很清楚:Matter 是跨厂商表面,把身份风险分数放上去等于把分数泄漏给家中每一个 Matter controller,包括操作者无法控制的第三方 hub。过滤由MatterSinktrait 实现以编译期拒绝 class 0/1 帧。

6.4 联邦边界与 witness

BFLD 事件经cognitum-rvf-agent(端口 9004)进入跨节点联邦,但到达枢纽时已是 class-2/3——身份派生字段已在各发布节点被剥离。联邦合约:发布节点按 ADR-120 剥离 class-0/1 字段并每日轮换rf_signature_hash,用节点 Ed25519 密钥签名事件;枢纽只做计数聚合、不跨站关联哈希、验签并拒收未签名事件。一个federation-witness脚本(扩展 ADR-028)每晚在枢纽运行,证明过去 24 小时收到的任何事件里没有出现 class-0/1 字段。

6.5 随 cog 交付的 HA blueprints

仓库中可查到的三份 BFLD blueprint 位于 v2/crates/cog-ha-matter/blueprints/bfld/(附 README):presence-lighting.yaml(presence ⇒ 开/关灯 + 可配置保持时间)、motion-hvac.yaml(motion > 0.3 ⇒ 提高 HVAC 设定点 ΔT)、identity-risk-anomaly.yaml(identity_risk 超过滚动 z-score 阈值 ⇒ HAnotify.*告警,附来源节点与 7 天基线)。启用--features soul-signature时另加登记人员到店通知等 class-1-only 实体(见 ADR-122 §2.7),但这些实体永不经过 Matter


7. 捕获路径:Pi 5/Nexmon 是唯一完整通道(ADR-123)

BFLD 要回答的硬件问题是"在什么硬件上、用什么适配器、顶着什么固件限制去捕获"。结论有三个层次(详见 ADR-123):

  1. ESP32-S3/C6 抓不了 CBFR:Espressif WiFi API 暴露 CSI 捕获(esp_wifi_set_csi_*),但不暴露 monitor 模式下对非本地址 CBFR 管理帧的原始捕获。S3 只能看到自己 AP-link 生成的 CBFR(作为 beamformer 时),无法混杂嗅探邻居 STA/AP 对之间的 CBFR。
  2. 生产捕获主机是 Pi 5/Nexmon:rvCSI 平台(ADR-095/096)已 vendor 了面向 BCM43455c0(Pi 5/4/3B+)的 Nexmon 适配器rvcsi-adapter-nexmon;Nexmon 补丁把 CSI 与 CBFR 一起暴露到用户态,BFI 只是同一代码路径的不同 filter。cognitum-v0(舰队中的 Pi 5)已在跑 Nexmon + rvCSI 运行时,是天然的 BFLD 主机。
  3. 适配器模式wifi-densepose-bfld定义BfiCaptureAdaptertrait(capture() -> Result<Option<BfiCapture>, _>+capabilities()),首批三个实现为NexmonBfiAdapter(生产)、Ax210BfiAdapter(Linux + AX210 monitor 模式,训练/开发,如 ruvultra)、MockBfiAdapter(测试 fixture 回放)。

捕获侧隐私边界由结构保证:适配器必须与 BFLD crate 的 extractor 与 privacy gate同机,且 trait没有任何接收远程 URL/socket 的方法——明文禁止"远程主机流式传原始 BFI"的架构形态,未来 PR 也无法偷偷加进一条远程捕获代码路径。

各硬件档位的角色分工:

档位角色BFI 捕获CSI 捕获备注
ESP32-S3 / C6传感叶子继续为既有管道供 CSI
Pi 5 / NexmonBFLD 主机是(经 Nexmon)主捕获路径
ruvultra(RTX 5080 + AX210)训练 / 开发是(AX210 monitor 模式)开发捕获,非生产
cognitum-v0(Pi 5)一体机是(生产)生产 BFLD 主机

无 Pi 5 的场景退化为 ESP32-S3self-reporting 降级模式:只捕获自身 AP-link 的 CBFR、只算 presence + motion、不出identity_risk_score、以privacy_class = 2+flags.bit3 = self_only发射——价值有限,因为"只测自己"无法有意义地度量身份泄漏。


8. 影响评估:正面 / 负面 / 中性

正面

  • wifi-densepose 生态中第一个显式、可审计的射频层隐私原语
  • identity_risk_score一值两用:同时作为隐私门控的结构性输入与异常信号(突增尖峰 → 新 AP 固件 / 附近攻击者级嗅探器 / 异常传播);
  • BFI 融合增强单 AP 部署下的 presence/motion;
  • 确定性帧哈希把 ADR-028 的 witness-bundle 模式扩展到新表面;
  • 跨站点隔离是结构性的而非策略依赖——比 ACL 更强的保证。

负面

  • ESP32-S3 无法直接经 Espressif WiFi API 捕获 CBFR,完整 BFLD 管道需要 Pi 5/Nexmon 主机嗅探器;
  • identity_risk_score校准依赖 KIT BFId 数据集(非商业研究协议);
  • 估算工作量约10.5 工程师周,横跨六个 ADR。

中性

  • BFLD不能阻止外部攻击者被动捕获 BFI(LeakyBeam 级别的威胁依旧存在)——它只保证节点自身输出不可识别个体,操作者必须理解这一区别;
  • 日哈希轮换会打断跨天对个体签名的关联分析——对隐私目标是可接受的,但可能出乎分析场景的意料。

9. 备选方案为何被否决

备选否决理由
Alt 1:完全跳过 BFI(仅 CSI)给 CSI 管道留下身份泄漏缺口;随 Wi-BFI、PicoScenes 等工具普及,缺少隐私层对操作者越发刺眼
Alt 2:默认公开identity_risk_score分数本身是隐私敏感的(时间相关性会暴露存在性);默认 opt-in
Alt 3:云端对原始 BFI 做 ML违反 I1:离节点存储角度矩阵即可重建身份画像
Alt 4:在入口对 BFI 注入差分隐私噪声推迟到后续 ADR——DP 灵敏度分析与identity_risk_score校准的相互作用尚未完成;当前设计用结构性不可能而非噪声实现隐私

ADR-121 对评分公式同样做过备选权衡:加法式(s+t+p+c)/4在"高可分性但低置信"样本上会过高报告风险;取 max 式会因任一高因子而钉住输出、过度报告;学习式 MLP 因"输出无法从第一性原理审计"被否;逐特征阈值会把连续分数切碎成九个二值判断,且无法支撑 HA gauge 实体与下游校准。


10. 验收标准:如何在仓库里验证这些设计

ADR-118 §5 给出了伞形验收标准(AC1–AC7),覆盖解析带宽与 MIMO 尺寸、p95 延迟、motion 发布频率、原始 BFI 零出现、身份字段缺席、确定性哈希、无 CSI 的纯 BFI 模式。更细的标准分散在 ADR-119~123:例如 ADR-120 的 AC2 要求两个不同site_salt的节点观测同一个人时,100 次试验中rf_signature_hash的 Hamming 距离 ≥ 120 bit;ADR-121 的 AC4 要求分数 ≥0.9 持续 ≥5 秒触发Recalibrate;ADR-123 的 AC1 要求NexmonBfiAdapter在 Pi 5 上对 2-AP-3-STA 测试台每分钟捕获 ≥100 个有效 CBFR 帧。

对实现现状感兴趣的读者,可以直接在仓库中做只读验证(构建与测试):

# 查看 crate 说明与示例 cargo run -p wifi-densepose-bfld --example bfld_minimal # 进程内消费者 cargo run -p wifi-densepose-bfld --example bfld_handle # 工作线程 + HA-DISCO # 运行测试(no_std 内核 / 默认 std+serde-json / 带 mqtt) cargo test -p wifi-densepose-bfld --no-default-features cargo test -p wifi-densepose-bfld cargo test -p wifi-densepose-bfld --features mqtt # 含 rumqttc smoke

设置BFLD_MQTT_BROKER=tcp://localhost:1883可解锁 live-broker 集成套件(见 tests/mosquitto_integration.rs)。可重点翻阅的测试包括:tests/sink_enforcement.rs(class-0 禁上网)、tests/event_privacy_gating.rs/tests/event_gating_irreversibility.rs(class 门控与不可逆)、tests/pipeline_determinism.rs(确定性)、tests/pipeline_i3_isolation.rs(跨站隔离)、tests/ha_discovery.rs/tests/ha_blueprints.rstests/motion_publish_rate.rstests/frame_header_size.rs等。


11. 分阶段发布路线

阶段ADR范围工作量
P1119帧格式 + extractor 桩1.5 wk
P2121特征 + identity_risk_score2.0 wk
P3120隐私门 + 哈希轮换1.5 wk
P4122(a)MQTT emitter + HA discovery1.5 wk
P5122(b)cog-ha-matter中的 Matter cluster 边界1.5 wk
P6123Pi 5/Nexmon 捕获适配器2.5 wk
合计10.5 wk

从当前仓库状态看,P1 的帧格式与 sink marker 类型已在 v2/crates/wifi-densepose-bfld/ 落地并有成体系测试;后续阶段(特征、门控、HA/Matter 暴露、Nexmon 适配器)仍在推进中——crate README 与 lib.rs 头注释标注了各 feature flag 与模块的当前实现边界,读者可据此跟踪进展。


12. 关联资料导航

  • 伞形决策:ADR-118(本文主体)
  • 五个子 ADR:ADR-119(帧/线协议)、ADR-120(隐私 class 与哈希轮换)、ADR-121(风险评分与 coherence gate)、ADR-122(HA/Matter/MQTT 表面)、ADR-123(捕获路径)
  • 研究包:docs/research/BFLD/(11 个文件、约 13,500 词的完整设计卷宗,含威胁模型、隐私门控、实现计划与评估基准)
  • 伴侣研究:docs/research/soul/(Soul Signature 多模态生物特征)
  • 实现:v2/crates/wifi-densepose-bfld/(crate 源码、示例与全套测试)、v2/crates/cog-ha-matter/blueprints/bfld/(HA blueprints)
  • 上游生态参照:ADR-024(AETHER 编码器)、ADR-095(rvCSI)、ADR-115(HA 表面)、ADR-116(Matter cog)、ADR-117(PyO3 绑定模式)

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询