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
本文依据仓库 ADR 决策记录 ADR-121(BFLD Identity Risk Scoring and Coherence Gate),并结合
v2/crates/wifi-densepose-bfld的实际 Rust 实现与测试展开。它面向在 RuView 部署中关心隐私合规的运维者、以及对 CSI/BFI 射频感知安全层感兴趣的架构师:读完你将掌握identity_risk_score的九特征构造、四因子乘法打分公式、四档相干性门控(含迟滞与去抖)以及它与 Soul Signature 登记的协作边界,并能对照源码验证每一档阈值与行为。
BFLD(Beamforming Feedback Layer for Detection,见 ADR-118)解决的是一个此前 RuView 管线从未回答的问题:正在被处理的这批射频数据,当前到底有没有能力识别出“某一个特定的人”?ADR-121 为这个问题定义了一个标量答案——identity_risk_score,并把该标量同时供给运维诊断与隐私门控两个消费方。
1. 背景:为什么需要一个“身份风险分”
IEEE 802.11ac/ax 的波束成形反馈(BFI)以明文管理帧在 STA 与 AP 之间交换。站点把信道响应压缩为 Givens 旋转角矩阵(Φ/ψ),以 VHT/HE Compressed Beamforming Report(CBFR)发出,范围内任何处于 monitor 模式的设备都可以被动嗅探。2024–2025 的两项公开研究放大了这一威胁的严重性:KIT 的BFId(ACM CCS 2025)仅凭 5 秒 BFI 即可对 197 名个体以 >90% 精度完成再识别;LeakyBeam(NDSS 2025)可在 20 米外穿墙检测占用(82.7% TPR / 96.7% TNR)。
而 RuView 既有管线(CSI → presence / pose / vitals / zone-activity)没有任何一层度量“当前数据是否具备个体识别能力”。于是 ADR-118 引入 BFLD 子项目,ADR-121 进一步规定其核心原语——identity_risk_score。
该分数有两个下游消费者:
- 运维者:暴露为 HA 诊断传感器(见 ADR-122)。分数相对长期基线的突刺意味着射频环境已滑向更高泄漏区间——例如新 AP 固件、更密集的 MIMO、或范围内出现攻击级嗅探器。
- 隐私门控(见 ADR-120):当分数跨过可配置阈值时,门控自动降级当前
privacy_class(如 2 → 3),直至分数恢复。
ADR-121 对分数本身提出的四项质量要求可归纳为:
| 要求 | 含义 |
|---|---|
| 有界 | 取值落在[0, 1],可直接映射 HA gauge 实体 |
| 已校准 | 对齐真实再识别成功率,理想场景为 KIT BFId 数据集 |
| 可端上计算 | 在 Pi 5 单核或 aarch64 cognitum-v0 上以 ≥1 Hz 运行 |
| 稳定 | 服务于“慢变体制检测”而非逐帧抖动,小幅环境变化不应造成剧烈摆动 |
设计上 ADR-121 借用了 ADR-086(边缘新颖性门)确立的“端上门控原语”先例,但把触发条件从“新颖性”换成“身份泄漏量”。
2. 九特征:在 W = 32 帧滑动窗口上计算
特征在一个W = 32帧的 BFI 滑动窗口上计算(10 Hz 采集时约合 3 秒)。前八个是传感特征(同时服务于 presence/motion 管线),只有第九个依赖 AETHER 嵌入,从而要求identity_class >= 1:
| 特征 | 定义 | 来源 |
|---|---|---|
mean_angle_delta | 子载波上mean(‖ Φ_t − Φ_{t-1} ‖) | extractor |
subcarrier_variance | 子载波轴上var(‖ Φ ‖) | extractor |
temporal_entropy | W 窗口上角度分箱直方图的香农熵 | extractor |
doppler_proxy | 平均角度时间序列的 FFT 峰值幅度 | features.rs |
path_stability | 1 − ‖ Φ_t − median(Φ_{t-W..t}) ‖ / scale | features.rs |
cross_antenna_correlation | 各n_tx × n_rx天线对间 Pearson 相关均值 | features.rs |
burst_motion_score | 高通滤波后的角速度,经软阈值处理 | features.rs |
stationarity_score | 1 −在 W/2 与 W 上的滚动 KL 散度 | features.rs |
identity_separability_score | 与最近 AETHER 聚类质心的 top-1 余弦相似度 | identity_risk.rs |
从 ADR-118 的模块规划看,这九特征被布局在v2/crates/wifi-densepose-bfld/src/features.rs中,同时复用wifi-densepose-signal/src/ruvsense/coherence.rs与multistatic.rs。仓库当前可读到的实际模块拆分是:extractor.rs(CBFR 解析 →BfiCapture)、identity_features.rs、identity_risk.rs(打分)与coherence_gate.rs(门控)。
源码观察:特征体系已结构化到
IdentityFeatures枚举——它封装“借用自 AETHER 的IdentityEmbedding”或“四元组风险因子”两种来源,供后续 BLAKE3 键控哈希生成rf_signature_hash。这也印证了第九特征(可分离性)与嵌入链路的关系(见 identity_features.rs)。
3. 乘法打分公式:保守的“任一弱项一票否决”
ADR-121 §2.2 给出的核心公式如下(这是设计意图的原版 Rust 签名):
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) }四个因子全部先钳位到[0,1]再做乘法组合,其语义是:任何一个弱因子(例如极低 SNR 导致低conf)都会把总分压向 0。这正符合隐私意图——系统不确定时,分数应当低、不应触发告警(ADR 原话:biased toward "report low risk when unsure")。
3.1 仓库中的落地实现
identity_risk.rs 已给出与设计一致的score实现,且额外处理了 NaN:
#[must_use] pub fn score(sep: f32, stab: f32, consist: f32, conf: f32) -> f32 { let s = clamp01(sep); let t = clamp01(stab); let p = clamp01(consist); let c = clamp01(conf); clamp01(s * t * p * c) } fn clamp01(v: f32) -> f32 { if v.is_nan() { 0.0 } else { v.clamp(0.0, 1.0) } }可见实现比 ADR 更进一步:NaN 被映射为 0.0,延续“不确定即低风险”的隐私保守取向。文件头注释也复述了设计矩阵——任何接近 0 的因子都会压垮总分。
identity_features.rs中的RiskFactors { sep, stab, consist, conf }变体把四元组序列化为 16 字节(4 × f32 little-endian)的规范化字节,作为嵌入不可用时的哈希回退源(见 identity_features.rs)。
4. 校准目标:让分数对齐真实的再识别成功率
单一原始乘积分数并不是最终对外发布的数值。ADR-121 §2.3 规定:
- 使用 KIT BFId 数据集的留出测试切分上的再识别成功率作为校准目标;
- 用分段线性 isotonic 回归把原始分数映射到校准后的
[0,1]区间; - 校准后的语义为:
score ≥ 0.8对应校准数据集上5 秒窗口再识别精度 > 80%。
校准参数被设计为与代码独立版本化的文件:
v2/crates/wifi-densepose-bfld/data/risk_calibration.toml校准曲线的更新被刻意设计成“content-only PR”——只改 TOML,无需重编译代码。这一设计也让 ADR-121 将其列为正面后果:校准是可内容热更新的。
注意(现状边界):截至本仓库当前快照,该
data/校准文件目录下尚无实际产物,ADR 状态为Proposed。这意味着相关实现(门控、阈值、打分)已随 crate 落地并有测试覆盖,但“发布级校准曲线”仍属设计意图,尚未成为仓库事实。若你以发布者身份使用,应先按 §5 验收标准(AC3)在自有 KIT BFId 数据上重放校准流程。
5. 相干性门控:四档动作与阈值
门控遵循 ADR-029 的coherence_gate.rs模式。ADR-121 §2.4 定义四档动作:
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 }- Accept:正常发布;
- PredictOnly:发布但标记“低置信度”,下游 HA / Matter 应降低置信度展示;
- Reject:整条事件丢弃,任何 sink 都不发布;
- Recalibrate:丢弃事件并强制轮换
site_salt(site_salt是 ADR-120 中 256 位键控 BLAKE3 哈希的站点密钥)——这是对“攻击级嗅探器进场”这一持续性高风险体制的激进自愈响应。代价是打断历史聚合分析的时间连续性,但它是正确的安全取舍。
5.1 实现与阈值常量
crate 实现 把阈值做成公开常量:
pub const PREDICT_ONLY_THRESHOLD: f32 = 0.5; pub const REJECT_THRESHOLD: f32 = 0.7; pub const RECALIBRATE_THRESHOLD: f32 = 0.9;GateAction::from_score采用下边界包含语义:score = 0.5 → PredictOnly、score = 0.7 → Reject、score = 0.9 → Recalibrate;NaN 则保守地归入Accept(由上层把 NaN 记录为数据质量事件)。同时提供三个谓词方法供管线使用:
allows_publish():Accept 与 PredictOnly 均允许发布;drops_event():Reject 与 Recalibrate 丢弃事件;requires_recalibrate():仅 Recalibrate 为真,门控运行方据此轮换site_salt并清空EmbeddingRing(呼应 ADR-120 §2.5)。
6. 迟滞与去抖:阻止门控在阈值边界震荡
直接按单帧分数切换动作会导致门控在阈值附近来回抖动。ADR-121 §2.5 规定两种稳定机制:
- 迟滞(hysteresis):±0.05——分数必须越过当前档位边界 +/− 迟滞余量,门控才考虑切换;
- 去抖(debounce):5 秒——候选动作必须持续 5 秒墙钟时间才会生效;若中途回到当前档位则取消候选。
两者配合,使分数在边界附近振荡或单帧坏帧尖峰时,门控动作保持稳定。
6.1 状态机实现
coherence_gate.rs 提供了完整的有状态门控(比 ADR 正文更进一步,已落地两项机制):
pub const HYSTERESIS: f32 = 0.05; pub const DEBOUNCE_NS: u64 = 5_000_000_000; pub struct CoherenceGate { current: GateAction, pending: Option<(GateAction, u64)>, }核心逻辑在advance_state:当目标动作与当前动作不一致时,记录(pending_action, since_ns);只有timestamp_ns - since >= DEBOUNCE_NS才把 pending 提升为 current。effective_target则实现方向感知的迟滞——向上跨越必须超过当前档位“上沿 + 0.05”,向下跨越必须低于当前档位“下沿 − 0.05”(见 coherence_gate.rs)。
以当前在Accept(上沿 0.5)为例:分数需 ≥ 0.55 且持续 5 秒才可能进入PredictOnly;反向从PredictOnly回落则需 < 0.45。这同时满足 AC4/AC5 的验收意图。
7. 与 Soul Signature 的协作:Recalibrate 豁免与登记质量门
Soul Signature(docs/research/soul)是一个基于同意的多模态生物识别研究——其 60 秒登记协议的目的恰恰是把identity_separability_score推向 1.0,也就是说它有意运行在高可分离性体制下。若直接套用 §5 的默认门控,Soul Signature 区域会持续触发Recalibrate、每几秒轮换一次site_salt,从而摧毁登记流程。ADR-121 §2.6 给出两条集成规则(正文标注为 §2.7,对应配套研究文档的 Recalibrate 豁免定义):
7.1 Recalibrate 豁免
当门控即将触发Recalibrate时,先咨询SoulMatchOracle(当 crate 以--features soul-signature编译时由 Soul Signature crate 提供):
- 若 oracle 报告当前高可分离性簇与某个已登记
person_id的匹配高于 Soul Signature 验收阈值,门控降级为PredictOnly——高分是成功匹配的预期结果,而非攻击指标; - 未启用
soul-signaturefeature 时,oracle 是返回MatchOutcome::NotEnrolled的no-op 桩(仓库中即NullOracle),门控行为与 §5 完全一致。
实现中,门控通过evaluate_with_oracle提供该钩子:目标为Recalibrate且 oracle 返回Match时,把目标改写为PredictOnly(见 coherence_gate.rs)。oracle 特征与MatchOutcome::{Match, NotEnrolled, Suppressed}枚举定义在同一文件,使该豁免不依赖任何 Soul Signature 实现 crate。
豁免是方向不对称的:只抑制“已知已登记”的匹配;未知的高可分离性簇(真实攻击级嗅探器,或意外泄漏身份的未登记个体)仍会按设计触发Recalibrate。
7.2 登记质量门
反向的协作:Soul Signature 的登记协议要求感知区达到最低身份泄漏体制——分数过低意味着生成的签名不可靠。因此 BFLD 的identity_risk_score恰好充当登记准入门:登记以score >= ENROLL_MIN(默认0.65)在 60 秒窗口内持续为门槛。若登记中途分数跌破阈值,协议中止并提示操作者在更好的射频条件下重试。
该默认值 0.65 目前只见于 ADR-121 决策文本,未在仓库当前
docs/research/soul/各文件中检索到对应常量,引用时应以 ADR 为准并自行验证最终实现。
8. 计算预算:Pi 5 上每窗口 ≤ 10 ms
ADR-121 §2.7 给出了端上实时性的分阶段预算表:
| 阶段 | 目标延迟 | 实现 |
|---|---|---|
| 特征提取(8 个特征) | 每窗口 < 3 ms | ndarray + nalgebra,按子载波向量化 |
| 可分离性(对质心做余弦) | 每窗口 < 5 ms | RuVector RaBitQ 索引(ADR-085),≤ 1k 质心 |
| 风险分 | < 0.1 ms | 标量乘法 |
| 门控决策 + 迟滞 | < 0.1 ms | 标量 |
总计Pi 5 单核上每窗口 p95 ≤ 10 ms(目标 8 ms);cognitum-v0(Pi 5 + Hailo)余量充足。ESP32-S3只承载提取阶段(算特征;风险分按 ADR-123 在主机侧计算)。启用soul-signature后,SoulMatchOracle查询基于已登记质心的 RaBitQ 索引,额外 < 1 ms。
从实现形态看,打分与门控都是常量级标量运算,天然满足该预算;真正的大头是向量化的特征提取与 RaBitQ 最近邻检索,这也解释了为何特征提取被设计为唯一可在 ESP32-S3 上运行的部分。
9. 后果分析
正面后果
- 单点计算、双消费者:风险分既是运维诊断面,又是隐私门控的结构输入;
- 保守默认:乘法组合在不确定时偏保守,系统默认“不确定即报低风险”;
- 内容级热更新:校准曲线仅需改 TOML,无需重编译;
- 自愈响应:
Recalibrate让系统在嗅探器进场时无需人工介入即可自愈(轮换站点盐)。
负面后果
- 依赖 KIT BFId 数据集:没有它,分数处于未校准状态,只能作为内部触发器,不能作为可发布信号;
sample_confidence主导风险:乘法分数易被信道敏感的conf主导——持续低 SNR 环境会把发布分数压近 0,即使底层可分离性很高(漏报失败模式,文档必须明示);- 历史不连续:
Recalibrate按设计打断哈希连续性,需要长期聚合分析的运维者须知晓重校准事件会带来不连续点。
中性后果
- 与既有 CSI 管线特征重叠:BFLD 在 BFI 上算九特征,CSI 管线在 CSI 上算同类特征;两者可通过
cross_perspective_consistency融合。
10. 备选方案与取舍理由
ADR-121 记录并否决了四种替代打分/判定方案:
| 方案 | 被拒理由 |
|---|---|
Alt 1 加法打分(s+t+p+c)/4 | 高可分离性但极低置信度时仍给出中等分数,在劣化射频下过度上报风险 |
Alt 2 最大值打分max(s,t,p,c) | 任一高分因子即可钉住输出,即使其余因子矛盾——同样过度上报 |
| Alt 3 学习式打分(小型 MLP) | 引入不透明模型,输出无法从第一性原理审计;乘法公式简单、保守、可直接向运维者解释。留作未来数据充足后的选项 |
| Alt 4 每特征阈值 | 连续分数是 HA gauge 实体与下游校准的前提;每特征阈值会让运维者被迫解读九个二值 |
11. 验收标准(AC1–AC7):用测试反证设计
ADR 定义了七条可验证验收标准:
- AC1:Pi 5 单核上九个特征每窗口计算耗时 < 8 ms(p95);
- AC2:
identity_risk_score在其余三因子固定的条件下,对任一输入单调不减; - AC3:KIT BFId 测试切分上校准回归:
score ≥ 0.8对应 ≥ 80% 再识别精度 ± 5%; - AC4:分数 ≥ 0.9 持续 ≥ 5 秒时门控发出
Recalibrate; - AC5:迟滞在 5 秒窗口内阻止动作在阈值 ±0.05 范围内震荡;
- AC6:
privacy_class = 3时风险分只计算不发布(不上 MQTT,仅供门控本地使用); - AC7:可复现的 1,000 帧合成夹具产生确定性分数序列(跨运行逐位一致)。
11.1 仓库测试如何覆盖
crate 的集成测试已经把这些标准中的相当一部分变成了可运行断言,例如 identity_risk_score.rs:
all_ones_yields_one:score(1,1,1,1) == 1(公式上界);any_zero_factor_collapses_score_to_zero:四个因子任一为 0 总分即为 0——直接印证 AC2 的“一票否决”语义与 §3 的乘法设计;score_is_monotonic_non_decreasing_in_single_factor:单因子单调性(对应 AC2);out_of_range_inputs_are_clamped_to_unit_interval、nan_inputs_treated_as_zero:钳位与 NaN 保守语义;from_score_classifies_each_band:在 0.49/0.5/0.69/0.7/0.89/0.9/1.0 各边界上精确断言四档动作(下边界包含语义);threshold_constants_match_documented_values:常量与 ADR 文档值一致。
此外coherence_gate.rs的状态机相关行为覆盖在 tests/coherence_gate.rs,迟滞/去抖/时钟偏斜语义可在此追溯(仓库另有gate_clock_skew.rs、soul_match_oracle.rs、handle_soul_oracle.rs等测试文件佐证)。
12. 生态衔接与延伸阅读
ADR-121 属于 BFLD 五子 ADR 系列中的“风险”一环,其完整上下文请按如下顺序阅读:
- ADR-118 BFLD 总纲:明文 BFI 威胁、三条结构不变量 I1/I2/I3、模块布局与阶段排期;
- ADR-119 BFLD 帧格式与线上协议:
BfldFrame中privacy_class字节的位置; - ADR-120 隐私类与哈希轮换:四档
privacy_class、键控 BLAKE3site_salt/day_epoch轮换——Recalibrate正是触发其轮换的动作; - ADR-122 RuView/HA/Matter 暴露面:风险分作为诊断传感器的具体暴露形态;
- ADR-123 采集路径(Nexmon 与 ESP32):解释为何 ESP32-S3 只算特征。
配套研发材料在 docs/research/BFLD/(11 个文件)与 docs/research/soul/(Soul Signature 定义其登记协议,即 §7 中 ENROLL_MIN 协作的来源)。下游可观测/自动化入口包括 HA 蓝图 bfld/identity-risk-anomaly.yaml 与 MCP 工具bfld-last-scan(tools/ruview-mcp)。
参考的外部研究结论(BFId / KIT ACM CCS 2025、LeakyBeam / NDSS 2025)详见 ADR-118 与 ADR-121 引用列表,本文不再转载链接。
结语
identity_risk_score是 BFLD 把“隐私”从政策口号变成可测量、可门控、可校准的数值的关键:九特征编码 BFI 上的身份可分性信息,乘法公式保证不确定性下的保守低报,四档相干性门控 + 迟滞去抖把该数值翻译成 Accept/PredictOnly/Reject/Recalibrate 四个可执行动作,而 Soul Signature 协作规则则让“有意制造身份”的登记场景不会误触自毁式轮换。对任何把 RuView 部署到护理机构、酒店或共享办公空间的运维者而言,这套评分与门控就是回答“系统现在是否在匿名工作”的直接仪表盘。
【免费下载链接】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),仅供参考