Fundamentos Criptográficos
Cada afirmação que o Hashiverse faz sobre soberania de dados, resistência à censura e independência de propriedade é sustentada por criptografia. Isto não é decorativo — é a razão pela qual essas afirmações são verdadeiras. Compreender a camada criptográfica é compreender o alicerce sobre o qual tudo o resto é construído.
Identidade
Uma identidade do Hashiverse não é atribuída por um servidor. É derivada de chaves:
ID = Blake3(ed25519_pub || Blake3(Falcon_pub)[0..16] || Blake3(Dilithium_pub)[0..16]) O teu ID público é um hash de 256 bits de três chaves públicas — uma clássica (Ed25519), duas pós-quânticas (FN-DSA/Falcon e ML-DSA/Dilithium). Os compromissos de 16 bytes para as chaves PQ vinculam-nas à tua identidade desde já, antes de os computadores quânticos serem uma ameaça prática. Quando acontecer a migração quântica, o caminho de atualização já está incorporado em todas as identidades da rede.
As identidades dos servidores funcionam da mesma forma, com o requisito adicional de que o ID tem de satisfazer uma condição de proof-of-work (um prefixo de zeros à cabeça no hash). Isto torna a criação de identidades de servidor computacionalmente cara, prevenindo ataques de Sybil ao anel DHT.
A chave privada de assinatura Ed25519 do cliente é guardada exclusivamente no
secure enclave da Web Crypto API do browser, como um objeto
CryptoKey não-extraível. O browser expõe apenas uma operação de assinatura — os
bytes da chave privada nunca estão acessíveis ao JavaScript, ao módulo WASM, ou a qualquer
outro código a correr na página. Não existe mecanismo para exportar ou recuperar a chave
privada depois de importada. A assinatura acontece dentro da camada criptográfica do browser;
a chave nunca a abandona.
Esta é uma restrição deliberada, não uma limitação. Mesmo que o cliente WASM do Hashiverse estivesse totalmente comprometido, um atacante poderia, no máximo, invocar a operação de assinatura em nome da vítima — não conseguia roubar a chave e usá-la noutro sítio.
Origem: hashiverse-lib/src/tools/ —
tipos Hash, Id, Signature;
server_id.rs para a PoW de identidade do servidor.
Assinaturas híbridas pós-quânticas
A identidade de três chaves permite um caminho de migração progressivo:
- Hoje: as publicações são assinadas com Ed25519. A verificação é rápida e bem compreendida.
- Quando o Ed25519 for ameaçado: migrar a assinatura primária para FN-DSA (Falcon), que tem assinaturas mais pequenas que o Dilithium.
- Se os algoritmos baseados em redes (lattices) forem mais tarde quebrados: recorrer ao ML-DSA (Dilithium) como camada final.
O SPHINCS+ foi considerado e rejeitado: as suas assinaturas têm vários kilobytes, o que é proibitivo para uma rede de publicações de alto débito. A combinação Falcon + Dilithium fornece duas suposições independentes de segurança baseadas em lattices, o que significa que ambas teriam de ser quebradas em simultâneo para a identidade ser comprometida.
Origem: hashiverse-lib/src/tools/ primitivos criptográficos;
encoded_post.rs para a seleção do mecanismo de assinatura por publicação.
Hashing
Blake3 é a função de hash primária — rápida, paralelizável, e adequada para checksums, endereçamento por conteúdo e derivação de chaves. Para a Proof of Work, a suite completa de hashing disponível no protocolo inclui Blake2, Blake3, SHA2, SHA3, Whirlpool, Groestl e Skein. A PoW encadeia múltiplos algoritmos numa sequência pseudoaleatória, o que aumenta a resistência a ASICs ao exigir uma coimplementação eficiente de vários algoritmos dependentes do caminho em simultâneo.
Todas as bibliotecas de hash são compiladas com opt-level=3 mesmo nas builds de
debug — isto está configurado nos overrides de profile do Cargo.toml do
workspace para impedir que as suites de teste fiquem limitadas pela computação de hashes.
Cifragem em repouso
As publicações guardadas nos servidores são cifradas com ChaCha20-Poly1305. A chave é derivada de uma passphrase que depende do tipo de balde:
- Cronologia de utilizador: a passphrase é o ID público do utilizador
- Hashtag: a passphrase é o texto do hashtag em minúsculas (sem #)
- Menção: a passphrase é o ID público do utilizador mencionado
- Resposta: a passphrase é a assinatura de conteúdo da publicação original
Um esquema personalizado de cifragem com várias passphrases, vagamente inspirado no
age, significa que uma única publicação que abranja vários contextos — uma
publicação com hashtag que também menciona um utilizador — pode ser decifrada por qualquer
pessoa que possua qualquer uma das passphrases. Os servidores guardam bytes cifrados que não
conseguem ler. Não há texto-claro em disco no servidor.
Origem: encoded_post.rs
para a cifragem de publicações; hashiverse-lib/src/tools/ para os primitivos
ChaCha20-Poly1305.
Assinaturas em tudo
Cada publicação é assinada pelo seu autor. Cada resposta de servidor é assinada pelo servidor que a serve. Cada bundle é assinado. As assinaturas não são metadados opcionais — são o mecanismo pelo qual os clientes podem confiar em conteúdo recebido de servidores não-fiáveis. Um cliente nunca precisa de confiar num servidor; confia na assinatura criptográfica do conteúdo que esse servidor entrega.
Duas camadas de segurança no transporte
O Hashiverse separa a cifragem do transporte da segurança do protocolo, e trata-as como preocupações independentes:
Camada de transporte (TLS): A comunicação servidor-a-servidor e cliente-a-servidor corre sobre HTTPS usando certificados TLS emitidos pelo Let's Encrypt. Como os servidores Hashiverse são identificados por endereço IP em vez de nome de domínio, o servidor obtém um certificado TLS apenas para IP através do protocolo ACME. Isto cifra o tráfego em trânsito e impede a escuta passiva no fio.
Camada de protocolo (criptografia do Hashiverse): O TLS por si só não é suficiente para uma rede descentralizada sem confiança — um servidor comprometido ou malicioso poderia ainda assim servir conteúdo adulterado sobre uma ligação TLS válida. A criptografia própria do Hashiverse fornece a garantia mais profunda: cada peça de conteúdo é assinada pelas chaves do seu autor, as publicações são cifradas em repouso com chaves que o servidor nunca tem, e as identidades dos servidores estão vinculadas a compromissos de proof-of-work. Um cliente não precisa de confiar em nenhum servidor; verifica o conteúdo diretamente contra assinaturas criptográficas, independentemente da forma como chegou.
O TLS trata da rede; a criptografia do Hashiverse trata da verdade.