Skip to content

Cryptography & Architecture

We provide these detailed architectural specifications to offer complete assurance that your data is protected by state-of-the-art cryptographic techniques. In our Zero-Trust model, customer data cannot be decrypted by anyone except the customer—not even by FigChain.

To guarantee this, all of our API clients are open source. You are encouraged to inspect the code to verify that all cryptographic operations occur client-side and that your private keys never leave your controlled environment.

Zero Trust Architecture

FigChain is built on a "Zero Trust" architecture, meaning the server infrastructure never possesses the keys required to decrypt your sensitive configuration data. To achieve this, FigChain employs a robust hierarchy of client-side keys and standard cryptographic primitives.

Key Hierarchy

The security model relies on two primary "Vaults" (Mnemonic Phrases):

  1. Personal Vault (Identity): A 24-word phrase generated by each user.
  2. Workspace Vault (Infrastructure Root): A shared 24-word phrase generated once per workspace (Tenant).

1. Identity Keys (Personal Vault)

Every user and device in the system has a unique cryptographic identity derived from their Personal Vault (BIP-39 Mnemonic).

Derivation Standard: FigChain strictly adheres to SLIP-0010 for Ed25519 key derivation.

  • Master Seed: Derived from the 24-word Personal Vault (PBKDF2-HMAC-SHA512).
  • Identity Key (Ed25519): Derived at path m/999'/0'/0'/0' (Hardened).
    • Used for Signing (Proof of Possession, Authentication, Mutation Request Signing).
    • The SHA-256 hash of the Public Key acts as the unique Device Fingerprint.
  • Encryption Key (X25519): Derived at path m/999'/1'/0'/0' (Hardened).
    • Used to receive encrypted messages (e.g., invites, shared keys) specifically targeted to this device.
    • Note: FigChain derives a separate scalar for X25519 to ensure "Scalar Independence" from the Ed25519 signing key, preventing potential cross-protocol attacks.

2. Infrastructure Root (Workspace Vault)

The Workspace Vault is the "Root of Trust" for shared data within a tenant. It allows for the deterministic derivation of the Workspace Master Key.

  • Workspace Master Key: Derived from the Workspace Vault Mnemonic.
  • Usage: This unique key pairs with High-Entropy "Namespace Keys" (NSK) to encrypt configuration values.

Because the Workspace Vault is shared among admins (or stored in a physical safe), it is critical for: - Disaster Recovery: If all admin devices are lost, the Workspace Vault can restore access to the data. - Zero Trust Bootstrapping: New devices can be onboarded by wrapping the Workspace Root with their Identity Public Keys.

Encryption Primitives

FigChain uses modern, high-security primitives available in the Web Crypto API and standard cryptographic libraries (TweetNaCl/Noble).

Component Algorithm Purpose
Signatures Ed25519 Authenticating requests and verifying device identity.
Key Exchange X25519 (ECDH) Establishing shared secrets for wrapping keys (Envelopes).
Symmetric Encryption AES-GCM (256-bit) or ChaCha20-Poly1305 Encrypting configuration blobs and key envelopes.
Key Derivation PBKDF2 / HDKey (SLIP-0010) Deterministic key generation from mnemonics.
Hashing SHA-256 Device Fingerprinting and integrity checks.

Data Flow: Envelopes

To share encrypted data (like the Workspace Root or Namespace Keys) without the server seeing it, FigChain uses "Envelopes".

  1. Alice wants to share a key K with Bob.
  2. Alice fetches Bob's Identity Public Key (X25519) from the server.
  3. Alice generates an ephemeral key pair E.
  4. Alice performs ECDH (E_private + Bob_public) to derive a shared secret S.
  5. Alice encrypts K using S (AES-GCM) -> EncryptedBlob.
  6. Alice uploads { EphemeralPublic: E_public, Blob: EncryptedBlob } to the server.
  7. Bob downloads the envelope.
  8. Bob performs ECDH (Bob_private + E_public) to re-derive S.
  9. Bob decrypts EncryptedBlob to retrieve K.

This ensures that the FigChain server only stores opaque blobs and public keys, never the private keys or the plaintext data.