CCS 收据在线批量审计 — 批量验签与篡改统计
当你手里有一整批 CCS AI Agent 审计收据(流水线产物、日志归档、 跨系统交接的证据集),需要一次性确认「哪些真实有效、哪些被篡改或 签名无效」时,使用本技能。验证在 Correctover CCS 在线服务上完成; 每批最多 200 张,只发送收据与签发方公钥。
这个技能做什么
对批次内每张收据执行与单收据验证相同的完整流水线:
- RFC 8785 JCS 规范化 + SHA-256 content_hash 重算比对;
- Ed25519 验签(批次共用一把签发方公钥,PEM/DER/原始 32 字节均可);
- 22 字段 schema 校验;
- 汇总输出:
total / valid / invalid / pass_rate、失败原因分布、 篡改收据索引列表(tampered_indexes)与逐条结果(索引、decision_id、 verdict、错误摘要、是否检出篡改、耗时)。 - 可选哈希链检查(
--check-chain):对有序批次验证previous_receipt_hash[i]是否等于前一条重算的 content_hash,报告 首个断裂点(索引 + 原因)。
服务端无状态、幂等:同一批次重复提交,统计结果一致。
这个技能不做什么
- 不签发收据;不判断单条业务决策本身「应不应该 allow」。
- 不接收私钥;公钥信任锚由使用方管理。
- 单批上限 200 张(超出服务端直接 400);超过请分批调用。
- 服务端不记录请求内容,仅保留匿名调用计数。
使用方法
# 批量审计(文件内嵌 public_key_pem,或用 -k 指定公钥文件)
python scripts/batch_audit.py -f examples/batch_mixed.json
# 公钥单独提供 + 哈希链检查
python scripts/batch_audit.py -f receipts.json -k pub.pem --check-chain
# 机器可读 JSON(含逐条完整结果)
python scripts/batch_audit.py -f receipts.json -k pub.pem --json
# 从 stdin 读取({'receipts':[...]} 或纯收据数组)
cat receipts.json | python scripts/batch_audit.py -k pub.pem
退出码:0 = 全部有效;1 = 存在无效/篡改收据(报告仍正常输出);
2 = 输入或网络错误。
参数:
| 参数 | 说明 |
|---|---|
-f/--file |
批次 JSON 文件({"receipts":[...]} 或纯数组);省略或 - 从 stdin |
-k/--public-key |
签发方公钥 PEM 文件(文件未内嵌 public_key_pem 时必填) |
--check-chain |
额外检查收据间哈希链链接 |
--endpoint |
覆盖服务端点 |
--json |
输出完整 JSON 报告(含逐条明细) |
可选环境变量:CCS_API_ENDPOINT(端点)、CCS_API_TOKEN(自管 API Key,
仅私有/演示部署用)。
付费流程(A2M,支付宝「AI 按量付费」,HTTP 402):首次调用无有效
支付凭证时,服务端返回 HTTP 402 Payment Required 与 Payment-Needed
账单头,CLI 退出码为 3 并在 stderr 打印账单与收银指引;由 Agent 调
用支付宝官方支付技能(alipay-payment-skill / alipay-bot CLI)发起收银,
用户完成支付宝付款后,将支付凭证写入环境变量 CCS_PAYMENT_PROOF
(作为 Payment-Proof 请求头)重试原请求即可(按批计费,1 次调用即 1 批)。
本技能脚本不实现支付、不接触任何商户密钥。
返回报告关键字段
{
"total": 5, "valid": 4, "invalid": 1, "pass_rate": 0.8,
"fail_reason_distribution": {"Ed25519 签名验证失败": 1, "...": 1},
"tampered_indexes": [4],
"chain": null,
"results": [
{"index": 0, "valid": true, "decision_id": "dec-batch-000", "verdict": "allow",
"errors": [], "tamper_detected": false, "duration_ms": 1.8}
]
}
示例
examples/batch_mixed.json 为 5 张收据(4 张真实签名 + 第 5 张被篡改:
verdict 改为 block、checks.security.status 改为 fail,签名未换):
总数 total : 5
有效 valid : 4
无效 invalid : 1
通过率 pass : 0.8
篡改索引 : [4]
逐条结果:
[#4] dec-batch-004 verdict=block tamper=True
content_hash 与重算的 SHA-256(JCS payload) 不一致
Ed25519 签名验证失败(签名与规范化载荷不匹配)
5 张收据的批次在线服务端处理耗时约 7–11 ms(实测值,随负载变化)。
运行要求
Python 3.7+,仅用标准库(urllib/json),无需安装任何第三方包。
隐私与安全
- 服务端不记录请求体,日志仅含匿名请求 ID、端点名、成败与耗时。
- 请求体上限 2 MiB;服务无状态、无命令执行、无外呼。
- 只发送收据与签发方公钥;私钥永不离开签发方。
免责声明
每份报告附 5 段式免责声明(服务端返回的 disclaimer 字段,CLI 输出到
stderr):结果为自动生成、仅对本次提交的输入数据负责;自动化检查仅为
辅助手段,不构成安全保证、合规结论、审计意见或法律意见;不声称获得
OWASP、IETF 等标准组织背书;被篡改收据对应的业务影响超出自动检查范围,
需人工深度复核;任何安全决策与合规判定应以具备资质的人工复核为最终
依据。
License
Elastic License 2.0. © Correctover — Guigui Wang wangguigui@correctover.com。
