OMEGA·KEY

Messagerie chiffrée de bout en bout, dans un seul fichier HTML. Passphrases françaises prononçables, AES-GCM-256, Double Ratchet à clés éphémères, et chat sans copier-coller via un relais minimal. Aucune dépendance, aucun serveur propriétaire obligatoire.

1Présentation

OMEGA·KEY est un dérivé applicatif du moteur cognitif OMEGA-Ω. Il en réutilise le substrat (graine sémantique, dynamique) comme source d'identité et d'entropie, puis confie tout le chiffrement à la WebCrypto API du navigateur — primitives standard et auditées. Le moteur OMEGA n'invente aucune cryptographie : il sert de contexte, la sécurité repose sur des algorithmes éprouvés.

Le tout tient dans un fichier HTML autonome (app/omega-key.html) : on l'ouvre dans n'importe quel navigateur, hors-ligne si besoin. Le seul composant réseau optionnel est un relais (server/omega-relay.ts) qui ne transporte que du chiffré.

Principe directeur. Le secret vient du chiffrement (couches 1–2 ci-dessous), jamais du transport. Le relais peut donc être public ou non fiable sans exposer le contenu.

2Démarrage rapide

Trois couches indépendantes, à activer selon le besoin :

APPAREIL A RELAIS (optionnel) APPAREIL B ┌───────────┐ chiffré OMEGA ┌─────────────┐ chiffré OMEGA ┌───────────┐ │ en clair │ ───POST /r/salon─▶│ file 1 h │◀──GET ?since──│ → clair │ └───────────┘ │ (chiffré only)│ └───────────┘ ▲ └─────────────┘ ▲ └──── clé OMEGA (passphrase) + Ratchet DH ── le clair n'existe QUE sur A et B
  1. Clé partagée confidentialité — dérivée d'une passphrase commune (§3–4).
  2. Ratchet DH FS + post-compromission — optionnel, à établir une fois (§6).
  3. Liaison relais transport — chat automatique sans copier-coller (§7).

Pour discuter à deux : ouvrir l'app des deux côtés → dériver la même clé (§4) → écrire dans la conversation (§5). Le relais (§7) rend l'échange automatique.

3Générer une passphrase

Onglet 🎲 PASSPHRASE. Deux modes, chacun à entropie exacte (sans biais de modulo) :

ModeSourceEntropie
Mots réelsListe française de 4096 mots (Diceware)12 bits / mot (2¹²)
Pseudo-mots256 syllabes ouvertes (phonotactique FR)8 bits / syllabe (2⁸)

Les pseudo-mots appliquent un lissage anti-grappe nasale : après une syllabe nasale, la syllabe suivante est tirée d'un sous-ensemble de 128 syllabes sans cluster (7 bits) — entropie variable mais toujours exacte, prononçabilité garantie.

Conseil. Vise ≥ 6 mots réels (~72 bits) ou ~9 syllabes. Note la passphrase ; tu devras la transmettre une seule fois au correspondant, par un canal sûr.

4Clé partagée (les deux côtés)

Les deux appareils doivent aboutir à la même clé AES. Onglet 🔑 PARTAGÉE :

1
PHRASE = la passphrase commune.
2
SEL = identique des deux côtés, mais unique par conversation : l'un clique ↺ ALÉATOIRE (sel CSPRNG 96 bits) et le communique à l'autre — il peut transiter en clair. Évite le défaut OMEGA-KEY-2026 (commun à tous → précalcul possible).
3
🔑 DÉRIVER CLÉ COMMUNE. La clé est obtenue par PBKDF2-SHA256 (310 000 itérations) → AES-256-GCM.
Vérifie que l'empreinte de clé affichée est identique sur les deux appareils. Si oui, vous pouvez vous chiffrer mutuellement.
Règle d'or. La passphrase voyage par un canal sûr distinct (de vive voix, en personne). Jamais par le chat lui-même.

5Conversation chiffrée

Carte 💬 CONVERSATION CHIFFRÉE : un fil de bulles (tes messages à droite, ceux du correspondant à gauche), un badge indiquant le mode actif, et un champ d'écriture.

  • Envoyer : écris puis ou Entrée (Maj+Entrée = nouvelle ligne). Le chiffré est copié automatiquement ; la bulle affiche ✓ copié.
  • Recevoir : colle le message reçu dans la zone dédiée → déchiffrement automatique au collage, ajouté au fil.
  • Reprise locale : le fil est conservé sur l'appareil et restauré au rechargement. 🗑 Effacer le supprime (fil + stockage).
Modes (badge). 🔒 AES-GCM (clé partagée seule) · 🔐 FS (cliquet symétrique) · 🔗 RATCHET DH (recommandé, §6).

6Ratchet DH — forward secrecy + post-compromission

Le Double Ratchet (style Signal) injecte de la fraîcheur cryptographique à chaque échange : la compromission d'une clé ne révèle pas le passé (forward secrecy) et la session se ressoigne ensuite (post-compromise security). Carte 🔗 SESSION RATCHET DH :

1
Clé partagée déjà dérivée (§4) — elle sert de racine d'authentification.
2
Chacun : GÉNÉRER MON CODE D'INIT, puis échanger les deux codes (les coller mutuellement).
3
ÉTABLIR LA SESSION des deux côtés. Le badge passe à 🔗 RATCHET DH.
À savoir. Ce premier échange de codes d'init reste manuel (copier-coller une fois) : le relais n'achemine aujourd'hui que les messages, pas ce handshake. Une fois établi, tout le reste est automatique.

7Chat sans copier-coller (relais)

Pour que les messages circulent tout seuls, on déploie un petit relais et on lie les deux appareils à un même salon. (Guide pas-à-pas complet : docs/GUIDE_chat_relais.md.)

Déployer le relais (gratuit, ~2 min, une fois)

  1. dash.deno.comNew Playground.
  2. Coller server/omega-relay.tsSave & Deploy.
  3. Récupérer l'URL https://xxxx.deno.dev. Vérif : …/r/test renvoie {"msgs":[],"now":…}.

Lier les deux appareils

Carte conversation, bloc 🔌 LIAISON DIRECTE (relais) : saisir la même URL et le même code de salon des deux côtés, puis SE CONNECTER. À partir de là : Entrée envoie, les réponses arrivent toutes seules (sondage 1,5 s). Hors liaison, l'app retombe automatiquement sur le mode copier-coller.

Pourquoi un relais et pas du P2P (WebRTC) ? Le contenu est aussi sûr dans les deux cas (chiffré de bout en bout). Mais sur mobile (CGNAT), le P2P direct échoue souvent sans serveur TURN, alors qu'un relais HTTPS marche partout et permet l'asynchrone (message en attente si le pair est hors-ligne, TTL 1 h). Meilleur rapport facilité × fiabilité.

8Sécurité — garanties & limites

Protégé

  • Contenu : chiffré de bout en bout (AES-GCM-256 ; + Ratchet DH → FS + post-compromission). Le relais ne voit jamais le clair.
  • Intégrité : tag GCM → tout message altéré est rejeté.

À connaître réserves honnêtes

PointDétail / mitigation
Métadonnées relaisLe relais voit salon, horaires, tailles (pas le contenu). Mitige en l'auto-hébergeant (TTL court).
Code de salonAdresse de rendez-vous, pas un secret : qui le connaît lit le chiffré ou spamme, mais ne déchiffre rien sans la clé OMEGA.
Rejeu / échoTout chiffré déjà reçu est rejeté (anti-rejeu, tous modes) ; la suppression de l'écho s'appuie sur le chiffré émis, pas sur le champ id du relais (non falsifiable par un tiers du salon).
Fil local en clairConservé pour la reprise. Sur appareil partagé : 🗑 Effacer, ou demander un mode chiffré-au-repos / éphémère.
Transmission passphraseDoit passer par un canal sûr séparé.
Mémoire RAMJavaScript ne garantit pas l'effacement des anciennes clés en mémoire.
Avertissement. OMEGA·KEY est un projet expérimental, non audité par un tiers. Pour des enjeux critiques (vie en danger, secret professionnel lourd), utilise un outil audité (Signal). Ici, transparence avant garanties.

9Annexe & licences

API du relais

POST /r/{salon}   body {"id","m"}        -> {ok, ts}
GET  /r/{salon}?since={ms}              -> {msgs:[{mid,id,m,ts}], now}
# TTL message : 1 h (Deno KV). Taille max : 200 000 car. CORS *.

Persistance locale (localStorage)

  • omega_key_chat_v1 — le fil (en clair).
  • omega_relay — { url, salon } pour reconnexion rapide.

Licences

Le code est sous licence MIT (voir LICENSE). En revanche, les listes de mots/syllabes embarquées dans l'application (génération de passphrases) sont dérivées de la base Lexique (Boris New & Christophe Pallier, lexique.org), diffusée en CC BY-SA 4.0. Par conséquent :

  • Attribution requise (citée dans NOTICE.md).
  • Partage à l'identique (ShareAlike) pour la partie données dérivées : tout dérivé reste sous CC BY-SA 4.0. L'usage commercial est autorisé sous cette condition.
Détails et texte complet : NOTICE.md à la racine du dépôt.