Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
halo-record — Pistes d'audit inviolables pour agents d'IA : Runtime Records chaînés par hachage, sans dépendance, vérifiables par tous. | Kitploit
Outils/GitHubGitHub/bkuan001/halo-record
Analyse ForensiqueSécurité de la Chaîne LogistiqueRéponse aux IncidentsSécurité de l'IA
GitHubbkuan001/halo-record

halo-record

Pistes d'audit inviolables pour agents d'IA : Runtime Records chaînés par hachage, sans dépendance, vérifiables par tous.

Voir le dépôt
63699il y a 18 joursVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Site web
Partager

halo-record

Pistes d'audit inviolables pour les agents IA — des Runtime Records chaînés par hachage, restitués sous forme de Runtime Report que vos clients peuvent vérifier eux-mêmes.

Chaque action capturée par votre instrumentation (appels d'outils, appels de modèles, accès aux données, approbations) devient un Runtime Record dans un journal en ajout seul, chaîné par hachage ; le Runtime Report est cette chaîne restituée sous forme de page HTML qui recalcule la chaîne de hachage dans le navigateur du lecteur et affiche ce qu'elle présente à partir des enregistrements qu'elle a vérifiés (pour une vérification qui ne dépend pas du code de la page elle-même, exécutez halo verify sur le JSONL). Toute partie détenant un point de contrôle de la chaîne peut vérifier que les enregistrements jusqu'à ce point de contrôle n'ont pas été altérés depuis qu'il a été pris, sans faire confiance à celui qui les a produits — ce point de contrôle est la pièce maîtresse : la chaîne seule est inviolable face à tous, sauf face à la partie qui exploite l'enregistreur (LIMITS.md §1). Quand l'équipe sécurité d'un client demande « qu'a fait votre agent avec nos données ? », vous lui remettez un lien au lieu d'un paragraphe. Les revues de sécurité posent déjà des questions sur l'IA à côté de la checklist SOC 2 — et de plus en plus, ces questions proviennent de l'ISO 42001, des articles de l'EU AI Act sur la tenue de registres, et des questionnaires propres aux clients. Aujourd'hui, une assurance écrite passe encore. Le pari derrière ce projet, c'est que cela ne durera pas longtemps.

Présenté dans Help Net Security (août 2026).

Le format d'enregistrement est ouvert et libre d'implémentation. Ce paquet est l'implémentation de référence : enregistreur, vérificateur, client témoin et serveur de rapports.

Vous utilisez halo-record, ou vous y pensez ? Dites-moi qui vous êtes et pour quoi faire → Qui utilise halo-record ?

Vérifiez par vous-même

On vous demande d'installer un enregistreur à l'intérieur de votre agent. Vous ne devriez pas accepter cela sur parole :

  • Zéro dépendance à l'exécution. Bibliothèque standard uniquement. pip install halo-record installe exactement un paquet.
  • Aucun appel réseau, sauf quatre optionnels — l'ancrage à un témoin (envoie l'identifiant du sujet, un nombre d'enregistrements et deux empreintes de chaîne — la tête et la racine de chaîne), la relecture des points de contrôle d'un témoin (envoie l'identifiant du sujet), l'horodatage RFC 3161 (envoie uniquement le hash d'état d'un point de contrôle à une Timestamp Authority), et halo serve --verify-email (envoie un code à usage unique et le nom du sujet du rapport, par SMTP via le serveur que vous configurez dans $HALO_SMTP_HOST, à l'adresse saisie par un lecteur du rapport). Tous sont désactivés sauf si vous les invoquez ; aucun autre contenu d'enregistrement ne quitte votre infrastructure.
  • Les arguments bruts des outils sont hachés, avec un résumé expurgé en parallèle. Les arguments sont stockés sous forme de hash canonique plus un résumé : le texte des arguments avec les motifs connus de secrets et de données personnelles masqués, limité à 200 caractères. Une entrée courte qui ne correspond à aucun motif apparaît intégralement dans le résumé ; le mode hash uniquement (summaries=False) ne conserve aucun résumé. L'expurgation est au mieux (regex sur les formats courants de secrets et de données personnelles plus un attrape-tout par entropie) : considérez-la comme une défense en profondeur, pas comme une garantie. Les champs de résultat que vous fournissez au-delà de summary sont analysés et masqués avec les mêmes motifs, mais ne sont pas tronqués à 200 caractères (LIMITS §13).
  • Assez petit pour être audité. ~8 700 lignes de Python, y compris le JavaScript et le CSS intégrés à la page de rapport (lignes de code, sans compter les lignes vides, les commentaires et les docstrings). Lisez tout en une journée.
  • Apache-2.0.
  • La documentation est de premier ordre. LIMITS.md (ce que la chaîne ne peut pas prouver), PRIVACY.md (ce que contiennent les enregistrements et ce qui quitte votre machine), RETENTION.md (fonctionner sous une politique de rétention), et REVIEWERS.md — la vérification indépendante en quatre commandes plus un format de citation pour les conclusions de revue.

Ce que chaque couche prouve — la distinction porteuse dans ce projet (LIMITS.md §1) : une chaîne que vous détenez vous-même prouve que les enregistrements n'ont pas été modifiés, par rapport à une tête que quelqu'un détient déjà ; seuls des points de contrôle détenus en dehors de l'opérateur prouvent qu'aucun n'a été supprimé ; et aucun hash ne prouve que chaque action a été capturée.

AffirmationChaîne auto-détenue+ Points de contrôle externes+ Capture de confiance
Détecter les modifications d'un artefact établi✔✔✔
Détecter la réécriture d'un historique validé—✔✔
Détecter les points de contrôle manquants/tardifs—✔ (cadence convenue)✔
Prouver que chaque action a été enregistrée——dépend de la frontière de capture

Voyez-en un avant d'installer : un exemple de Runtime Report — données fictives, chaîne réelle, et son script recalcule dans votre navigateur la chaîne de hachage des enregistrements intégrés lorsque vous l'ouvrez.

Démo en 60 secondes

Aucun agent requis. Avec uv, rien à installer :

uvx --from halo-record halo demo --serve

ou de la manière classique :

pip install halo-record
halo demo --serve

Soit on échafaude un fournisseur fictif d'agents de support avec deux clients, on assiste aux chaînes (avec un fichier témoin local tenant lieu de témoin extérieur à l'opérateur — voir LIMITS.md §1), on sert leurs Runtime Reports à accès restreint, et on ouvre la console de l'opérateur dans votre navigateur. Essayez ensuite le test d'altération : supprimez une ligne de l'un des fichiers .jsonl et rechargez. Le rapport le détecte.

Enregistrez votre propre agent

Une ligne à la frontière :

from halo_record import trace

agent = trace(run_my_agent, profile="my-agent", log="audit.jsonl")   # wraps your entrypoint; records the run boundary to ./audit.jsonl — add record_call() or a framework adapter at each tool boundary to capture individual calls

Un shim de commodité from halo import ... est également fourni — mais le nom halo sur PyPI appartient à un paquet de terminal-spinner sans rapport, et si ce paquet est installé, c'est lui qui remporte l'import. halo_record est sans ambiguïté, donc les exemples l'utilisent.

Sans log=, les enregistrements vont dans ~/.halo/my-agent.jsonl (une chaîne par agent). Le wrapper scelle la frontière d'exécution ; les preuves résident dans les enregistrements par appel. Capturez-les avec un adaptateur de framework (matrice ci-dessous) — ou explicitement, ce qui montre aussi comment les liens de délégation fonctionnent :

from halo_record import Recorder, record_call

rec = Recorder("audit.jsonl")

with record_call(rec, "crm.lookup", {"account": "acct-9"}) as call:            # one sealed record per tool call
    call.result = crm.lookup("acct-9")
Télécharger l’outil