Disposition 06 · provenance cryptographique

Intégrité & provenance

À chaque publication du corpus, nous calculons une racine de Merkle sur toutes les décisions. La racine est committée dans le dépôt public et ancrée sur la blockchain Bitcoin via OpenTimestamps. Chaque décision est ainsi vérifiable cryptographiquement — même si opencaselaw.ch venait un jour à disparaître.

§01 Racine actuelle

§02 La feuille

Ce que promet la racine

Pour chaque décision, une valeur de feuille est formée selon le schéma suivant puis hachée en SHA-256 :

decision_id
cli:ch
ECLI
content_hash       (SHA-256 over regeste || full_text)
decision_date

Les feuilles sont lues dans un arbre de Merkle RFC-6962 par ordre alphabétique de decision_id (même convention que Certificate Transparency). La racine fait 32 octets (64 caractères hex) et s'engage sur chaque décision avec ce decision_id, ce content_hash, ces identifiants, à cette date.

Avec la racine et un chemin de preuve d'inclusion (log₂ N hachages frères, ~20 pour environ 991k décisions), on peut prouver cryptographiquement qu'une décision donnée faisait partie du corpus — sans faire confiance à opencaselaw.ch.

§03 Vérifier

Chemin de vérification

Vous disposez d'une décision avec decision_id, content_hash, cli:ch, ECLI, decision_date.
Vous formez la feuille : decision_id\ncli:ch\nECLI\ncontent_hash\ndecision_date
Vous hachez la feuille : SHA-256(0x00 || leaf_bytes)
Vous récupérez le chemin de preuve d'inclusion pour cette décision à une date donnée.
Vous reconstruisez la racine : chaque étape est un SHA-256(0x01 || left || right).
Vous comparez la racine reconstruite avec docs/integrity/<date>.root dans le dépôt Git.
En option : vous vérifiez la preuve OpenTimestamps .ots contre la blockchain Bitcoin — la racine est alors réputée avoir existé à un instant donné.

§04 Statut

Feuille de route

  • En production : racine de Merkle hebdomadaire + manifeste comme docs/integrity/<YYYY-MM-DD>.{root,json}.
  • En production : ancre OpenTimestamps via ots stamp ; consolidable après ~1 bloc Bitcoin (1–6 h) (ots upgrade).
  • En production : GET /api/integrity/<decision_id> livre le chemin de preuve d'inclusion RFC-6962 contre la racine la plus récente.
  • Optionnel : ancrage croisé vers d'autres services d'horodatage (Sigsum, RFC 3161 TSA).

Fait partie des Open Law Standards (disposition 06 · provenance).

§05 Code

Implémentation de référence