Some checks failed
verifier / verifier (push) Has been cancelled
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>
139 lines
5.8 KiB
Markdown
139 lines
5.8 KiB
Markdown
# 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**.
|
|
|
|
```yaml
|
|
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](Multi-instance-et-fédération),
|
|
[La preuve](La-preuve), [Sauvegardes](Sauvegardes).
|