Repository navigation
feat(actions): audit de la chaîne du registre des opérateurs (operators audit) - #25
Merged
Merged
Conversation
This was referenced Sep 19, 2026
PhilippeVienne
force-pushed
the
feat/recover-admin
branch
from
September 21, 2026 09:40
d952354 to
a6b0964
Compare
…rs audit) ca-server operators audit [--journal <fichier>] refait, pour chaque clé active, le chemin par lequel elle est entrée dans le registre (docs/WEBUI.md §21), sans croire la base sur parole : - une clé confirmée doit avoir une action confirm_key exécutée : corps inchangé (empreinte body_hash), engageant bien cette clé, signée par assez d'opérateurs distincts. Chaque signature est re-vérifiée (ES256, openssl) sur authenticatorData || SHA-256(clientDataJSON), avec le challenge émis pour elle, contre la clé du signataire, qui a lui-même une chaîne valide jusqu'à une ancre, sans cycle ni auto-confirmation ; - une clé d'ancre (amorçage, récupération) ne se prouve pas dans la base, la contrainte du registre l'admettant sans confirmation : elle doit figurer au journal chaîné ; - le corps de chaque action doit être celui que le journal a consigné avant la signature. La signature porte sur le challenge, pas sur le corps (décision O7) : un corps réécrit avec son empreinte, cohérents entre eux, passerait la cryptographie seule ; - une confirmation absente du journal est signalée même si sa signature est bonne : le journal fait foi pour le registre. Codes de sortie : 0 registre sain, 1 constats (une ligne KO par clé), 2 journal illisible ou rompu (le registre n'est pas jugé contre un journal dont l'intégrité n'est pas garantie). Seul ES256 est vérifiable : une autre clé est signalée, pas tenue pour bonne. oe-audit : read() relit le journal, en contrôle la chaîne et rend les enregistrements.
PhilippeVienne
force-pushed
the
feat/operators-audit
branch
from
September 21, 2026 10:03
61381c0 to
6cec0a5
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Contenu
Deuxième tranche du §21 de docs/WEBUI.md :
ca-server operators audit [--journal <fichier>]. Pour chaque clé active, elle refait le chemin par lequel la clé est entrée dans le registre, sans croire la base sur parole.confirm_keyexécutée, au corps inchangé (body_hash), engageant bien cette clé, signée par assez d'opérateurs distincts. Chaque signature est re-vérifiée (ES256, viaopenssl, déjà lié parwebauthn-rs) surauthenticatorData ‖ SHA-256(clientDataJSON), avec le challenge émis pour elle, contre la clé du signataire, qui a lui-même une chaîne valide jusqu'à une ancre (sans cycle, sans auto-confirmation). Qui insère une ligne en SQL ne peut pas fabriquer la signature d'une clé existante.operators.action_challenge_issued).Codes de sortie :
0registre sain ;1constats (une ligneKOpar clé) ;2journal illisible ou rompu (le registre n'est pas jugé contre un journal dont l'intégrité n'est pas garantie). Pointer--journalvers la copie répliquée hors de l'hôte est le meilleur usage.oe-auditgagneread(): relit le journal, en contrôle la chaîne et rend les enregistrements (réutilisable parreconcile).Limites assumées
operators reconcile(TODO), avec/healthzen 503 et le refus d'exécuter une action signée par une clé sans chaîne valide. L'ancre ne peut s'établir qu'avec le journal, d'où ce découpage plutôt qu'un blocage à moitié livré.Vérifications
cargo fmt --check,cargo clippy --workspace --all-targets -- -D warnings,cargo test --workspace(avec PostgreSQL, 69 suites),cargo audit --ignore RUSTSEC-2023-0071: verts.oe_audit::read.