Ir al contenido

Verificar la firma de froga

Los artefactos de cada release de froga (binario, imagen de contenedor y wheel Python) están firmados con la clave de release de la organización y con cosign (Sigstore). Esta página explica cómo verificarlos sin depender del instalador automático.


Pubkey de release (2.º canal de publicación)

Sección titulada «Pubkey de release (2.º canal de publicación)»

La pubkey de release se publica en dos canales independientes:

  1. Canal gitscripts/install/froga-release.pub.pem en el repositorio Venturalitica/seigarrena (este repo).
  2. Canal docs-site — esta misma página en docs.venturalitica.ai (TLS independiente del bucket de distribución).

Publicar la clave en un canal distinto al bucket rompe el vector de sustitución atómica: si el bucket sei-releases quedara comprometido, el atacante no podría sustituir simultáneamente la clave verificadora sin también comprometer GitHub y el docs-site.

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

SHA-256 fingerprint de la pubkey (placeholder — actualizar en la primera release de producción):

PLACEHOLDER: <sha256_fingerprint_kms_prod>

Para calcular el fingerprint de la clave que tienes en disco:

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

El instalador install.sh / install.ps1 verifica la firma automáticamente (fail-closed). Si quieres verificarla a mano:

1. Obtén la pubkey — desde el repositorio git o desde esta página:

Ventana de terminal
# Opción A: desde el repo git
curl -fsSL \
https://raw.githubusercontent.com/Venturalitica/seigarrena/main/scripts/install/froga-release.pub.pem \
-o froga-release.pub.pem
# Opción B: pegar el bloque PEM de esta página en froga-release.pub.pem

2. Descarga el artefacto y su firma .sig desde el GitHub Release correspondiente:

Ventana de terminal
ARCH="x86_64-unknown-linux-musl" # o aarch64-unknown-linux-musl, x86_64-apple-darwin, aarch64-apple-darwin
ASSET="froga-${ARCH}.tar.gz"
# Sustituye <tag> por la versión, p.ej. froga/v0.2.0
gh release download froga/v0.2.0 --pattern "${ASSET}" --pattern "${ASSET}.sig"

3. Verifica la firma ECDSA-P256:

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

4. Verifica también el checksum SHA-256 (doble comprobación):

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

La imagen ghcr.io/venturalitica/froga se firma en cada release con cosign mediante Sigstore (OIDC de GitHub Actions, sin clave larga almacenada).

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"

Sustituye <digest> por el digest SHA-256 de la imagen que vas a ejecutar (lo obtienes con docker inspect --format='{{index .RepoDigests 0}}' ghcr.io/venturalitica/froga:latest).

La salida incluye el certificado de transparencia Rekor y la identidad del emisor. Si cosign verify devuelve exit ≠ 0, la imagen no tiene una firma válida y no debe ejecutarse.


Verificar la provenance SLSA (GitHub attestations)

Sección titulada «Verificar la provenance SLSA (GitHub attestations)»

Cada release incluye una attestation SLSA Level 3 generada por GitHub Actions.

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

Esto comprueba que el artefacto fue construido por el repositorio Venturalitica/seigarrena en GitHub Actions y que la provenance no ha sido alterada. La salida incluye el workflow, el commit SHA y la cadena de certificación.


Actualizar la pubkey (operador — primera release)

Sección titulada «Actualizar la pubkey (operador — primera release)»

Cuando se active el backend KMS de producción para las releases del binario, el operador debe:

Ventana de terminal
# 1. Exportar la pubkey real de la clave KMS de release
FROGA_SIGNING_BACKEND=scaleway-kms froga pubkey --pem \
> scripts/install/froga-release.pub.pem
# 2. Calcular y anotar el fingerprint SHA-256
openssl pkey -pubin -in scripts/install/froga-release.pub.pem \
-outform DER | openssl dgst -sha256
# 3. Actualizar las CUATRO copias para que coincidan exactamente:
# a) scripts/install/froga-release.pub.pem ← ya actualizado en el paso 1
# b) FROGA_PUBKEY_PEM en scripts/install/install.sh
# c) FROGA_PUBKEY_PEM en scripts/install/install.ps1
# d) El bloque PEM en esta página (docs-site/.../referencia/verificar-firma.mdx)
# e) El fingerprint en esta página

Las cuatro copias deben coincidir exactamente — el instalador y la verificación manual usan la misma clave por diseño.