Files
ruvnet--RuView/firmware/privshield/openwifi/MEASUREMENT.md
T
Claude 1c2b383075 docs(privshield): rebrand project to "WiFi Veil"
Adopt "WiFi Veil" as the product name across all user-facing surfaces, keeping
VEIL (Verifiable Emission-shaping for Identity-Leakage prevention) as the
technical codename it's built on. Only prose, titles, descriptions, and the
console UI change — no code identifiers, file names, crate/npm `name` fields,
or the deterministic proof witness are touched, so `cargo test` and the C-core
host test are unaffected.

- Crate & research READMEs: title + defining line now "WiFi Veil (codename VEIL — …)".
- Cargo.toml / package.json / plugin.json descriptions: "WiFi Veil …".
- Console UI (veil-console.html): title, brand, and copy say "WiFi Veil".
- Firmware tree (README, per-provider READMEs, BUILD/INTEGRATION/MEASUREMENT):
  "WiFi Veil protector/core/shield".
- Harness manifest: recomputed SHA-256 digests for the four changed packaged
  files (README, package.json, CLAUDE.md, plugin.json) — all verified consistent.

Co-Authored-By: claude-flow <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01WEXNqzs7UsfNFBcP5yW21p
2026-08-09 16:52:40 +00:00

5.3 KiB

P5 measurement protocol — openwifi WiFi Veil end-to-end

STATUS: SYNTHETIC / L0 — this is a PLAN, not a result. No hardware has been run; no capture, log, or number in this repo is real. This document defines exactly what must be executed and captured to earn the first MEASURED claim under CLAUDE.md's hardware-evidence rule. Until the witness artifact below exists, every accuracy/throughput/energy statement about openwifi WiFi Veil is SYNTHETIC and must be labelled so. Compliant waveform controls only — orthogonal, energy-preserving; never jamming.

Roadmap position

This is roadmap P5: the two-node hardware measurement that turns the P4 build scaffolds into a MEASURED defense result. Prerequisite gates (all on real silicon, all currently unmet): a bitstream with veil_rot/veil_unrot (HDL_NOTES.md), a driver loading veil_openwifi.c, and a passing on-FPGA self-loopback correctness test.

Topology

   [ Protector AP ]              over the air              [ Legitimate STA ]
   openwifi node A   ───────────────────────────────────► openwifi node B
   veil_rot: Q(key) engaged      │                        veil_unrot: Q^H(key)
                                 │                        (shares key with A)
                                 ▼
                        [ Attacker sniffer ]
                        commodity NIC, monitor mode
                        Wi-BFI CSI/BF-feedback extraction
                        + re-ID model

The attacker is passive (monitor capture only). Nothing in this test transmits to interfere with any station.

Hardware list

Role Hardware Software
Protector AP (A) Zynq-7000 + AD9361 FMC (ZC706+fmcomms2/3, or ADRV9361-Z7035) openwifi image + veil_rot bitstream + veil_openwifi.c
Legitimate STA (B) second identical openwifi node openwifi image + veil_unrot bitstream + veil_openwifi.c, same key as A
Attacker host + Wi-BFI-supported Wi-Fi NIC in monitor mode Wi-BFI (arxiv 2309.04408) + re-ID model
Bench shielded room or wired attenuator path preferred iperf3, power meter / board rail sense

Key agreement A↔B is out-of-band for the demo (pre-shared session key); per-packet keying uses (key, packet_counter) as in HDL_NOTES.md.

Procedure

Run every condition twice: WiFi Veil OFF (baseline) and ON. Same positions, same MCS, same duration, same seed for the attacker model.

  1. Correctness precondition (not a defense claim). Confirm on-FPGA self-loopback recovers IQ within Q1.15 round-off, and A→B link works with veil_unrot engaged. Capture the console log.
  2. Attacker capture. Sniffer records CSI / beamforming-feedback for a fixed traffic pattern A→B, OFF then ON. Save raw captures (pcap + Wi-BFI output).
  3. Re-ID metric. Run the same re-identification / fingerprinting model on the OFF and ON captures. Report accuracy and confusion vs. the chance / mean baseline (per CLAUDE.md, a defense claim needs the baseline and a leakage-free held-out split — never report bare accuracy).
  4. Throughput (near-free check). iperf3 A↔B, OFF vs. ON, both directions. Expected: ON ≈ OFF (the receiver inverts the rotation). Save iperf3 --json.
  5. Energy / compliance. Record per-frame TX energy OFF vs. ON (rail sense or power meter) to substantiate the "energy-preserving / not jamming" claim, and spectrum/mask conformance if a spectrum analyzer is available.

Metrics reported

Metric OFF ON Requirement for a pass
Attacker re-ID accuracy vs. chance baseline collapses toward chance ON
iperf3 throughput A↔B baseline ON within a few % of OFF
Per-frame TX energy baseline ON ≈ OFF (orthogonality holds on-air)
Spectral mask conformance pass still conformant ON

Required witness artifact (CLAUDE.md gate)

Before any MEASURED claim, this directory (or the P5 evidence path) must contain a captured real-silicon log, not a build or simulator output:

  • Boot/runtime console log of both openwifi nodes showing the veil_rot / veil_unrot bitstream loaded and veil_openwifi.c programming the session (register writes / STATUS ready), with timestamps and board identifiers.
  • The self-loopback correctness log (step 1).
  • Raw attacker captures (pcap + Wi-BFI output) for OFF and ON, plus the exact re-ID reproducer command and its output.
  • iperf3 --json for OFF and ON; energy trace for OFF and ON.
  • A manifest tying each artifact to the git commit of the RTL, driver, and shim used, so the result is reproducible.

Label the result MEASURED only with all of the above captured from real hardware. A successful Vivado build, a Verilator/QEMU run, or the host veil_openwifi.c self-test is not hardware evidence and must stay SYNTHETIC. No log in this repo today — do not fabricate one.

Sources