
Chat de terminal seguro. Servidor retransmissor cego com criptografia E2E e zero metadados. PyNaCl XSalsa20-Poly1305 + Ed25519 + sigilo progressivo. Python multiplataforma.
Chat em grupo com criptografia de ponta a ponta, mensagens privadas e transferência de arquivos no seu terminal. O servidor é um encaminhador cego: ele não consegue ler suas mensagens, não sabe seu nome de usuário, não sabe em qual sala você está e não consegue associar duas mensagens à mesma pessoa, mesmo que seja totalmente comprometido.
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
O NoEyes é uma ferramenta de chat de terminal em Python para pequenos grupos de confiança. O servidor nunca descriptografa nada e nunca vê quem você é - ele apenas lida com tokens opacos e encaminha bytes criptografados.
Você gera a chave, a compartilha fora de banda, e o servidor não aprende nada sobre suas conversas.
Útil para pequenos grupos de confiança que desejam comunicações criptografadas sem confiar em nenhum servidor de terceiros, para autohospedar um chat privado com criptografia de ponta a ponta real, ou para qualquer pessoa que queira entender exatamente o que um servidor pode e não pode ver.
| Recurso | Detalhes |
|---|---|
| Servidor de metadados zero | O servidor nunca vê nomes de usuário, nomes de salas ou chaves públicas, apenas tokens opacos |
| Remetente selado | A identidade do remetente vive dentro do payload criptografado, nunca no cabeçalho de roteamento |
| Servidor de encaminhamento cego | Zero descriptografia, o servidor encaminha blobs criptografados que não consegue ler |
| Sigilo de encaminhamento | /ratchet start — protocolo Sender Keys, cada mensagem é criptografada com uma chave derivada exclusiva, mensagens passadas permanecem seguras mesmo se a chave atual vazar |
| Chat em grupo | Chaves XSalsa20-Poly1305 por sala derivadas via BLAKE2b, salas criptograficamente isoladas |
| Mensagens privadas | Handshake X25519 DH no primeiro contato, chave pareada que somente as duas partes possuem |
| Transferência de arquivos | Streaming ChaCha20-Poly1305, qualquer tamanho, baixo uso de RAM, pausa/retomada entre reconexões |
| Identidade Ed25519 | Chave de assinatura gerada automaticamente, todas as mensagens e arquivos são assinados |
| TOFU | Chaves vistas pela primeira vez são confiáveis; incompatibilidades de chave disparam um aviso de segurança visível |
| Sal PBKDF2 aleatório | Cada implantação obtém um sal aleatório exclusivo, tabelas arco-íris são inúteis |
| TLS + fixação de certificado | Transporte criptografado, certificado do servidor fixado no primeiro contato via TOFU |
| Proteção contra replay | Deque de IDs de mensagem por sala, quadros repetidos são descartados silenciosamente |
| Painel lateral dividido | Salas (topo) e usuários (base) sempre visíveis, cada metade rola de forma independente |
| Animação de inicialização CRT | Efeito fósforo em tela cheia com som na inicialização |
| Animação de ativação do ratchet | Efeito CRT em tela cheia com arte de engrenagem em braille, flicker de glitch, varredura de holofote, SFX sincronizado e transição do chrome da TUI para vermelho |
| Lançador guiado | Menu de interface com teclas de seta, sem necessidade de experiência com linha de comando |
| Instalador automático de dependências | Detecta sua plataforma, instala o que falta, pergunta antes de alterar qualquer coisa |
python ui/setup.py
python ui/launch.py
`ui/launch.py` orienta você a iniciar um servidor ou conectar-se a um.
---
### Opção B - Se o Python ainda não estiver instalado
| Plataforma | Execute isto primeiro |
|---|---|
| Linux / macOS / Termux / iSH | `sh install/install.sh` |
| Windows | `install\install.bat` |
Ambos os scripts instalam o Python se estiver ausente e, em seguida, passam para `setup.py` automaticamente.
---
### Opção C - Manual```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
Importante: Cada usuário deve ter seu próprio arquivo de identidade. Dois clientes compartilhando o mesmo arquivo de identidade obtêm o mesmo token de caixa de entrada e o servidor rejeitará o segundo como uma sessão duplicada. O arquivo de identidade é gerado automaticamente na primeira execução; basta passar um
--identity-pathexclusivo por usuário.
Baixe o Termux pelo F-Droid (recomendado): https://f-droid.org/packages/com.termux/
Mantenha a sessão ativa - instale o tmux para que o NoEyes continue rodando quando você trocar de aplicativos:```bash pkg install tmux -y tmux python ui/launch.py
**Permissões de armazenamento** - a transferência de arquivos falhará sem isso:```bash
termux-setup-storage
| Comando | Descrição |
|---|---|
/help | Mostrar todos os comandos |
/quit | Desconectar e sair |
/clear | Limpar mensagens da tela |
/users | Listar usuários na sala atual |
/join <room> | Mudar para uma sala (avisa se estiver em ratchet ativo) |
/leave | Voltar para a sala geral (avisa se estiver em ratchet ativo) |
/msg <user> <text> | Enviar uma mensagem privada criptografada de ponta a ponta (E2E) |
/send <user> <file> | Enviar um arquivo criptografado |
/whoami | Mostrar sua impressão digital de identidade (fingerprint) |
/trust <user> | Confiar na nova chave de um usuário após ele reinstalar |
/notify on|off | Alternar sons de notificação |
/ratchet start | Propor chaves rolantes de sigilo progressivo (forward secrecy) a todos os membros da sala (todos devem confirmar) |
/ratchet invite <u> | Reinvitar um usuário ao ratchet depois que ele voltar (aciona reinício completo — nenhuma chave de cadeia é encaminhada) |
/proceed | Durante a espera de migração, votar para remover um par offline e retomar |