140 lines
5.8 KiB
Markdown
140 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).
|