PaperLeitura de seis minutos
Um chat que esquece você.
De propósito.
A gente fez uma sala de conversa para o mundo inteiro e ensinou ela a ter péssima memória. Aqui está o como, em oito cenas curtas com desenho.
Resumo
O chat do OmniGet deixa qualquer pessoa falar com a gente sem conta, sem e-mail, sem cookie e sem script de outra empresa. O servidor guarda quatro coisas por mensagem e nada que aponte para uma pessoa. O controle de spam usa uma chave que morre a cada hora, um ingresso assinado e um quebra-cabeça minúsculo que o navegador resolve. Tudo derrete depois de 30 dias. Abaixo: como cada peça funciona, as ameaças que ela cobre e as que não cobre.
Nada para levar
Quase todo chat começa perguntando quem você é. O nosso começa não querendo saber.
Não tem cadastro, e-mail, cookie nem telefone. Você abre a página e já está na sala, com um nome bobo, tipo Sleepy Otter. Ninguém digita: o servidor cria a partir da sua conexão, com uma chave que só fica na memória e é jogada fora toda noite. Você fica com ele o dia todo, ninguém pega emprestado, e amanhã é outro.
| Guarda | Nunca guarda |
|---|---|
| um número, para manter a ordem | seu IP |
| o minuto em que chegou, em UTC | seu navegador e seu sistema |
| o seu nome daquele dia | seu idioma ou seu país |
| o texto que você escreveu | cookie, e-mail ou conta |
Um porteiro que esquece rostos
Toda sala aberta atrai robô vendendo SEO. O mural antigo recebia mais spam do que bug. Então a porta precisa de porteiro, e porteiro conta gente.
O nosso conta de olhos vendados. Sua conexão vira um código feito com uma chave secreta (um HMAC). A chave vive só na memória e vai para o lixo a cada hora, junto com toda contagem feita com ela. Na hora seguinte, você é um desconhecido de novo.
O código nunca vai para o disco: não fica no banco, num log nem em lugar nenhum que um backup possa pegar.
Um quebra-cabeça para cada mensagem
Antes de você enviar, o servidor entrega à sua página um ingresso, assinado com outra chave que também vive só na memória. Um ingresso vale uma vez, e só alguns segundos depois de emitido, mais ou menos o tempo que uma pessoa leva para digitar.
Enquanto você digita, o navegador resolve em segundo plano um quebra-cabeça pequeno com esse ingresso: achar um número que faça o SHA-256 dele começar com 16 bits zero. Para o seu computador é um instante. Para uma fazenda de spam mandando milhões de mensagens, é muita conta de luz.
Assim, inundar a sala custa tempo de processador, e barrar o spam não custa a privacidade de ninguém. Você não prova quem é, só que o navegador fez um pouquinho de trabalho.
Sem JavaScript? Tudo bem. O Tor Browser no nível mais seguro continua funcionando: o formulário vai como HTML puro, com limites mais apertados no lugar do quebra-cabeça.
Palavras num pote
Mensagem é texto e só texto. Sem imagem, sem prévia, sem incorporação. Um link continua sendo uma linha de letras e nunca vira algo em que você clica sem querer.
Uma imagem num chat é um pedido pequeno ao servidor de outra pessoa, e esse pedido leva o seu IP. Aqui não tem nada para carregar, então ler o chat nunca conta a ninguém que você estava lendo.
O site inteiro não carrega nada de outra origem: sem fonte externa, sem analytics, sem CDN. Uma Content Security Policy rígida faz o navegador recusar qualquer outra coisa, mesmo se alguém tentasse.
Tudo derrete
As mensagens são apagadas depois de 30 dias. Não escondidas: apagadas, com o banco configurado para sobrescrever o que remove.
O horário fica guardado só até o minuto, não o segundo, para que uma mensagem não possa ser casada com um instante preciso em outro lugar.
O servidor web mantém um log anônimo pequeno para contar visitas. Os pedidos do chat ficam totalmente de fora: o log nem sabe que uma mensagem foi enviada.
Quando alguém apronta
Qualquer pessoa pode apertar Denunciar. Quando três conexões diferentes denunciam a mesma mensagem, ela se esconde até o autor olhar. Uma pessoa brava sozinha não consegue apagar ninguém.
O selo Oficial, com o Loop no avatar, não dá para falsificar. Não é um nome que se digita: ele só vem de um comando rodado no servidor. Nomes como Tonho, OmniGet ou Admin são recusados pela web.
Num dia ruim o autor pode deixar a sala mais lenta ou pausar por um tempo.
O que a gente não consegue prometer
Para responder você, qualquer servidor precisa ver o seu IP enquanto o pedido acontece. O nosso usa o IP para o código daquela hora e esquece. A gente não consegue fazer a internet esquecer: seu provedor, sua rede ou seu país podem ver que você visitou o getomniget.com.
E as palavras podem entregar você. Se você escrever seu nome, sua cidade ou o link do seu perfil, isso fica público por 30 dias.
O modelo de ameaça numa tabela
| Alguém quer | Coberto? | Por quê |
|---|---|---|
| ler o banco e descobrir quem escreveu o quê | Sim | não há IP, navegador, e-mail nem cookie lá |
| ligar duas mensagens à mesma pessoa | Quase | mensagens da mesma conexão no mesmo dia têm o mesmo nome; de um dia para outro, não |
| inundar a sala de spam | Sim | ingressos, quebra-cabeças e limites por hora |
| se passar pelo autor | Sim | o selo só sai do servidor |
| ver que você visitou o site | Não | sua rede vê; use o Tor Browser se isso importa |
| reconhecer você pelo jeito de escrever | Não | nenhum software impede isso |
Leia com os próprios olhos
Você não precisa confiar nesta página. O servidor do chat é um arquivo só de Python puro, sem biblioteca de terceiros, server/contact/contact.py no código do site, sob GPL-3.0. As regras acima estão escritas nele, linha por linha.
Abra as ferramentas de desenvolvedor do navegador no chat e olhe a aba de rede. Você vai ver a página conversando com o getomniget.com e com mais ninguém.
O chat está aberto se você quiser testar qualquer coisa daqui. Passa lá para dar oi.