Security

What we hold, and what that makes impossible

ChainOS is non-custodial by construction rather than by policy. The BIP-39 mnemonic that derives every one of your keys exists only inside the Edge container you run, on your own infrastructure. Ziklag Cloud receives extended public keys and one Ed25519public identity key. From an xpub you can derive every receive address on a chain, which is what monitoring needs; you cannot derive a single private key, which is what spending needs.

Key material

Mnemonic
Read from a mounted file (PASS_PHRASE_FILE) at Edge start-up. Held in mlocked memory so it is never written to swap, and zeroed after each use. Never transmitted.
Child private keys
Derived on demand inside the Edge process, used to sign, then zeroed. Never persisted.
Edge identity key
Ed25519 at m/83696968'/0'/0', derived rather than enrolled. Cloud pins the public half on first sync. Because it is derived, every Edge replica started from the same mnemonic presents the same identity — and a change to it means the mnemonic changed.
Extended public keys
Encrypted at rest, never logged, and never rendered beyond an eight-and-four preview.

Ziklag cannot

The last item is not a gap. There is no reset flow, no support escalation and no key escrow, because any of those would mean Ziklag held something that could reconstruct your keys. Treat the mnemonic the way you treat an HSM's master key.

Credentials and transport

Application keys
zkl_* keys are minted by your own Edge and never leave your network. Your banking application holds no Ziklag credential.
Console access
Password plus mandatory TOTP. The access token is held in memory only — neverlocalStorage — with the refresh token in an httpOnly,SameSite=Strict, Secure cookie.
Destructive actions
Key rotation, identity-rotation approval and the destructive wipe are each gated on a fresh TOTP code, not on session age.
Connection direction
Every connection is dialled outbound by the Edge. Cloud never initiates a connection to your infrastructure, so the Edge needs no inbound port, no public ingress and no DNS record.
Edge → Cloud
mTLS gRPC. Each frame carries an Ed25519 signature, a timestamp checked against a 300-second window, and a nonce checked for replay.
Webhooks
HMAC-SHA256 over the raw response body. Verify against the bytes you received, never against a re-serialised object.

Identity rotation

If the identity key Cloud sees stops matching the one it pinned, a different mnemonic is mounted. Authentication fails before any payload is read, the new extended public keys are quarantined, and your account owner is paged. Approval requires a TOTP code from an owner.

This is deliberately hard to do by accident, because it is the only decision in the product that can orphan funds: addresses derived from a previous mnemonic are unreachable from a new one. Addresses derived from prior extended public keys stay monitored forever, so nothing already issued stops being watched.

Residual risks, stated

Reporting a vulnerability

Mail security@ziklagconsulting.com. Please include reproduction steps and the affected version. We will acknowledge within one business day. Please do not test against another customer's account or against live funds.