Wallflower – reproducing a WiFi identity-inference attack Researchers at a WiFi-sensing lab reproduced the BFId identity-inference attack, which uses beamforming feedback information (BFI) broadcast in the clear by 802.11ac/ax/be devices to identify individuals by their gait with 99.5% accuracy. The reproduction, called wallflower, captures BFI and CSI traces from multiple perspectives and trains an LSTM classifier, aiming to verify the attack's generalizability beyond a single room. The work highlights a privacy vulnerability in WiFi beamforming protocols that leak person-specific channel perturbations even on encrypted networks. A WiFi-sensing lab that reproduces the BFId paper — identity inference from the beamforming feedback 802.11 devices broadcast in the clear: Todt, Morsbach, Strufe. "BFId: Identity Inference Attacks Utilizing Beamforming Feedback Information."CCS '25. wallflower - records synchronised CSI + BFI traces from a 4-perspective setup, - segments and parses them into ML-ready variable-length time series, and - trains/evaluates a baseline LSTM identity classifier . The headline paper result it targets is BFI identity accuracy 99.5% ± 0.38 from normal walking; the next milestone is reproducing it on our own captures and showing it generalises beyond one room. 802.11ac/ax/be beamforming requires a receiver to periodically send the transmitter Beamforming Feedback Information BFI — compressed quantised-angle channel-state matrices — in the clear , even on encrypted networks. BFId shows that a passive observer who records this BFI while a person walks can infer who the person is, because gait perturbs the channel in a person-specific way. wallflower reproduces this by capturing BFI alongside ground-truth CSI channel state information from multiple perspectives and training an identity classifier. Feature dimensions from the paper, defined once in wallflower/contract.py : | Modality | Features | Composition | Nominal rate | |---|---|---|---| | BFI | 740 +1 dt | 10 quantised angles × 74 channels | ~10 Hz | | CSI | 212 +1 dt | phase + magnitude × 53 subcarriers × 2 antennas | ~285 Hz | The +1 is an appended time-delta column the models consume; parsers store it separately as dt in each .npz . Operative setup current pilot .A single lab-ownedASUS RT-AXE7800AP on5 GHz / channel 36 / 80 MHz SSID LAB AP , BSSID AA:BB:CC:DD:EE:F4 serves both the CSI and BFI roles — this is what configs/ap channels.yaml and wallflower/contract.py actually encode. On node1 the host wlp1s0 AX210 doesBFI capture + traffic + the live RSSI dashboard;CSI is captured bare-metal by FeitCSIon the second AX210. Everything runs on bare metal — no VMs. Real BFI is captured and decoded. The 6 GHz / dual-AP plan described below is the paper'snominalfull-deployment target, not the current rig. Paper-nominal full 4-perspective deployment logical inventory in configs/nodes.yaml under topology.full : 2× access points , both 6 GHz / 160 MHz: AP-CSI on channel 37 — carries the CSI-driving traffic. AP-BFI on channel 85 — its beamforming sounding is what the passive recorder collects. 4 perspective nodes , each with 2× Intel AX210/AX1675 2×2 radios: radio A = CSI capture monitor mode; FeitCSI . radio B = BFI client associates to AP-BFI to elicit sounding . 1 CSI-traffic node — generates iperf3 traffic 200 Mb/s TCP drives BFI sounding; 30 Kb/s UDP keeps CSI flowing . 1 passive BFI recorder — a single monitor-mode capture tcpdump of all BFI sounding into one bfi recorder.pcapng . 1 controller — orchestrates sessions over SSH and optionally trains. AP-CSI ch37 AP-BFI ch85 6 GHz / 160 MHz | | csi-traffic ---+ +--- bfi-recorder passive, 1 pcapng | | +---------+----------+ +----------+----------+ ... x4 perspectives | perspective node N | | radioA=CSI monitor | | 2x AX210 | | radioB=BFI client | +--------------------+ +---------------------+ \ / \ / controller SSH orchestrator + trainer The controller talks to each node over SSH or locally in pilot via: python3 -m nodes.