Qu’est-ce que le ZIP de preuve ?
Le ZIP de preuve est un paquet portable et autonome que vous pouvez exporter depuis n’importe quelle preuve. Identifiant de format :
getproofanchor-evidence-4. Un paquet type contient environ 30 fichiers organisés en 6 répertoires ; la taille dépend de la page (généralement 5–15 Mo sans vidéo ; jusqu’à 100–150 Mo avec vidéo et archives HAR complètes activées). Il est conçu pour quitter votre compte — pour l’archivage, la jonction à un dossier, la soumission à un régulateur, ou l’envoi à un réviseur tiers.
La fonctionnalité décisive n’est pas « le simple export » — c’est que le paquet peut ensuite être vérifié entièrement hors ligne , avec seulement des outils open source standard. Aucune connexion internet, aucun service GetProofAnchor, aucun compte.
Chaque dépendance externe dont la vérification pourrait avoir besoin est figée dans le ZIP lui-même : le manifeste cryptographique, les entrées de chaîne d’empreintes de la preuve, le reçu Bitcoin OpenTimestamps, la chaîne complète de certificats de la TSA qualifiée, et même un instantané de l’EU Trusted List (LOTL) qui prouve que la TSA était officiellement reconnue au moment du tampon. Si GetProofAnchor disparaissait demain, votre ZIP de preuve se vérifierait toujours exactement de la même façon — par n’importe qui, n’importe où, avec un ordinateur portable et Python.
Ce qu’il contient réellement (chaque fichier, regroupé par finalité)
Ouvrez le ZIP et vous verrez quelque chose comme ceci — environ 30 fichiers dans six répertoires. Ils sont regroupés ici selon leur rôle : contenu capturé, contexte de capture, preuve d’identité réseau, les couches d’intégrité cryptographique, et la documentation lisible.
Ce qu’était réellement la page au moment de la capture.
screenshot.png— capture d’écran pleine page rendue au moment de la capture, réalisée par Playwright (Chromium) avec une largeur de zone d’affichage de 1280 px et un défilement pleine hauteurpage.html— le DOM/HTML capturé au moment de la capture — utile pour inspecter la structure, les liens et les scripts réellement fourniscontent.txt— contenu texte brut extrait — ce qu’un lecteur aurait réellement vu sur la page, débarrassé du balisagecapture.webm— enregistrement d’écran de toute la session de capture au format WebM/VP9. Capture tout contenu dynamique, animation ou interaction (comme le traitement des fenêtres de consentement) qu’une capture d’écran statique ne peut pas montrer. Preuve utile pour le contenu temporel ou interactif.
Comment la capture s’est déroulée — la piste d’audit.
proof.json— l’enregistrement principal de la preuve : Proof ID, URL source, URL finale après redirections, horodatage de capture, toutes les empreintes SHA-256 (contenu, capture d’écran, HTML brut), mode de capture (serveur/navigateur), statut eIDAS, informations d’ancragecapture/capture_meta.json— métadonnées forensiques détaillées sur la capture elle-même : moteur de capture (Playwright + version du navigateur), user agent, zone d’affichage, dimensions complètes de la page après défilement à chargement différé, fenêtres de consentement traitées automatiquement et méthode utilisée, appels IA utilisés, tours de défilement, statut de chargement des images, score de qualité visuelle, verdict de réussitecapture/capture_meta.sha256— SHA-256 de capture_meta.json stocké séparément — référencé par le contenu eIDAS afin que les métadonnées de capture soient aussi couvertes par l’horodatage qualifié
Qui a réellement servi la page, ce qui a été chargé depuis où, et quelles IP ont répondu pour le domaine (selon ISO/IEC 27037 § 6.4–6.5).
network/capture.har— Archive HTTP (spécification HAR 1.2) de chaque requête réseau effectuée par le navigateur pendant la capture : URL, méthode, en-têtes de requête/réponse, code de statut, taille de réponse, type MIME, ventilation complète des temporisations (DNS, connexion, TLS, envoi, attente, réception). Permet à un réviseur de voir exactement quels actifs, scripts, traqueurs, appels tiers et redirections étaient impliqués.network/network_evidence.json— fichier d’index lisible (identifiant de format getproofanchor-network-evidence-1) : URL cible, nom d’hôte, heure de capture, et indicateurs des fichiers de preuve réseau présents. Un fichier d’orientation rapide pour les réviseurs forensiques.network/tls.json— métadonnées de handshake lisibles au format JSON : version TLS (p. ex. TLSv1.3), suite de chiffrement, IP du serveur ayant répondu, SNI, période de validité du certificat, tous les Subject Alternative Names, empreintes complètes de la chaîne (SHA-256 + SHA-1), indicateur de correspondance du nom d’hôte, statut OCSP — tout ce dont un réviseur a besoin pour inspecter la connexion sans analyser le X.509.tls/leaf_cert.pem— le certificat feuille X.509 du serveur au format PEM, tel que présenté pendant le handshake TLS. Le SHA-256 de ce fichier est lié au contenu eIDAS — de sorte que l’identité cryptographique du serveur est horodatée avec le contenu de la page.tls/chain.pem— la chaîne complète de certificats intermédiaires + racine au format PEM. Permet à un réviseur de valider le certificat feuille hors ligne jusqu’à une CA publique connue. Le SHA-256 de ce fichier est aussi lié au contenu eIDAS.network/dns.json— résolution DNS multi-résolveurs au moment de la capture, interrogée indépendamment auprès de Cloudflare (1.1.1.1), Google (8.8.8.8) et Quad9 (9.9.9.9) : enregistrements A, AAAA, CNAME avec TTL. Si plusieurs résolveurs concordent, c’est une preuve solide que le domaine résolvait réellement vers ces IP à ce moment-là.network/rdap.json— résultat de requête RDAP (remplacement moderne de WHOIS) : titulaire du domaine, bureau d’enregistrement, date d’enregistrement, date d’expiration, date de dernière modification, serveurs de noms, indicateurs de statut. Établit qui contrôle le domaine au moment de la capture.
Ensemble, ces fichiers répondent aux questions qu’un contre-interrogatoire hostile posera : qui contrôlait ce domaine ? Quelle IP a réellement répondu pour lui ? Quel certificat le serveur a-t-il présenté, et son identité était-elle liée à l’horodatage ?
Chaque couche est indépendante. Compromettre l’une ne brise pas les autres.
manifest.json— la référence d’intégrité : empreinte SHA-256 de chaque autre fichier du paquet + tête de chaîne + métadonnées d’ancrage et eIDAS. La vérification commence toujours ici. Un seul octet changé dans un fichier fait échouer le contrôle.
chain/proof_chain.jsonl— les événements de cette preuve dans la chaîne d’empreintes SHA-256 globale (un objet JSON par ligne : seq, event_type, prev_hash, data_hash, entry_hash, created_at). Insérer ou modifier une entrée passée brise la chaîne.chain/chain_head.json— instantané de la tête de chaîne à laquelle cette preuve était ancrée — le numéro de seq et l’empreinte d’entrée. Utilisé pour vérifier le dernier maillon de la chaîne.
anchor/anchor_payload.json— la structure de données minimale qui a été inscrite dans Bitcoin : empreinte de la tête de chaîne + heure UTC observée + version de format. Hachée canoniquement avant le tampon.anchor/anchor_receipt.ots— reçu binaire OpenTimestamps contenant le chemin de Merkle vers une transaction Bitcoin. Une fois confirmé, l’horodatage est préservé par l’ensemble du réseau Bitcoin — pas par GetProofAnchor.
Dix fichiers forment ensemble un kit de vérification eIDAS complet et autonome.
timestamp/eidas.tsr— TimeStampResp RFC 3161 binaire du prestataire de services de confiance qualifié — signé CMS, dans le même format PKI standard utilisé par les tribunaux et régulateurs de l’UEtimestamp/eidas_payload.json— les données exactes qui ont été horodatées, en JSON canonique (clés triées, sans espaces). Lie 8 empreintes SHA-256 dans l’horodatage qualifié : content_sha256, raw_html_sha256, screenshot_sha256, capture_meta_sha256, video_sha256, har_sha256, tls_leaf_pem_sha256, tls_chain_pem_sha256 — plus source_url, final_url, captured_at, proof_id. Identifiant de format : getproofanchor-eidas-stamp-5. Chaque artefact forensique du paquet est lié dans un seul horodatage qualifié.timestamp/eidas_payload.sha256— SHA-256 du contenu ci-dessus. Cette empreinte exacte est l’empreinte intégrée dans l’horodatage RFC 3161, liant l’horodatage cryptographiquement aux données capturées.timestamp/eidas_meta.json— statut eIDAS de haut niveau : nom du prestataire (actuellement SK ID Solutions, Estonie), URL de la TSA, heure exacte de l’horodatage, statuttimestamp/<proof_id>.tsa_signer_cert.pem— certificat X.509 de l’unité d’horodatage TSA qui a effectivement signé l’horodatage — le certificat feuille au format PEMtimestamp/<proof_id>.tsa_certs.pem— la chaîne complète de certificats PEM : signataire + CA intermédiaire + CA racine. Permet de valider la chaîne hors ligne sans rien récupérer.timestamp/<proof_id>.tsa_certs.json— la même chaîne au format JSON (sujets, émetteurs, numéros de série, périodes de validité, empreintes SHA-256) — facile à lire sans analyser le PEMtimestamp/<proof_id>.qualified_context.json— contexte qui relie la TSA à l’EU Trusted List : l’URL source de la LOTL (eu-lotl.xml depuis ec.europa.eu), l’heure exacte de téléchargement, le SHA-256, et quelles TSL nationales sont incluses dans ce paquet. Identifiant de format : getproofanchor-eidas-qualified-context-2.timestamp/tsl/<COUNTRY>.xml— Trusted List d’un État membre de l’UE au format XML (p. ex. EE.xml pour une TSA estonienne, CZ.xml pour la tchèque, etc.). C’est la TSL nationale de norme ETSI qui prouve que la TSA était officiellement reconnue comme prestataire de services de confiance qualifié au titre d’eIDAS au moment du tampon. Le qualified_context.json ci-dessus explique quelles TSL nationales ont été incluses et pourquoi.timestamp/<proof_id>.eidas_verification_report.json— rapport de vérification eIDAS interne (identifiant de format getproofanchor-eidas-tsr-summary-1) produit au moment du tampon : statut (granted), OID de politique 0.4.0.2023.1.1, algorithme de hachage, empreinte en hexadécimal, indicateur signature_verified, résumé complet de la chaîne de certificats TSA.
Pour les humains, pas pour les machines.
README.md— guide de vérification bilingue (anglais + tchèque) pour les experts forensiques. Parcourt les 4 étapes de vérification avec des commandes à copier-coller utilisant uniquement python3, openssl et le client ots.report.pdf— rapport de preuve lisible (~1 Mo). Résumé mis en forme avec Proof ID, URL capturées, horodatages, toutes les empreintes SHA-256, informations d’ancrage blockchain, statut eIDAS — adapté aux dossiers et aux impressions.
Quatre couches d’intégrité indépendantes
La confiance n’est pas un mécanisme unique. Ce sont quatre couches indépendantes, chacune soutenue par ses propres fichiers dans le ZIP. Compromettre une seule couche ne brise pas les autres — et un attaquant devrait vaincre les quatre simultanément, y compris casser Bitcoin et forger une signature de TSA qualifiée par l’UE, pour falsifier une seule preuve.
Empreinte de chaque fichier du paquet. Si un seul octet d’un fichier change — même en reformatant un espace JSON — la vérification échoue.
Fichiers: manifest.json
Les événements de cette preuve vivent dans une chaîne SHA-256 globale. Chaque entrée contient l’empreinte de la précédente. Insérer ou modifier une entrée passée brise mathématiquement la chaîne.
Fichiers: chain/*
La tête de chaîne est ancrée dans la blockchain Bitcoin via OpenTimestamps. Une fois confirmé, l’horodatage est préservé par l’ensemble du réseau Bitcoin. L’antidatage devient impraticable.
Fichiers: anchor/*
Horodatage RFC 3161 d’une TSA qualifiée par l’UE, avec la chaîne complète de certificats et un instantané figé de l’EU Trusted List inclus. Juridiquement reconnu dans l’UE/EEE au titre du règlement (UE) 910/2014.
Fichiers: timestamp/*
Les 4 vérifications RÉUSSISSENT → le paquet est cryptographiquement intact, pas seulement digne de confiance. Chaque couche peut aussi être vérifiée indépendamment pour prouver une propriété spécifique : intégrité des fichiers, cohérence de la chaîne, moment d’existence (deux fois — par Bitcoin et par une TSA accréditée par l’UE).
Comment vérifier (la procédure en 4 étapes)
Le
README.md
bilingue à l’intérieur du ZIP vous guide dans la vérification avec des commandes à copier-coller. Le processus correspond un à un aux quatre couches d’intégrité ci-dessus :
- Étape 1 — Intégrité des fichiers — Un script python3 lit manifest.json, recalcule le SHA-256 de chaque fichier, et compare. RÉUSSI = rien dans le paquet n’a été ajouté, supprimé ou modifié.
- Étape 2 — Horodatage qualifié eIDAS — openssl ts -verify par rapport à eidas.tsr + eidas_payload.json + le tsa_certs.pem inclus. (Une alternative en pur Python est incluse pour les environnements sans openssl.) RÉUSSI = les données capturées existaient à l’instant horodaté, et la signature provient de la TSA qualifiée inscrite dans l’instantané de l’EU Trusted List.
- Étape 3 — Ancrage Bitcoin — ots verify anchor/anchor_receipt.ots -d <payload_sha> — ou téléversez le reçu sur opentimestamps.org, ou contrôlez la transaction Bitcoin directement sur un explorateur de blocs public. RÉUSSI = la tête de chaîne a été inscrite dans un bloc Bitcoin spécifique.
- Étape 4 — Chaîne d’empreintes — Un script python3 parcourt chain/proof_chain.jsonl, recalcule l’empreinte de chaque entrée à partir de (prev_hash | event_type | proof_id | data_hash), et confirme le lien avec chain_head.json. RÉUSSI = le journal d’événements interne est intact.
Les 4 RÉUSSISSENT → le paquet est cryptographiquement intact. L’étape Bitcoin nécessite aussi un accès réseau (ou, à la place, vérifiez simplement l’ID de transaction sur un explorateur public) ; les étapes 1, 2 et 4 fonctionnent entièrement hors ligne.
python3— tout fonctionne sur Linux, macOS et Windows. Utilisé pour les étapes 1, 2 (voie alternative) et 4.openssl— standard sur Linux/macOS ; sur Windows, utilisez Git Bash ou WSL. Utilisé pour la vérification eIDAS canonique (étape 2).ots(depuis pip install opentimestamps-client) — pour la vérification Bitcoin OpenTimestamps (étape 3). Optionnel — vous pouvez aussi vérifier en téléversant le reçu sur opentimestamps.org ou en contrôlant la transaction Bitcoin sur un explorateur de blocs.
Bonnes pratiques de partage
- Partagez le ZIP exactement tel qu’exporté. Ne le re-zippez pas, ne renommez pas les fichiers, et ne « faites pas le ménage ». La vérification dépend de chaque chemin de fichier et de chaque octet identique à ce qui a été généré.
- Stockez sur un support en lecture seule ou en écriture unique lorsque c’est possible. Aide à démontrer la chaîne de preuve si la preuve est contestée par la suite.
- Gardez le Proof ID et l’horodatage de capture visibles dans vos notes ou votre page de garde. Ils se trouvent aussi dans proof.json et report.pdf, mais une référence rapide facilite la navigation dans les dossiers.
- Orientez les réviseurs vers README.md à l’intérieur du ZIP. Il contient des commandes de vérification à copier-coller en anglais et en tchèque, et explique exactement ce que signifie chaque RÉUSSI.
- N’extrayez pas de fichiers isolés pour les transférer. La vérification nécessite le paquet complet — manifeste, chaîne, ancrage, kit eIDAS. Envoyez toujours le ZIP complet.
Exportez un ZIP de preuve depuis une preuve, puis vérifiez-le. Vous verrez exactement à quel point les contrôles d’intégrité sont stricts — et comment le paquet se vérifie même entièrement hors ligne.
Pas un conseil juridique. La recevabilité dépend de la juridiction et des circonstances.
Continuez avec : Widget de navigateur — installer, connecter la clé API, capturer derrière une connexion (Enterprise et Business).