新闻详情

新闻详情

首页 / 资讯中心 / 详情

AOS CE 原生输入探针:一个永不导出敏感值的可丢弃 WASM 胶囊,如何验证 macOS 托盘端的本地秘密输入

发布时间:2026/9/25 1:38:58来源:尧图网络
AOS CE 原生输入探针:一个永不导出敏感值的可丢弃 WASM 胶囊,如何验证 macOS 托盘端的本地秘密输入
【免费下载链接】aos-ceAOS Community Edition: the open agent operating system.项目地址https://gitcode.com/gh_mirrors/ao/aos-ce点击查看免费下载native-input-probe 是 AOS CEAOS Community Edition仓库中一个“可丢弃的集成测试夹具”它以 Astrid 工具胶囊WASM 模块的形式运行在一次性临时运行时里专门验证 macOS 托盘端aos-tray的本地原生输入链路能否正确收集、存储并恢复秘密与表单数据——同时通过“只报告存在性、永不回传值”的设计证明敏感数据不会泄漏到 guest 输出。读完本文你将掌握这个探针的完整命令协议与退出码约定、其最小权限清单Capsule.toml ACL的写法、WASM 构建链中 getrandom 自定义后端的必要性以及托盘端如何用 test-native-guest.sh 在隔离环境里跑通“取消—恢复—重启持久化—重连”的全旅程测试。定位不是用户胶囊而是集成测试的“靶标”README 开宗明义native-input-probe 是一个由astrid capsule new脚手架生成的 Astrid 工具胶囊不是面向用户的胶囊而是一次性集成夹具disposable integration fixture。它的存在目的只有一个让 aos-tray 的原生输入native input功能有一个真实的、被打包的 WASM guest 可供端到端测试。两条核心行为约定贯穿整个探针秘密类命令collect在同一次调用内等待本地秘密输入然后检查其是否已存储stored只检查存在性、不收集任何输入。两者都不导出值。取消时返回input-not-completed空存储时返回secret-absent。表单类命令text、empty-text、select、array、empty-array验证普通键入输入。它们在 guest 内部比较返回值只向外报告input-matched或input-mismatch。其中列表检查特意保留某一项内部的逗号one,two不拆成两项。取消与空文本、空列表被分开检查避免把三种“没有值”混为一谈。README 还强调了一条重要的测试边界表单类命令依赖候选运行时的普通私有输入扩展ordinary private-input extension仅跑通秘密类命令secret-only run不能证明这些表单命令可用。测试全程只使用合成输入synthetic input。命令协议与退出码从源码看完整分发逻辑探针的全部命令处理集中在 src/lib.rs 中一个#[astrid::run]的运行循环里。下面按源码顺序拆解其协议。请求通道与有界解析guest 启动后先订阅一个命令通道再向运行时报告就绪src/lib.rslet requests ipc::subscribe(cli.v1.command.run.native-input-probe)?; runtime::signal_ready()?; loop { for message in requests.recv(1_000)?.messages { ... } }每条消息按 JSON 解析后代码对req_id做了严格的有界校验src/lib.rs必须是 ASCII 字母数字加连字符、长度 164否则静默丢弃continue而不是报错。这是 README 中“Bounded command parsing”的具体含义——探针自身就演示了如何防御畸形请求而不产生不可控错误。七条命令的 dispatch命令分发src/lib.rs覆盖了托盘端输入协议的四个种类与 NativeInput.swift 中Kind枚举的text, secret, select, array一一对应命令SDK 调用期望值验证点collectelicit::secret(token, ...)然后elicit::has_secret(token)存储成功秘密收集 同次调用内存在性检查storedelicit::has_secret(token)已存在只查存在性不收集textelicit::text(...)值等于native-text普通文本键入empty-textelicit::text(...)值为空空文本 ≠ 取消selectelicit::select(select, ..., [one, two])选择two精确单选项arrayelicit::array(...)值等于[one,two, three]列表项内逗号不被拆分empty-arrayelicit::array(...)空列表空列表 ≠ 取消未知命令返回SysError::ApiError(unknown command)。退出码与输出码映射最关键的源码段是结果映射src/lib.rs注释写明“Never export the value, even from a synthetic test capsule”即使是合成测试胶囊也永不导出值let ordinary !matches!(command, Some(collect | stored)); let (code, output) match result { Ok(true) if ordinary (0, input-matched), Ok(false) if ordinary (2, input-mismatch), Ok(true) (0, secret-present), Ok(false) (2, secret-absent), Err(_) (1, input-not-completed), }; ipc::publish_json( format!(cli.v1.command.result.{id}), serde_json::json!({exit_code: code, output: output, error: }), )?;退出码约定为0成功input-matched/secret-present、2值不符或不存在input-mismatch/secret-absent、1输入未完成input-not-completed对应用户取消。结果通过cli.v1.command.result.{req_id}通道以 JSON 发布宿主侧 NativeGuestJourneyTests.swift 正是断言这些输出码并同时断言 CLI 输出中不包含实际输入值如#expect(!provided.output.contains(native-guest-synthetic-only))。清单与能力边界最小权限的 Capsule.tomlCapsule.toml 声明了组件与工具总线 ACL是理解“最小权限探针”的关键文件[package] name native-input-probe version 0.1.0 description Disposable native input integration probe; never exports secret values astrid-version 2026.9.2 [[component]] id native-input-probe file native_input_probe.wasm type executable [publish] cli.v1.command.result.* { wit opaque } [subscribe] cli.v1.command.run.native-input-probe { wit opaque }能力面非常克制[subscribe]只声明命令入口cli.v1.command.run.native-input-probe[publish]只声明通配的结果通道cli.v1.command.result.*两者均为wit opaque不携带类型契约的最小暴露。清单随后声明了 7 个kind cli的[[command]]描述与 README 的命令语义逐条对应。README 的 Authority 段总结了探针的权限边界没有网络、文件系统、宿主进程、身份或 uplink 能力只声明了带 provider 作用域的命令订阅与命令结果发布。可丢弃发行版disposable distro的必需 frontend 角色只是给夹具打标并不会额外增加清单中的特权uplink能力。这一点在测试脚本中也有体现test-native-guest.sh 生成的临时Distro.toml把探针标为role uplink而该角色并不授予清单外的任何能力。构建链WASM 目标、体积优化与 getrandom 陷阱README 的 Layout 表列出了探针的全部文件及其用途对照仓库实际内容文件用途src/lib.rs有界命令解析与 SDK 秘密调用运行循环Capsule.toml清单组件、能力、工具总线 ACLCargo.tomlCrate 配置——cdylib 体积优化 release profile.cargo/config.toml目标wasm32-unknown-unknowngetrandom自定义后端必需rust-toolchain.toml固定工具链与 wasm 目标其中两个配置细节值得单独展开1..cargo/config.toml的 getrandom 自定义后端。README 标注此项为“required — without it, uuid/HashMap fail to link”。实际内容为[build] target wasm32-unknown-unknown [target.wasm32-unknown-unknown] rustflags [--cfggetrandom_backend\custom\]--cfggetrandom_backendcustom告诉getrandom在wasm32-unknown-unknown上使用运行时提供的后端而非默认的 JS 后端缺了它依赖随机数的 crate如uuid、HashMap的随机化在链接期就会失败。这是把 Rust 打成 Astrid 可执行胶囊的一个典型坑README 把它显式写进了布局表作为提醒。2. 体积优化 profile。Cargo.toml 中crate-type [cdylib]产出动态库风格的 WASMrelease profile 为opt-level z按体积优化、lto true、codegen-units 1、strip true、panic abort——对“可丢弃”夹具来说产物越小、越无依赖越好。rust-toolchain.toml 将工具链固定在1.95.0并声明wasm32-unknown-unknown目标保证任何人构建结果一致。构建命令只有一行astrid capsule build它会编译到wasm32-unknown-unknown并在dist/下打包出.capsule归档。README 同时注明wit/目录是构建时生成的不要提交探针目录下的 .gitignore 与仓库中未出现wit/目录的事实一致。安全运行test-native-guest.sh 的隔离旅程README 的“Run safely”一节指向 aos-tray 包内的 scripts/test-native-guest.sh并给出四条使用前提必须从托盘包目录执行、必须显式传入候选 CLI / setup 辅助工具 / 已构建归档的绝对路径、脚本只操作它自己初始化的那个临时运行时、保留证据。绝不可把这个探针安装进生产 AOS。脚本头部test-native-guest.sh的隔离措施很具体umask 077 # usage: bash test-native-guest.sh /absolute/astrid /absolute/native_input_guest_setup \ # /absolute/probe.capsule [/absolute/released-astrid] test_root$(mktemp -d /private/tmp/ani-guest.XXXXXX) mkdir -m 700 $test_root/runtime export ASTRID_HOME$test_root/runtime export ASTRID_PRINCIPALdefault unset ASTRID_RUN_DIR ASTRID_ENFORCED_DISTRO ASTRID_CLIENT_CONFIG_PATH即临时目录权限 700、ASTRID_HOME指向全新的临时卷、显式清掉可能让测试误连生产环境的环境变量。随后脚本按 README 描述完成四步旅程初始化一次性运行时用候选 CLI 生成临时Distro.toml并以init --distro ... --offline --allow-unsigned --yes --grant-capsules完成离线初始化test-native-guest.sh配置合成配对密钥通过真实公共 APIkeypair generate→pair-device issue --scope use-only→pair-device redeem完成设备配对再调用 setup 辅助工具把已配对的响应方选择进操作者配置test-native-guest.sh——辅助工具本身“只选择已配对 responder绝不编辑 auth profiles”停/重启验证持久化stop后确认 home 只剩astrid.volume再starttest-native-guest.sh交给 Swift 测试以ASTRID_NATIVE_GUEST_ROOT/ASTRID_NATIVE_GUEST_CLI环境变量运行swift test --filter NativeGuestJourneyTeststest-native-guest.sh。若传入第 4 个参数已发布 astrid 二进制脚本还会先用它完成真实 principal 预配、停退到 volume-only 卷、再让候选二进制打开同一卷用 sha256 对比证明升级保留了各 principal 密钥test-native-guest.sh。cleanup 段只在结束时停止这一个临时运行时并打印Retained disposable evidence: path保留证据目录不删除任何现场。Swift 侧旅程测试取消、恢复、重启与重连探针的“对端”是 NativeGuestJourneyTests.swift。这是一个**选开式opt-in**套件只有当环境变量ASTRID_NATIVE_GUEST_ROOT存在即脚本已备好一次性 daemon才启用NativeGuestJourneyTests.swift并且强制校验根目录位于/private/tmp且目录名以ani-guest.开头——从测试代码层面再次锁死隔离边界。测试用生产 Swift 连接NativeRuntimeInputConnectionsocket 容量 4、输入超时 10 秒以合成输入应答不弹任何可见窗口。断言链覆盖了 README 声明的每种语义取消路径NativeGuestJourneyTests.swift第一次collect请求应答.cancelled期望非零退出且输出含input-not-completed随后stored期望secret-absent第二次collect应答.value(native-guest-synthetic-only)期望退出 0、输出secret-present且不含该合成值本身共 2 次呈现、2 次交付确认。重启持久化与重连NativeGuestJourneyTests.swiftstop后断言运行时目录只剩astrid.volumestart后重新连接 socketstored仍返回secret-present秘密跨重启留存再次collect则重新呈现一次输入新的合成值。表单五连NativeGuestJourneyTests.swift按text→empty-text→select→array→empty-array顺序各跑一遍期望input-matched且呈现顺序严格等于命令顺序随后把应答器切到取消模式再跑一遍全部期望input-not-completed——从而把“取消”与“空文本/空列表”明确区分开与 NativeInput.swift 的Kind四种类及 NativeRuntimeInputCodec.swift 的编解码形状保持一致。从源码结构看这套测试与探针构成了一个完整的契约双方guest 侧Rust只承诺“报告存在性与匹配性”host 侧Swift负责断言协议形状、交付确认与值不外泄任何一侧单跑都无法自证必须由脚本把两者接到同一个隔离 daemon 上才有意义。边界与适用前提最后汇总使用这个探针时必须记住的约束均来自 README 与测试代码的交叉印证不可用于生产它只是夹具“Do not install this probe into live AOS”是硬性要求脚本也通过临时ASTRID_HOME和目录名校验来防误连。secret-only 跑通不等于表单可用text/empty-text/select/array/empty-array依赖候选运行时的普通私有输入扩展必须单独验证。构建前提工具链需 Rust1.95.0wasm32-unknown-unknown目标.cargo/config.toml的getrandom_backendcustom不可省略。运行时版本清单要求astrid-version 2026.9.2。证据保留脚本结束后临时证据目录/private/tmp/ani-guest.*会被保留需要自行处置它包含合成密钥文件虽然权限为 0700/0600也不应外泄。native-input-probe 的价值在于它把一个安全性质——“秘密值永远不出 guest”——变成了一个可反复执行的集成契约命令协议、退出码、ACL、构建坑位与端到端旅程在 native-input-probe 目录内自包含而 test-native-guest.sh 与 NativeGuestJourneyTests.swift 则演示了如何在不动生产环境的前提下用它审计整个原生输入栈。赞分享【免费下载链接】aos-ceAOS Community Edition: the open agent operating system.项目地址https://gitcode.com/gh_mirrors/ao/aos-ce点击查看免费下载相关推荐Kornia 增强调度器输入数量校验修复ManyToManyAugmentationDispather 如何杜绝静默丢弃输入Kornia 增强调度器输入数量校验修复ManyToManyAugmentationDispather 如何杜绝静默丢弃输入 ManyToManyAugmen计算机视觉人工智能深度学习图像处理生成式AI数据验证如何确保输入输出质量的完整指南生成式AI数据验证如何确保输入输出质量的完整指南 在生成式AI应用中数据质量直接决定了模型输出的可靠性与可用性。无论是企业级RAG系统还是日常AI助手输入文档教程人工智能大模型如何让十年老电脑重新流畅低成本翻新与性能优化实战指南如何让十年老电脑重新流畅低成本翻新与性能优化实战指南 桌上那台开机要等两分钟、硬盘灯常年不熄的老机器真的只能进闲鱼吗未必。这篇低成本旧电脑升级实战指南给操作系统固件驱动开发上一篇Cube语义层构建企业级数据平台的5大核心优势下一篇obs-multi-rtmp多平台直播分发的资源复用技术 | 全场景部署指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

雷电模拟器9.0.56安装Magisk与LSPosed完整教程:从Root到Zygisk模块部署 2026/9/25 2:55:12

雷电模拟器9.0.56安装Magisk与LSPosed完整教程:从Root到Zygisk模块部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
政企国产文件传输软件选型指南:四条路线与五大评估维度 2026/9/25 2:55:12

政企国产文件传输软件选型指南:四条路线与五大评估维度

这两年做政企信息化项目,国产文件传输软件是绕不开的话题。很多单位的信息化负责人跑来问我同一个问题:市面上那么多“国产文件传输软件”,到底哪些是真正能用的?政府单位如果要选,首选方案应该是什么样子?…

阅读更多 →
抖音App接口逆向解析:设备指纹与动态签名实战 2026/9/25 2:55:06

抖音App接口逆向解析:设备指纹与动态签名实战

1. 这不是“爬虫教程”,而是一次对抖音数据接口的逆向工程复盘我第一次在凌晨三点盯着Fiddler里密密麻麻的HTTPS请求发呆,不是因为兴奋,而是因为挫败。当时手头有个短视频内容分析项目,客户要的是“真实播放量趋势用户互动热区分布…

阅读更多 →
高光谱小样本分类:PLS降维+自定义核SVM实战指南 2026/9/25 2:55:06

高光谱小样本分类:PLS降维+自定义核SVM实战指南

简介:本资源是一套面向遥感、地球观测及机器学习初学者的高光谱图像分类实践代码包,聚焦PLS降维与SVM分类协同建模,解决高维光谱数据特征冗余、小样本泛化难等典型问题,适用于环境监测、精准农业和地质勘查等场景的技术验证与教学…

阅读更多 →
Nmap内网隐蔽扫描实战:从原理到参数组合全面解析 2026/9/25 2:55:06

Nmap内网隐蔽扫描实战:从原理到参数组合全面解析

Nmap大概是每个做网络的人电脑里都装过的工具,但大部分人对它的认识停留在nmap 192.168.1.1这种简单命令上。能扫出端口、扫出服务,就算“会用”了。可真到了内网场景,尤其是要做一次完整资产盘点、又不希望把安全设备告警刷屏的时候&#xf…

阅读更多 →
DeepSeek V3 + AnythingLLM:半小时搭建本地个人知识库完整指南 2026/9/25 2:55:00

DeepSeek V3 + AnythingLLM:半小时搭建本地个人知识库完整指南

简介:这份PDF教程面向希望搭建个人知识库的AI应用入门与进阶用户,围绕DeepSeek V3与AnythingLLM的组合方案展开,解决从零构建本地化智能知识管理系统的实际问题。资源包内含1个PDF文件,约590KB,以图文步骤形式呈现完整…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉