Skip to content

Verify the froga signature

Every froga release artifact (binary, container image, and Python wheel) is signed with the organization’s release key and with cosign (Sigstore). This page explains how to verify them without relying on the automatic installer.


Release public key (2nd publication channel)

Section titled “Release public key (2nd publication channel)”

The release public key is published in two independent channels:

  1. Git channelscripts/install/froga-release.pub.pem in the Venturalitica/seigarrena repository (this repo).
  2. Docs-site channel — this page at docs.venturalitica.ai (TLS independent from the distribution bucket).

Publishing the key on a separate channel breaks the atomic-swap attack vector: if the sei-releases bucket were compromised, the attacker could not simultaneously swap the verifying key without also compromising GitHub and the docs-site.

-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEd7PcV4fVU9rrUpEtY/f9NMgQ7fva
x1vnb+GY8x5NQLuTpWlypFlRicviH9zv8HxKDWamaEGUvUlD/2yQT+xcYA==
-----END PUBLIC KEY-----

SHA-256 fingerprint of the pubkey (placeholder — update on the first production release):

PLACEHOLDER: <sha256_fingerprint_kms_prod>

To compute the fingerprint of the key you have on disk:

Ventana de terminal
openssl pkey -pubin -in froga-release.pub.pem -outform DER \
| openssl dgst -sha256

The install.sh / install.ps1 installer verifies the signature automatically (fail-closed). To verify manually:

1. Obtain the pubkey — from the git repository or from this page:

Ventana de terminal
# Option A: from the git repo
curl -fsSL \
https://raw.githubusercontent.com/Venturalitica/seigarrena/main/scripts/install/froga-release.pub.pem \
-o froga-release.pub.pem
# Option B: paste the PEM block from this page into froga-release.pub.pem

2. Download the artifact and its .sig file from the corresponding GitHub Release:

Ventana de terminal
ARCH="x86_64-unknown-linux-musl" # or aarch64-unknown-linux-musl, x86_64-apple-darwin, aarch64-apple-darwin
ASSET="froga-${ARCH}.tar.gz"
# Replace <tag> with the version, e.g. froga/v0.2.0
gh release download froga/v0.2.0 --pattern "${ASSET}" --pattern "${ASSET}.sig"

3. Verify the ECDSA-P256 signature:

Ventana de terminal
openssl dgst -sha256 \
-verify froga-release.pub.pem \
-signature "${ASSET}.sig" \
"${ASSET}"
# Expected output: Verified OK

4. Also verify the SHA-256 checksum (double check):

Ventana de terminal
gh release download froga/v0.2.0 --pattern "${ASSET}.sha256"
sha256sum -c "${ASSET}.sha256" # Linux
# or: shasum -a 256 -c "${ASSET}.sha256" # macOS

The ghcr.io/venturalitica/froga image is signed on every release with cosign via Sigstore (GitHub Actions OIDC, no long-lived key stored).

Ventana de terminal
cosign verify \
ghcr.io/venturalitica/froga@<digest> \
--certificate-identity-regexp "https://github.com/Venturalitica/seigarrena/.github/workflows/release.yml@refs/tags/.*" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com"

Replace <digest> with the SHA-256 digest of the image you are about to run (obtain it with docker inspect --format='{{index .RepoDigests 0}}' ghcr.io/venturalitica/froga:latest).

The output includes the Rekor transparency log certificate and the issuer identity. If cosign verify returns exit ≠ 0, the image has no valid signature and must not be run.


Verify SLSA provenance (GitHub attestations)

Section titled “Verify SLSA provenance (GitHub attestations)”

Every release includes a SLSA Level 3 attestation generated by GitHub Actions.

Ventana de terminal
gh attestation verify froga-<arch>.tar.gz \
--owner Venturalitica

This confirms the artifact was built by the Venturalitica/seigarrena repository on GitHub Actions and that the provenance has not been tampered with. The output includes the workflow, commit SHA, and certification chain.


Update the pubkey (operator — first release)

Section titled “Update the pubkey (operator — first release)”

When the production KMS backend is activated for binary releases, the operator must:

Ventana de terminal
# 1. Export the real pubkey from the release KMS key
FROGA_SIGNING_BACKEND=scaleway-kms froga pubkey --pem \
> scripts/install/froga-release.pub.pem
# 2. Compute and record the SHA-256 fingerprint
openssl pkey -pubin -in scripts/install/froga-release.pub.pem \
-outform DER | openssl dgst -sha256
# 3. Update ALL FOUR copies so they match exactly:
# a) scripts/install/froga-release.pub.pem ← already updated in step 1
# b) FROGA_PUBKEY_PEM in scripts/install/install.sh
# c) FROGA_PUBKEY_PEM in scripts/install/install.ps1
# d) The PEM block in this page (docs-site/.../referencia/verificar-firma.mdx)
# e) The fingerprint in this page

All four copies must match exactly — the installer and manual verification use the same key by design.