vaha_
FR Français
← Index No. 01 / 21

Dossier · Projet phare · cryptographie post-quantique

Nitva

Messenger sécurisé

Messenger chiffré de bout en bout, pensé post-quantique dès le premier jour : échange de clés CRYSTALS-Kyber (ML-KEM) via PQXDH, couche de messages Double Ratchet et système de clés de groupe par époque (GMK) avec récupération et rotation de l'expéditeur. Le tout tourne sur un seul cœur Rust — KyberSDK — partagé par iOS, Android, le desktop Tauri et un backend Go auto-hébergé.

Domaine
Projet phare · cryptographie post-quantique
Années
2025 → aujourd'hui
État
en cours
Système
iOS · Android · Desktop · Server
Nitva — Messenger sécurisé
Capture · No. 01 Nitva sur iOS — discussion directe, groupe et appel dans un seul client.

Ce qu'il fait

01 / 08
  1. Échange de clés PQXDH sur CRYSTALS-Kyber (ML-KEM) au lieu du X25519 classique
  2. Couche de messages Double Ratchet (AEAD + KDF) avec des clés par message
  3. Clés de groupe par époque GMK, rotation de l'expéditeur et récupération d'un état perdu
  4. Récupération mnémotechnique BIP39 + escrow d'état argon2id/AES-GCM
  5. Plusieurs appareils par compte et effacement en panic-mode
  6. Un seul cœur Rust (KyberSDK) derrière une ABI C — zéro code crypto par plateforme
  7. Backend Go auto-hébergé : auth, appareils, pré-clés, enveloppes DM et de groupe, fichiers
  8. The Nitva name: domain nitva.co and bundle co.nitva.app, since Nitva was taken on both stores

Couches

02 / 05

KyberSDK — cœur Rust

RustC ABI / FFIML-KEM
  • CRYSTALS-Kyber (ML-KEM) comme KEM, pas une branche expérimentale
  • Accord de clés PQXDH résistant au « harvest now, decrypt later »
  • Double Ratchet + clés de groupe par époque GMK
  • Démarche de durcissement FIPS sur tout le cœur

iOS — Swift / SwiftUI

SwiftSwiftUISPM
  • Monorepo SPM modulaire : chaque Core* est une frontière de framework, chaque Feature* une surface
  • NitvaNSE — extension de notification qui déchiffre le push E2E sur l'appareil
  • Store local chiffré (CoreDatabase), identité de l'appareil dans le Keychain
  • Récupération de compte BIP39 sans serveur qui garde les clés

Android — Kotlin / Compose

KotlinJetpack ComposeJNI
  • Le même cœur Rust via des bindings JNI — la crypto n'est jamais réécrite
  • UI Jetpack Compose, Coroutines + Flow pour l'état
  • Store local chiffré et pipeline FCM avec déchiffrement E2E

Desktop — Tauri 2 (Rust + TypeScript)

RustTauri 2TypeScriptVite
  • Windows, macOS et Linux à partir d'une seule base de code
  • Cœur Rust lié nativement — pas de Chromium en dessous
  • Barre système, menus et notifications natifs, installateur léger

Backend — Go (self-hosted)

GoLokiPrometheusTempoGrafana
  • Services : auth, appareils, pré-clés, enveloppes DM et de groupe, transfert de fichiers
  • Le serveur tourne sur ma propre infrastructure, pas sur un BaaS tiers
  • Observabilité : Loki pour les logs, Prometheus pour les métriques, Tempo pour les traces, Grafana pour les tableaux de bord

Technologies

03 / 03
Langages RustSwiftKotlinTypeScriptGo 05
Frameworks et outils SwiftUIJetpack ComposeTauri 2ViteJNIC ABI 06
Infrastructure own serversLokiPrometheusTempoGrafana 05

Tous les systèmes au dossier

Retour à l'index →