# 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).