Appendix A
Cryptographic Algorithm Reference
SANKET Technical Security & Architecture Whitepaper. Public edition 2.0, 7 October 2026.
Table 74: Algorithms and libraries used in the described release
| Purpose | Algorithm / construction | Library or component | Reference |
|---|---|---|---|
| Message key agreement | PQXDH: X25519 + Kyber-1024, HKDF | libsignal (current release) | PQXDH rev. 3; RFC 7748 |
| Message encryption | Triple Ratchet (Double Ratchet + SPQR); AES-256-CBC + HMAC-SHA256 per message, inside a versioned content envelope | libsignal (current release) | Double Ratchet spec; SPQR |
| Identity signatures | XEdDSA over Curve25519 | libsignal | XEdDSA spec |
| File encryption | AES-256-GCM, 96-bit IV, 128-bit tag, random key per file | noble ciphers library (mobile); Node.js crypto (desktop) | FIPS 197; SP 800-38D |
| Call frames | AES-256-GCM with HKDF-SHA256 key ratchet | Patched WebRTC SDK (mobile); livekit-client (desktop) | RFC 5869 |
| Call transport | DTLS-SRTP, AEAD_AES_256_GCM | SANKET LiveKit build (pion) | RFC 5764; RFC 7714 |
| TLS | TLS 1.3 AES-256-GCM-SHA384; TLS 1.2 ECDHE AES-256-GCM; TURN over TLS on TCP 443: TLS 1.3 TLS_AES_256_GCM_SHA384 only | nginx; Node.js | RFC 8446; RFC 5289 |
| TLS key exchange | Hybrid X25519MLKEM768 (X25519 + ML-KEM-768) offered first, then X25519 and secp384r1 | nginx with a current OpenSSL release; Node.js LTS | FIPS 203; RFC 7748 |
| Device mutual TLS | ECDSA P-256 key generated on the device; X.509 certificate issued under the customer CA with an opaque name; CRL at the edge | Platform crypto (device); OpenBao PKI (issuing); nginx (verification) | RFC 5280 |
| Local database | SQLCipher (AES-256, HMAC-SHA256 page authentication) | SQLCipher | SQLCipher design |
| Local key envelope | X25519 ECDH + HKDF-SHA256 + AES-256-GCM | noble curves and ciphers; Node.js crypto | RFC 7748; RFC 5869 |
| Push payloads | AES-256-GCM, fixed-size padding | Node.js crypto | SP 800-38D |
| Locate | HPKE (DHKEM X25519, HKDF-SHA256, AES-256-GCM) | libsignal (phone); noble (browser) | RFC 9180 |
| Hardware key protection | iOS: Secure Enclave P-256 ECDH + HKDF-SHA256, deriving an AES-256-GCM key; Android: Keystore key in StrongBox or the TEE | Platform crypto | RFC 5869; SP 800-38D |
| Android Key Attestation | X.509 attestation chain verified offline to vendor roots shipped in the release, with a per-release revocation snapshot | SANKET API | RFC 5280 |
| Signed device lists | XEdDSA signatures by the account list key over each list version, each list chained to the hash of the previous one | libsignal | XEdDSA spec |
| Passwords | Argon2id (64 MiB, t=3, p=4) | argon2 | RFC 9106 |
| Second factor | TOTP, HMAC-SHA256, 6 digits, 30 s | SANKET implementation | RFC 6238 |
| Administrator security keys | WebAuthn assertions with ES256 (ECDSA P-256, SHA-256) or EdDSA (Ed25519); user verification required | Node.js crypto | W3C WebAuthn Level 2; RFC 8032 |
| Federated sign-in | OIDC: authorisation code with PKCE S256, ID token signature verified with asymmetric algorithms only (no none or HMAC). SAML 2.0: assertion signature by the pinned certificate, RSA-SHA256 or stronger | SANKET API | OpenID Connect Core 1.0; SAML 2.0 |
| Passcode and vault | PBKDF2-HMAC-SHA256, 600,000 iterations; AES-256-GCM | Platform crypto | SP 800-132 (PBKDF2) |
| Session tokens | JWT HS256 (HMAC-SHA256) | SANKET API | RFC 7519; RFC 8725 |
| Webhooks | HMAC-SHA256 over timestamp and body | Node.js crypto | RFC 2104 |
| Integration secrets, invite codes | SHA-256 hashes; HMAC-SHA256 for activation codes | Node.js crypto | FIPS 180-4 |
| Licences, releases (with sequence number and expiry), release timestamps, status reports, backup manifests, audit anchors | Ed25519 (release timestamps under a key separate from the release key) | OpenBao Transit (signing); noble curves / Node.js (verification) | RFC 8032 |
| Audit chain | SHA-256 hash chain, head signed periodically (Ed25519 anchor) | SANKET API; OpenBao Transit | FIPS 180-4; RFC 8032 |
| Backups (released) | AES-256-GCM per artefact; recovery key under scrypt; data keys wrapped by OpenBao Transit; Ed25519-signed SHA-256 manifest | Node.js crypto; OpenBao Transit | SP 800-38D; RFC 7914; RFC 8032 |
| TOTP secrets at rest | AES-256-GCM, key derived with HKDF-SHA256 from a dedicated installation secret, bound to the account | Node.js crypto | SP 800-38D; RFC 5869 |
Libraries are chosen under SANKET's audited-library policy (Chapter 40). libsignal is used without modification.
Evaluating SANKET for your organisation?
Talk to Tosh Defence about a technical briefing, a deployment plan for your infrastructure, or the controlled edition of this whitepaper under a non-disclosure agreement.