v0.8.33 · Self-certifying nodes. Local proof. No ambient trust.

korium.io

A Rust cryptographic network fabric where discovery, naming, routing, streams, pub-sub, tunneling, and authorization converge on the same local verifier—and every owned task has a clean end.

identity-hex 64 chars BLAKE3-derived, not raw pubkey hex
DID length ~80 chars stable under future signature swaps
grant expiry cap <= 300s enforced by the verifier
covered path 9 hops forwarded QUIC and tunnel tests
korium.io, in motion

One node. Four trust boundaries.

Follow a request through the live surface of Korium 0.8.33. The network can help a packet move; only the destination can decide what that movement means.

01 · AuthN

Authenticate the live key, locally.

The node presents a did:korium identity, its raw Ed25519 key, certificate proof, and PoW. The destination binds the DID digest to the certificate SPKI before trusting the mTLS session—without a CA, resolver, or online registry.

did:koriummTLSkey-bound PoW
02 · AuthZ

Authorize the exact stream and action.

Authentication only proves key possession. A DID-only node exposes only the handlers its application chooses. A verified service additionally checks source policy and service authority; protected actions still require a short-lived Biscuit matching issuer, audience, service, resource, and action.

identity-derived postureBiscuit v6≤ 300s grants
03 · URN

Bind rotating nodes to stable services.

A urn:korium name identifies the service across instance and key rotation. Namespace-root authority bundles and signed lease chains prove which ephemeral node may speak for that name; the URN itself never implies access.

urn:koriumlease chaininstance binding
04 · PQC

Harden confidentiality without overstating signatures.

QUIC uses X25519 + ML-KEM-768 hybrid key exchange. Identity signatures remain classical Ed25519, stated explicitly, while BLAKE3-384 identifiers keep routing, grants, and logs compact if a future signature primitive becomes much larger.

ML-KEM-768X25519 hybridBLAKE3-384 IDs
Overview

Korium is an autonomous network fabric.

Korium is valuable because it refuses to let connectivity become authority. Identity, discovery, routing, streams, pub-sub, tunneling, and authorization share one local-verifier trust model instead of being glued together by every application. Version 0.8.33 adds root-authorized, exact-URN instance delegation so service holders can scale out after the namespace-root secret has been destroyed, without widening the inherited service or authorization policy.

01

One security model

Identity, discovery, transport, stream admission, and L7 authorization are not glued together by each application. They share protocol-edge checks.

02

Self-certifying identity

Every node is named by a did:korium URI derived from the public key. The pubkey travels in band, then BLAKE3-binds to the URI before signature verification.

03

No central resolver

Verification does not depend on a DID document fetch, CA, SPIRE server, key registry, or online root. The destination checks the evidence it received.

04

Identity-derived admission

DID-only nodes leave handler policy to the application. Supplying verified service identity activates fail-closed source and stream admission; protected actions still require a scoped Biscuit.

05

Identity-routed QUIC

Quinn runs over a Korium UDP substrate that routes by identity, observes addresses, signs probes, and forwards only bounded encrypted QUIC traffic.

06

NAT traversal as transport

PING, PINGPONG, PONG, PUNCH, RTT tiering, observed addresses, DHT hints, and QUIC attempts feed the same identity-indexed routing state.

07

Production data planes

Direct QUIC, forwarded QUIC, adjacent NAT traversal, DNS-facing discovery, GossipSub, raw streams, request-response, and TCP tunneling are all carried by authenticated fabric paths.

08

Direct tunnel first

TCP tunnel entry tries native TLS 1.3 mTLS/TCP to the destination before falling back to encrypted QUIC TUNNEL streams over the mesh.

09

Wire bounds, not wishes

DHT values, liveness records, RPC bodies, GossipSub messages, grants, lookup expansion, tunnel concurrency, and caches all have explicit caps.

10

Observable decisions

Verified grants return issuer, audience, service URN, action, resource, expiry, token digest, and bounded app claims. Complete, durable, or tamper-evident audit collection remains a deployment responsibility.

11

PQ-aware identifier surface

The did:korium URI carries a 48-byte BLAKE3-384 digest; the routing identity uses its first 32 bytes. Neither embeds the raw public key, keeping identity fields compact.

12

Owned lifecycle boundaries

Identity, authority, authz, naming, DHT, transport, fabric, GossipSub, tunnel, and node composition own distinct invariants. Actor loops and sessions are cancelled and drained by their runtime owner.

Identity

Self-certifying identity with explicit cryptographic boundaries.

A Korium node is named by a compact did:korium URI, but the verifier never treats the URI as the key. The raw public key is carried as evidence, BLAKE3-bound to the DID, then checked before any signature or transport claim is trusted.

01 DID names the node

did:korium gives routing, grants, logs, and audits a stable node name.

02 Pubkey proves the DID

The certificate carries the public key; the verifier hashes and compares it locally.

03 Crypto is scoped

Ed25519 authenticates current identities while BLAKE3-384 keeps the DID compact.

04 PQC posture is precise

X25519 + ML-KEM-768 protects key exchange, while identity signatures remain classical and explicit.

Encryption

Encrypted paths stay bound to identity.

Korium uses QUIC and TLS 1.3 mTLS for encrypted node sessions, then carries those sessions over an identity-aware UDP substrate. Direct traffic, forwarded traffic, raw streams, pub-sub, and TCP tunnels all keep encryption separate from authority.

Session crypto TLS 1.3 mTLS over QUIC Nodes authenticate live keys before encrypted streams are accepted.
Hybrid confidentiality PQ-aware key exchange posture Confidentiality can move toward hybrid PQC without turning signatures into a blanket PQ claim.
Encrypted overlay Direct QUIC and forwarded QUIC Transit nodes can forward ciphertext after bounded relay checks, not read it.
Tunnel fallback Native mTLS/TCP, then QUIC TUNNEL Local TCP access can fall back to authenticated encrypted mesh paths.

Direct QUIC

Node-to-node encrypted sessions with mTLS identity and service-scoped admission.

Forwarded QUIC

Relay paths forward bounded ciphertext after adjacent-hop token, TTL, and route checks.

TCP tunnel

Direct mTLS/TCP is tried first, then encrypted QUIC TUNNEL streams over the fabric.

Signed data planes

GossipSub, raw streams, and request-response keep signatures, replay windows, and size caps.

Authority

L4 admission and L7 rights are separate decisions.

A DID-only node authenticates callers but deliberately leaves handler policy to its application. Supplying verified service identity activates fail-closed L4 source and stream admission. L7 AuthZ then independently decides whether the caller may perform an action on a resource.

L4 node proof mTLS DID binding

The node proves key possession and the destination binds the key to the caller DID.

L4 service authority urn:korium:<ns>/<service>

Signed lease evidence proves which service identity an instance may serve.

L4 stream admission Caller, service, stream type

The fabric checks whether this node can open this kind of stream to this service.

L7 invocation grant Biscuit right(resource, action)

The application request still needs an issuer-approved, audience-bound grant.

L4 caller

The authenticated caller DID must match the node that opened the transport stream.

L4 service

The destination service URN must be backed by current signed lease evidence.

L4 stream

Stream type, route, relay token, TTL, and bounds are checked before the payload is useful.

L7 issuer + audience

principal() identifies a service-approved grant issuer; audience() must match the caller DID seen at mTLS.

L7 scope

The grant must match service URN, issuer policy, resource, and action exactly.

L7 freshness

exp() is mandatory, must be live, and is verifier-capped at 300 seconds.