
Sicherer Terminal-Chat. E2E verschlüsselt, Server mit Null-Metadaten und Blind-Weiterleitung. PyNaCl XSalsa20-Poly1305 + Ed25519 + Vorwärtssicherheit. Plattformübergreifendes Python.
Ende-zu-Ende-verschlüsselter Gruppenchat, private Nachrichten und Dateiübertragung in deinem Terminal. Der Server ist ein blinder Weiterleiter: Er kann deine Nachrichten nicht lesen, kennt deinen Benutzernamen nicht, kennt den Raum nicht, in dem du dich befindest, und kann keine zwei Nachrichten derselben Person zuordnen, selbst wenn er vollständig kompromittiert ist.
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 ist ein Python-Terminal-Chat-Tool für kleine vertrauenswürdige Gruppen. Der Server entschlüsselt niemals etwas und sieht nie, wer du bist – er verarbeitet nur undurchsichtige Token und leitet verschlüsselte Bytes weiter.
Du generierst den Schlüssel, teilst ihn out-of-band, und der Server erfährt nichts über deine Unterhaltungen.
Nützlich für kleine vertrauenswürdige Gruppen, die verschlüsselte Kommunikation ohne Vertrauen in einen Drittanbieter-Server wünschen, für das Selbsthosten eines privaten Chats mit echter Ende-zu-Ende-Verschlüsselung oder für jeden, der genau verstehen möchte, was ein Server sehen kann und was nicht.
| Feature | Details |
|---|---|
| Null-Metadaten-Server | Server sieht niemals Benutzernamen, Raumnamen oder öffentliche Schlüssel, nur undurchsichtige Tokens |
| Versiegelter Absender | Die Identität des Absenders befindet sich im verschlüsselten Payload, niemals im Routing-Header |
| Blind-Weiterleitungs-Server | Keine Entschlüsselung, der Server leitet verschlüsselte Blobs weiter, die er nicht lesen kann |
| Vorwärtssicherheit | /ratchet start — Sender-Keys-Protokoll, jede Nachricht mit einem eindeutig abgeleiteten Schlüssel verschlüsselt, vergangene Nachrichten bleiben sicher, selbst wenn der aktuelle Schlüssel kompromittiert wird |
| Gruppenchat | Raumweise XSalsa20-Poly1305-Schlüssel, abgeleitet über BLAKE2b, Räume kryptografisch isoliert |
| Private Nachrichten | X25519-DH-Handshake beim ersten Kontakt, paarweiser Schlüssel, den nur die beiden Parteien besitzen |
| Dateiübertragung | ChaCha20-Poly1305-Streaming, beliebige Größe, geringer RAM-Verbrauch, Pause/Fortsetzen bei erneuter Verbindung |
| Ed25519-Identität | Automatisch generierter Signaturschlüssel, alle Nachrichten und Dateien sind signiert |
| TOFU | Erstmals gesehene Schlüssel werden vertraut; Schlüsselkonflikte lösen eine sichtbare Sicherheitswarnung aus |
| Zufälliges PBKDF2-Salz | Jede Bereitstellung erhält ein eindeutiges zufälliges Salz, Rainbow-Tabellen sind nutzlos |
| TLS + Zertifikat-Pinning | Transport verschlüsselt, Serverzertifikat wird beim ersten Kontakt per TOFU gepinnt |
| Replay-Schutz | Raumweise Nachrichten-ID-Deque, wiederholte Frames werden stillschweigend verworfen |
| Geteiltes Seitenpanel | Räume (oben) und Benutzer (unten) immer sichtbar, jede Hälfte scrollt unabhängig |
| CRT-Startanimation | Vollbild-Phosphor-Effekt mit Ton beim Start |
| Ratchet-Aktivierungsanimation | Vollbild-CRT-Effekt mit Braille-Zahnrad-Kunst, Glitch-Flimmern, Spotlight-Durchlauf, synchronisierten Soundeffekten und TUI-Chrome-Übergang zu Rot |
| Geführter Launcher | Pfeiltasten-Menü-Benutzeroberfläche, keine Befehlszeilenerfahrung erforderlich |
| Automatischer Abhängigkeitsinstaller | Erkennt deine Plattform, installiert Fehlendes, fragt vor jeder Änderung |
python ui/setup.py
python ui/launch.py
`ui/launch.py` führt dich durch das Starten eines Servers oder das Verbinden mit einem.
---
### Option B - Falls Python noch nicht installiert ist
| Plattform | Führe dies zuerst aus |
|---|---|
| Linux / macOS / Termux / iSH | `sh install/install.sh` |
| Windows | `install\install.bat` |
Beide Skripte installieren Python, falls es fehlt, und übergeben dann automatisch an `setup.py`.
---
### Option C - Manuell```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
Wichtig: Jeder Benutzer muss seine eigene Identitätsdatei besitzen. Wenn zwei Clients dieselbe Identitätsdatei teilen, erhalten sie denselben Posteingangs-Token und der Server lehnt den zweiten als doppelte Sitzung ab. Die Identitätsdatei wird beim ersten Start automatisch generiert; geben Sie einfach einen eindeutigen
--identity-pathpro Benutzer an.
Laden Sie Termux von F-Droid (empfohlen) herunter: https://f-droid.org/packages/com.termux/
Halten Sie die Sitzung aktiv - installieren Sie tmux, damit NoEyes weiterläuft, wenn Sie Apps wechseln:```bash pkg install tmux -y tmux python ui/launch.py
**Speicherberechtigungen** - ohne diese schlägt die Dateiübertragung fehl:```bash
termux-setup-storage
| Befehl | Beschreibung |
|---|---|
/help | Alle Befehle anzeigen |
/quit | Verbindung trennen und beenden |
/clear | Nachrichten vom Bildschirm löschen |
/users | Benutzer im aktuellen Raum auflisten |
/join <room> | In einen Raum wechseln (warnt, wenn aktiver Ratchet läuft) |
/leave | In den allgemeinen Raum zurückkehren (warnt, wenn aktiver Ratchet läuft) |
/msg <user> <text> | Eine E2E-verschlüsselte private Nachricht senden |
/send <user> <file> | Eine verschlüsselte Datei senden |
/whoami | Ihren Identitäts-Fingerprint anzeigen |
/trust <user> | Den neuen Schlüssel eines Benutzers nach einer Neuinstallation vertrauen |
/notify on|off | Benachrichtigungstöne umschalten |
/ratchet start | Allen Raummitgliedern Vorwärts-Verschlüsselungs-Rollkeys vorschlagen (alle müssen bestätigen) |
/ratchet invite <u> | Einen Benutzer erneut zum Ratchet einladen nach Rückkehr (löst vollständigen Neustart aus – keine Chain-Keys werden weitergeleitet) |
/proceed | Während der Migrationswartezeit abstimmen, einen offline-Peer fallen zu lassen und fortzufahren |