vaha_
EN English
← Index No. 01 / 21

Case file · Flagship · post-quantum cryptography

Nitva

Post-quantum messenger

End-to-end encrypted messenger built post-quantum-first: CRYSTALS-Kyber (ML-KEM) key agreement through PQXDH, a Double Ratchet message layer and epoch-based group keys (GMK) with recovery and sender rotation. All of it runs on a single Rust core — KyberSDK — shared by iOS, Android, Tauri desktop and a self-hosted Go backend.

Field
Flagship · post-quantum cryptography
Years
2025 → present
State
in build
System
iOS · Android · Desktop · Server
Nitva — Post-quantum messenger
Screenshot · No. 01 Nitva on iOS — direct chat, group and call in one client.

What it does

01 / 08
  1. PQXDH key agreement on CRYSTALS-Kyber (ML-KEM) instead of classic X25519
  2. Double Ratchet message layer (AEAD + KDF) with per-message keys
  3. GMK epoch group keys, sender rotation and recovery from lost state
  4. BIP39 mnemonic recovery + argon2id/AES-GCM state escrow
  5. Multi-device accounts and panic-mode wipe
  6. One Rust core (KyberSDK) behind a C ABI — zero per-platform crypto code
  7. Self-hosted Go backend: auth, devices, prekeys, DM & group envelopes, files
  8. The Nitva name: domain nitva.co and bundle co.nitva.app, since Nitva was taken on both stores

Layers

02 / 05

KyberSDK — Rust core

RustC ABI / FFIML-KEM
  • CRYSTALS-Kyber (ML-KEM) as the KEM, not an experimental branch
  • PQXDH key agreement resistant to harvest-now-decrypt-later
  • Double Ratchet + GMK epoch keys for groups
  • FIPS-hardening track across the whole core

iOS — Swift / SwiftUI

SwiftSwiftUISPM
  • Modular SPM monorepo: every Core* a framework boundary, every Feature* one surface
  • NitvaNSE — notification extension that decrypts E2E push on device
  • Encrypted local store (CoreDatabase), device identity in the Keychain
  • BIP39 account recovery with no server holding keys

Android — Kotlin / Compose

KotlinJetpack ComposeJNI
  • Same Rust core over JNI bindings — crypto is never re-written
  • Jetpack Compose UI, Coroutines + Flow for state
  • Encrypted local store and an FCM pipeline with E2E decryption

Desktop — Tauri 2 (Rust + TypeScript)

RustTauri 2TypeScriptVite
  • Windows, macOS and Linux from one codebase
  • Rust core linked natively — no Chromium underneath
  • Native tray, menus and notifications, small installer

Backend — Go (self-hosted)

GoLokiPrometheusTempoGrafana
  • Services: auth, devices, prekeys, DM & group envelopes, file transfer
  • The server runs on my own infrastructure, not a third-party BaaS
  • Observability: Loki for logs, Prometheus for metrics, Tempo for traces, Grafana for dashboards

Technologies

03 / 03
Languages RustSwiftKotlinTypeScriptGo 05
Frameworks & tools SwiftUIJetpack ComposeTauri 2ViteJNIC ABI 06
Infrastructure own serversLokiPrometheusTempoGrafana 05

Every system on file

Back to the index →