本文へスキップ
ecdsa.com
Sigstore cosign (sign, sign-blob, attest, public-key with --key cosign.key)その他のツール

エラーメッセージ

decrypt: encrypted: decryption failed

別の表記

  • Error: decrypt: encrypted: decryption failed
  • Error: signing artifact.txt: reading key: decrypt: encrypted: decryption failed

先頭部分はコマンドによって異なります。たとえば `sign-blob` では「signing artifact.txt: reading key: decrypt: …」となります。空の `COSIGN_PASSWORD` は「入力を求めてほしい」という指示ではなく、パスワードそのものとして使われます。

このエラーの意味

cosign の秘密鍵(`cosign.key`、ラベルは `ENCRYPTED SIGSTORE PRIVATE KEY`)は、scrypt と secretbox を使ってパスワードで暗号化されています。cosign は `COSIGN_PASSWORD` またはプロンプトからパスワードを読み取りましたが、復号に失敗しました。つまり、そのパスワードは鍵の生成時に使われたものではありません。鍵ファイル自体は壊れておらず、何も署名されていません。

発生する理由

修正方法

  1. 1.

    鍵とパスワードを同じ場所から渡す

    両方を同じ環境のシークレットとして保存し、鍵は `env://` 経由で渡してください。そうすれば、両者が食い違うことはありません。

    yaml
    # GitHub Actions: key and its password from the same secret store
    - name: Sign
      env:
        COSIGN_KEY: ${{ secrets.COSIGN_PRIVATE_KEY }}
        COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}
      run: cosign sign-blob --yes --key env://COSIGN_KEY --bundle dist/app.sigstore.json dist/app.tar.gz
  2. 2.

    CI ではキーレス署名を検討する

    OIDC の ID(GitHub Actions の `id-token: write`)を使えば、管理すべき長期間有効な鍵やパスワードはありません。代わりに、検証者はワークフローの ID を固定します。

    yaml
    # Or drop the long-lived key: keyless signing with the workflow's OIDC identity
    permissions:
      id-token: write
    steps:
      - run: cosign sign-blob --yes --bundle dist/app.sigstore.json dist/app.tar.gz

関連するエラー

署名エラーデータベースをすべて見る