Verifica em 2 minutos
Prime F12 no teu navegador. Não precisas de instalar nada. Sem conhecimentos de programação.
| Afirmação | Como verificar | Separador |
|---|---|---|
| Nenhum cookie de qualquer tipo | Application → Cookies → vazio. O Solo2 não instala nenhum cookie. A tua sessão é mantida em localStorage, não em cookies. Sem _ga |
Application |
| Sem serviços de terceiros na app | Network → filtrar por domínio → apenas pedidos a solo2.net |
Network |
| Analytics apenas no landing, não na app | Network → apenas no landing (raiz), não em /app/* |
Network |
| O teu histórico vive no teu navegador | Application → IndexedDB → solo2-vault-{userId}. Todas as tuas mensagens e ficheiros estão aí. O servidor não tem nada. |
Application |
| Lista de contactos apenas local | Application → IndexedDB → store pares. Os teus contactos existem apenas no teu navegador. |
Application |
| Sem CDNs externos | Network → todos os JS/CSS carregam do mesmo domínio. Sem cdn.jsdelivr.net, sem googleapis.com, sem cloudflare.com. Tudo é nosso. |
Network |
| Sessões de 24 horas no máximo | Application → localStorage → solo2_session. Verifica o timestamp de expiração. Nunca é superior a 24h desde a criação. |
Application |
| Podes ver que tipo de ligação estás a usar | Na interface do chat: indicador P2P (verde) vs Mirror/TURN (laranja) visível a todo o momento. | UI |
| Umami é sem cookies | Application → Cookies → nenhum cookie de stats.menzuri.com aparece. O Umami conta visitas sem te identificar. |
Application |
| A tua chave mestra é gerada aleatoriamente | Application → ao registares-te, o Solo2 gera 24 palavras únicas. Não são derivadas da tua palavra-passe — são uma chave independente com 256 bits de entropia real | Application |
Se sabes usar os DevTools
Verificações que requerem conhecimento técnico. Se compreendes HTTP, WebRTC e criptografia básica, podes verificar tu mesmo.
| Afirmação | Como verificar |
|---|---|
| Mensagens encriptadas E2E | Network → os pedidos a /cmd transportam payloads binários. O corpo é um blob opaco, não JSON legível. O servidor recebe texto cifrado que não pode decifrar. |
| Sinais WebRTC encriptados E2E | Network → as mensagens de sinal viajam como blobs binários encriptados. Não são JSON legível com candidate ou sdp em texto simples. |
| Chave mestra independente da palavra-passe | Network → o login recebe um wrapped_master_key |
| Padding uniforme no mirror | Network → os pacotes WebSocket/DataChannel têm tamanho fixo quando se usa relay. Inspeciona os tamanhos na aba Network — devem ser todos idênticos independentemente do comprimento da mensagem. |
| Palavra-passe protegida (nunca viaja em texto simples) | Network → o login envia um hash, não texto simples. Não podes verificar que algoritmo o servidor usa (Argon2id), mas podes ver que a tua palavra-passe original nunca sai do navegador. |
| Pedidos de emparelhamento expiram em 3 dias | Cria um pedido, não respondas, verifica após 3 dias que desapareceu. Requer paciência e duas contas. |
| Notificações push encriptadas | Network → os pedidos push ao Service Worker chegam encriptados (padrão Web Push). Podes ver o payload encriptado na aba Network. |
| Ligação P2P direta vs relay | chrome://webrtc-internals/ → mostra os candidatos ICE e o tipo de ligação ativo. Se ambos os peers estão na mesma rede, deves ver candidatos host (diretos, sem relay). |
Isto não podes verificar
Seríamos hipócritas se disséssemos que tudo é verificável. Estas afirmações requerem que confies em nós até certo ponto — ou que esperes até publicarmos o código fonte.
| Afirmação | Porque não é verificável |
|---|---|
| Double Ratchet com rotação de chaves | As operações criptográficas ocorrem dentro de um binário WASM. O utilizador vê que carrega, mas não pode inspecionar os algoritmos internos. |
| A chave mestra é gerada com entropia real (256 bits) | A geração usa crypto.getRandomValues dentro do navegador. Podes ver que são geradas 24 palavras, mas não podes verificar a partir do F12 a qualidade da entropia nem que o CSPRNG seja seguro |
| X25519 + Ed25519 + ChaCha20-Poly1305 | Mesmo problema: a pilha criptográfica está dentro do WASM. As curvas e algoritmos usados não podem ser confirmados sem código fonte. |
| O servidor é "completamente cego" | Podes verificar que o cliente não envia dados legíveis. O que o servidor faz com os metadados (IPs, timestamps) não é observável do exterior. |
| O servidor não guarda relações após o emparelhamento | Requer acesso ao código e à base de dados do servidor. |
| Os IPs não são registados | Não podes verificar o que o servidor regista nos seus logs. |
| As chaves rodam com cada mensagem | Acontece dentro do WASM. Vês mensagens enviadas, mas não podes observar a rotação de chaves. |
| Os dados apagados desaparecem realmente | Podes apagar da IndexedDB local, mas não podes verificar que o servidor não retém cópias (embora tecnicamente não tenha razão para o fazer, já que nunca teve o conteúdo decifrado). |
Porque o WASM é uma barreira real
A camada criptográfica do Solo2 é compilada em WebAssembly — um formato binário que o teu navegador executa mas que não pode ser facilmente inspecionado ou descompilado em código fonte legível.
O JavaScript minificado (que usamos para a interface) é reversível: o navegador pode reformatá-lo e podes ler a lógica. O WASM não: é código máquina compilado, como uma aplicação nativa. Podes ver que se executa, mas não como funciona internamente.
Dizemos que é Double Ratchet com X25519. Podes confiar na nossa palavra, ou podes esperar até publicarmos o código fonte crypto como repositório público. Entretanto, as partes verificáveis (rede, armazenamento, cookies, ligações) estão abertas à inspeção de qualquer pessoa com um navegador.
O que estamos a fazer para que possas confiar mais
Publicar os hashes SHA-256 dos ficheiros .wasm
Publicaremos o hash criptográfico de cada ficheiro WASM em produção. Assim qualquer auditor pode verificar que o ficheiro servido pelo servidor corresponde à versão compilada.
Abrir a camada crypto como código aberto
Publicar o código fonte da camada criptográfica (Zig) como repositório público. O mesmo modelo do libsignal do Signal. Qualquer pessoa pode compilar, comparar o binário com o que está em produção e verificar que estamos a executar o que dizemos.
A segurança não depende da obscuridade
O nosso modelo de segurança é concebido para funcionar mesmo que o código fonte seja público. Se a arquitetura é sólida, publicar o código torna-a mais forte, não mais fraca. Esse é o objetivo.
5 camadas de segurança documentadas
Palavra-passe (acesso ao servidor), 24 palavras (chave mestra real), segredo do dispositivo (proteção do cofre) e rotação Double Ratchet. Cada camada é independente e verificável no nosso Manifesto de Transparência.