ProofMesh 1.0 是可运行的 Agent 动作控制面参考实现。它会在隔离的 SQLite 商务靶场中真实改变退款余额、退款记录、工单状态和补偿状态;它没有连接企业生产支付、CRM、身份系统或 KMS。未经适配器加固与独立安全评估,不应直接接入生产账户。
- Worker 只能看到自己的高层角色工具,不能读取或提交原始 Action Passport。
- 所有有副作用的 MCP
tools/call都必须在执行瞬间通过外置公钥验签,并精确绑定 tenant、subject、workflow、tool、resource、参数摘要、policy、approval、金额、预算、次数和时效。 - 审批者与请求者必须是不同认证主体;高风险审批必须携带独立审批服务签发的 JWS assertion,并绑定 subject、revision、challenge、plan / policy / context digest、完整 scope 与具体 action contract;记录审批只做
WAITING_APPROVAL → AUTHORIZED,不触发执行。 - 同一逻辑操作以
(tenant, workflow, tool, idempotency_key)唯一化。凭证尝试、租约与逻辑操作分离;接管前先向上游对账,结果不确定则进入UNKNOWN,禁止自动重放。 - 策略签发、网关执行回执、角色任务回执、Proof seal、商务快照 attestation 使用五把 ProofMesh 内部用途隔离的 Ed25519 密钥;第六类 Human approval 私钥只能位于控制面之外的审批服务,ProofMesh 仅持有其包外公钥与 issuer allowlist。工作流事件与网关回执分别形成哈希链。
- Proof Verifier 不信任证明包内自带的根。它必须读取外部 trust bundle 与外部钉住的策略文件,验证由独立商务系统身份签名的新鲜快照,并跨证据核对租户、策略、审批、计划、工具参数、金额、余额和工单终态。
PROOFMESH_ENV=production时强制 OIDC/JWKS、PostgreSQL GatewayStore 与 mTLS 远程签名代理;静态 bearer、SQLite GatewayStore、本地私钥或缺失材料都会启动失败。
| 威胁 | 当前控制 | 仍需生产环境承担 |
|---|---|---|
| Worker 越权调用别的工具 | 角色专属 MCP surface;生产 OIDC 校验签名、issuer、audience、时效、role、tenant;数据面 /mcp 只允许 gateway 身份 |
企业 IdP 实例、短期工作负载身份、网关 mTLS |
| 模型修改工具或参数 | Action Passport 精确绑定 tool/resource/args digest;执行时验签 | 上游接口保持同样的资源语义,不允许旁路 |
| 偷换信任根后重签整包 | Verifier 只接受命令行/部署侧外部 trust bundle | KMS/HSM、根轮换审批、透明日志和可信时间戳 |
| 签发键用途混淆 | trust bundle 同时限制 issuer 与 token types | 独立 KMS key policy 和硬件隔离 |
| 审批重放或范围漂移 | 外部签名 assertion、issuer allowlist、Bearer/assertion subject 交叉绑定、revision CAS、challenge/action/plan/policy/scope 绑定;Workflow、Gateway、包外 Verifier 三处独立验证 | 生产替换为企业 IdP / 审批服务,接入真实 MFA assurance、撤销、轮换和不可改留痕 |
| 并发重试导致重复退款 | 逻辑操作表、租约心跳、fencing generation、finalize CAS、稳定上游幂等键 | 上游必须支持按 operation id 对账与幂等 |
| 崩溃后副作用未知 | 过期租约先 reconcile;UNKNOWN 停止自动重放 |
人工对账队列、告警、SLA 与 Runbook |
| 金额拆分绕过单次上限 | (tenant, workflow, currency) 累计预算 |
客户/账户/时间窗级风控与额度服务 |
| 伪造成功日志 | 用途隔离的 task/gateway/proof 签名、双哈希链、商务上游 attestation | WORM 存储、外部审计流、可信时间 |
| Agent Pod 绕过网关 | ValidatingWebhook 精确 policy digest、digest-only image、NetworkPolicy | 支持 NetworkPolicy 的 CNI;上游只接受 gateway SPIFFE/mTLS 身份 |
- API 默认 fail closed:没有配置 Bearer 身份时,状态变更接口返回
503。 - Orchestrator、Approver、Auditor、六个下游 Worker 角色和内部 Gateway 必须使用不同令牌;可选 Operator 仅承担只读运维职责,不能创建或推进案件。
- 仓库中的
config/trust/action-issuers.json只用于可复现的开发靶场。var/keys/是运行时私钥目录,已被.gitignore排除;发布包必须删除运行生成的私钥和数据库。 - 生产控制面不加载签发私钥,只能通过 mTLS 调用远程签名代理;返回 token 必须与请求 canonical payload 完全一致并通过包外公钥验签。密钥轮换需同时维护
not_before、not_after与revoked元数据。 - 文件型实现仅用于开发;五把现存私钥必须是权限
0600的普通文件。trust bundle 对 key entry 使用严格 schema,不接受字符串伪装的布尔值/时间或未知字段。 scripts/reference_approval_service.py仅是协议与密钥边界的合成参考签发器;其acr=urn:proofmesh:reference:synthetic-approval与amr=[reference-script]不代表企业 SSO 或 MFA。审批私钥不得进入build_runtime、ProofMesh 容器、运行卷或发布包。.env.example只有占位符。实际.env、AgentTeams gateway consumer key、管理员口令和模型 API key 均不得进入 ZIP、截图、Proof Pack、日志或 Issue。
- 当前业务数据是合成数据,不含真实个人信息。
- 靶场终态由独立 commerce-sandbox key 签名,能证明“该隔离上游实例返回了这个快照”,但不等于真实支付/CRM 背书;生产适配必须由真实上游或可信审计代理签发。
- Proof 包会保存冻结计划、工具参数摘要、签名回执和最终业务快照。接入真实系统前必须定义字段级脱敏、保留期限、删除/法务保全策略与访问审计。
- 成功执行会生成签名 receipt;被拒请求当前写入
gateway_denials审计表,但不产生签名拒绝回执。不要把数据库拒绝行表述为外部不可抵赖证明。 - SQLite 哈希链能发现内容和顺序篡改,不等同于不可删除存储或可信时间戳。生产环境应把链头周期锚定到独立透明日志,并将 Proof 包写入启用保留策略的对象存储。
- 容器以 UID/GID
10001非 root 运行、根文件系统只读、移除 Linux capabilities,并只绑定回环地址作为本地评审默认值。 - Kubernetes webhook 必须保持
failurePolicy: Fail,且由集群管理员通过 namespace label 决定保护范围;工作负载不能通过删除自身标签绕过。 - NetworkPolicy 只是网络边界,不是身份。每个受保护上游必须验证 gateway 的工作负载身份并拒绝 Agent ServiceAccount。
- 对外提供服务前增加 TLS、请求体/证明包大小限制、速率限制、审计导出、备份恢复、密钥撤销、数据库高可用和告警。
- 商务靶场是真实事务副作用,但不是外部支付或 CRM 的等价替代。
- Gateway 可用包外固定策略独立拒绝“高金额却伪标
AUTOMATIC”;它尚无独立风险事实源,因此“低金额但高风险”的人工审批要求仍需生产风控/决策服务独立判定。 - AgentDojo 629 组结果是“授权合同一致性回放”,不是模型提示注入 ASR、任务效用或端到端模型评测。
- 官方 AgentTeams 控制面能否运行、QwenPaw Worker 能否加载、TeamHarness 状态流以及模型驱动协同是不同级别的证据;报告必须逐项标注,不得用静态校验替代运行证据。
- 本实现尚未接受第三方渗透测试、形式化验证或生产流量验证。
发现安全问题时,请使用托管仓库的私密安全报告渠道,并附最小复现、影响范围和建议缓解。不要在公开 Issue 中披露可直接利用的令牌、私钥、业务数据或攻击步骤。仓库正式发布后,应在此补充维护者安全联系方式与响应 SLA。