归档凭证 · 公钥

山海城邦 · 交付物溯源验证

🤖 让 Agent 帮你验

不用自己看命令。点一下复制,粘给任何 AI 助手,它会替你把整个流程跑完并告诉你结论。

看不到按钮效果?展开手动复制

    

你手上有一份山海交付的归档包和一张凭证。用下面这把公钥, 可以自己核对:这个包确实是山海签发的、中途没被改过一个字节。

验证不需要连我们的数据库,也不需要登录。

公钥

https://agent.ak2029.com/.well-known/shanhai-signer-2026.pem
公钥指纹(SHA-256 · DER)
d682d80401a8b846d074afcc9210253a
1a405cf628643ab795d1810717f0cef4

★ 怎么核对指纹才是对的

带外核对的标准做法是:指纹要从一个独立渠道拿,再和公钥算出来的指纹比。

顺序很重要 ——

首次接触警告
如果你是从邮件中直接拿到公钥文件本身(而不是从本页获取指纹后去核对公钥), 那么你失去了一次独立验证的机会 —— 因为能改邮件的人,也能把公钥一起换掉。

本页的指纹,请通过邮件之外的渠道索取(例如我们官网首页、线下提供的资料, 或者你与我们对账时另行确认的一串字符)。
为什么要给你一个指纹?
公钥是从网上取的,理论上可能被换掉。指纹是这把公钥的「身份证号」—— 只有当你手上的指纹和它来自两条互不依赖的路径却对得上,才能说明这把公钥是真的。 对不上,就别信它。

怎么验(手动)

三样东西放在同一个空目录里:

  1. 归档包 archive.zip
  2. 凭证 receipt.json
  3. 公钥 pubkey.pem(从上面地址下载)

然后跑:

python3 verify-provenance.py \
  --archive archive.zip \
  --receipt receipt.json \
  --pubkey  pubkey.pem

看到下面这段,就是真的:

[verify] ✓ 包本体一致: sha256=…  bytes=…
[verify] ✓ 签名有效(Ed25519 · 山海 signer)

结论:这个包是真的。

退出码含义

0 全过 · 1 包被改 · 2 凭证缺字段(被裁剪)· 3 签名无效(不是山海签的,或内容被改过)· 9 用法或文件问题

验签工具只依赖 cryptography 一个库,单文件, 不联网、不读配置、不查我们的数据库。 源码你可以自己看,改一行都会导致验不过 —— 就是这么个东西。

公钥有效期与轮换

公钥会轮换。「会过期」这件事,你现在就该知道。

项规则
当前签发公钥shanhai-signer-2026.pem(Ed25519)
轮换前公告轮换前至少提前 30 天在本页与官网公告新公钥及指纹
旧公钥保留轮换后至少保留一个审计周期(不少于 5 年),用于验证历史凭证
历史凭证用旧公钥签发的凭证永远可验,不因轮换失效
多个公钥并存轮换过渡期内新旧公钥同时在线,文件名带年份区分
判断一个包该用哪把公钥:看凭证的 issuedAt 时间, 落在哪把公钥的有效期内,就用哪把。凭证文件里不写公钥地址 —— 避免「公钥和凭证一起被换」。

安全边界(我们不夸大)

山海城邦 · 我们不要求你相信我们,我们给你能自己验证的东西。