Guide pratique Rekor : installation rekor-cli, requêtes, vérification de signatures et déploiement privé. Le log de transparence de l'écosystème Sigstore.
L’issue s’ouvre déjà remplie avec le titre et l’adresse de cette page.
Rekor est le log de transparence de l'écosystème
Sigstore. Il enregistre chaque
signature dans un registre public et immuable, permettant de prouver qu'une
signature existait à un moment précis, d'auditer les signatures d'une identité,
et de détecter les signatures frauduleuses. Ce log de transparence alimente
les exigences de traçabilité et de provenance du
référentiel Socle DevSecOps.
Cette leçon s'adresse à un DevOps qui a lu la vue d'ensemble de
Sigstore et la leçon sur
Fulcio, l'autorité qui délivre le
certificat éphémère. Rekor est la pièce qui garde la trace de ce que
Cosign (images) et
gitsign (commits) signent avec ce
certificat. Cosign est détaillé dans la leçon suivante : ici, vous n'en
retenez que ce qui touche au log.
Avec la signature keyless de Sigstore (sans clé privée à conserver), vous
signez avec un certificat Fulcio qui expire après 10 minutes.
Sans Rekor, impossible de prouver que la signature était valide au moment de sa
création : quand on vérifie, le certificat est déjà expiré. La leçon Sigstore
montre ce problème sur une chronologie.
Rekor le résout en enregistrant la signature au moment de sa
création avec un horodatage cryptographique :
Ces cinq propriétés ne sont pas des arguments marketing : ce sont les garanties
qui rendent une preuve recevable lors d'un audit. Lisez la colonne de droite
en priorité, elle répond à la seule question qui compte, à quoi sert la
propriété. Retenez surtout append-only et horodaté : la première
interdit de réécrire l'histoire, la seconde donne la preuve temporelle qui
survit à l'expiration du certificat Fulcio.
Propriété
Description
Pourquoi c'est important
Immuable
Une entrée ne peut pas être modifiée
Garantit l'intégrité historique
Append-only
On ne peut qu'ajouter, jamais réécrire
Empêche la réécriture de l'historique
Vérifiable
Structure en arbre de Merkle
Preuves cryptographiques d'inclusion
Public
Tout le monde peut lire et auditer
Transparence : chacun peut vérifier
Horodaté
Horodatage signé par Rekor (SET) sur chaque entrée ; un horodatage RFC 3161 vient d'une autorité d'horodatage (TSA), que le signing config public référence (timestamp.sigstore.dev, octobre 2026) et que Cosign utilise par défaut quand c'est approprié ; à configurer explicitement en instance privée
Rekor utilise un arbre de Merkle : une structure où chaque nœud est le hash
de ses enfants. Si vous modifiez une seule entrée, le hash racine change.
Le principe vient de Certificate Transparency,
le système public qui journalise les certificats TLS émis par les autorités de
certification.
Si l'entrée B est modifiée, Hash(B), puis Hash(A+B), puis le Root Hash changent : la falsification est immédiatement détectable.Source · SVG
Votre entreprise veut auditer les signatures effectuées par ses développeurs. La
recherche par email attend une adresse complète, pas un domaine : on
interroge donc chaque adresse de l'équipe, l'une après l'autre.
Fenêtre de terminal
# Lister les entrées associées à une adresse de l'équipe
rekor-clisearch--emailalice@votre-entreprise.com
La commande ne filtre pas par date. Pour borner l'audit à une période, lisez le
champ IntegratedTime de chaque entrée avec rekor-cli get (voir plus bas).
Vous configurez une alerte qui vous notifie dès qu'une signature est créée avec
votre identité (le script se trouve dans la section « Alerter sur les nouvelles
signatures »). Si vous recevez une alerte pour une signature que vous n'avez pas
faite, vous savez que votre compte est compromis.
Le Cyber Resilience Act (CRA) européen et les référentiels comme
SLSA demandent de pouvoir justifier
l'origine des artefacts livrés. Rekor ne remplace ni le SBOM ni la
documentation technique que le CRA impose, mais il fournit une preuve
cryptographique de qui a signé quoi et quand, que vous pouvez verser à un
dossier de conformité.
Téléchargez le binaire et le fichier de sommes publié par le projet
(dépôt sigstore/rekor), puis
vérifiez l'empreinte avant d'installer. Une version figée rend la
manipulation reproductible ; adaptez REKOR_VERSION quand une version plus
récente sort.
Fenêtre de terminal
# Version épinglée (dernière version au moment de la rédaction)
L'instance publique de Rekor est accessible à rekor.sigstore.dev. C'est
l'instance utilisée par défaut par Cosign et gitsign. D'après la
documentation officielle, elle
offre un SLO de 99,5 % de disponibilité (un objectif de niveau de service,
sans engagement contractuel) et elle est surveillée par une équipe
d'astreinte. L'état en direct est publié sur status.sigstore.dev. Une version 2 de Rekor
(projet rekor-tiles, log à base de tuiles) est en disponibilité générale depuis
le 10 octobre 2025, mais l'instance publique continue de servir la v1 par
défaut pour la signature (état au 16 octobre 2026, d'après le
billet Sigstore) ; cette page décrit
la v1. En v2, la date n'est plus attestée par le SET du journal mais par une
autorité d'horodatage (TSA) séparée.
Commençons par vérifier que nous pouvons accéder au log et voir son état actuel :
Fenêtre de terminal
rekor-cliloginfo
Sortie relevée le 16 octobre 2026 (les valeurs changent à chaque appel, et
rekor-cli affiche avant ce bloc des messages de validation des arbres
archivés) :
Le log public est découpé en plusieurs arbres de Merkle : des arbres
archivés, figés, et un arbre actif, qui reçoit les nouvelles signatures.
Le tableau distingue donc ce qui concerne l'arbre actif de ce qui concerne
l'ensemble.
Champ
Signification
Active Tree Size
Nombre d'entrées de l'arbre actif
Total Tree Size
Nombre d'entrées de tous les arbres, archivés compris
Root Hash
Hash racine de l'arbre de Merkle actif
TreeID
Identifiant de l'arbre actif
Glissez pour voir
Le Root Hash est la donnée la plus importante : c'est le hash qui "résume"
tout le contenu de l'arbre actif. Si une seule entrée était modifiée, ce hash
changerait.
C'est la recherche la plus courante. Elle permet de retrouver toutes les
signatures associées à une identité OIDC (votre compte GitHub, Google, etc.) :
Fenêtre de terminal
rekor-clisearch--emailvotre@email.com
Sortie (un UUID complet par ligne ; sans résultat, la commande affiche
no matching entries found et sort avec un code d'erreur) :
Cette recherche est utile pour vérifier la provenance d'un artefact : a-t-il
été signé ? Par qui ? Quand ? Avec votre propre fichier, le hash diffère et
la commande ne trouve une entrée que si ce fichier a été signé puis
journalisé ; sinon elle répond no matching entries found.
Cette méthode ne vaut pas pour une image conteneur signée par Cosign.
Cosign ne signe pas l'image elle-même mais un petit document JSON (le
payload), qui contient le digest de l'image. L'entrée Rekor indexe le hash de
ce document, pas le digest de l'image : rekor-cli search --sha avec le digest
de l'image ne la retrouve donc pas. Pour une image, utilisez cosign verify,
qui reconstruit le payload, retrouve l'entrée Rekor et vérifie sa preuve
d'inclusion, ou cherchez par identité avec --email.
Chaque entrée a un index unique (numéro séquentiel). L'index 0 est la
première entrée du log, l'index 1 la deuxième, etc.
Fenêtre de terminal
# Récupérer l'entrée numéro 7403797
rekor-cliget--log-index7403797
Cette commande retourne l'entrée complète : hash de l'artefact, signature,
certificat utilisé, heure d'intégration. La section « Récupérer les détails
d'une entrée » en détaille la sortie.
L'UUID est l'identifiant unique d'une entrée. Contrairement à l'index, qui
n'est qu'une position dans le log, il est dérivé du contenu de l'entrée : ses 16
premiers caractères hexadécimaux désignent l'arbre (shard Trillian) qui la
contient, les 64 suivants sont le hash de feuille Merkle de l'entrée dans cet
arbre.
IntegratedTime est l'heure à laquelle l'entrée a été intégrée au log. Le
champ publicKey.content contient, encodé en base64, le certificat du
signataire (le préfixe LS0tLS1CRUdJTi correspond à -----BEGIN) : décodé, il
révèle l'email de l'identité, ce que fait la dernière commande ci-dessous.
La vérification est l'opération la plus importante de Rekor. Elle permet de
prouver cryptographiquement qu'une signature existe dans le log et qu'elle
est valide.
Quand vous vérifiez une entrée, Rekor retourne une inclusion proof (preuve
d'inclusion). Cette preuve est un ensemble de hashs qui permettent de recalculer
le Root Hash à partir de l'entrée.
Le schéma de la section « Preuve d'inclusion » montre ce calcul pour l'entrée B,
avec Hash(A) et Hash(C+D) comme preuve.
Étapes de vérification pour une entrée B :
Calculer Hash(B)
Calculer Hash(A+B) avec le Hash(A)fourni dans la preuve
Le plus simple pour voir une preuve d'inclusion en action est de demander à
rekor-cli de recalculer le Root Hash d'une entrée existante, par exemple
l'entrée d'index 7403797 utilisée plus haut :
Fenêtre de terminal
rekor-cliverify--log-index7403797
La sortie affiche d'abord le Root Hash courant, puis chaque calcul
SHA256(0x01 | hash gauche | hash droit) de la preuve, et se termine par
deux lignes Computed Root Hash et Expected Root Hash. Si les deux
valeurs sont identiques, l'entrée appartient bien au log. Si elles
diffèrent, la preuve ne tient pas.
Pour vérifier qu'une signature précise est dans le log, il faut réunir l'artefact,
sa signature détachée et la clé publique correspondante, qui doivent déjà
avoir été enregistrés ensemble dans le log :
Fenêtre de terminal
rekor-cliverify--artifactmon-fichier.txt\
--signaturesignature.sig\
--public-keycle-publique.pem\
--pki-formatx509
L'option --pki-format indique le format de la clé et de la signature : sa
valeur par défaut est pgp, d'où le x509 pour une clé publique PEM.
Si l'entrée figure dans le log, la commande affiche la preuve d'inclusion (index,
hashs intermédiaires, taille de l'arbre) ; sinon elle sort en erreur.
Une vérification réussie apporte trois garanties distinctes qu'il faut ne pas
confondre. La preuve d'inclusion atteste que l'entrée figure bien dans le
log, la validité de signature que celle-ci correspond à l'artefact, et le
timestamp qu'elle existait à une date donnée. Aucune des trois ne dit que le
contenu signé est sûr : elles prouvent l'origine et l'intégrité, pas la
qualité.
En pratique, vous n'avez pas besoin d'appeler rekor-cli verify directement.
Cosign, l'outil qui signe et vérifie les images (leçon suivante),
vérifie automatiquement les preuves Rekor lors de la vérification d'une
signature. En mode keyless, vous lui indiquez l'identité attendue et son
fournisseur OIDC :
Fenêtre de terminal
# Cosign vérifie automatiquement l'inclusion dans Rekor ; en mode keyless,
# l'identité attendue et son fournisseur OIDC sont obligatoires
Rekor trouve sa place à deux moments du pipeline, et le schéma ci-dessous les
distingue. À la construction, une étape enregistre la signature de
l'artefact fraîchement produit. Au déploiement ou lors d'un audit
périodique, une autre étape interroge le log pour confirmer qu'un artefact a
bien été signé avant de l'autoriser. C'est cette seconde étape qui apporte la
valeur défensive : sans vérification à l'entrée, l'enregistrement ne sert à
rien.
Ce workflow suppose que mon-artefact, signature.sig et public-key.pem
sont disponibles dans le dépôt ou téléchargés par une étape précédente : ce
sont les trois pièces de la vérification décrite plus haut.
Deux détails du workflow comptent. La dernière release vient de l'endpoint
releases/latest, car le premier élément de la liste des tags n'est pas
forcément la plus récente. Et le téléchargement depuis GHCR exige une
authentification : le job reçoit la permission packages: read et se
connecte avec docker login, le jeton transitant par une variable
d'environnement et non par une expression dans la commande.
L'étape Check Rekor entries utilise cosign verify plutôt que
rekor-cli search --sha : une signature Cosign d'image est journalisée sous le
hash de son payload, pas sous le digest de l'image, et la recherche par
digest ne la retrouverait pas. cosign verify échoue si la signature est
absente, si l'identité ne correspond pas ou si l'entrée Rekor est introuvable,
ce qui fait échouer le job comme attendu. Le workflow suppose que l'image est
signée en keyless par un workflow de ce même dépôt.
La recherche par email n'accepte pas de domaine : le script ci-dessous prend
une liste d'adresses, retient les UUID déjà vus pour chacune dans un dossier
d'état, et signale toute entrée nouvelle au passage suivant. Le premier passage
sert de référence et n'alerte pas. Lancez-le à intervalle régulier (cron ou
job planifié).
#!/usr/bin/env bash
# monitor-signatures.sh : signale les nouvelles entrées Rekor des identités surveillées
# Une recherche par adresse complète. Sans résultat (ou serveur injoignable),
# rekor-cli sort en erreur : on passe à l'adresse suivante sans toucher à l'état.
if!result="$(rekor-clisearch--email"${email}"--formatjson2>/dev/null)"; then
continue
fi
current="$(mktemp)"
echo"${result}"|jq-r'.UUIDs[]'|sort>"${current}"
if [ -f"${known}" ]; then
# comm -13 : lignes présentes uniquement dans la liste actuelle
comm-13"${known}""${current}"|whileread-ruuid; do
echo"Nouvelle signature pour ${email} : ${uuid}"
# Envoyer une alerte (Slack, e-mail, etc.)
done
fi
mv"${current}""${known}"
done
comm -13 n'affiche que les UUID présents dans la liste actuelle et absents de
la précédente, c'est-à-dire les nouvelles signatures. Remplacez le commentaire
par l'appel à votre outil d'alerte.
Cinq situations justifient de renoncer à l'instance publique, et elles se
ramènent à deux motifs de fond : la confidentialité (vos identités et
signatures ne doivent pas être publiques) et l'indépendance (environnement
sans Internet, contrainte de souveraineté ou de région). Si aucun de ces motifs
ne s'applique à votre contexte, l'instance publique reste le choix le plus
simple, et la communauté l'audite.
Situation
Pourquoi une instance privée
Air-gapped
Pas d'accès à Internet depuis l'environnement de build
Confidentialité
Les emails/signatures ne doivent pas être publics
Conformité
Les données doivent rester dans une région géographique
Performance
Contrôle total sur la latence et la disponibilité
Souveraineté
Indépendance vis-à-vis de l'infrastructure Sigstore
Une instance Rekor n'est pas un binaire isolé : elle repose sur Trillian,
le moteur de log en arbre de Merkle développé par Google, lui-même adossé à une
base de données MySQL/MariaDB qui stocke les entrées. Le schéma ci-dessous
montre comment rekor-server s'appuie sur le log-server et le log-signer
de Trillian. Retenez cette dépendance : sauvegarder Rekor, c'est d'abord
sauvegarder cette base, sans quoi le log entier est perdu.
Voici un schéma de principe pour comprendre les briques, pas un déploiement
prêt à démarrer : il manque le schéma SQL de Trillian (que l'image
mariadb ne contient pas), la création de l'arbre (createtree) et son
identifiant à passer à rekor-server. Pour une instance qui démarre vraiment,
partez du docker-compose.yml officiel
du dépôt Rekor au tag v1.5.3 :
La plupart des erreurs rencontrées avec rekor-cli sont soit des problèmes
d'accès réseau à l'instance, soit des identifiants mal formés. Lisez d'abord le
symptôme exact renvoyé par la commande, puis remontez à la cause dans le
tableau : un verification failed n'a rien à voir avec la connectivité, il
signale que l'artefact ne correspond plus à sa signature.
Symptôme
Cause probable
Solution
connection refused
Serveur Rekor inaccessible
Vérifier la connexion Internet
entry not found
UUID/index invalide
Vérifier le format de l'identifiant
no matching entries found
Aucune entrée pour cette adresse ou ce hash
Vérifier l'adresse complète (pas de domaine) et le hash SHA256
Avant de suspecter rekor-cli, isolez la couche réseau avec un simple appel
HTTP à l'API. Si cette requête curl renvoie bien un objet JSON contenant un
treeSize, l'instance est joignable et le problème vient d'ailleurs (format
d'identifiant, artefact modifié). Si elle échoue, vous avez confirmé un souci de
connectivité ou de proxy, indépendant de l'outil.
Avant de lire le schéma, gardez en tête une distinction qui évite les
malentendus : Rekor fournit une garantie d'intégrité et de traçabilité,
pas de confiance dans le signataire. Il prouve qu'une signature existait à
un instant donné et n'a pas été altérée depuis. Il ne juge ni la légitimité du
signataire ni la qualité de l'artefact signé, deux points que le schéma place
volontairement hors de son périmètre.
En résumé : Rekor prouve qui a signé quoi et quand, mais pas si c'était une bonne idée de signer.Source · SVG
Ce tableau se lit en trois temps, colonne par colonne : l'attaque, ce que Rekor
oppose, et surtout la limite de cette protection. C'est la troisième
colonne qui compte, car elle corrige l'illusion la plus courante. Rekor est un
outil de détection a posteriori, pas de prévention : il rend une falsification
visible et prouvable, mais n'empêche ni la signature frauduleuse ni la
modification d'un artefact.
Ces recommandations découlent directement des limites vues juste avant. Puisque
Rekor détecte sans empêcher, l'essentiel se joue autour du log, pas dedans. Les
deux premières lignes forment le socle : vérifier en CI ferme la porte aux
artefacts non signés, monitorer les nouvelles signatures transforme la
détection a posteriori en alerte quasi temps réel dès qu'une identité est
usurpée.
Voici les 7 points essentiels à retenir sur Rekor :
Rekor est un log de transparence append-only : chaque signature est
horodatée et enregistrée dans un registre public et immuable, consultable par
tous
Arbre de Merkle : structure cryptographique qui garantit que le log
ne peut pas être modifié sans que cela soit détectable
Preuve temporelle : résout le problème des certificats éphémères en
prouvant qu'une signature existait à un moment précis
Auditabilité ouverte : n'importe qui peut rechercher et vérifier les
signatures (attention : les emails sont publics)
Instance privée possible : pour les environnements air-gapped ou
nécessitant la confidentialité
Détecter, pas empêcher : Rekor rend une signature frauduleuse visible
mais n'empêche ni la signature d'un compte OIDC compromis ni celle d'un
code malveillant ; vérifiez en CI et surveillez vos identités
Preuve attendue (SOCLE-REL-VER-2) : un journal de transparence des
signatures et attestations, ici Rekor, où chaque signature publiée a
une entrée retrouvable et dont la preuve d'inclusion est vérifiée
par les consommateurs
Résumé Rekor : en signature keyless, Fulcio fournit le certificat, Cosign signe et Rekor journalise ; chaque entrée porte UUID, horodatage, preuve d'inclusion, hash et certificat ; rekor-cli search et rekor-cli get retrouvent les signatures ; bénéfices : non-répudiation, horodatage et auditabilité.Signature keylessFulcio(certificat)Cosign(signer)Rekor(log public)Entrée dans le logCommandes clésBénéfices clésUUID, timestampInclusion proofHash artefact, certificatrekor-cli search --email ...trouver les signaturesrekor-cli get --log-index ...voir les détailsNon-répudiationprouve l'existence d'une signatureHorodatagepreuve temporelle immuableAuditabilitélog public et vérifiable
Vérifiez que l'essentiel de ce guide est acquis. Les questions portent
uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
6 questions
6 min.
70% requis
Informations
Le chronomètre démarre au clic sur Démarrer
Questions à choix multiples, vrai/faux et réponses courtes
Vous pouvez naviguer entre les questions
Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
⏱️--:--
0 / 6
Vérification
(0/0)
--:--
0%
0Correctes
0À revoir
0:00Temps
-Niveau
Score par domaine
Un domaine regroupe plusieurs guides et reçoit plusieurs questions : son score est plus fiable qu'un score par thème, qui porte souvent sur une seule question.
Bilan
Points forts
Aucun sujet réussi à 80 % sur au moins deux questions pour l’instant.