SECURITY

Assume the channel is hostile. We do.

This page exists to be forwarded to the person who has to sign off. It states what we defend against, what we deliberately cannot do, which primitives we use, and how to tell us when we have got something wrong. There is no marketing language below this paragraph.

THREAT MODEL

Six threats, and the specific mechanism that defeats each

A threat model that lists only threats is a wish list. Each row below names the mechanism, not the intention.

threat ledger · v2026.05
#ThreatMechanism that defeats it
01 Compromised mailbox
An attacker holds a mailbox that receives your intake, links, or notifications.
Content is sealed to the destination service's key, never to the mailbox. The mailbox carries a reference and a sealed blob it cannot open. Compromising it yields ciphertext and routing metadata — no plaintext, and no ability to originate, because origination requires an attested key-pair the mailbox does not hold.
02 MITM on the relay path
An attacker terminates or intercepts the connection between peers.
Envelope content is encrypted end-to-end beneath the transport, so breaking TLS reveals ciphertext. The hop key is derived from an ECDH exchange bound into the AAD, and the peer's Ed25519 attestation signature covers the challenge, peer identity and timestamp — an interceptor cannot produce it.
03 Insider at the relay
Someone with production access at KryptAPI decides to read your traffic.
No content key or private key material exists on our infrastructure to be misused. Decryption capability was never built into the relay — there is no admin console, feature flag, or break-glass procedure that renders a payload. An insider with total access obtains exactly what a subpoena obtains: metadata.
04 Stolen device or exfiltrated key
A laptop, container image, or secret store leaks a private key.
Hop keys are ephemeral and discarded after sealing, so historical traffic is not retroactively readable. Long-lived identity keys sign attestations but never encrypt content. Revocation via POST /v1/keys/:id/rotate takes effect at the next attestation — seconds, not a deploy cycle — and the revocation itself is attested and audited.
05 Replayed payload
A captured envelope is re-submitted to trigger a duplicate action.
The AAD binds route ID, hop index, and a timestamp inside a bounded window, and the derived key is a function of that AAD. A replay onto a different hop derives a key that decrypts nothing; a replay onto the same hop is refused as envelope_already_opened, since ciphertext collection is single-shot.
06 Silent tampering
Someone alters a payload, or alters the record of a payload, and hopes nobody checks.
AES-GCM's authentication tag makes content tampering a hard decryption failure, never a silent corruption. Record tampering is defeated by the audit chain: each entry commits to the digest of the previous one, so altering any historical line invalidates every hash after it. You can verify the chain yourself, offline, with the open verifier.

Explicitly out of scope

We do not defend against a compromised destination. If an attacker fully controls the service that is authorised to open an envelope, they can read what it opens — that is what "authorised" means. Our job is to make sure that is the only way to read it, and that the opening is recorded.

Also out of scope

Traffic analysis at the metadata level. We carry ciphertext length, timing and routing, and an observer with total relay visibility can infer patterns from them. Padding and batching are available per route; they cost latency and GB, so they are opt-in rather than assumed.

WHAT WE NEVER SEE

Six things that do not exist on our side of the boundary

Not "restricted by policy". Not "access-logged". Absent. Open an envelope to read the specific reason each one cannot reach us.

Under the lens: size, timing, route and key fingerprints. The content region stays noise wherever you put it. We can prove delivery; we cannot read it.

Drag the lens with a pointer, or focus the panel and steer it with the arrow keys.

And six things that do not exist on our side of it

AUDIT INTEGRITY

Tamper-evident, not merely tamper-logged

Most audit logs record what happened. This one makes altering the record detectable by anyone holding a later entry — including you, offline, with software we did not write for you.

audit stream · hash-chained · sha-256 LIVE

    How the chain is formed

    Each entry contains its event, its subject, and the SHA-256 digest of the previous entry's canonical serialisation. The chain head is published in every statement, so a document you already hold pins the entire history before it.

    How to verify it

    Export with GET /v1/audit and run krypt-audit-verify --head 0x… from any SDK. The verifier recomputes every digest locally. It never contacts us, and it is roughly two hundred lines you are welcome to read.

    What export contains

    Events, subjects, quantities, fingerprints, timestamps and digests. Never content — an audit export of an envelope you cannot open is still an audit export you cannot read. Format is newline-delimited JSON, stable across API versions.

    KEY CUSTODY OPTIONS

    Three custody models, chosen per key-pair

    Custody is a per-key-pair decision, not an account-wide one. An intake key can be relay-directory published while an archive key sits in escrow.

    custody comparison
    PropertyRelay-managed directoryCustomer HSMOffline escrow quorum
    Private key locationyour service processyour HSM (PKCS#11)offline shares, 2-of-3
    KryptAPI holdspublic JWK + fingerprintfingerprint onlyfingerprint only
    Rotation triggerAPI or scheduleAPI + HSM operatorquorum ceremony
    Rotation latencysecondsminuteshours to days
    Attestation signingin-process Ed25519HSM-resident Ed25519HSM or air-gapped signer
    Recovery if lostnone — rotate and re-issueHSM backup policy2 of 3 shares reconstitute
    Typical useintake and dashboard peersregulated production pathslong-retention archives
    Metered as1 active key-pair1 active key-pair1 active key-pair

    A quorum of three custodians is still one logical key-pair on your statement. We meter cryptographic objects, not people.

    CRYPTOGRAPHIC INVENTORY

    Boring cryptography, applied completely

    Nothing here is novel. Novelty in a cipher is a liability; the interesting engineering is in the completeness of the application, not the exoticism of the primitive.

    primitives in production · reviewed 2026-05
    PrimitiveWhere it is usedParametersRotation cadence
    AES-256-GCMEnvelope content sealing96-bit IV, 128-bit tag, AAD bound to hopper envelope (ephemeral)
    ECDH P-256Hop key agreement (default)ephemeral sender key, HKDF-SHA256 expansionper hop (ephemeral)
    X25519Hop key agreement (preferred where both peers support it)ephemeral sender key, HKDF-SHA256 expansionper hop (ephemeral)
    Ed25519Attestation signatures, webhook signing, statement signingsignature over challenge ‖ peer_id ‖ timestamp90 days default, 30 at custody-scale
    HKDF-SHA256Deriving content keys from the ECDH shared secretinfo = hop AAD, salt = route nonceper hop (ephemeral)
    SHA-256Audit chaining, ciphertext digests, statement hashescanonical JSON serialisation before digestn/a
    TLS 1.3Transport beneath the envelopemodern suites only; no downgrade pathcertificates 90 days
    CSPRNGIVs, nonces, challenges, envelope IDsplatform CSPRNG; no userspace PRNG in any pathn/a

    What we will not do

    No downgrade negotiation, no "compatibility mode", no custom cipher, no key escrow held by us, and no algorithm agility that lets a peer talk us into something weaker. Unsupported suites are refused with cipher_suite_unsupported.

    Post-quantum posture

    Hybrid X25519 + ML-KEM-768 key agreement is implemented behind a per-route flag and in production for archive routes with long retention. It is not yet the default, because defaults should change once, deliberately, and with a migration path already proven.

    RESPONSIBLE DISCLOSURE

    Tell us. We will thank you in writing.

    Report anything you believe weakens the guarantees on this page to security@kryptapi.com. Encrypt with the key below if the report contains anything you would not put in a postcard.

    Our commitments: acknowledgement within one business day, a technical assessment within five, and a fix or a written explanation of why it is not one within thirty. We publish a summary of every valid report after the fix ships, including the ones that were embarrassing.

    We will not pursue legal action against good-faith research that avoids privacy violations, service degradation and data destruction. Testing against your own sandbox organisation is always in scope and unmetered; testing against another client's traffic never is.

    • In scope: the relay, the API surface, the SDKs, the audit verifier, the client portal, and this website.
    • Out of scope: social engineering of our staff, physical access, denial of service, and reports generated solely by an automated scanner with no analysis attached.

    security.txt & PGP

    Contact: security@kryptapi.com
    Policy: kryptapi.com/security#disclosure
    File: /.well-known/security.txt
    Preferred-Languages: en
    Expires: 2027-06-30T00:00:00Z

    PGP fingerprint
    9F42 A1C7 B3D4 0E11 8C31
    4A0E D0F2 771B 5F1C A740

    Third-party assurance

    Annual third-party cryptographic review of the sealing path and the audit chain, plus a rolling penetration test of the relay and portal. Reports are available under NDA to clients and to prospects with a signed agreement in progress — request them at security@kryptapi.com.