Skip to main content

Algorithms

PurposeAlgorithmKey sizeNotes
Vault encryptionAES-256-GCM256-bitClient-side, Web Crypto API
Key derivationArgon2id256-bit output64 MiB memory, 3 iterations
Key wrappingAES-KW256-bitFor family vault key distribution
Asymmetric encryptionRSA-OAEP2048-bitSHA-256 hash, for sharing
TOTP generationHMAC-SHA1160-bitRFC 6238 compliant
TransportTLS 1.3VariousAll API communication
Password hashingbcrypt184-bitSupabase Auth (account passwords)

AES-256-GCM parameters

{
  "algorithm": "AES-GCM",
  "keyLength": 256,
  "ivLength": 96,
  "tagLength": 128,
  "implementation": "Web Crypto API (crypto.subtle)"
}
  • IV: 12 bytes (96 bits), randomly generated per encryption
  • Authentication tag: 16 bytes (128 bits), appended to ciphertext
  • Associated data: none (no AAD used)

Argon2id parameters

{
  "algorithm": "argon2id",
  "memory": 65536,
  "iterations": 3,
  "parallelism": 4,
  "hashLength": 32,
  "salt": "per-user, 16 bytes random"
}
Fallback parameters (low-memory devices):
{
  "memory": 32768,
  "iterations": 4,
  "parallelism": 4
}

Implementation

All cryptographic operations use the Web Crypto API (crypto.subtle) in the browser:
  • crypto.subtle.importKey() — import derived key material
  • crypto.subtle.encrypt() / crypto.subtle.decrypt() — AES-256-GCM operations
  • crypto.subtle.wrapKey() / crypto.subtle.unwrapKey() — AES-KW key wrapping
  • crypto.subtle.generateKey() — RSA keypair generation
  • crypto.getRandomValues() — cryptographically secure random number generation
The Web Crypto API provides hardware-accelerated cryptographic operations and is available in all modern browsers. No third-party cryptographic libraries are used for core vault operations.

Key storage

KeyStorage locationProtection
Master passwordNever storedUser memory only
Vault keyJavaScript memory (React state)Wiped on lock/logout
Saltvault_salts database tableNot secret (public)
RSA private keyvault_keys database tableEncrypted with vault key
RSA public keyvault_keys database tablePlaintext (public key)
Server encryption keyEnvironment variableServer-side only