Verahelm/verahelm-decision-envelope

GitHub: Verahelm/verahelm-decision-envelope

一个基于 Ed25519 签名的变更授权验证工具包,将授权方、范围、条件和生命周期绑定到主体版本,实现拉取请求和代理变更场景下的离线门控决策。

Stars: 1 | Forks: 0

# Verahelm Decision Envelope ![Verahelm Decision Envelope:已签名的、绑定主体的、具有过期时间的变更授权](https://static.pigsec.cn/wp-content/uploads/repos/cas/31/31bd837b171d1d58e6e4d0369c146d835372b0242a3c94aba61d56ca4e429608.svg) 测试结果、安全发现、策略决策和审查记录显示了检查的内容。它们本身并未记录谁授权了特定的变更、该授权的范围,或其何时过期。 Verahelm 的托管 API 可以针对特定的主体版本签发已签名的 Decision Envelope。该 envelope 以可移植对象的形式记录授权方、范围、条件、签发、过期、撤销和替代。首个支持的工作流是针对拉取请求(pull request)和代理(agent)的变更门控(change gating);该 API 在同一契约下记录了十三种门控配置。 公开契约接受结构化摘要和摘要值(digest)。它不定义任何用于仓库、源代码、提示词(prompt)、追踪(trace)、文件、数据集或原始记录的字段。 ## 运行示例 ``` node cli/verahelm.mjs demo ``` 该命令会加载四个虚构的 envelope,并检查有效、阻塞、过期和被篡改的结果。它在本地运行,无需网络访问。 ## 将验证器添加到拉取请求 ``` permissions: contents: read steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - name: Bind expected pull-request subject id: subject env: SUBJECT_ID: ${{ github.repository }} SUBJECT_REVISION: ${{ github.event.pull_request.head.sha }} run: printf 'version=sha256:%s\n' "$(printf '%s' \"$SUBJECT_ID@$SUBJECT_REVISION\" | sha256sum | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" - uses: Verahelm/verahelm-decision-envelope@33ca2a95808491a1f0d13a5aa2433e911d4582c3 with: envelope: path/to/decision-envelope.json public-key: path/to/public-key.pem public-key-sha256: ${{ vars.VERAHELM_PUBLIC_KEY_SHA256 }} subject-id: ${{ github.repository }} subject-version: ${{ steps.subject.outputs.version }} authority-id: ${{ vars.VERAHELM_AUTHORITY_ID }} scope-environment: ${{ vars.VERAHELM_SCOPE_ENVIRONMENT }} scope-change: pull-request-${{ github.event.pull_request.number }} ``` 该 Action 会验证提供的 envelope;它不会调用托管 API 或签发决策。请将 `VERAHELM_PUBLIC_KEY_SHA256` 配置为包含 `sha256:` 及受信任密钥文件的 SHA-256 指纹的仓库 Actions 变量。拉取请求的内容不得控制此值。 使用 `node cli/verahelm.mjs fingerprint PUBLIC_KEY` 生成该值。同时将预期的授权方和环境配置为受保护的仓库变量。签名的 `scope.change` 必须与 `pull-request-` 匹配。 请使用 [`template/verahelm-change-gate.yml`](template/verahelm-change-gate.yml) 中受基础控制(base-controlled)的完整工作流;它不会执行拉取请求中的代码。 对于依赖当前生命周期状态的门控,请提供签名的状态文件和 `status-max-age-seconds`。如果没有足够最新的状态,离线验证将无法发现后续的服务器端撤销或替代。 该 Action 会匹配预期的主体、版本、授权方、环境和变更。调用方工作流仍须强制执行每一个已签名的条件。 ## 本地命令 ``` node cli/verahelm.mjs demo node cli/verahelm.mjs validate fixtures/pass.json node cli/verahelm.mjs verify fixtures/pass.json --key fixtures/fixture-public-key.pem node cli/verahelm.mjs explain fixtures/pass.json node cli/verahelm.mjs fingerprint fixtures/fixture-public-key.pem ``` 所有五个命令均在无网络或子进程访问权限的情况下运行。命令行为和退出代码记录在 [docs/CLI.md](docs/CLI.md) 中。 ## 结果处理 有效的通过 envelope 退出代码为零。阻塞、过期、撤销、替代和被篡改的 envelope 退出代码为非零。可选的预期主体和版本会将验证绑定到正在审查的拉取请求。[虚构的拉取请求示例](demo-pr/README.md) 展示了从阻塞的 envelope 到新的通过 envelope 的转换。 ## 托管 API 配置 托管 API 将拉取请求门控、代理变更门控、工具准入、迁移就绪、重新测试、故障覆盖及相关检查归类于同一契约下。输入由调用方提供的摘要组成。Verahelm 声明这些由调用方提供的凭证并未经过独立验证,且不签发认证、合规批准、安全发现或生产授权。 ## 在工具链中的角色 评估、可观测性、安全、治理、策略、溯源和仓库工具会产生凭证。Verahelm 记录了选定的凭证如何绑定到主体版本、客户授权、范围、条件和生命周期。[来源对比](docs/COMPARISON.md) 描述了这些工作之间的边界。 ## 已发布的组件 本仓库包含公开 schema、离线验证器、仅用于验证的 GitHub Action、虚构的测试夹具(fixtures)和一致性测试。它不包含 Verahelm 的托管决策引擎或其私有实现。 请勿提交源代码、提示词、输出、日志、数据集、凭证、个人数据、客户资料或第三方机密信息。请参阅 [PRIVACY_BOUNDARY.md](PRIVACY_BOUNDARY.md)。 ## 验证器属性 - Ed25519 验证离线运行。 - 该 Action 仅需 `contents: read` 权限。 - 位于拉取请求内容之外的受信任密钥指纹可防止信任密钥被替换。签名验证以及预期的主体、授权方和范围匹配会拒绝 payload 修改和跨上下文替换。 - 未知字段、不支持的版本、无效签名和无效的生命周期状态将执行失败关闭(fail closed)。 - 夹具是虚构的,仅用于测试已发布的验证契约。 - 发布清单会拒绝未列出的文件和仓库历史记录。 ## 定价 | 计划 | 价格 | 包含单元数 | 限制 | |---|---|---|---| | Developer | $49/月 | 60次/月;10次/天 | 5 次请求/10 秒;30次/分钟;并发数 2;1 个密钥;12,288 字节;6 秒 | | Professional | $149/月 | 300次/月;34次/天 | 13 次请求/10 秒;90次/分钟;并发数 5;5 个密钥;16,384 字节;8 秒;元数据导出 | 基础配置消耗为 1、2 或 3 个单元。每增加一个已开始的 4,096 字节请求块增加一个单元;边界压力测试在首次之后每增加一个样本增加一个单元。 单元数不予累积,且没有自动超额费用。邮件支持为尽力而为,不提供响应时间 SLA。 ## 文档 - [API 契约](https://www.verahelm.com/api-docs) - [申请非生产测试密钥](https://www.verahelm.com/access#testing-key) - [Decision Envelope 规范](SPECIFICATION.md) - [威胁模型](THREAT_MODEL.md) - [版本控制策略](VERSIONING.md) - [GitHub 与证明集成](docs/INTEGRATIONS.md#github-change-enforcement) 可重用的公开代码仅按照 [LICENSE](LICENSE) 中所述进行许可。
标签:GitHub Actions, MITM代理, 决策引擎, 变更授权, 数字签名验证, 数据可视化, 文档结构分析, 策略即代码, 聊天机器人安全, 自动笔记, 自定义脚本