跳到主要内容
ecdsa.com
Sigstore cosign (verify-blob / verify with --key)其他工具

错误信息

invalid signature when validating ASN.1 encoded signature

也可能输出为

  • Error: failed to verify signature: could not verify message: invalid signature when validating ASN.1 encoded signature
  • invalid signature when validating IEEE_P1363 encoded signature

先打印为“Error: …”,然后再打印一次“error during command execution: …”。使用 bundle(`--bundle`)时,cosign 3 会加上前缀“failed to verify signature: could not verify message:”。IEEE P1363 格式的签名报出的则是“…when validating IEEE_P1363 encoded signature”。核心文本在 cosign 2.6 和 3.1 中相同。

Sigstore cosign (verify-blob / verify with --key) — sigstore-go signature verifier

含义

cosign 用你提供的公钥验证了针对制品摘要的 ECDSA 签名(采用 DER/ASN.1 编码,消息的措辞由此而来),结果不匹配。要么这个密钥不是签名所用的密钥,要么制品与当初签名的内容不同。与无密钥验证不同,这里完全不涉及身份或透明日志——失败的就是最基本的签名验证本身。

原因

修复方法

  1. 1.

    比对摘要和密钥

    将制品的 SHA-256 与公布的摘要比对,并将公钥与从签名密钥推导出的公钥比对。

    bash
    sha256sum artifact.txt                             # compare with the digest published with the release
    cosign public-key --key release.key > derived.pub   # (key holder) public half of the signing key
    diff <(openssl pkey -pubin -in derived.pub -outform DER | sha256sum) \
         <(openssl pkey -pubin -in cosign.pub -outform DER | sha256sum)
  2. 2.

    发布 bundle,而不是零散的签名文件

    Sigstore bundle 把签名和验证材料放在一起,能避免大多数混淆。

    bash
    # Prefer bundles: signature, verification material and the log entry travel together
    cosign sign-blob --yes --key release.key --bundle artifact.sigstore.json artifact.txt   # uploads to Rekor
    cosign verify-blob --key release.pub --bundle artifact.sigstore.json artifact.txt

相关错误

浏览完整的签名错误库