docs/research/BFLD/09-github-issue.md
Title: feat: BFLD — Beamforming Feedback Layer for Detection (privacy-gated WiFi sensing)
Labels: enhancement, privacy, security, area/signal, area/firmware
Milestone: (TBD — suggest: v0.8.0)
Add a new crate wifi-densepose-bfld that turns raw 802.11 Beamforming Feedback
Information (BFI) into bounded, privacy-gated sensing outputs. BFLD detects when RF
data crosses from "ambient sensing" into "identity record" and structurally prevents
identity-correlated data from leaving the node.
This is the safety layer that was missing from the CSI pipeline. As passive BFI sniffing tools (Wi-BFI, PicoScenes) become widely available and academic attacks (BFId at ACM CCS 2025, LeakyBeam at NDSS 2025) demonstrate >90% re-identification from commodity WiFi, the wifi-densepose ecosystem needs an explicit privacy layer before scaling deployment.
BFI is plaintext and passively sniffable. IEEE 802.11ac/ax CBFR frames are transmitted before WPA2/WPA3 encryption is applied. Any nearby device in monitor mode can capture them (NDSS 2025: https://www.ndss-symposium.org/ndss-paper/lend-me-your-beam-privacy-implications-of-plaintext-beamforming-feedback-in-wifi/).
BFI enables re-identification. The KIT BFId paper (ACM CCS 2025: https://dl.acm.org/doi/10.1145/3719027.3765062) demonstrates >90% identity recognition from 5 seconds of BFI, from a dataset of 197 individuals, using only the Phi/Psi Givens rotation angles.
The existing pipeline has no identity-leakage measurement. The rvCSI pipeline produces presence/motion/pose events without any indication of whether those outputs were derived from identity-discriminative data. An operator deploying in a care facility or shared office has no way to verify the system is behaving anonymously.
WiFi 7 will make this worse. 802.11be (Wi-Fi 7) multi-link operation increases sounding frequency 3–5×. The attack surface is not static.
New crate at v2/crates/wifi-densepose-bfld/ with the following pipeline:
BFI capture (CBFR frames, Pi 5 / Nexmon monitor mode)
→ BFI extractor (Phi/Psi parser, 802.11ac/ax)
→ Normalization + temporal windowing
→ Feature extraction (9 named features)
→ Identity risk engine (in-RAM embeddings, coherence gate)
→ Privacy gate (privacy_class byte, field masking)
→ MQTT emitter (per-class topic routing)
Three structural invariants (not configurable, not policy):
Output events published on ruview/<node_id>/bfld/{presence,motion,person_count,...}/state.
Matter and HA expose only: presence, motion, person_count. Identity fields are rejected at both boundaries.
ruview/<node_id>/bfld/motion/state
during sustained occupancy.privacy_class value.identity_risk_score,
rf_signature_hash, identity_embedding) from all outbound events.BfiCapture input → bit-identical BfldFrame output
(deterministic, cross-platform).BfldEvent with csi_matrix = None (BFI-only
mode), without panic or significant accuracy degradation.docs/research/BFLD/ (this repo)docs/research/BFLD/08-adr-draft.md → ADR-118docs/WITNESS-LOG-028.md)cog-ha-matter crate needs Matter boundary update)