
Chat sécurisé en terminal. Serveur de retransmission aveugle sans métadonnées, chiffré de bout en bout. PyNaCl XSalsa20-Poly1305 + Ed25519 + secret de transmission. Python multiplateforme.
Chat de groupe chiffré de bout en bout, messages privés et transfert de fichiers dans votre terminal. Le serveur est un relayeur aveugle : il ne peut pas lire vos messages, ne connaît pas votre nom d'utilisateur, ne connaît pas le salon dans lequel vous vous trouvez et ne peut lier aucun message à une même personne, même s'il est entièrement compromis.
https://github.com/user-attachments/assets/d9faabfb-73bd-46dd-92b2-23f63daf5b06
https://github.com/user-attachments/assets/e8e0220d-cd7d-45a2-9443-9a5f20b57f12
https://github.com/user-attachments/assets/15fb383d-a02a-433e-bbd9-8ebadecf9481
https://github.com/user-attachments/assets/bca10cb1-6959-425d-96d6-fc1fbf845538
NoEyes est un outil de chat en terminal Python pour les petits groupes de confiance. Le serveur ne déchiffre jamais rien et ne voit jamais qui vous êtes – il ne gère que des jetons opaques et transmet des octets chiffrés.
Vous générez la clé, vous la partagez hors bande, et le serveur n'apprend rien de vos conversations.
Utile pour les petits groupes de confiance qui souhaitent des communications chiffrées sans faire confiance à un serveur tiers, héberger eux-mêmes un chat privé avec un véritable chiffrement de bout en bout, ou toute personne qui souhaite comprendre exactement ce qu'un serveur peut ou ne peut pas voir.
| Fonctionnalité | Détails |
|---|---|
| Serveur zéro-métadonnée | Le serveur ne voit jamais les noms d'utilisateur, les noms de salon ou les clés publiques, seulement des jetons opaques |
| Expéditeur scellé | L'identité de l'expéditeur se trouve à l'intérieur de la charge utile chiffrée, jamais dans l'en-tête de routage |
| Serveur relayeur aveugle | Aucun déchiffrement, le serveur transmet des blobs chiffrés qu'il ne peut pas lire |
| Secret de transmission | /ratchet start — Protocole Sender Keys, chaque message chiffré avec une clé dérivée unique, les messages passés restent protégés même si la clé actuelle fuit |
| Salon de groupe | Clés XSalsa20-Poly1305 par salon dérivées via BLAKE2b, salons isolés cryptographiquement |
| Messages privés | Échange de clés X25519 DH lors du premier contact, clé par paire détenue uniquement par les deux parties |
| Transfert de fichiers | Streaming ChaCha20-Poly1305, taille quelconque, faible utilisation de RAM, pause/reprise après reconnexion |
| Identité Ed25519 | Clé de signature générée automatiquement, tous les messages et fichiers sont signés |
| TOFU | Les clés vues pour la première fois sont approuvées ; les discordances de clés déclenchent un avertissement de sécurité visible |
| Sel PBKDF2 aléatoire | Chaque déploiement reçoit un sel aléatoire unique, les tables arc-en-ciel sont inutiles |
| TLS + épinglage de certificat | Transport chiffré, certificat serveur épinglé lors du premier contact via TOFU |
| Protection contre la relecture | File d'attente d'ID de message par salon, les trames rejouées sont silencieusement ignorées |
| Panneau latéral divisé | Salons (en haut) et utilisateurs (en bas) toujours visibles, chaque moitié défile indépendamment |
| Animation de démarrage CRT | Effet de phosphore plein écran avec son au démarrage |
| Animation d'activation du ratchet | Effet CRT plein écran avec art braille à engrenages, scintillement glitch, balayage de projecteur, effets sonores synchronisés et transition chrome TUI vers le rouge |
| Lanceur guidé | Interface de menu avec touches fléchées, aucune expérience en ligne de commande nécessaire |
| Installateur automatique de dépendances | Détecte votre plateforme, installe ce qui manque, demande avant de modifier quoi que ce soit |
python ui/setup.py
python ui/launch.py
`ui/launch.py` vous guide pour démarrer un serveur ou s'y connecter.
---
### Option B - Si Python n'est pas encore installé
| Plateforme | Exécutez d'abord |
|---|---|
| Linux / macOS / Termux / iSH | `sh install/install.sh` |
| Windows | `install\install.bat` |
Les deux scripts installent Python s'il est manquant, puis passent automatiquement à `setup.py`.
---
### Option C - Manuel```bash
# 1. Install dependencies
pip install cryptography PyNaCl
# 2. On the server machine — generate the access key
python noeyes.py --generate-access-key
# Prints an access code hex string — share with clients via USB
# 3. On a client machine — generate chat.key from the access code
python noeyes.py --generate-chat-key <ACCESS_CODE_HEX> --key-file ./chat.key
# Distribute chat.key to all other clients via USB. Never put it on the server.
# 4. Start the server (does NOT need the key file)
python noeyes.py --server --port 5000
# Start without bore tunnel (LAN / static IP / custom tunnel)
python noeyes.py --server --port 5000 --no-bore
# Start without adding a firewall rule (not needed when using bore tunnel)
python noeyes.py --server --port 5000 --no-firewall
# 5. Connect clients - each person needs their own identity file
python noeyes.py --connect SERVER_IP --port 5000 --username alice --key-file ./chat.key --identity-path ~/.noeyes/identity_alice.key
python noeyes.py --connect SERVER_IP --port 5000 --username bob --key-file ./chat.key --identity-path ~/.noeyes/identity_bob.key
Important : Chaque utilisateur doit avoir son propre fichier d'identité. Deux clients partageant le même fichier d'identité obtiennent le même jeton de boîte de réception et le serveur rejettera le second comme une session en double. Le fichier d'identité est généré automatiquement lors de la première exécution, transmettez simplement un
--identity-pathunique par utilisateur.
Téléchargez Termux depuis F-Droid (recommandé) : https://f-droid.org/packages/com.termux/
Gardez la session active - installez tmux pour que NoEyes continue de fonctionner lorsque vous changez d'application :```bash pkg install tmux -y tmux python ui/launch.py
**Permissions de stockage** - le transfert de fichiers échouera sans cela :```bash
termux-setup-storage