chat no terminal, cifrado ponta a ponta

O servidor só repassa blobs cifrados: não lê as conversas e, por padrão, não guarda histórico. Canais abertos e privados, mensagens diretas com sigilo por sessão, voz e arquivos.

1. baixe o cliente

▶ recomendado para vocêLinux x86_64crptochat-linux-amd64 ▶ recomendado para vocêLinux ARM64crptochat-linux-arm64 · Raspberry Pi 4/5 ▶ recomendado para vocêmacOS (Apple Silicon)crptochat-macos-arm64 ▶ recomendado para vocêWindows x64crptochat-windows-amd64.exe

Também aqui: RELEASE (manifesto com versão e SHA-256) e RELEASE.sig (assinatura Ed25519).

2. confira antes de rodar

Um chat cifrado só vale se o binário for o original. O manifesto RELEASE é assinado, e esta é a chave de assinatura das releases:

fingerprint:
SHA256 bbb1 c46e c211 64f5 2da8 8815 ebbe b73c 6795 0bea e86e 79b4 a781 8057 cd77 ce1e

chave pública:
oH5pJyULtqqayVJ0sOWdrSbSOj+NqlNGnNkPd05yOYE=

Confira a mesma fingerprint por outro canal (no grupo, com quem te passou o link): se alguém trocasse esta página, trocaria a chave também.

Linux (troque o nome do arquivo se for ARM64):

# 1) assinatura do manifesto (OpenSSL 3)
printf -- '-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAoH5pJyULtqqayVJ0sOWdrSbSOj+NqlNGnNkPd05yOYE=\n-----END PUBLIC KEY-----\n' > crptochat.pub
openssl base64 -d -A -in RELEASE.sig -out RELEASE.sig.bin
openssl pkeyutl -verify -pubin -inkey crptochat.pub -rawin -in RELEASE -sigfile RELEASE.sig.bin
# deve dizer: Signature Verified Successfully

# 2) SHA-256 do binário contra o manifesto assinado
grep ' crptochat-linux-amd64$' RELEASE | sha256sum -c -
# deve dizer: crptochat-linux-amd64: OK

chmod +x crptochat-linux-amd64

macOS: o openssl do sistema (LibreSSL) não confere Ed25519. Use o do Homebrew (brew install openssl@3), trocando openssl por $(brew --prefix openssl@3)/bin/openssl nos comandos acima. Para o hash:

grep ' crptochat-macos-arm64$' RELEASE | shasum -a 256 -c -
chmod +x crptochat-macos-arm64
xattr -d com.apple.quarantine crptochat-macos-arm64   # o binário não é assinado pela Apple

Windows (PowerShell):

$esperado = (Select-String -Path RELEASE -Pattern ' crptochat-windows-amd64\.exe$').Line.Split(' ')[0]
$atual = (Get-FileHash crptochat-windows-amd64.exe -Algorithm SHA256).Hash.ToLower()
if ($atual -eq $esperado) { "OK" } else { "NÃO CONFERE: não execute" }

A assinatura do RELEASE no Windows: rode os comandos de Linux no Git Bash, que já traz o OpenSSL 3.

Se qualquer conferência falhar, não execute o arquivo e avise no grupo.

3. conecte

./crptochat-linux-amd64 crptochat.acpt.app.br --pin 9ba6d425f166820e049fbb628f43d7d51387f867e32bbbc4a26db83bfa3b1323

No Windows: .\crptochat-windows-amd64.exe crptochat.acpt.app.br --pin 9ba6d425f166820e049fbb628f43d7d51387f867e32bbbc4a26db83bfa3b1323

fingerprint do certificado do servidor (o --pin):
9ba6d425f166820e049fbb628f43d7d51387f867e32bbbc4a26db83bfa3b1323

Com o --pin, o cliente recusa qualquer servidor que não seja este, já na primeira conexão.

4. confira quem é quem

O servidor não é confiável por projeto: ele não lê nada, mas poderia tentar se passar por alguém. Por isso, com quem importa:

/whois nickmostra a fingerprint e o número de segurança entre vocês dois
/verify nickcompare o número por outro meio (pessoalmente, ligação) e marque ✓
⚠ chave mudouas mensagens diretas ficam bloqueadas até vocês conferirem de novo

comandos úteis

/msg nick textomensagem direta cifrada
/create #canal privadocanal protegido por senha (a senha nunca vai ao servidor)
/send nick arquivoarquivo cifrado de ponta a ponta
/rec · F2mensagem de voz, com disfarce de voz por padrão
/ttl nick 10mmensagens diretas que somem
/search texto · Ctrl+Fbusca no que está na tela (só local)
/helptodo o resto