docs/research/BFLD/08-adr-draft.md
This file is a draft. When approved, copy to:
docs/adr/ADR-118-bfld-beamforming-feedback-layer-for-detection.md
| Field | Value |
|---|---|
| Status | Proposed |
| Date | 2026-05-24 |
| Deciders | ruv |
| Codename | BFLD — Beamforming Feedback Layer for Detection |
| Relates to | ADR-024 (AETHER contrastive embedding), ADR-027 (MERIDIAN cross-environment), ADR-028 (capability audit / witness), ADR-029 (RuvSense multistatic), ADR-030 (persistent field model), ADR-031 (sensing-first RF mode), ADR-032 (mesh security hardening), ADR-095 (rvCSI platform), ADR-115 (HA integration), ADR-116 (Matter seed packaging), ADR-117 (pip modernization) |
| Tracking issue | TBD |
IEEE 802.11ac and 802.11ax beamforming feedback information (BFI) is exchanged between client stations (STA) and access points (AP) in unencrypted management-plane frames. The STA compresses the channel response into a matrix of Givens rotation angles (Phi/Psi) and transmits them in a VHT/HE Compressed Beamforming Report (CBFR) frame. These frames are passively sniffable by any device in WiFi monitor mode without any access to the target network.
Two independent 2024–2025 research papers establish the severity of this exposure:
Tooling for passive BFI capture is freely available. Wi-BFI (https://arxiv.org/abs/2309.04408) is pip-installable and supports 802.11ac/ax, SU/MU-MIMO, 20/40/80/160 MHz channels.
The wifi-densepose sensing pipeline processes CSI via the rvCSI runtime (ADR-095/096) and produces presence, pose, vitals, and zone-activity events. No layer explicitly measures whether the data being processed is capable of identifying specific individuals. The pipeline treats all CSI as equivalent from a privacy standpoint, regardless of whether it is operating in a high-separability (identity-leaky) or low-separability (anonymous) regime.
This gap becomes a compliance and liability issue as WiFi sensing deployments scale. An operator deploying this system in a care facility, hotel, or shared office has no instrument to verify that the system is operating anonymously.
BFI is not only a threat vector — it is a complementary sensing signal. Because BFI encodes the channel response as a structured compressed matrix, it carries multipath geometry that can augment CSI-based presence and motion detection, particularly in scenarios where only one AP is available (fewer antenna pairs than a full MIMO CSI capture). The BFLD design treats BFI as an optional input alongside CSI, not as a replacement.
We will create a new crate wifi-densepose-bfld (to live in v2/crates/) that:
identity_risk_score using a
separability × temporal_stability × cross_perspective_consistency × sample_confidence
formula.privacy_class mechanism that structurally prevents
identity-correlated data from being published at privacy classes 2 and 3.BfldEvent structs on MQTT topics under ruview/<node_id>/bfld/ with
per-class topic routing.The BfldFrame wire format carries magic 0xBF1D_0001, a version byte, hashed AP/STA
identifiers, a quantization byte, a privacy_class byte, compressed feature payload, and
a CRC32.
Matter exposure is limited to: OccupancySensing (presence), MotionSensor (motion),
PeopleCount (person_count). Identity fields are rejected at the Matter boundary in the
cog-ha-matter crate.
The rvCSI pipeline (ADR-095/096) already handles CSI without BFI. This alternative requires no new crate and no change to the ESP32 firmware.
Rejected because: (a) it leaves the identity-leakage detection gap open for the existing CSI pipeline, and (b) as BFI capture tooling becomes more widespread (Wi-BFI, PicoScenes), the absence of a privacy layer becomes more conspicuous for operators.
Treat the risk score as a diagnostic metric that operators and the public can observe.
Rejected because: the risk score is itself a privacy-sensitive signal (it reveals when a specific person is present via timing correlation). The default should be opt-in, with the operator explicitly acknowledging the trade-off.
Send raw BFI angle matrices to a cloud training service to improve model quality.
Rejected because: this violates Invariant 1. Cloud training on raw BFI would create an off-node store of angle matrices that could be reconstructed into identity profiles. The on-device-only constraint is not negotiable.
Add calibrated Laplace/Gaussian noise to the angle matrices at ingress to provide epsilon-differential privacy on all downstream computations.
Rejected for this ADR (noted as future extension): DP noise calibration requires sensitivity analysis that is not yet complete, and the interaction between DP noise and the identity_risk_score formula requires separate validation. The current design achieves privacy through structural impossibility (local-only, hash rotation) rather than noise injection.
ruview/<node_id>/bfld/motion/state
MQTT topic during sustained occupancy.BfldFrame payload at any privacy_class value.privacy_mode is enabled, all identity-derived fields
(identity_risk_score, rf_signature_hash, identity_embedding) are absent from
all outbound events.BfiCapture inputs, the BfldFrame serialization
produces bit-identical output (deterministic hash) across runs and across platforms.BfldEvent outputs when csi_matrix is
absent (BFI-only mode), without panic or degraded presence/motion reporting beyond
the documented accuracy bounds.multistatic.rs for
cross_perspective_consistency.cross_room.rs for
environment fingerprinting in the hash rotation.cog-ha-matter.