8 min de lecture

Journaux d'audit chiffrés : ce que prouve la vérification hors ligne

Les journaux d'audit chiffrés peuvent prouver la continuité du texte chiffré hors ligne. Découvrez ce que les chaînes de hachage, points de contrôle de confiance, horodatages et vérificateurs peuvent ou non démontrer.

Journaux d'audit chiffrés : ce que prouve la vérification hors ligne

Un journal d'audit chiffré peut fournir à un examinateur externe des preuves utiles sans lui donner accès au contenu d'un seul enregistrement. Il peut vérifier si les enregistrements chiffrés forment toujours la séquence attendue, si un enregistrement antérieur a changé et à quel endroit un export cesse de correspondre à l'historique déclaré.

Ces preuves ont des limites strictes. Un résultat de vérification propre ne prouve pas que chaque affirmation journalisée est vraie, que l'archive commence au premier événement ou qu'un horodatage reflète l'heure réelle. Les équipes fragilisent leur propre argumentaire d'audit lorsqu'elles appellent tout cela « intégrité ». Il s'agit d'affirmations différentes, auxquelles un auditeur doit associer des preuves différentes.

Le texte chiffré peut porter une piste d'intégrité

Les journaux d'audit chiffrés peuvent faire l'objet d'une vérification hors ligne, car le vérificateur n'a pas besoin de comprendre un enregistrement pour hacher les octets stockés. Il lui faut seulement un format d'enregistrement non ambigu et une règle qui rattache chaque enregistrement à celui qui le précède.

Une chaîne conceptuelle simple ressemble à ceci :

record_1 = Encrypt(event_1)
link_1   = H(record_1)

record_2 = Encrypt(event_2)
link_2   = H(link_1 || record_2)

record_3 = Encrypt(event_3)
link_3   = H(link_2 || record_3)

H est une fonction de hachage cryptographique. Le symbole || signifie une concaténation d'octets, et non une fusion de textes. Un format de production doit définir les octets exacts, leur ordre et leur encodage de longueur. Si une implémentation hache un saut de ligne qu'une autre omet, elles ne seront pas d'accord pour de banales raisons de formatage, et non pour des raisons liées aux preuves.

Le vérificateur lit les enregistrements chiffrés exportés dans l'ordre. Pour chaque enregistrement, il calcule le lien suivant attendu à partir du lien précédent accepté et des octets chiffrés actuels. Il compare ensuite cette valeur au lien stocké pour l'enregistrement actuel ou pour l'enregistrement suivant, selon le format. Une différence signifie que la séquence fournie ne respecte pas la règle de la chaîne.

Le chiffrement et le chaînage répondent à des problèmes distincts. Le chiffrement empêche l'examinateur, l'opérateur d'une sauvegarde ou la personne qui obtient l'export de lire les URL de requête, les arguments de commande, les corps de réponse, les noms et autres informations sensibles contenus dans les enregistrements. La chaîne détecte les modifications apportées aux octets protégés. Chiffrer un journal sans chaîne protège la confidentialité, mais empêche l'examinateur de distinguer une archive intacte d'une archive dont un enregistrement a été discrètement supprimé. Hacher le texte en clair avant le chiffrement peut détecter certaines modifications, mais crée souvent des pièges de format évitables et ne fournit pas, à lui seul, une séquence continue à tester.

Un auditeur qui ne voit que du texte chiffré peut donc formuler une affirmation précise : « Étant donné cette règle de chaîne et cet ancrage, ces enregistrements chiffrés n'ont pas été modifiés ni déplacés dans la séquence fournie. » Cette affirmation est utile. Il ne faut pas la transformer en affirmation sur le sens des enregistrements masqués.

Une chaîne valide prouve la continuité, pas la vérité

Une chaîne de hachage prouve une propriété d'intégrité limitée : les liens ultérieurs dépendent des octets stockés précédemment. Elle ne prouve pas que le logiciel a enregistré une action avec exactitude, qu'il a enregistré toutes les actions ni qu'un employé n'a pas fabriqué un historique propre mais trompeur.

Prenons un agent de compilation qui envoie une demande de déploiement. Un journaliseur peut enregistrer la demande avant l'appel réseau, après l'appel réseau ou seulement après avoir reçu une réponse positive. Ces trois choix peuvent produire une chaîne parfaite. Pourtant, ils répondent à des questions différentes :

  • Un enregistrement avant l'appel montre qu'une action a été tentée.
  • Un enregistrement après l'appel peut montrer que l'application a atteint son propre point d'achèvement.
  • Un accusé de réception fourni par le prestataire peut montrer que le service distant a accepté la demande.
  • Une capture réseau peut montrer le trafic, mais pas nécessairement identifier l'intention de l'utilisateur qui l'a provoqué.

Une chaîne ne peut pas combler cet écart sémantique. C'est l'application qui détermine ce que chaque enregistrement affirme. La conception de l'audit doit l'énoncer clairement, notamment pour préciser si les échecs, refus, nouvelles tentatives, annulations et réponses partielles donnent lieu à des enregistrements.

Cette distinction compte surtout après un incident. Quelqu'un demandera : « L'agent a-t-il supprimé le dépôt ? » Un enregistrement local déchiffré peut indiquer que la passerelle d'actions a envoyé une demande de suppression. Il ne peut pas, à lui seul, prouver que le fournisseur a exécuté la demande. Un événement enregistré par le fournisseur peut répondre à cette question ultérieure. À l'inverse, un événement du fournisseur peut prouver qu'une suppression a eu lieu sans indiquer quel processus local l'a demandée. Les enquêteurs doivent rapprocher les preuves au lieu de considérer un journal comme une histoire complète.

Le même problème se pose avec l'identité de l'agent. Un enregistrement peut identifier un processus, une autorité de signature du code, une session ou une approbation utilisateur. Ces identités décrivent des acteurs différents. Si l'enregistrement indique « session d'agent 42 », l'auditeur ne doit pas reformuler cela en « Alice l'a fait » sans enregistrements séparés reliant l'approbation d'Alice à cette session. La chaîne préserve les octets. Elle ne corrige pas une interprétation trop large de ces octets.

Le premier ancrage de confiance détermine la portée de la preuve

Une chaîne n'a pas de début significatif tant que l'auditeur ne détient pas un ancrage que l'auteur du journal ne peut pas réécrire en même temps que l'archive. Le lien initial, un condensat de point de contrôle ou un engagement signé peut jouer ce rôle. Sans cela, un attaquant qui contrôle le stockage peut supprimer tout le journal, générer une nouvelle chaîne à partir d'un nouvel enregistrement initial et fournir un remplacement parfaitement cohérent.

C'est l'erreur la plus courante dans les conceptions internes. Les équipes exécutent un vérificateur sur un fichier et concluent que le fichier est complet. Le vérificateur a seulement établi que le fichier est cohérent avec lui-même. La complétude exige un engagement antérieur envers un point attendu de l'historique.

Un point de contrôle pratique contient assez d'informations pour permettre à un futur examinateur d'identifier l'affirmation. Conservez au minimum :

log identity: agent-actions-prod
checkpoint sequence: 18427
checkpoint digest: 7f...c2
record format version: 3
hash algorithm: SHA-256
checkpoint captured by: release-control process
checkpoint captured at: 2025-03-08T18:20:00Z

Le condensat ci-dessus est donné à titre d'exemple. Une véritable preuve nécessite le condensat complet, l'encodage exact des octets et une copie durable en dehors du stockage du journal. Conservez le point de contrôle dans un système soumis à des limites d'accès et à des modes de défaillance différents. Un commit dans un système de gestion de versions, une pièce jointe à un ticket à accès restreint, un artefact de version signé, un stockage en ajout uniquement ou un enregistrement détenu par un auditeur externe peuvent tous aider, à condition que les personnes capables de réécrire le journal ne puissent pas aussi réécrire discrètement tous les points de contrôle.

Les points de contrôle permettent également à un auditeur de vérifier un intervalle plutôt qu'une archive entière. S'il fait confiance au point de contrôle de la séquence 18 427 et reçoit les enregistrements jusqu'à la séquence 19 100, le vérificateur peut tester que le segment ultérieur descend bien du point de contrôle approuvé. La portée de l'affirmation est ainsi limitée à une fenêtre définie, ce qui vaut mieux que de prétendre que le journal possède un historique ininterrompu depuis son installation.

Un point de contrôle n'a pas besoin de révéler le contenu des enregistrements. L'engagement peut contenir uniquement un condensat, un numéro de séquence, une version de format et l'identité du journal. L'ancrage externe reste ainsi compatible avec des enregistrements chiffrés. Cela évite aussi une mauvaise habitude : exporter des détails d'audit sensibles simplement pour qu'une autre équipe confirme que l'archive existait.

Les champs temporels sont des affirmations tant qu'une partie indépendante ne les rattache pas

Un horodatage présent dans un enregistrement chiffré peut ordonner les événements selon l'horloge de l'auteur, mais il ne peut pas, à lui seul, prouver quand un événement s'est produit dans le monde extérieur. Quiconque contrôle l'horloge de la machine, le processus ou le format du journal peut créer une chaîne valide contenant de fausses valeurs temporelles.

Les équipes confondent souvent séquence et temps. Une chaîne peut établir que l'enregistrement 108 suit l'enregistrement 107 selon la règle de chaînage. Elle ne peut pas établir que l'enregistrement 108 s'est produit à 09:17 UTC simplement parce que le texte de l'enregistrement l'indique. Même les compteurs monotones ont leurs limites : ils montrent l'ordre dans un journal, mais ne disent pas combien de temps physique s'est écoulé entre deux entrées.

Si un audit exige une heure fiable, rattachez les points de contrôle à une source indépendante du contrôle de l'auteur. Une autorité d'horodatage indépendante, un accusé de réception d'un service distant ou un collecteur d'événements administré séparément peuvent fournir cette preuve. Chaque option implique une relation de confiance différente. Un horodatage indépendant indique qu'une autre partie a vu un engagement au plus tard à une heure donnée. Un accusé de réception distant indique que ce service a observé une demande ou un résultat. Aucun des deux ne rend miraculeusement vrai le texte de l'événement local.

RFC 3161 décrit un protocole d'horodatage dans lequel une autorité renvoie un jeton signé sur une empreinte de message, généralement un condensat. Pour les journaux chiffrés, l'empreinte de message est la partie utile. L'autorité peut horodater le condensat d'un point de contrôle sans recevoir les enregistrements chiffrés ni leurs clés de déchiffrement. La limite est tout aussi importante : le jeton rattache un condensat à l'heure déclarée par l'autorité. Il n'examine pas les enregistrements masqués, ne valide pas leur sens et ne prouve pas que le condensat fourni représente une archive complète.

Les problèmes d'horloge provoquent aussi des désaccords de vérification parfaitement innocents. Un poste de travail peut avoir un mauvais fuseau horaire, un processus peut écrire l'heure locale au lieu de l'UTC ou un opérateur peut exporter les fichiers dans un ordre différent de celui des événements. Stockez une représentation temporelle claire, mais séparez le numéro de séquence de la chaîne de toute affirmation temporelle. Lors de l'examen, demandez-vous quelle affirmation vous devez établir : l'ordre, une heure de fonctionnement approximative ou une heure constatée indépendamment.

La vérification hors ligne doit préserver les octets originaux des preuves

Garder les clés SSH hors de portée des agents
Sallyport utilise son utilitaire sp-ssh intégré pour les actions SSH, afin que les agents ne détiennent pas les clés SSH.

Un vérificateur hors ligne contrôle des octets, et non une représentation lisible par l'être humain. Une équipe d'audit peut rendre une preuve valide inexploitable en ouvrant un export dans un éditeur, en convertissant les fins de ligne, en sérialisant à nouveau du JSON, en tronquant un fichier pendant une copie ou en combinant des segments dans le mauvais ordre.

Traitez l'export reçu comme un objet de preuve. Copiez-le bit par bit vers un stockage contrôlé avant toute inspection. Notez son origine, l'heure de réception, les personnes qui l'ont manipulé et le condensat du fichier reçu. Cette trace de manipulation ne rend pas une source défectueuse fiable, mais elle empêche le processus d'examen d'ajouter sa propre ambiguïté.

Le processus de vérification doit séparer la collecte, le contrôle d'intégrité et l'accès au contenu :

  1. Préservez l'export chiffré et calculez le condensat du fichier pour le registre des preuves.
  2. Obtenez le point de contrôle de confiance pertinent par le canal indépendant documenté, et non à partir d'une note présente dans le même export.
  3. Exécutez le vérificateur sur une copie de travail intacte et conservez son code de sortie et sa sortie.
  4. Si le contrôle réussit, décidez si l'examen nécessite un déchiffrement. Si c'est le cas, accordez cet accès dans le cadre d'un processus distinct.
  5. Si le contrôle échoue, cessez toute modification et conservez la copie en échec ainsi que le point de contrôle déclaré.

C'est à la troisième étape qu'un résultat en ligne de commande devient utile. Sur une machine où les outils en ligne de commande Sallyport sont installés, un auditeur peut exécuter :

sp audit verify

La commande vérifie hors ligne la chaîne de hachage chiffrée et n'a besoin d'aucune clé de coffre-fort. Conservez la version de l'outil, la commande exacte, l'identité du fichier d'entrée si l'outil accepte un chemin d'export et la sortie du terminal avec le dossier. Une simple capture d'écran constitue une preuve faible, car elle masque l'exécutable, les arguments et la provenance de l'entrée.

Ce contrôle doit avoir lieu avant toute demande de déchiffrement. Si la chaîne échoue, l'ouverture des enregistrements peut aider à diagnostiquer la source du problème, mais elle ne peut pas transformer l'archive défaillante en preuve intacte. Si la chaîne réussit, l'équipe d'examen peut souvent répondre à une question préliminaire, par exemple déterminer si l'historique exporté a changé après la collecte, tout en laissant les secrets opérationnels protégés.

Un lien cassé indique où enquêter, pas qui en est responsable

Lorsque la vérification s'arrête sur une différence, l'échec indique que le vérificateur n'a pas pu déduire le lien enregistré à partir du prédécesseur et du texte chiffré fournis. Il n'identifie pas l'auteur de la différence. Une corruption pendant le transfert, un export incomplet, un bogue d'analyse, une incompatibilité de version de format et une falsification volontaire peuvent produire le même premier symptôme.

Remontez à partir de la première relation en échec. Conservez le dernier enregistrement accepté, le premier enregistrement rejeté, leurs liens enregistrés et le point de contrôle attendu. Comparez ensuite les copies des preuves à chaque étape de transmission. Si le condensat du fichier a changé entre l'hôte producteur et le stockage des preuves, examinez d'abord le transport ou la collecte. S'il est resté stable mais que la chaîne échoue systématiquement sur un nouvel export, examinez l'application productrice et ses hypothèses de format.

Les schémas d'échec peuvent réduire le champ des possibilités :

  • Une différence sur le premier enregistrement fourni indique souvent un mauvais point de contrôle, un segment antérieur manquant ou un export qui commence après la limite prévue.
  • Une différence vers la fin indique souvent une troncature pendant la copie ou une écriture partielle exportée trop tôt.
  • Des échecs après chaque enregistrement indiquent généralement des versions de format incompatibles ou un vérificateur qui calcule un encodage différent des octets.
  • Une différence isolée alors que les enregistrements suivants pourraient autrement être liés peut signaler un enregistrement modifié, endommagé ou omis.

Ne réparez pas le fichier pour voir si les autres enregistrements sont vérifiés. Cet exercice peut aider les développeurs à déboguer un analyseur, mais il détruit la rigueur nécessaire à une conclusion d'audit. Gardez une copie forensique intacte. Placez tout dérivé de diagnostic à part, documentez sa transformation et ne le substituez jamais aux preuves originales.

Un vérificateur bien conçu doit fournir suffisamment de détails pour faciliter cette enquête sans exposer le contenu chiffré. Un numéro de séquence, un décalage d'enregistrement, le condensat attendu, le condensat observé et la version du format suffisent généralement. Le rapport doit éviter de déverser le texte chiffré si cette sortie doit circuler dans des systèmes de tickets ou des conversations. Le texte chiffré peut être illisible sans les clés, mais il doit tout de même être manipulé de manière contrôlée et peut devenir sensible si les clés sont divulguées ultérieurement.

Suppression et troncature exigent des défenses différentes

Vérifier avant d'accéder au contenu
Vérifiez d'abord la chaîne chiffrée, puis décidez si l'examen nécessite l'accès au contenu des enregistrements.

Une chaîne détecte un enregistrement intermédiaire modifié, car les liens suivants cessent de correspondre. Elle peut également révéler la suppression d'un enregistrement intermédiaire lorsque l'enregistrement suivant restant fait référence à un prédécesseur que le vérificateur n'a pas reçu. Mais une chaîne simple ne détecte pas toujours une troncature en fin de fichier.

Imaginez une archive contenant les enregistrements 1 à 500. Un attaquant supprime les enregistrements 451 à 500 et remet à l'auditeur les enregistrements 1 à 450. Les 450 premiers peuvent être vérifiés parfaitement. La chaîne ne contient aucun enregistrement ultérieur pointant vers 451, et l'examinateur a besoin d'une attente externe indiquant que l'historique devait aller plus loin.

Cette attente peut venir d'un point de contrôle à 500, d'un compte quotidien signé, d'un système externe connaissant le dernier numéro de séquence ou d'un processus de conservation qui enregistre les plages d'export terminées. L'affirmation utile est précise : « L'archive contient tous les enregistrements jusqu'à la séquence 500. » Une chaîne seule permet seulement d'affirmer : « L'archive fournie est cohérente jusqu'à la séquence 450. »

La suppression avant le premier enregistrement fourni pose le même problème. Si un examinateur reçoit une chaîne qui commence à l'enregistrement 200, il ne peut pas déduire si les enregistrements 1 à 199 ont jamais existé. Le format d'export doit préciser s'il s'agit d'une archive complète, de la genèse à l'état actuel, ou d'un segment borné. Les segments bornés ont besoin de leur point de contrôle initial. Les archives complètes ont tout de même besoin d'une valeur de genèse approuvée ou d'un engagement externe si un adversaire pouvait remplacer le fichier entier.

Le nombre d'enregistrements aide à détecter les pertes accidentelles, mais il ne suffit pas à lui seul. Un fichier peut conserver 500 enregistrements après qu'une personne a remplacé un enregistrement chiffré par un autre, et un simple compte ne le détectera pas. Utilisez les comptes comme éléments complémentaires d'une chaîne et d'un point de contrôle, pas comme substituts.

C'est là qu'une piste révélant les falsifications se distingue d'une garantie de stockage à écriture unique. Une piste fournit des preuves permettant à un examinateur de détecter certaines modifications. Un stockage à écriture unique vise à empêcher les modifications par des contrôles d'accès ou par le comportement du stockage. Les programmes d'audit solides utilisent les deux et testent les deux. Prendre l'un pour la preuve de l'autre laisse une faille assez grande pour qu'un examen d'incident y tombe.

Le vérificateur doit connaître le format, pas le deviner

Les algorithmes cryptographiques ne compensent pas un format d'enregistrement ambigu. Un vérificateur a besoin d'une spécification exacte de la manière dont l'auteur transforme un événement en texte chiffré et de la manière dont il combine les métadonnées, les liens précédents et le texte chiffré pour le hachage suivant.

Évitez les entrées de hachage qui dépendent de formats d'affichage pratiques. L'ordre des membres d'un objet JSON, les espaces, la normalisation Unicode et les champs facultatifs peuvent varier selon les implémentations tout en exprimant le même objet visible. Si la chaîne couvre du JSON sérialisé, définissez une sérialisation canonique et testez-la dans plusieurs langages. Mieux encore, chaînez une enveloppe binaire avec des longueurs de champs et des octets de version explicites.

Une enveloppe minimale peut inclure un identifiant de journal, une séquence croissante, le condensat du lien précédent, l'identifiant de l'algorithme de chiffrement, le texte chiffré, le tag d'authentification et une version de format. L'auteur doit inclure suffisamment de cadrage pour que le vérificateur puisse rejeter un enregistrement provenant d'un autre journal au lieu de l'accepter parce que ses octets forment par hasard un lien valide.

La gestion des versions demande de la rigueur. Si la version 2 modifie l'enveloppe d'enregistrement, le vérificateur doit indiquer qu'il a appliqué les règles de la version 2 à la transition. Ne faites pas basculer silencieusement un vérificateur vers un autre analyseur. Ce basculement transforme une fonction de compatibilité en moyen d'accorder à tort une validation à une preuve mal formée.

La publication FIPS 180-4 du National Institute of Standards and Technology spécifie la famille SHA-2 et définit la fonction de hachage sur une séquence de bits, et non sur l'intention d'une application. Ce détail austère porte un avertissement pratique. La propriété d'intégrité s'attache exactement aux octets d'entrée. Les équipes qui disent « nous hachons l'événement » n'ont souvent pas décidé si elles hachent une chaîne UTF-8, une ligne de base de données, un objet compressé ou une enveloppe chiffrée. Tant que ce choix n'est pas arrêté, elles ne disposent pas d'un contrôle d'audit reproductible.

Testez le format avec des cas volontairement difficiles : champs vides, texte non ASCII, textes chiffrés volumineux, écritures interrompues, enregistrement à une limite de version et enregistrements copiés entre les architectures prises en charge. Testez aussi les mutations. Inversez un octet d'un texte chiffré, échangez deux enregistrements voisins, supprimez un enregistrement du milieu et tronquez le fichier. Le vérificateur doit échouer de manière prévisible et identifier le premier point où la relation attendue se rompt.

Les journaux d'agents nécessitent deux niveaux de preuve

Séparer les preuves des secrets
Sallyport conserve les secrets dans son coffre-fort chiffré tout en préservant une piste d'activité résistante aux falsifications.

Les agents autonomes soulèvent deux questions d'audit liées : quelle exécution a obtenu l'autorité et quelle action a utilisé cette autorité. Une même chronologie peut contenir les deux, mais les examinateurs doivent conserver des affirmations distinctes.

Un enregistrement de session répond aux questions concernant le processus connecté à la passerelle d'actions, l'autorité de signature du code associée à ce processus, le moment où un humain a autorisé l'exécution et celui où un opérateur l'a révoquée. Un enregistrement d'action répond aux questions concernant une requête HTTP ou SSH précise exécutée par la passerelle. Une exécution peut avoir une autorisation et de nombreux enregistrements d'action. Un examinateur qui ne voit que la piste de session ne peut pas déduire tous les effets externes, et celui qui ne voit que les enregistrements d'action risque de ne pas comprendre pourquoi ce processus disposait de l'autorité.

Sallyport conserve un journal Sessions et un journal Activity projetés à partir d'un même journal d'audit chiffré, chaîné par hachage et à écriture aveugle. Cette organisation fournit à l'auditeur deux vues du même historique protégé tout en conservant une seule piste d'intégrité à vérifier.

L'expression « à écriture aveugle » mérite d'être précisée. Elle signifie que le composant qui ajoute les preuves d'audit ne doit pas disposer, dans le cadre de son fonctionnement normal, d'un moyen pratique de lire et de réécrire les anciens enregistrements. Cela ne signifie pas que l'auteur du journal est incapable de produire de fausses affirmations. Un agent compromis peut demander des actions nuisibles. Une passerelle compromise peut enregistrer de mauvaises données tout en conservant une chaîne mathématiquement valide. La conception réduit une catégorie de risques de réécriture, mais ne supprime pas le besoin d'intégrité logicielle, d'autorisation des sessions, d'autorisation des actions lorsque nécessaire et de comparaison avec les preuves du système distant.

Pour les actions HTTP, préservez suffisamment de métadonnées protégées pour distinguer la destination, la méthode, la référence de l'identifiant, le contexte d'approbation, la catégorie de résultat et l'identifiant de corrélation, tout en évitant les secrets dans l'enregistrement. Pour les actions SSH, distinguez l'hôte visé, les limites de la commande, le contexte de session et le résultat. L'enregistrement chiffré peut contenir ces détails pour les enquêteurs autorisés. Le vérificateur hors ligne n'a pas besoin de les voir pour tester si la séquence a changé.

Cette séparation permet aux équipes d'envoyer un dossier d'intégrité à un examinateur de sécurité qui ne dispose d'aucune autorisation permanente pour inspecter les secrets de production. Elle rend aussi le travail d'incident moins chaotique. Commencez par établir si les preuves fournies sont toujours intactes. Accordez ensuite l'accès de déchiffrement le plus limité possible pour interpréter les événements.

Une affirmation d'audit doit correspondre aux preuves que vous pouvez montrer

Un rapport d'audit utile énonce clairement sa portée. Il identifie le segment exporté, le format de la chaîne, la version du vérificateur, la source du point de contrôle, le résultat de la vérification et les limites restantes. Ce rapport peut sembler moins spectaculaire que « les journaux sont immuables », mais il résiste à l'examen technique.

Employez une formulation comme : « Le vérificateur a accepté les enregistrements 18 428 à 19 100 comme une chaîne de texte chiffré continue enracinée dans le point de contrôle 18 427, que le processus release-control a conservé séparément. » Cette phrase indique ce que les preuves permettent d'établir. Si l'équipe dispose également d'un horodatage externe signé, indiquez-le séparément. Si elle a comparé certaines actions aux événements du fournisseur, indiquez-le également séparément.

Évitez des phrases comme « rien n'a été supprimé » sauf si un point de contrôle final ancré ou une autre source indépendante étaye cette affirmation. Évitez « l'agent a fait cela » lorsque les preuves identifient seulement un processus local. Évitez « à cette heure exacte » lorsque la seule horloge appartenait à l'hôte examiné. Ce ne sont pas des distinctions de juristes. Elles déterminent si un autre ingénieur pourra reproduire votre conclusion lorsque l'incident sera confus et que chacun voudra une réponse simple.

Le premier test opérationnel est simple : exportez un échantillon hors production, conservez un point de contrôle en dehors de l'emplacement d'export, exécutez le vérificateur hors ligne, puis supprimez un enregistrement dans une copie et relancez-le. Si l'équipe ne peut pas expliquer les deux résultats et les limites de chacun, elle dispose de chiffrement et de hachages, mais pas encore d'une pratique d'audit capable de résister lorsque l'accès au texte en clair devient le point contesté.

FAQ

Que peut prouver un journal d'audit chiffré sans déchiffrement ?

Il peut prouver que le fichier de journal conserve la structure liée qu'il avait lorsque le vérificateur l'a accepté, et localiser le premier lien cassé ou manquant. Il ne peut pas révéler le texte des enregistrements chiffrés, déterminer si une action était appropriée ni prouver qu'un événement réel précis s'est produit sans qu'une autre preuve le relie au journal.

Peut-on vérifier une chaîne de hachage lorsque tous les enregistrements d'audit sont chiffrés ?

Oui, si le vérificateur calcule chaque lien à partir du texte chiffré et le compare au condensat enregistré suivant. Le chiffrement masque le contenu des enregistrements, tandis que la chaîne de hachage permet à l'auditeur de vérifier si des enregistrements protégés ont été modifiés, supprimés ou réordonnés après la création de la chaîne.

Une chaîne de hachage valide prouve-t-elle qu'aucun enregistrement d'audit n'a été supprimé ?

Non. Une chaîne valide indique que les enregistrements sont cohérents entre eux à partir du point d'ancrage choisi. Si un attaquant peut remplacer toute l'archive et son premier ancrage, la chaîne seule ne peut pas révéler ce remplacement. Conservez les valeurs d'ancrage approuvées en dehors du système qui stocke le journal.

Que doit faire un auditeur lorsque la vérification hors ligne échoue ?

Un vérificateur de chaîne signale normalement l'échec au premier enregistrement dont le condensat du prédécesseur enregistré ne correspond pas au condensat calculé. L'auditeur doit conserver le fichier original, noter la version du vérificateur et la commande utilisée, puis demander un nouvel export plutôt que de modifier la copie des preuves.

Un journal d'audit local chiffré peut-il prouver l'heure exacte d'une action ?

Pas de manière fiable. Un horodatage local peut aider à classer les enregistrements, mais la machine qui l'écrit peut avoir une horloge incorrecte ou modifiée. Un horodatage indépendant ou des points de contrôle externes sont nécessaires lorsque vous devez prouver une indication temporelle à quelqu'un qui ne fait pas confiance à l'auteur du journal.

La vérification hors ligne peut-elle détecter des enregistrements qui n'ont jamais été inclus dans un export ?

Non. Une vérification hors ligne examine les octets fournis et l'ancrage de confiance que l'auditeur détient déjà. Elle ne peut pas découvrir les enregistrements qu'un opérateur n'a jamais exportés. La collecte des preuves doit donc définir l'origine des exports et la façon dont le destinataire les conserve.

Une application compromise peut-elle créer une piste d'audit valide mais mensongère ?

Non. Les chaînes de hachage fournissent des preuves d'intégrité, pas d'indépendance de l'auteur. Un auteur malveillant ou compromis peut créer une chaîne parfaitement valide pour de fausses affirmations. C'est pourquoi les contrôles d'accès, une télémétrie séparée, des logiciels signés et des ancrages externes restent importants.

Quelles informations doivent accompagner un export de journal d'audit ?

Chaque export doit inclure un identifiant de version, un encodage clair des enregistrements, l'algorithme de hachage, la règle de calcul des liens et l'ancrage ou le point de contrôle de confiance auquel l'auditeur doit le comparer. Sans ces informations, une autre partie ne peut pas répéter la vérification ni interpréter un échec de manière cohérente.

Une sauvegarde de journaux chiffrés suffit-elle comme preuve d'audit ?

Non. Une sauvegarde préserve la disponibilité, tandis qu'une chaîne de hachage vérifie l'intégrité. Conservez des sauvegardes, car un journal valide mais inaccessible ne sert à rien, mais ne qualifiez pas une archive copiée de résistante aux falsifications tant que vous ne pouvez pas vérifier ses liens contre un ancrage conservé ailleurs.

Comment `sp audit verify` fonctionne-t-il sans accès aux secrets ?

Il vérifie le journal d'audit chiffré et chaîné par hachage sans avoir besoin de la clé du coffre-fort. L'auditeur dispose ainsi d'un contrôle d'intégrité hors ligne tout en gardant le contenu scellé. Il lui faut néanmoins une copie de confiance de l'ancrage attendu ou une procédure documentée pour l'obtenir.

Sallyport

Sallyport exécute les appels d'API et les commandes SSH à la place de votre agent IA. Les clés restent dans un coffre-fort local sur votre Mac ; vous approuvez chaque exécution et chaque action est consignée dans un journal scellé.

© 2026 Sallyport · Open source sous Apache-2.0 · Oleg Sotnikov