e2hat — criptografia ponta a ponta no navegador
O e2hat é um chat web com criptografia ponta a ponta construído sobre o código de curvas elípticas do ecutils: a cifragem roda no navegador, então o servidor só trafega texto cifrado. A versão inicial colocou as mensagens em movimento; os dias seguintes foram sobre autenticação, forward secrecy e proteção contra replay.
Chaves que não sobrevivem à conversa. A primeira versão reusava uma chave Diffie–Hellman estática. Ela foi trocada por renegociação de chave DH efêmera, de modo que cada sessão deriva chaves novas e uma chave comprometida não expõe retroativamente as mensagens anteriores — forward secrecy. Os escalares por mensagem vêm de HKDF, com uma correção de viés na forma como eram derivados.
Assumir que o canal é hostil. Um servidor que apenas trafega texto cifrado ainda pode reordenar, repetir ou descartar. Aqui entraram autenticação por desafio–resposta, assinaturas ECDSA, autenticação com separação de domínio para que um valor assinado com um propósito não seja reusado em outro, estado anti-replay que sobrevive a um reload, e uma sondagem pré-envio que confere se os dois lados concordam sobre as chaves efêmeras antes de a mensagem sair. As chaves em repouso são guardadas com AES-GCM no IndexedDB.
Mensagens como pontos da curva. Como o transporte é por curva elíptica, o texto precisa virar pontos sobre a curva (codificação de Koblitz), o que limita quanto cabe em um ponto. Mensagens longas são quebradas em fronteiras de palavra e remontadas em um único balão do outro lado.
O e2hat está no ar em e2hat.com.