make sshsigchain the only portable sigchain format
This commit is contained in:
parent
9e5871d02a
commit
73500e1944
15 changed files with 812 additions and 1603 deletions
42
docs/adr/0018-sshsigchain.md
Normal file
42
docs/adr/0018-sshsigchain.md
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
# ADR 0018: Linked SSHSIGCHAIN v1
|
||||
|
||||
## Status
|
||||
|
||||
Accepted for the generic core and geth keychain profile. The pre-standard
|
||||
test-only static workflow is removed; it is not an alternate format or a
|
||||
compatibility path.
|
||||
|
||||
## Context
|
||||
|
||||
The prior static JSONL keychain flow replayed records after sorting mutable
|
||||
timestamps and used a downloaded allowed-signers projection to verify its own
|
||||
checkpoint. That permits self-bootstrapping trust and makes revocation,
|
||||
rollback, and fork semantics inadequate for a trust foundation.
|
||||
|
||||
## Decision
|
||||
|
||||
Geth adopts SSHSIGCHAIN version 1 as its one portable signed-chain design:
|
||||
|
||||
- root trust is an explicit `(chain ID, profile, namespace, root key)` tuple;
|
||||
- records are linearly ordered by sequence and linked by a digest over their
|
||||
signed content and SSHSIG signature;
|
||||
- the initial root is only a genesis requirement, not a permanent bypass;
|
||||
- profile authorization runs against the causally preceding state;
|
||||
- key lifecycle is represented by causal add/revoke records, not timestamp
|
||||
validity fields; and
|
||||
- payloads use deterministic binary codecs with a strict round-trip check.
|
||||
|
||||
The generic core is transport-independent. Geth continues using Iroh for all
|
||||
node-to-node communication; SSH remains an identity/signature integration and
|
||||
not a geth transport.
|
||||
|
||||
## Consequences
|
||||
|
||||
The core can be published and implemented by applications without importing
|
||||
geth's resource model. Geth's keychain profile is intentionally narrow and
|
||||
tested against self-bootstrap, fork, and backdated-revocation attacks.
|
||||
|
||||
The old static bundle code and commands are deleted rather than supported beside
|
||||
SSHSIGCHAIN. There is no migration format because the repository has not been
|
||||
deployed. Head persistence and later witness/transparency support remain
|
||||
follow-up work; neither is implied by a single signed checkpoint.
|
||||
Loading…
Reference in a new issue