Mensagem de erro
decrypt: encrypted: decryption failed
Também aparece como
- Error: decrypt: encrypted: decryption failed
- Error: signing artifact.txt: reading key: decrypt: encrypted: decryption failed
O prefixo depende do comando, por exemplo, “signing artifact.txt: reading key: decrypt: …” para `sign-blob`. Um `COSIGN_PASSWORD` vazio é usado como senha, e não como “me pergunte”.
O que significa
As chaves privadas do cosign (`cosign.key`, rótulo `ENCRYPTED SIGSTORE PRIVATE KEY`) são criptografadas com uma senha via scrypt e secretbox. O cosign leu a senha de `COSIGN_PASSWORD` ou do prompt, e a descriptografia falhou — a senha não é a que foi usada quando a chave foi gerada. O arquivo da chave em si está intacto; nada foi assinado.
Por que acontece
COSIGN_PASSWORD guarda outro segredo
comumVárias chaves de assinatura com senhas diferentes, ou um segredo renomeado no CI enquanto o segredo da chave continuou o mesmo.
COSIGN_PASSWORD está definido, mas vazio
comumSistemas de CI expandem segredos ausentes para uma string vazia (por exemplo, em pull requests vindos de forks). O cosign então tenta a senha vazia em vez de pedir uma.
A chave foi gerada de novo com uma nova senha
ocasionalExecutar `cosign generate-key-pair` de novo sobrescreveu a chave, enquanto a senha armazenada pertence à anterior.
Como corrigir
- 1.
Fornecer a chave e a senha da mesma fonte
Armazene as duas como segredos do mesmo ambiente e passe a chave via `env://`, para que não fiquem dessincronizadas.
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.
Considerar a assinatura keyless no CI
Com uma identidade OIDC (GitHub Actions `id-token: write`), não há chave nem senha de longa duração para gerenciar; em vez disso, os verificadores fixam a identidade do workflow.
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