穿墙感知的伦理红线:当技术能“看见”隔壁,开源还该不该继续 穿墙感知的伦理红线当技术能“看见”隔壁开源还该不该继续【免费下载链接】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一台 9 美元的 ESP32加上仓库里几千行 Rust就能在不安装任何摄像头的前提下判断隔壁房间有没有人、有几个人、呼吸频率是多少甚至给出一个粗略的骨架姿态。这正是 RuViewWiFi DensePose在中文技术社区被反复转述的形象——「隔墙观火」「路由器变雷达」「零隐私监控」。而当“看见”这件事不再需要镜头、不再需要被感知者携带任何设备、甚至不再需要对方知情时争论就不再是技术问题。真正值得回答的是三个更硬的问题它到底能看到什么精度这些数据在法律上算什么一个以 MIT/Apache-2.0 发布的开源项目还能用什么手段约束自己的用途本文不谈愿景只对照仓库里的代码、ADR 和证据等级把这三件事拆开。一、能力边界穿墙拿到的不是“画面”而是极低带宽的统计量社区传播中最容易失真的部分是把 WiFi 感知类比成“没有镜头的摄像头”。这句话在物理上是错的。WiFi 感知的输入是信道状态信息CSI每个子载波上的幅度与相位被人体反射、散射、遮挡后产生的扰动。它没有成像平面只有多径信道的时变统计。仓库对这条边界的表述相对克制。README 的能力表把穿墙感知标为 Through-wall sensing | Fresnel-zone geometry multipath modeling | Up to ~5 m, signal-dependent即“最远约 5 米且高度依赖信号条件”。这个数字背后是菲涅尔区几何人体要落在收发链路的有效菲涅尔区内扰动才能被解析出来穿过承重墙后信噪比骤降多径混叠加剧能恢复的信息量随距离迅速塌缩。同一位 README 还给出了横向容量的物理上限——每个 AP 约区分 3–5 人56 子载波多 AP 线性叠加而不是无限扩展。姿态这条线更能说明“能力边界”意味着什么。仓库把模型分成三类并且明确写在 README 的「Model weights: whats real, whats not」一节能力真实状态仓库给出的数字在-device 姿态模型pose_v1.safetensors首版、弱PCK20 3.0%PCK50 18.5%低于 ADR-079 的 ≥35% 目标MM-Fi 公开基准姿态模型已发布、可复现torso-PCK20 82.69%ensemble 83.59%存在检测头已发布82.3% held-out temporal-triplet 准确率注意第三行后面那句括号早期的“100% presence”是在单类别录音上测的已被撤回。这条撤回记录写在 README.md 与 PROOF.md 里而不是被悄悄改掉。所以“穿墙能拿到什么级别的人体信息”诚实的回答是分层的房间级有人/无人、人数启发式非验证过的多人估计器、活动强度生命体征级呼吸 6–30 BPM、心率 40–120 BPM靠 0.1–0.5 Hz / 0.8–2.0 Hz 带通加过零计数且在单人居、通过质量门时才发布姿态级17 关键点但在设备端模型上目前只是“学到了粗结构”远端关节接近随机身份级这是唯一一条被项目用测试明确否定的能力下一节展开。换句话说穿墙能稳定拿到的是“这间屋子里有生命活动”的低带宽证据。它足以支撑照明、HVAC、跌倒告警、灾害搜救这类判断但不足以还原“他在做什么动作”的高保真描述——后者正是舆论最容易夸大的部分。二、真正的红线不在“看见动作”而在“认出是谁”如果只停留在人数与呼吸WiFi 感知的伦理争议大致等同于一个更灵敏的 PIR 传感器。让它跨过红线的是身份可链接性同一套信号能不能在不同时间、不同地点指向同一个具体的人。这条线上有三层证据值得分开看。第一层学术界已经证明攻击可行。仓库的隐私防护研究包 docs/research/privacy-shield/01-sota-survey.md 汇总了三条 MEASURED 结论BFIdKITACM CCS 2025仅凭波束成形反馈BFI即可重识别个体LeakyBeamNDSS 2025在 20 米、穿墙条件下用明文 BFI 做占用检测TPR 82.7% / TNR 96.7%BeamSense 用商品 802.11ac 设备做活动识别最高 99.28%。关键的制度事实是BFI 在管理面明文传输任何处于监听模式的设备都能一次性抓到所有 station 的反馈无需接入网络被感知者也不携带任何设备。而 IEEE 802.11bf-2025 把这套测量/反馈面标准化了2023 年提出的一项 BFI 安全传输机制802.11-23/0782被撤回标准最终没有附带隐私保护。第二层项目自己试图做“身份”然后被自己的测试否掉了。RuView 有一条名为 Soul Signature 的研究线docs/research/soul/用七路电磁观测量融合成一个身份向量。它的进展不是“成功了”而是被量化地证伪了一半——PROOF.md 里这条断言是 MEASURED 级别在仅使用心跳 呼吸信道的条件下两个人不可分gap ≈ 0.0005。测试名cardiac_alone_cannot_separate_identity_matches_audit。同时v2/crates/wifi-densepose-bfld/src/lib.rs的模块注释也把结论写死在文档里命名身份named identity仍然是>pub trait LocalSink: Sink {} // MIN_CLASS Raw(0) 接受 0,1,2,3 pub trait NetworkSink: Sink {} // MIN_CLASS Derived(1) 拒绝 0 pub trait MatterSink: NetworkSink {} // MIN_CLASS Anonymous(2) 拒绝 0,1运行时由check_class::S()兜底任何试图把 class 0原始 BFI 矩阵发到网络 sink 的调用都会拿到BfldError::PrivacyViolation。而 MQTT 路由层又独立做了一次过滤render_events在class_byte Anonymous时直接返回空 vecidentity_risk只在恰好class 2 时发布class 3 内部算但不发v2/crates/wifi-densepose-bfld/src/mqtt_topics.rs。两层而不是一层是因为“策略散落在多处”恰恰是事故的温床。2用类型系统禁掉序列化。身份嵌入是最敏感的对象。v2/crates/wifi-densepose-bfld/src/embedding.rs 的做法是IdentityEmbedding不实现Serialize、不实现Clone、不实现Copy用static_assertions的assert_not_impl_any!把这些缺失变成会被 CI 检出的断言Drop时用 0.0 覆写缓冲Debug只输出 L2 范数与长度。文件头的注释把话说得很直白这样未来某个 PR 就无法“顺手”给它加一个 derive 把数据漏出去。3隐私降级是单向的。PrivacyGate::demote()只允许 class 数值增大信息量减少且没有promote。理由写在 privacy_gate.rs 的模块文档里一旦某段 payload 被 zeroize原始字节就不可恢复——所以“提升”在语义上不可能实现。demote内部用black_box护住清零循环防止死存储消除把安全操作优化掉。4跨站点关联在密码学上不可能而不是“被禁止”。签名哈希用 BLAKE3 的 keyed 模式v2/crates/wifi-densepose-bfld/src/signature_hasher.rs 里rf_signature_hash BLAKE3-keyed(site_salt, day_epoch ‖ features)site_salt是每节点 32 字节随机密钥、永不外传day_epoch unix_secs / 86400每天翻转。结果是同一人在 A 栋与 B 栋产生不相关哈希任何人包括运营方、包括攻破单个节点的攻击者都没有可用的密钥去桥接两个站点。ADR-120 对此的措辞是“比策略式的‘不要共享’更强因为桥接算不出来”。5策略本身可被审计。命名模式与动作之上还有一条 BLAKE3 哈希链privacy_mode.rs 中的PrivacyAttestationProof把(prev_hash ‖ mode ‖ action_bits ‖ class)串成链每次模式切换追加一笔。这意味着“这台设备过去三天到底跑在哪个隐私等级”是可验证的而不是只能听运维口述。除此之外还有一条容易被忽视的“负向治理”把没做到的事写进仓库。PROOF.md 把每条主张分成MEASURED本机可复现、CLAIMED有出处但未在本仓库复现、DATA-GATED / HARDWARE-GATED并专门列出一节 “What we do NOT claim”其中包括命名身份未达成、Edge skill 的癫痫/武器/情绪检测精度 UNVALIDATED、802.11bf OTA 一致性无商用芯片可测。docs/adr/ADR-160-edge-skill-library-honest-labeling.md 记录了一次具体的纠偏五个med_*模块把临床检测写成了既成事实处理方式不是“把能力做出来”而是“把标签改成真的”——加免责声明、软化命名、加 feature gate并配一条测试a1_med_modules_have_clinical_disclaimer让声明本身也受 CI 保护。这套东西不能阻止恶意者 fork 后去掉所有 gate。但它改变了一件更重要的事默认值。默认部署是 class 2匿名只发聚合感知默认 MQTT 不出 class 2 的帧默认--privacy-mode会把心率、呼吸率、姿态从 REST、MQTT、Matter、WebSocket 与录制中一并剥离姿态端点直接返回403code: privacy_mode默认/api/field只放行 P1/P2 事件、P0 与 P3–P5 永远留在边缘。绝大多数部署不会改默认值——这就是工程治理真正起作用的地方。五、对手侧的防护把“不干扰”做成可机器验证的性质前面所有机制防的都是“自己的数据外泄”。但 WiFi 感知的伦理问题有一半在对面别人拿被动嗅探器监听你的房间你怎么办RuView 生态里对应的是 WiFi Veilwifi-veil/README.md一个独立的隐私防火墙 crate。它的思路建立在一个可分离性观察上压缩波束成形报告里主波束方向承载吞吐细粒度的跨子载波相位结构承载身份。二者大体落在可分离的子空间里所以对细子空间施加一个每会话新鲜、由密钥派生的正交旋转复用报告本身就在用的 Givens 旋转原语就能破坏跨会话的身份链接而合法接收方用共享密钥瞬间逆变换、链路几乎不受影响。关键的工程细节是合规性怎么被“证明”。wifi-veil/src/compliance.rs 把“这不是干扰”从承诺变成了一条被检查的属性input_energy ‖report_before‖² output_energy ‖report_after‖² energy_ratio output_energy / input_energy # 正交变换 ≈ 1.0 is_compliant energy_conserving ∧ ¬adds_interfering_energy因为变换是正交的能量严格守恒参考实验中比值 1.000000不向任何他人的信号之上叠加能量——按 47 U.S.C. §333 / §302a 的定义这不构成干扰。这个区分不是文字游戏干扰jamming在法律上以“意图 对第三方链路的实际影响”为构成要件而 VEIL 只整形自己的、符合标准的发射。研究文档 docs/research/privacy-shield/02-threat-model.md 甚至显式列出了它不做的事不隐藏对已关联 AP 的身份、不是射频压制、不能单独击败会话内动作检测、未经硬件验证。参考实验的账面数字是被动重识别从 100% 掉到 4.7%随机基线 6.25%链路吞吐保留 97.6%。但必须带上那个标签——全部为 SYNTHETIC / L0由 crate 自己的模型生成、自己的分类器攻击、自己的标签打分cargo test可复现尚未在任何真实射频上测量。ADR-288 与 wifi-veil/CONTRIBUTING.md 把这条纪律写成不可协商的规则任何数字必须标注SYNTHETIC/CLAIMED/MEASURED没有真实硬件日志就不许升格。这张控制台截图里的环形散点正好可视化了“身份塌缩”防护关闭时同一人的多次采集会聚成一簇防护开启后每会话旋转不同聚类退化为随机分布。它还标了PROTECTED状态与AUTO/ON/OFF切换——把“防偷窥”做成一个可以随时关掉、也可以自动触发的开关本身就是一种产品层面的伦理表态。六、给开发者的四条自律建议把上面的机制抽象出来任何做环境感知WiFi、UWB、毫米波、甚至纯视觉的团队都能直接抄。每条都对应仓库里一处可查的实现。第一条先定义“谁不在房间里”。隐私设计的第一性问题不是“用户同不同意”而是“非用户怎么办”。室友、访客、护工、隔壁的住户他们没有安装你的设备也没有签署任何东西。RuView 的答案是双 ID 空间默认 class 2 下未注册的路人只有一个每天翻转的rf_signature_hash无法跨天、跨站点关联只有显式进入CareWithConsent模式才允许产生长生命周期的person_id。默认值应该保护那个没有发言权的人。第二条不要把隐私写成文档写进类型与门。“我们不会上传原始数据”是一句话NetworkSink::MIN_CLASS Derived是一条编译期 运行时的门。前者会随人员流动失效后者会在 CI 里失败。同理失败要 fail-closedADR-346 记录了一次真实事故——四个节点的固件在presencefalse时仍然报出n_persons3修法不是“调阈值”而是规定 presence 为假时人数必须清零服务端对旧固件重复同一不变式并附上person_count_validfalse。互相矛盾的证据比缺失的证据更危险因为它会污染空房基线与训练标签。第三条把“没做到”留在仓库里并且让它可执行。三级证据标签MEASURED / CLAIMED / GATED 一份公开的撤回记录是抵抗“AI slop”指控最有效的东西。docs/proof-of-capabilities.md 甚至逐条复述了外界最尖锐的批评——“AI 生成的门面”“假 CSI 数据”“没有训练好的模型却编造指标”——然后区分哪些批评成立、哪些属于把模拟模式误判为造假。一个项目愿意把自己的失败也提交进 git比任何宣传都更能建立信任。更进一步让免责声明本身带上测试a1_med_modules_have_clinical_disclaimer保证没人能在后续重构中悄悄删掉那句“not a medical device”。第四条明确写下“我们永远不做”并且给出决策矩阵。伦理声明如果只是“我们向善”等于没说。有说服力的是可执行的能力清单。docs/adr/ADR-091-stand-off-radar-tier-research.md 给出一张 Build / Research / Skip 矩阵77 GHz 商用低功率已有覆盖77 GHz 超 §95.M 上限永久跳过无法作为开源固件发布个人实验许可不可转授140 GHz 相干只做仿真器、不做固件ECCN 6A008 风险真实存在220/380 GHz 硬件永久跳过。同一份文档把“不做定向追踪/目标获取”写成项目线的一部分并承认这些研究本身就在把开源生态推向更接近监控能力的方向。这份矩阵的价值在于它大部分结论是“不做”。一个项目的伦理可信度往往不取决于它做了什么而取决于它在有能力做的时候明确拒绝了什么。结语该不该继续取决于默认值与证据而不是代码是否存在回到标题的问题。穿墙感知的物理不会因为不开源而消失BFI 明文传输是标准层面的事实802.11bf-2025 已把测量面标准化且未附隐私保护被动嗅探器不可探测。把代码藏起来只会让能力集中在少数不公开讨论伦理的人手里。真正决定风险高低的是三个可以被工程化的变量默认值默认发聚合还是发原始默认匿名还是默认具名默认本地还是默认上云证据等级每个数字能不能被第三方在自己的机器上复现失败与撤回有没有被记录拒绝清单有没有明确写下“即使能做也不做”并且用构建系统的 feature gate、导出管制评估、能力矩阵把它钉住RuView 在这三件事上并不完美——它的 README 一边说“无摄像头所以绕开 GDPR/HIPAA 影像规则”一边在集成文档里承认“不构成任何合规认证”这种表述张力本身就该被批评。但它至少提供了罕见的样本把身份识别能力用测试证伪、把隐私等级做成类型系统、把“不构成干扰”做成能量守恒断言、把没做到的事列成表格还把“永久跳过”的雷达频段写进 ADR。开源的伦理不在于发布与否而在于发布时把边界一起发布。当一项技术能“看见”隔壁唯一负责任的做法不是关灯而是把灯的开关、亮度上限和“这盏灯照不到哪里”的说明书一起放进仓库。【免费下载链接】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),仅供参考