首页
/ RuView 边缘感知控制平面解析:ADR-277 的用途、区域、留存与原始 RF 不可逾越的信任边界

RuView 边缘感知控制平面解析:ADR-277 的用途、区域、留存与原始 RF 不可逾越的信任边界

2026-09-08 11:42:15作者:冯爽妲Honey

导读

当 Wi-Fi 的感知输出开始服务于存在检测、生命体征与人员识别时,真正值得审查的问题不再是"能不能感知",而是"感知结果凭什么、在什么授权下、以何种形态离开设备"。本文以 RuView 统一 RF 空间世界模型系列中的 ADR-277 为主体,剖析其在 v2 工作区 ruview-unified crate 中落地的边缘感知控制平面(edge sensing control plane):以 BoundedEvent 类型系统使"原始 RF 外泄在结构上不可表示"、以 PolicyEngine 对感知用途/区域/留存做全面 fail-closed 授权、并以属性化输出满足可问责性。读完你将掌握这套"先授权后出口、原始信号不出界"控制平面的设计原理、Rust 实现细节与其属性测试验证方法。

ADR-277 属于 ADR-273(统一 RF 空间世界模型)五大支柱中的第五项——"802.11bf / ETSI ISAC 对齐的边缘感知控制平面",状态为 Accepted — P1 implemented,实现位于 v2/crates/ruview-unified/src/policy.rs。它与 ADR-153(802.11bf 协议模型)、ADR-141/120(BFLD 隐私控制平面与隐私类)、ADR-262 §3.3(RuField P0–P5 fail-closed 映射)及 ADR-032(mesh 安全加固)相关联,是这些既有隐私哲学在"感知输出"侧的延伸。


1. 背景:为什么感知堆栈必须自带策略平面

1.1 标准演进:感知用途与感知区域成为一等授权对象

在 IEEE 802.11bf-2025 的感知会话(sensing session)与 ETSI ISAC(Integrated Sensing and Communication)架构中,"感知用途(purpose)"与"感知区域(zone)"正在成为一等授权对象。3GPP Release 20 的感知研究同步推进中。换言之,行业规范正把"谁、为了什么、能在哪个空间做哪种感知"从实现细节提升为协议级语义。

1.2 ETSI 安全报告:没有策略平面的感知堆栈就是负债

ETSI 随后发布的安全报告识别出 19 类隐私与安全问题。ADR-277 的结论是:这类问题的根源大多是"代码路径存在即可用"(the code path existed),单纯的配置式防御不足。RuView 在其它边界早已 fail-closed——ADR-262 §3.3 按信息内容(而非字节值)映射隐私类——本 ADR 把同样的纪律施加给感知输出,并且发生在任何传输之前的设备端

1.3 PROOF 纪律:数字分级

按照 ADR-273 §0 的证据分级,ADR-277 明确区分:

  • EXTERNAL(可核查)标准状态:IEEE 802.11bf-2025 于 2025-09 发布;IEEE 802.11bk 面向 ≤320 MHz 定位;ETSI 于 2026-02 发布 ISAC 架构(monostatic/bistatic/multistatic/network/device sensing)并随后发布识别出 19 类隐私与安全问题的安全报告;3GPP Release 20 感知研究活跃。
  • EXTERNAL-UNVERIFIED(外部未复现):OpenAirInterface SRS-xApp 演示(随机划分下 0.12 m MAE)被视为外部数字,因其划分方法与 ADR-273 §4 拒绝的域泄漏一致,仓库只援引其实现路径而非该数字。

2. 三条结构性规则(Decision)

ADR-277 的核心决策可以压缩为三条结构性规则,全部由类型系统/代码结构保证,而非依赖"配置正确"。

2.1 原始 RF 永不离开信任边界

唯一可导出的类型是 BoundedEvent——只承载类型化结论:Presence(bool)ActivityClass(u8)RespirationBpm(f64)Location([f64;3])AnomalyScore(f64)。源码中的 EventValue 枚举(policy.rs没有任何变体可以携带 RF 采样,因此"原始 CSI/雷达导出"在结构上是不可表示(unrepresentable)的,而非仅仅被禁止。TrustBoundary::export 是唯一出口,且刻意不存在任何将 RfTensor 序列化向外的 API。外部系统接收的是"有界事件 + 不确定性",而不是信号历史。

2.2 处处 fail-closed

PolicyEngine::authorizepolicy.rs)的三条拒绝路径:

  1. 未知区域(unknown zone)⇒ deny——空引擎默认拒绝一切,直到区域被显式配置;
  2. 区域内未授予该用途(purpose not granted)⇒ deny
  3. 身份识别双闸门——IdentityRecognition 必须同时满足:在区域的 allowed_purposes 中,且区域设置 identity_explicitly_enabled = true,任一单独成立都拒绝。

留存(retention):事件在导出时刻若超过区域 retention_s 配置的寿命,则被丢弃并返回类型化 PolicyDeniedTrustBoundary::export)。单测覆盖了全部分支,包括刻意构造的"已授予但未显式开启""已开启但未授予""过期事件"三种情形(identity_needs_both_grant_and_explicit_enableretention_bound_is_enforced 等)。

2.3 每个输出都可问责(ADR-273 验收项 8)

BoundedEvent::newpolicy.rs)是唯一构造器,缺少以下任一字段即构造失败:

  • 不确定性 uncertainty ∈ [0,1](越界即 Err(InvalidInput));
  • 来源 provenance(设备 + synthetic 标志——ADR-276 的诚实标签得以跨越导出存活,见 primitive.rsProvenance 定义);
  • 非零模型版本(model_version == 0 视为"未指派"而禁止导出);
  • 时间戳、用途、区域。

验收测试 outputs_leave_only_through_the_policy_boundary_fully_attributedtests/e2e_acceptance.rs)跑完整管线——合成世界 → 编码器 → presence 头 → 事件 → 导出——并在同一区域断言属性归因完整、未授予用途被拒绝。


3. 用途分类体系:向 802.11bf / ETSI ISAC 对齐

// policy.rs — SensingPurpose(展示顺序无关)
pub enum SensingPurpose {
    Presence,             // 某人存在 / 不存在
    Activity,             // 粗粒度活动类别
    Vitals,               // 呼吸 / 心率类生命体征
    Localization,         // 位置估计
    PoseTracking,         // 骨骼姿态跟踪
    IdentityRecognition,  // 身份识别——高风险用途,双重闸门
    ChannelDiagnostics,   // RF 信道诊断(不涉及人类推断)
}

这 7 个用途(policy.rs)刻意对齐 ETSI ISAC sensing-service 类别与 WLAN sensing 用例,使得未来 802.11bf 感知会话协商或 ISAC exposure API 能够 1:1 映射到区域授权。

类型层面的人体身份排除:除控制平面外,人身份还被排除在 ADR-275 场景图(scene graph)之外——场景图实体类型只有 EntityKind::PersonClass(类别,不是 person id),见 graph.rs。注释一针见血:图无法泄露它无法存储的东西(the graph cannot leak what it cannot store)

3.1 区域对象:授权的最小单元

PrivacyZonepolicy.rs)是空间感知区域与其许可的载体:

字段 类型 说明
id String 区域标识,映射到场景图中的房间/区域
allowed_purposes BTreeSet<SensingPurpose> 该区域被授予的感知用途集合
retention_s u64 导出时事件的最大寿命(留存上界),秒
identity_explicitly_enabled bool 身份识别的第二因子;即使用途在授权集合内,也必须显式开启

由于 PrivacyZoneBoundedEventSensingPurpose 等均已派生 serdeSerialize/Deserialize隐私清单(privacy manifest)在实现上就是 zones + purposes + retention 的一次序列化——这是面向企业/电信对话时可交付的具体工件。


4. 授权与导出管线:从事件构造到跨边界

把控制平面的完整路径拼起来:

捕获端(BFLD 分类/适配器归一化)
   │
   ▼
heads.rs 任务头(presence / activity / localization / anomaly)
   │  输出 EventValue 类型化结论 + 不确定性
   ▼
BoundedEvent::new(...)          ← 唯一构造器,问责字段缺失即失败
   │
   ▼
TrustBoundary::export(event, now_ns)
   │  ① engine.authorize(zone, purpose)   ← 未知区域 / 未授予用途 / 身份单闸门 均 deny
   │  ② age_s = (now_ns - timestamp_ns)/1e9 ;age_s > retention_s ⇒ deny
   ▼
Ok(event)  → 交给传输层(WS / RuField 桥 / xApp / MCP)
Err(PolicyDenied) → 事件被丢弃(不落盘、不外发)

单元测试区(policy.rsmod testspolicy.rs)直接演示了每一分支的可执行断言:unknown_zone_deniesungranted_purpose_deniesidentity_needs_both_grant_and_explicit_enableretention_bound_is_enforcedretention_s: 3600 时,3500 s 的事件放行、3700 s 的事件被拒)、accountability_fields_are_mandatoryuncertainty=1.5model_version=0 均拒绝构造)。

值得注意的实现细节是 export 使用 now_ns.saturating_sub(...) 计算事件年龄——即便上游时间戳异常,也不产生下溢恐慌,年龄上限由 saturating_sub 保证单调合理。

4.1 与任务准入的联动:SensingTaskadmit_task

控制平面的授权不仅发生在出口,也前置到捕获开始之前control.rs(ADR-280 主动感知控制平面的实现)中的 SensingTaskcontrol.rs)承载 ISAC sensing-task 词汇:purposetarget_areaSpatialZone,对应 ADR-277 的 PrivacyZone id)、modalitiesrequested_resolution_mmaximum_latency_msminimum_confidenceraw_retention_secondsresult_retention_secondsauthorized_consumersconsent_referenceraw_export_allowed

admit_task(engine, task)control.rs)在授权层面做多重 fail-closed:

  • raw_export_allowed == true一律拒绝——字段仅为 ISAC 词汇兼容而保留,ADR-277 §2.1 的结构性规则意味着它在今天是恒为假的开关;
  • minimum_confidence 必须有限且在 [0,1]
  • requested_resolution_m 必须有限且 > 0;
  • maximum_latency_ms > 0;至少声明一种 modality;
  • IdentityRecognition 任务缺少 consent_reference ⇒ 在进入区域检查前即拒绝;
  • 最后才进入 engine.authorize 区域用途授权。

测试 task_admission_is_fail_closedcontrol.rs)验证了原始导出无论如何都被拒绝的路径。


5. 输出侧的分类上限:用途映射到隐私类

为把"按内容而非字节值"的纪律延续到输出表示,validate_representationcontrol.rs)为每个用途规定了隐私类上限(ceiling)必须显式排除的信息类别

用途 隐私类上限 必须排除
Presence / ChannelDiagnostics P2 identity, vitals
Activity / Localization P3 identity
Vitals / PoseTracking P4 identity
IdentityRecognition P5 (无)

其中隐私类 P0–P5 沿用 ADR-262 §3.3 词汇(control.rs):P0 为原始信号(永不离开信任边界),P2 为匿名存在/占用级别,P4 为派生个人推断级别,P5 为身份绑定级别。此外任何 TaskSufficientRepresentation 必须携带 source_receipts(源血统),孤儿表示一律拒绝。单元测试 task_sufficient_representation_is_leakage_checkedtask_sufficient_representation_covers_every_purpose_branchcontrol.rs)逐分支验证了全部四种 ceiling/排除集合。


6. O-RAN / 蜂窝路径:已随 P1 交付的接缝

P1 控制平面与传输无关,且已前置覆盖蜂窝接缝:

  • CellularSrsAdapteradapters.rs,ADP-274 §2.3)将梳状采样(comb-sampled)的 SRS 频响去梳插值并归一化为规范 RfTensor——这正是 OAI xApp 需要的数据面契约。normalize 处理 RawCapture::CellularSrs { comb_res, ... }hardware_id 例如 "oai-srs-xapp"。适配器注册表中可同时见到 dw3000esp32s3-csimr60bha2nrf54-csoai-srs-xapp 等硬件来源。
  • 路线图中的 P4(ADR-273 §7)计划把感知应用置于 DU 旁以获得亚毫秒级 I/Q–CSI–SRS 访问,由 xApp 负责更广域融合;该路径的每个输出仍须通过本 ADR 的 TrustBoundary 导出,且其定位声明只在严格划分下报告——OAI 演示的随机划分是被引为警示的反例,而非目标。

7. 边界加固:属性测试发现并修复的三个真实缺陷

tests/security_boundaries.rsproptest 驱动每个经校验的构造器与授权闸门,输入覆盖任意 f64(包括经 f64::from_bits 走私的 NaN/±inf/次正规数,security_boundaries.rs),并断言契约:每个输入要么产生有效对象,要么产生类型化错误——永不恐慌、永无宽松默认。该套件真实暴露并修复了三个缺陷,均为输入控制的拒绝服务或 NaN 传播:

  1. ble_cs_range 无限循环:非有限相位(+inf − x = +inf)使 unwrap 循环永不终止;有限但巨大的相位(1e300 rad)会让同一循环跑约 1e299 次迭代。修复:拒绝不合理相位(> 1e6 rad),并以 O(1) 模运算替换基于循环的 unwrap。
  2. 次正规高斯尺度导致中心密度 NaN:尺度 5e-324 通过了 > 0 检查,但 1/σ² 上溢为 ∞,使原语自身中心的密度变为 NaN。修复:施加物理合理性界(σ ∈ [1e-6, 1e4] m,占用 ∈ [0, 1e6] nepers/m)。

7.1 现已证明的八个性质

套件注释完整列举了现在被证明的性质:

  1. RfTensor / RfGaussian / BoundedEvent 构造器永不恐慌;
  2. ble_cs_range 永不恐慌且只产出有限、非负距离;
  3. 策略引擎对每一(purpose, grants, zone)三元组 fail-closed;
  4. 原始导出对每一任务配置不可达(raw_export_is_unreachable);
  5. 相干融合拒绝一切非有限或越界同步状态(coherent_fusion_rejects_non_finite_sync_state);
  6. 占用表示无法保留身份(occupancy_representations_must_exclude_identity 逐用途分支检查,覆盖 P3–P5 更高风险表示,而非只测 Presence 分支)。

此外 policy_engine_is_fail_closed_under_arbitrary_grants 以 256 个 case 随机化用途/授权集合/身份开关/未知区域查询,把三条拒绝路径作为不变量进行性质证明。


8. 与其它机制的组合关系(Alternatives & 边界)

ADR-277 评估了两个替代方案并明确拒绝:

  • 直接复用 BFLD 的隐私类——被拒。BFLD(ADR-120)分类的是捕获;本控制平面按用途与区域授权输出。两者组合:一个经 BFLD 分类的捕获进入某个任务头后,其结果仍必须穿过 TrustBoundary 导出;ADR-262 的 map_privacy 继续作为捕获侧的映射。
  • 无类型的纯配置文件白名单——被拒。ETSI 19 类问题大多属于"代码路径存在"型失败,不可表示性优于配置(unrepresentability beats configuration)

9. 后果与演进(Consequences)

  • 面向企业/电信的对话有了具体工件:隐私清单 = zones + purposes + retention 的序列化(相关类型均已 serde)。
  • 每一个未来面(sensing-server WebSocket、RuField 桥、SRS xApp、MCP 工具)必须让感知输出穿过 TrustBoundary——这已写入合并前安全审查清单第 12 项。
  • 已知代价:用途粒度较粗(尚无按消费者授权);P3 阶段将在 sensing-server 接线落地时加入消费者身份。

10. 如何验证(可复现)

本 ADR 的实现证据可在仓库内直接复现:

# 在仓库根目录下,进入 v2 工作区
cd v2 && cargo test -p ruview-unified

该命令会运行 tests/security_boundaries.rs(属性测试)、tests/e2e_acceptance.rs(含验收导出测试 outputs_leave_only_through_the_policy_boundary_fully_attributed)以及 policy.rs 内置单测。相关配套背景可继续阅读 ADR-273-unified-rf-spatial-world-model(父 ADR,五支柱与验收门)、ADR-274(统一 RF 编码器与适配器注册表)与 ADR-280 所实现的可编程感知控制面 control.rs

总结

ADR-277 给出了一个可以被逐行验证的答案:在边缘设备上,原始 RF 通过类型系统被排除在任何出口之外;每个跨信任边界的输出都必须在构造时携带不确定性、来源、模型版本、用途与区域,并在导出时通过区域授权与留存检查。这套控制平面不是对感知功能的外挂补丁,而是 RuView 统一 RF 空间世界模型数据流中无法绕过的结构性环节——它把"隐私与安全"从一句口号,变成了编译器与属性测试共同维护的不变量。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.74 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
897
5.81 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
531
595
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
920
1.84 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.63 K
1.02 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.36 K
1.46 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.02 K
518
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
547
389