Compartir comentarios
Las respuestas se generan en base a la documentación.

Firma de código

¿Qué es la firma de código?

La firma de código es el proceso de aplicar una firma criptográfica a los artefactos de software, como las imágenes de Docker, para verificar su integridad y autenticidad. Al firmar una imagen, garantizas que no ha sido alterada desde que fue firmada y que proviene de una fuente confiable.

En el contexto de las Docker Hardened Images (DHI), la firma de código se realiza utilizando Cosign, una herramienta desarrollada por el proyecto Sigstore. Cosign permite la firma segura y verificable de imágenes de contenedor, mejorando la confianza y la seguridad en la cadena de suministro de software.

¿Por qué es importante la firma de código?

La firma de código juega un papel crucial en el desarrollo de software moderno y la ciberseguridad:

  • Autenticidad: Verifica que la imagen haya sido creada por una fuente confiable.
  • Integridad: Garantiza que la imagen no haya sido manipulada desde que fue firmada.
  • Cumplimiento: Ayuda a satisfacer los requisitos de seguridad organizativos y regulatorios.

Firma de código de las Docker Hardened Images

Cada DHI se firma criptográficamente utilizando Cosign, lo que garantiza que las imágenes no hayan sido manipuladas y provengan de una fuente confiable.

¿Por qué firmar tus propias imágenes?

Docker firma las Docker Hardened Images para demostrar su origen e integridad, pero si estás construyendo imágenes de aplicaciones que amplían o utilizan las DHI como base, también deberías firmar tus propias imágenes.

Al firmar tus propias imágenes, puedes:

  • Demostrar que la imagen fue construida por tu equipo o pipeline
  • Asegurarte de que tu construcción no haya sido manipulada después de subirla (push)
  • Dar soporte a marcos de cadena de suministro de software como SLSA
  • Habilitar la verificación de imágenes en los flujos de trabajo de despliegue

Esto es especialmente importante en entornos de CI/CD donde construyes y subes imágenes con frecuencia, o en cualquier escenario donde la procedencia de la imagen deba ser auditable.

Cómo visualizar y utilizar las firmas de código

Visualizar firmas

Puedes verificar que una Docker Hardened Image esté firmada y sea confiable utilizando Docker Scout o Cosign.

Para listar todas las atestaciones, incluidos los metadatos de firma, adjuntas a la imagen, utiliza el siguiente comando:

$ docker scout attest list <image-name>:<tag>
Note

Si la imagen existe localmente en tu dispositivo, debes anteponer el prefijo registry:// al nombre de la imagen. Por ejemplo, utiliza registry://dhi.io/python en lugar de dhi.io/python.

Para verificar una atestación firmada específica (por ejemplo, SBOM, VEX, procedencia):

$ docker scout attest get \
  --predicate-type <predicate-uri> \
  --verify \
  <image-name>:<tag>
Note

Si la imagen existe localmente en tu dispositivo, debes anteponer el prefijo registry:// al nombre de la imagen. Por ejemplo, utiliza registry://dhi.io/python:3.13 en lugar de dhi.io/python:3.13.

Por ejemplo:

$ docker scout attest get \
  --predicate-type https://openvex.dev/ns/v0.2.0 \
  --verify \
  dhi.io/python:3.13

Si es válida, Docker Scout confirmará la firma y mostrará la carga útil de la firma (payload), así como el comando de Cosign equivalente para verificar la imagen.

Firmar imágenes

Para firmar una imagen de Docker, utiliza Cosign. Reemplaza <image-name>:<tag> con el nombre y la etiqueta de la imagen.

$ cosign sign <image-name>:<tag>

Este comando te solicitará que te autentiques a través de un proveedor OIDC (como GitHub, Google o Microsoft). Tras una autenticación exitosa, Cosign generará un certificado de corta duración y firmará la imagen. La firma se almacenará en un registro de transparencia y se asociará con la imagen en el registro.