Aller au contenu

Sigstore : signature keyless pour la supply chain

Mise à jour :

Signer des artefacts logiciels, c’est bien. Mais gérer des clés cryptographiques sur le long terme ? C’est un cauchemar opérationnel : rotation, stockage sécurisé, révocation, distribution des clés publiques…

Sigstore résout ce problème fondamental avec la signature keyless : vous signez avec votre identité (OIDC), pas avec une clé que vous devez protéger. Chaque signature est enregistrée dans un log de transparence public qui garantit l’auditabilité et la non-répudiation.

Pourquoi Sigstore change la donne

Le problème de la gestion des clés

Avant Sigstore, signer un artefact nécessitait de :

  1. Générer une paire de clés (RSA, ECDSA…)
  2. Protéger la clé privée (HSM, KMS, Vault…)
  3. Distribuer la clé publique (comment vos utilisateurs la récupèrent-ils ?)
  4. Gérer la rotation (tous les ans ? tous les 2 ans ?)
  5. Gérer la révocation (que faire si la clé est compromise ?)
  6. Maintenir la confiance (comment prouver que la clé appartient bien à vous ?)

Chaque étape est une source potentielle d’erreur ou de compromission.

Le problème des certificats éphémères

La solution Sigstore

Approche traditionnelleApproche Sigstore
Clé privée à protéger pendant des annéesClé détruite après 10 minutes
Rotation complexe et manuellePas de rotation (certificat éphémère)
Révocation problématiquePas de révocation nécessaire
Distribution des clés publiquesIdentité vérifiée par OIDC
Confiance basée sur la cléConfiance basée sur l’identité + log public

La solution Sigstore avec horodatage

L’architecture Sigstore

Sigstore est un projet de l’OpenSSF (Open Source Security Foundation, Linux Foundation) composé de quatre briques complémentaires qui fonctionnent ensemble.

Vue d’ensemble

Flux de signature Sigstore

Les quatre composants

Comment fonctionne la signature keyless

  1. Authentification OIDC

    Vous vous authentifiez via un provider OIDC (GitHub, Google, Microsoft, GitLab…). C’est la même authentification que vous utilisez pour vous connecter à ces services.

  2. Délivrance du certificat (Fulcio)

    Fulcio vérifie votre token OIDC et génère un certificat X.509 éphémère lié à votre identité. Ce certificat contient votre email (ou l’identité du workflow CI/CD) et expire après 10 minutes.

  3. Signature de l’artefact (Cosign/gitsign)

    L’outil de signature utilise la clé privée associée au certificat pour signer votre artefact. La clé privée est immédiatement détruite après usage.

  4. Enregistrement (Rekor)

    La signature est envoyée à Rekor qui l’enregistre dans un log immuable avec un timestamp RFC3161. Même si le certificat expire, la signature reste vérifiable grâce à cette preuve temporelle.

  5. Vérification

    N’importe qui peut vérifier que la signature est valide, qu’elle a été créée pendant la période de validité du certificat, et qu’elle est enregistrée dans Rekor (non-répudiation).

Les logs de transparence

Le concept clé

Un log de transparence est un registre public où chaque entrée est cryptographiquement liée aux précédentes (arbre de Merkle). Cette structure garantit que :

  • Personne ne peut modifier une entrée passée sans que ce soit détectable
  • Personne ne peut supprimer une entrée
  • N’importe qui peut vérifier qu’une entrée existe dans le log

Pourquoi c’est révolutionnaire

Sans log de transparenceAvec Rekor
Impossible de prouver quand une signature a été crééeTimestamp cryptographique
Si quelqu’un signe en votre nom, comment le savoir ?Toutes vos signatures sont auditables
La révocation d’une clé est complexeLes signatures passées restent valides
Confiance aveugle dans le signataireTraçabilité publique

Pour comprendre en détail le fonctionnement des arbres de Merkle et des preuves d’inclusion, consultez le guide Rekor.

Instances publiques vs privées

Sigstore propose des instances publiques gratuites pour l’écosystème open source, mais peut aussi être déployé en privé.

Instances publiques

ServiceURLSLAUsage
Fulciofulcio.sigstore.dev99.5%Certificats OIDC
Rekorrekor.sigstore.dev99.5%Log de transparence
Rekor Searchsearch.sigstore.devInterface web

Déploiement privé

Pour les environnements qui nécessitent confidentialité, air-gapped ou contrôle total, vous pouvez déployer votre propre stack Sigstore. Consultez le guide de déploiement privé Rekor.

Quel outil utiliser ?

Que voulez-vous signer ?
├─► Images conteneur ──────────────► Cosign
├─► Commits Git ───────────────────► gitsign
├─► Fichiers binaires / archives ──► Cosign (blob signing)
├─► SBOM / attestations ───────────► Cosign attest
└─► Politiques supply chain ───────► in-toto + Cosign

Intégration CI/CD

GitHub Actions

GitHub Actions fournit nativement des tokens OIDC compatibles Sigstore :

name: Build and Sign
on:
push:
tags: ['v*']
# Permissions minimales au top-level
permissions:
contents: read
jobs:
build-sign:
runs-on: ubuntu-24.04
# Permissions spécifiques au job
permissions:
contents: read
packages: write # Pour push vers GHCR
id-token: write # Pour OIDC Sigstore
attestations: write # Pour GitHub Attestations
steps:
- name: Checkout code
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0
- name: Install Cosign
uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0
- name: Build and push
id: build
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
with:
push: true
tags: ghcr.io/${{ github.repository }}:${{ github.ref_name }}
provenance: true # Génère l'attestation SLSA
sbom: true # Génère le SBOM avec Syft
- name: Generate SLSA attestation
uses: actions/attest-build-provenance@00014ed6ed5efc5b1ab7f7f34a39eb55d41aa4f8 # v3.1.0
with:
subject-name: ghcr.io/${{ github.repository }}
subject-digest: ${{ steps.build.outputs.digest }}
push-to-registry: true
- name: Sign image
run: |
IMAGE="ghcr.io/${{ github.repository }}@${{ steps.build.outputs.digest }}"
cosign sign --yes "${IMAGE}"
# Vérification immédiate
cosign verify \
--certificate-identity-regexp="https://github.com/${{ github.repository }}" \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
"${IMAGE}"

Pour plus de détails sur les attestations SBOM et l’intégration Kubernetes, consultez le guide Cosign.

Autres plateformes

PlateformeSupport OIDCDocumentation
GitHub Actions✅ Natifguide Cosign
GitLab CI✅ Natifguide gitsign
Google Cloud Build✅ Natifdocs.sigstore.dev
CircleCI✅ Disponiblecircleci.com

Sigstore et SLSA

SLSA (Supply chain Levels for Software Artifacts) définit des niveaux de maturité pour la sécurité supply chain. Sigstore est l’outil de référence pour atteindre ces niveaux :

Niveau SLSAExigenceOutil Sigstore
Build L1Provenance existeCosign (signature)
Build L2Provenance signéeCosign + Fulcio
Build L3Build isolé, provenance non-forgeableCosign + attestations in-toto

Pour des attestations avancées, combinez Sigstore avec in-toto.

Adoption dans l’industrie

Qui utilise Sigstore ?

  • npm : 2M+ signatures/semaine depuis 2023
  • PyPI : Trusted Publishers (OIDC natif)
  • Kubernetes : toutes les releases signées
  • GitHub : attestations de provenance
  • Homebrew : signatures des formules
  • Wolfi/Chainguard : toutes les images signées

Statistiques Rekor (2025)

Le log public contient plus de 100 millions d’entrées, avec une croissance de ~500K signatures/jour.

Sécurité et limites

Bonnes pratiques de sécurité

Permissions minimales

Définissez permissions: au niveau workflow avec contents: read par défaut, puis accordez des permissions spécifiques au niveau job.

Actions pinnées par SHA

Utilisez toujours des SHA de commit pour les actions tierces : uses: actions/checkout@8e8c483... # v6.0.1

Vérification post-signature

Toujours vérifier la signature immédiatement après l’avoir créée pour détecter les problèmes tôt.

Attestations SLSA

Utilisez actions/attest-build-provenance pour atteindre SLSA Build L3 et faciliter la vérification avec gh attestation verify.

Ce que Sigstore garantit

Garanties de sécurité de Sigstore

GarantieExplication
AuthenticitéL’artefact a été signé par l’identité déclarée
IntégritéL’artefact n’a pas été modifié depuis la signature
Non-répudiationLa signature est enregistrée publiquement
HorodatageOn sait quand la signature a été créée

Ce que Sigstore ne garantit PAS

Non-garantieExplication
Qualité du codeUn artefact signé peut contenir des bugs ou failles
IntentionsLe signataire peut être malveillant
Sécurité du buildSigstore ne protège pas le pipeline de build

À retenir

  1. Keyless = pas de clé à gérer : certificat éphémère basé sur OIDC
  2. Quatre composants : Fulcio (identité) + Rekor (transparence) + Cosign + gitsign
  3. Log de transparence : toutes les signatures sont publiques et auditables
  4. Adoption massive : npm, PyPI, Kubernetes, GitHub utilisent Sigstore
  5. SLSA-ready : atteint Build L2 nativement, L3 avec attestations

Guides détaillés

Ressources externes