Skip to content

Sovereign PKI

Mission: Eliminate Certificate Authorities from all internal authentication. Trust is computed, not delegated.

Libertaria replaces the X.509 trust chain with three mechanisms: DID-authenticated Noise sessions, QVL scalar trust computation, and a compatibility shim for legacy TLS endpoints. No CA. No chain. No rent.

┌─────────────────────────────────────────────────────┐
│ LEGACY WORLD (Browsers, API Clients) │
│ TLS + X.509 at boundary ONLY │
├────────────┬────────────────────────────────────────┤
│ Option A │ Option B │
│ ACME cert │ Self-issued X.509 │
│ (browser) │ (API clients) │
├────────────┴────────────────────────────────────────┤
│ ═══════ BOUNDARY ═══════════════════════════════ │
│ TLS terminates here. X.509 stops here. │
├─────────────────────────────────────────────────────┤
│ SOVEREIGN MESH │
│ │
│ ┌──────────────────┐ ┌─────────────────────────┐ │
│ │ Noise XX │ │ QVL Trust Graph │ │
│ │ DID-Authenticated│ │ Scalar trust (0.0-1.0) │ │
│ │ X25519 static = │ │ A* pathfinding │ │
│ │ SoulKey X25519 │ │ Temporal decay │ │
│ └──────────────────┘ │ Bellman-Ford betrayal │ │
│ └─────────────────────────┘ │
│ │
│ ┌──────────────────┐ ┌─────────────────────────┐ │
│ │ Revocation │ │ Larval Identity │ │
│ │ Gossip (fast) │ │ Bootstrap vouches │ │
│ │ QVL decay (sure) │ │ 3 vouches → graduated │ │
│ └──────────────────┘ └─────────────────────────┘ │
└─────────────────────────────────────────────────────┘

Every inter-node connection is a Noise XX handshake. Both sides prove DID ownership via SKH-derived X25519 keys. The critical binding:

The Noise static key MUST be the X25519 key from the presenting DID’s current SoulKey.

Post-handshake, the verifier resolves the peer’s DID Document and checks the X25519 public key matches the Noise static key. Mismatch → connection dies.

Rejection criteria:

ErrorCondition
PeerKeyNotInDocumentRemote static key not in peer’s DID X25519 methods
PeerDeactivatedPeer’s DID has been deactivated (INV-6)
NoKeyAgreementMethodsPeer has no X25519 methods registered

Scope: ALL inter-node transport. Capsule-to-capsule, Chapter federation, relay circuits, gossip peering, service discovery. Zero exceptions.

CAs answer binary: trusted or not. QVL answers scalar: how much do I trust this, from my position in the graph?

Authorization flow:

  1. Noise handshake completes, DID verified
  2. Lookup peer in local CompactTrustGraph
  3. Direct edge? → Authorize at edge level
  4. No direct edge? → A* pathfinding (max 6 hops)
  5. No path? → Larval Identity bootstrap
  6. Score subject to temporal decay

Trust thresholds are per-node. Each operator sets their own policy – gossip relay at 0.2, messaging at 0.4, value transfer at 0.8. No global authority dictates trust levels.

For endpoints that must speak TLS to the legacy world:

ModeUse CaseHow
Option ABrowser-facing HTTPSACME/Let’s Encrypt cert, domain bound to DID via serviceEndpoint
Option BAPI clients resolving did:sovereign-skh1:Self-issued X.509, SubjectAltName: URI:did:sovereign-skh1:{did}

Both are boundary-only. Inside the mesh, X.509 never appears.

Two independent mechanisms – belt and suspenders:

A pki_revoke (0x0733) QuasarVector distributed via Plumtree. Gossip topic: $DID/{did}/pki/revoke (retained).

Requirements: 2+ witness counter-signatures for full revocation. Self-revocation (voluntary) is immediate – no witnesses needed.

When a pki_revoke vector is processed:

  1. Inject RiskEdge with risk = -0.5
  2. Bellman-Ford detects negative cycle → SlashSignal
  3. Trust score decays toward zero

Even without gossip delivery, graph updates degrade the score through independent paths.

MechanismLatencyCoverage
OCSP (CA)1-24 hoursDepends on responder
CRL (CA)1-7 daysDepends on distribution
Revocation Gossip~3 seconds90%+ mesh
QVL Decay30-120 seconds100% (convergence)

Cold-start solution for new nodes with zero trust history.

PropertyValue
Vouch typetrust_grant (0x0730) with first_contact = true
Trust depthDirect only (no transitivity)
VisibilityBilateral (only voucher and vouchee see it)
TTL48 hours
Graduation3 independent vouches from distinct DIDs
Rate limit10 msgs/min while larval
Anti-SybilArgon2 entropy stamp (difficulty ≥ 16)
pki_revoke = 0x0733 // Key or DID revocation event
pki_attest = 0x0734 // "I verified this DID's key binding"
FieldSizeDescription
target_did32BDID being revoked
target_key_id32BSpecific key (zeros = full DID)
reason1BKeyCompromise / DIDCompromise / Voluntary / SlashEvidence
evidence_hash32BBLAKE3 of evidence payload
issuer_did32BWho is revoking
issuer_signature64BEd25519
counter_signaturesN×64BWitness co-signs
timestamp12BSovereignTimestamp

Total: ~205B payload + ~25B CBOR framing + 64B per counter-signature.

ComponentRAMBinary DeltaCloudKenya?
DID-Auth (Move 1)<1 MB+0 KBNoneYes
QVL Trust (Move 2)<2 MB+0 KBNoneYes
Revocation Gossip<500 KB+3 KBNoneYes
X.509 Bridge<200 KB+5 KBNoneYes
ACME Client<1 MB+10 KBACMEOpt-in
  • RFC-0016 – Sovereign PKI: Certificate Authority Elimination Protocol
  • SPEC-016 – Sovereign PKI Design Specification
  • RFC-0015 – Transport Skins (Noise integration)
  • RFC-0120 – Quasar Vector Lattice
  • RFC-0140 – Libertaria SSI Stack