Set-OPS-Public/wiki/Filiation-signatures-et-témoins.md
Daniel Allaire 79461fdc38
Some checks failed
verifier / verifier (push) Has been cancelled
filiation : signer, inscrire la parente, et compter les temoins
L'exploitant : « j'ai une intuition : blockchain ». L'intuition visait le bon probleme —
une memoire partagee, verifiable, sans centre — mais la reponse etait deja dans git.

GIT EST DEJA UNE CHAINE DE HACHAGE : chaque commit porte l'empreinte de son parent, un
arbre de Merkle. Ce qui manquait n'etait pas la chaine mais l'AUTEUR : `user.name` est
declaratif, et toute la soiree du 20 des commits ont porte « Daniel Allaire » sans qu'aucune
preuve ne les lie a une cle (verifie : 8 commits, 0 signature, 0 etiquette).

POSE AUJOURD'HUI :
- signature par cle SSH (celle que la forge connait deja), etiquettes signees par defaut ;
  premiere etiquette v2026.08.21, verifiee par `git verify-tag` ;
- `.git-allowed-signers` VERSIONNE : qui clone verifie sans rien demander a la forge, et
  sans lui faire confiance. Retirer une ligne revoque pour la suite ; le passe signe reste
  verifiable ;
- `scripts/genome.py` + trois cibles make : les QUATRE depots sans lesquels un ecosysteme
  ne renait pas (moteur, instance, hebergeur, modeles), DERIVES et non declares ;
- `parente.yml` par ecosysteme : de quel moteur il descend, a quel commit, sous quelle
  etiquette. Patient 0 descend de 742bcbf, etiquette v2026.08.21 ;
- P40 : la parente est inscrite, chaque depot se retrouve, chaque commit inscrit EXISTE
  encore (une histoire reecrite se voit la), chacun porte un remote. Sautee proprement
  quand l'instance n'est pas un depot git — le modele jetable de la CI.

POURQUOI PAS DE BLOCKCHAIN. Elle resout : qui ecrit ensuite, quand personne ne fait
confiance a personne et qu'il y a de l'argent en jeu. Aucun des trois ici. Et la
multiplicite qu'elle achete cher, la lignee la produit comme effet secondaire : chaque
enfant porte une copie du code dont il descend, donc reecrire l'histoire suppose de
convaincre TOUS les descendants. Le jour ou l'Alliance certifiera, ce sera un JOURNAL DE
TRANSPARENCE (Certificate Transparency, Sigstore), pas une chaine.

ENSEIGNE, pas seulement pose : nouvelle unite « Filiation, signatures et temoins » (moule
en quatre temps), onze termes au glossaire, et P39 les exige desormais.

make verifier 40 OK, 0 echec, 0 saute ; make ci idem.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 12:56:29 -04:00

5.8 KiB

Filiation, signatures et témoins

Unité d'apprentissage. Moule : ① concept → ② Set-OPS → ③ transférable → ④ à toi de jouer.

Un écosystème Set-OPS peut en engendrer un autre. Dès qu'il y a une descendance, trois questions apparaissent, et aucune n'est technique au départ :

  • de qui cet écosystème descend-il ?
  • qui a le droit de modifier ce dont il descend ?
  • comment le savoir sans faire confiance à celui qui héberge le code ?

① Le concept

Git est déjà une chaîne de hachage

C'est la chose la plus utile à comprendre, et la moins connue. Chaque commit contient l'empreinte de son parent. Changer une ligne d'il y a trois mois change l'empreinte de ce commit — donc celle du suivant, et de tous les autres jusqu'à aujourd'hui.

A ←── B ←── C ←── D          modifier B casse C et D

C'est un arbre de Merkle : la même structure de données qu'une blockchain. L'intégrité est déjà là, gratuitement, depuis 2005.

Ce que la chaîne ne dit pas

Qui a écrit. user.name est purement déclaratif : n'importe qui peut signer « Daniel Allaire » et pousser. Rien ne lie ce nom à une personne.

C'est ce que corrigent les signatures. Avec une clé — la même clé SSH que pour se connecter — on scelle une étiquette ou un commit. Qui possède la clé publique peut vérifier ; qui ne possède pas la clé privée ne peut pas contrefaire.

Reste alors une question : quelles clés ont le droit de signer ? La réponse doit vivre avec le code, pas chez l'hébergeur — sinon on remplace la confiance en une personne par la confiance en une plateforme.

Les témoins, ou pourquoi la fractale est le registre

Une signature prouve l'auteur, pas que l'histoire n'a pas été remplacée. Celui qui tient la forge peut réécrire et re-signer.

Contre ça, un seul remède : la multiplicité. Si chaque écosystème enfant porte une copie du code dont il descend, réécrire l'histoire suppose de convaincre tous les descendants. C'est exactement ce qu'une blockchain achète au prix d'une machinerie considérable — et qu'une lignée produit comme effet secondaire de sa forme.

Pourquoi pas une blockchain, alors ? Elle résout un problème précis : qui écrit ensuite, quand personne ne fait confiance à personne et qu'il y a de l'argent en jeu. Ici : les membres sont connus, il n'y a pas d'argent dans la boucle, et une ancre de confiance existe déjà. Une chaîne publique ajouterait une dépendance à un réseau extérieur ; une chaîne privée, une base de données distribuée exigeant plusieurs opérateurs — l'inverse de « un humain doit pouvoir la faire tourner ».


② Dans Set-OPS

Les quatre dépôts du génome

Un écosystème ne se reproduit pas depuis ses machines. Il se reproduit depuis quatre dépôts — et make genome les nomme :

Rôle Ce qu'il porte
moteur Set-OPS : les rôles, les preuves, le Makefile
instance le plan du tenant, sa voûte chiffrée
hébergeur l'underlay.yml du site : sa fabric physique
modèles les offres dont les instances sont tirées

Perdre les VM coûte du temps. Perdre ces quatre-là coûte l'écosystème.

Le registre des signataires

.git-allowed-signers, versionné dans le dépôt :

allaire.dan@chezlepro.ca ssh-ed25519 AAAAC3NzaC1lZDI1...

Qui clone peut vérifier sans rien demander à la forge. Retirer une ligne révoque le signataire pour la suite ; ce qui est déjà signé reste vérifiable — on ne réécrit pas le passé, on cesse d'accepter l'avenir.

La parenté, inscrite

make genome-inscrire écrit parente.yml dans l'instance : de quel moteur elle descend, à quel commit, sous quelle étiquette signée.

moteur:
  remote: ssh://…/Set-OPS-Public.git
  commit: 742bcbf4b0e1322bfa5e0dee14c94bcad6898c53
  etiquette: v2026.08.21

Sans ce fichier, un écosystème fabriqué aujourd'hui ne sait plus, dans un an, d'où il vient. Cinq enfants sans registre font cinq moteurs différents que plus personne ne sait rapprocher. C'est la mutation sans mémoire, et c'est le seul vrai risque d'une lignée.

La preuve P40 vérifie que la parenté est inscrite, que chaque dépôt nommé se retrouve, que chaque commit inscrit existe encore — une histoire réécrite se voit là — et que chacun porte un remote : un dépôt qui n'existe qu'ici n'est pas une lignée, c'est un point unique de défaillance.


③ Transférable

Rien ici n'appartient à Set-OPS :

  • signature par clé SSH : git 2.34+, partout, sans infrastructure ;
  • allowed_signers : le mécanisme natif d'OpenSSH ;
  • journal de transparence (Certificate Transparency, Sigstore) : la réponse mûre quand plusieurs organisations doivent constater les mêmes faits sans se faire confiance ;
  • horodatage RFC 3161 : prouver qu'un document existait à une date.

Le jour où l'Alliance certifiera des écosystèmes, c'est un journal de transparence qu'il faudra — un registre append-only, auditable par un tiers — et non une blockchain.


④ À toi de jouer

  1. make genome — quatre dépôts ? Lequel n'a pas de remote ? Celui-là n'existe qu'ici.
  2. git verify-tag v2026.08.21 — que se passe-t-il si tu retires ta ligne de .git-allowed-signers ? (remets-la ensuite)
  3. make genome-inscrire, puis ouvre parente.yml. Dans un an, qu'est-ce que ce fichier te dira que ta mémoire ne dira plus ?
  4. Demande-toi où sont les témoins aujourd'hui. Combien de copies vivantes du moteur existent, sur combien de machines distinctes ? C'est la vraie mesure de la résistance de la lignée — pas la longueur des clés.

Voir aussi : Multi-instance & fédération, La preuve, Sauvegardes.