e3b0c44298fc1c14 9afbf4c8996fb924 27ae41e4649b934c a495991b7852b855
a7ffc6f8bf1ed766 51c14756a061d662 f580ff4de43b49fa 82d80a4b80f8434a
6b86b273ff34fce1 9d6b804eff5a3f57 47ada4eaa22f1d49 c01e52ddb7875b4b
d4735e3a265e16ee a03239cc719ab018 06b6fa084a4e97eb 22f9fe5e40b7e3e3
4e07408562bedb8b 60ce05c1decfe3ad 16b72230967de01f 640b7e4729b49fce
4b227777d4dd1fc6 1c6f884f48641d02 b4d121d3fd328cb0 8b5f0c25b5e33c7b
ef2d127de37b942b aad06145e54b0c61 9a1f22327b2ebbcf bec78f5564afe39d
e7f6c011776e8db7 cd330b54174fd76f 7d0216b612387a5f faf4e6c34b67ddfe
2c624232cdd221771 294750a4d5e4d4cd 2bf3d5e56b3327e3 19c45e0ad9f1d2b8
19581e27de7ced00 ff1ce50b2047e7a5 67c43b8d4b1ae21e 4db1a0c5c6e47e28
4a44dc15364204a8 0fe80e9039455cc1 608281820fe2b24f 1e5233ade6af1dd5
9f14025af0065b30 6c0a68d2efb68d65 de27cc87fd346d6e a25a9e1c2e6e1e7b
b17ef6d19c7a5b1e e83b907af917c8b5 00c1a073db9c2aad eb44ec546aa3b90b
ca978112ca1bbdca fac231b39a23dc4d a786eff8147c4e72 b9807785afee48bb
3e23e8160039594a 33894f6564e1b134 8bbd7a0088d42c4a cb73eeaed59c009d
2e7d2c03a9507ae2 65ecf5b5356885a5 394c32af5064a65a 2b6577725ec7d8a1
Security Whitepaper

Security
Protocol

Zero-knowledge architecture. The master password never moves. Key material is heavily insulated. Nothing escapes encrypted buffers.

CipherXChaCha20
KDFArgon2id
Key256-bit
Nonce192-bit
Audited
Encryption Primitives

Cryptographic Foundation

Every layer of the vault is built on battle-tested, open-standard cryptographic primitives. No proprietary algorithms, no security through obscurity.

Argon2id

Key derivation

Winner of the Password Hashing Competition. Memory-hard function making GPU and ASIC brute-force attacks economically infeasible.

  • 64MB memory cost
  • 3 iterations, 4 parallelism
  • ASIC-resistant by design

XChaCha20-Poly1305

Vault encryption

Extended-nonce AEAD stream cipher. Immune to timing attacks, nonce-misuse resistant, and faster than AES-GCM without hardware acceleration.

  • 256-bit encryption key
  • 192-bit extended nonce
  • Authenticated encryption (AEAD)

HKDF-SHA256

Sync protocol

Deterministic key derivation using HMAC-based Extract-and-Expand. Sync keys are mathematically isolated from vault keys.

  • Context-bound derivation
  • Isolated sync key space
  • Forward secrecy

Random 24-byte

Nonce strategy

Every vault write generates a cryptographically random 24-byte nonce, entirely preventing collision attacks across billions of operations.

  • Per-write randomization
  • No nonce reuse possible
  • Collision-resistant by design

Derived 256-bit keys encrypt the vault using XChaCha20-Poly1305. The 24-byte nonce is freshly randomized on every local vault sync action, entirely preventing collision attacks. All cryptographic operations use Go's golang.org/x/crypto library - no custom implementations.

Key Hierarchy

Derivation Chain

A single master password deterministically generates all encryption keys through a strict, one-way derivation chain. No key is ever stored - they are regenerated on demand.

Step 01
InputMaster Password

User-provided passphrase. Never stored on disk, never transmitted. Zeroed from memory immediately after derivation.

Step 02
KDFArgon2id

Memory-hard function transforms the password into a 256-bit key. 64MB memory, 3 iterations, 4 parallelism. ASIC-resistant.

Step 03
OutputVault Key

256-bit symmetric key encrypts and decrypts the local vault file via XChaCha20-Poly1305 AEAD. Never persisted.

Step 04
ExpandHKDF-SHA256

Derives a mathematically isolated sync key from the vault key using context-bound HMAC Extract-and-Expand.

Step 05
OutputSync Key

Encrypts the vault blob before upload. The sync server only ever sees opaque, encrypted binary data.

Access Control

Payload Visibility

What the server can see, what it can't, and what is physically impossible to access - even with full infrastructure compromise.

Visible
1 field
Email Address

Available strictly for account ID metadata (via OAuth)

Encrypted
1 field
Raw Vault Blob

Encrypted payload accessible to sync servers - opaque binary data

Blocked
3 fields
Master Password

Never leaves local execution. Zeroed from memory after derivation.

Encryption Key

Local-only deterministic generation. Invisible to any server.

Private SSH Keys

Nested within AEAD-encrypted vault buffers. Physically inaccessible.

Threat Model

Attack Surface

Every known attack vector, mapped to its operational mitigation. If you find a gap, we want to hear about it.

Disk theft

Vault is encrypted via Argon2id + XChaCha20-Poly1305. Physical data is cryptographically opaque without brute-forcing memory-hard key derivation.

Network node capture

Zero-knowledge architecture. Captured infrastructure contains exclusively encrypted binary blobs with no decryption capability.

Memory swap leak

Key memory pages locked with unix.Mlock(). Daemon actively zeroes all sensitive memory regions upon shutdown or lock.

Socket interception

Daemon socket permissions strictly enforced at 0600 with owner-only access. No remote socket exposure.

MITM on TLS sync

Forced TLS 1.3 transit with secondary vault-level encryption. Dual-layer protection makes MITM cryptographically useless.

Brute force attack

Argon2id parameters (64MB, 3 iterations) make each guess cost ~300ms. Rate limiting strictly enforced server-side.

File corruption

Atomic write logic (tmp + fsync + rename) ensures vault integrity. Write failures never corrupt existing vault state.

Open Source

Don't trust us.
Audit us.

The entire Forged core is open source. Every cryptographic implementation, every daemon operation, every vault interaction - fully inspectable.