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é.
2Démarrage rapide
Trois couches indépendantes, à activer selon le besoin :
- Clé partagée confidentialité — dérivée d'une passphrase commune (§3–4).
- Ratchet DH FS + post-compromission — optionnel, à établir une fois (§6).
- 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) :
| Mode | Source | Entropie |
|---|---|---|
| Mots réels | Liste française de 4096 mots (Diceware) | 12 bits / mot (2¹²) |
| Pseudo-mots | 256 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.
4Clé partagée (les deux côtés)
Les deux appareils doivent aboutir à la même clé AES. Onglet 🔑 PARTAGÉE :
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).
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 :
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)
- dash.deno.com → New Playground.
- Coller server/omega-relay.ts → Save & Deploy.
- 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.
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
| Point | Détail / mitigation |
|---|---|
| Métadonnées relais | Le relais voit salon, horaires, tailles (pas le contenu). Mitige en l'auto-hébergeant (TTL court). |
| Code de salon | Adresse 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 / écho | Tout 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 clair | Conservé pour la reprise. Sur appareil partagé : 🗑 Effacer, ou demander un mode chiffré-au-repos / éphémère. |
| Transmission passphrase | Doit passer par un canal sûr séparé. |
| Mémoire RAM | JavaScript ne garantit pas l'effacement des anciennes clés en mémoire. |
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.