I2705 — Klíč uzlu lze rotovat, peeři následují nový klíč a starý klíč je odmítnut
Nabídnout rotaci klíče uzlu, kterou peeři, kteří důvěřovali starému klíči, mohou následovat k novému, po níž se hello starého klíče odmítne, a vyčistit události stažených klíčů z běžícího žurnálu bez čekání na restart.
PŘIPRAVENO vlna 1 · p0 · profil implementation · běží samostatně
Připraveno. Všechny závislosti jsou hotové, takže majordomus plan start I2705 bude přijato.
Cíl
Nabídnout rotaci klíče uzlu, kterou peeři, kteří důvěřovali starému klíči, mohou následovat k novému, po níž se hello starého klíče odmítne, a vyčistit události stažených klíčů z běžícího žurnálu bez čekání na restart.
Proč
Odděleno od I2134 dne 2026-10-14. I2134 zařídil, že klíč stažený z trust.allow ztratí své odkazy bez restartu (Cooperation::retrust), a jeho desired_state říkal „Tady neděláno“ o rotaci klíče uzlu a o vymazání událostí staženého klíče z běžícího žurnálu, zatímco jeho kritéria přijetí rotaci stále vyžadovala, takže nikdy nemohl být uzavřen. Kompromitovaný klíč lze nyní odříznout živě, ale nelze ho nahradit: neexistuje tok rotace (hrozba T11). Výchozí audit z 2026-10-09 na master 1fb8d6be44, mezera meshe 6 a řádek identity.
Aktuální stav
Identita uzlu se vytvoří jednou a načítá se ze souboru klíče (apps/majordomus-cli/src/mesh/identity.rs); nic ji nenahrazuje a žádná zpráva neříká peerovi, že klíč, kterému důvěřuje, nahrazuje jiný. Cooperation::retrust (apps/majordomus-cli/src/mesh/cooperation.rs), volaný z živého znovunačtení (apps/majordomus-cli/src/live.rs) přes capability::builtin::mesh::retrust, ukončuje spojení klíčů, kterým se už nedůvěřuje; události staženého klíče zůstávají v běžícím žurnálu, dokud znovunačtení po dalším restartu neuplatní platnou důvěru (I2124). Soubor klíče se zapisuje s režimem podle umask a poté se chmoduje na 0600 (apps/majordomus-cli/src/mesh/identity.rs); relace prismatic-majordomus-6e to opravuje přesně v této podobě na své větvi a není to práce tohoto úkolu.
Cílový stav
Příkaz rotuje klíč tohoto uzlu: novou identitu podepisuje stará, peeři, kteří starému klíči důvěřovali, přijmou nástupnictví a připojí se k novému klíči a další hello starého klíče se odmítne. Klíči staženému z platné důvěry se jeho události vyřadí z běžícího žurnálu při reloadu, který jej stáhl. docs/MESH.md popisuje rotaci a co peer při ní dělá.
Rozsah
- apps/majordomus-cli/src/mesh/identity.rs
- apps/majordomus-cli/src/mesh/trust.rs
- apps/majordomus-cli/src/mesh/cooperation.rs
- apps/majordomus-cli/src/mesh/journal.rs
- apps/majordomus-cli/src/capability/builtin/mesh.rs
- apps/majordomus-cli/tests/mesh_cooperation.rs
- docs/MESH.md
Mimo rozsah
- Ukončení odkazů staženého klíče bez restartu, což dodalo I2134
- Vytvoření souboru klíče jen pro vlastníka od prvního bajtu, což opravuje relace prismatic-majordomus-6e na vlastní větvi pod I2134
- Opětovné načtení žurnálu s uplatněním platné důvěry, což je věc I2124
Závislosti
Kritéria přijetí
- Po rotaci se peeři, kteří důvěřovali starému klíči, propojí s novým a další hello starého klíče je odmítnuto
- Klíči odebranému z trust.allow na běžícím runtime se jeho události zahodí z běžícího deníku při znovunačtení, které jej odebralo, bez restartu
Validace
- bin/majordomus plan validate
- cargo test --test mesh_cooperation
- cargo test --lib mesh::identity
Požadované důkazy
- key_rotation_test
Důkazy
Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.
Časová osa
- zahájeno
- —
- ověřeno
- —
- dokončeno
- —
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Kanonický záznam: .ai/repo/project/issues/I2705.yaml. Přečtěte jej zpět přes majordomus plan show I2705.