Arquitetura Zero-Knowledge

A arquitetura de conhecimento zero do CriptEnv garante que o servidor nunca tenha acesso aos seus segredos em texto claro. Toda criptografia e descriptografia acontece exclusivamente no navegador do usuário, usando a senha mestra que nunca é transmitida.

Info

Em termos simples: mesmo que o servidor seja completamente comprometido, os atacantes só teriam acesso a dados criptografados que são inúteis sem sua senha mestra.

O Que É Conhecimento Zero?

No contexto do CriptEnv, "conhecimento zero" significa que o servidor pode confirmar que você tem a senha correta (através do vault proof) sem jamais saber qual é essa senha ou ter acesso às chaves derivadas dela.

Isso é diferente de sistemas tradicionais onde o servidor armazena hashes de senha e os dados — no CriptEnv, os dados criptografados são inúteis mesmo para quem controla o servidor.

Como Funciona a Criptografia do Lado do Cliente

Todo o processo de criptografia acontece no navegador usando a Web Crypto API:

text
┌──────────────────────────────────────────────────────────────┐
│                    NAVEGADOR DO USUÁRIO                       │
│                                                              │
│  ┌─────────────┐    ┌──────────────┐    ┌────────────────┐  │
│  │   Senha     │───▶│   PBKDF2     │───▶│  Chave Mestra  │  │
│  │   Mestra    │    │  (100k iter) │    │   (256-bit)    │  │
│  └─────────────┘    └──────────────┘    └───────┬────────┘  │
│                                                  │           │
│  ┌─────────────┐    ┌──────────────┐            │           │
│  │  Segredo    │───▶│  AES-256-GCM │◀───────────┘           │
│  │  (plaintext)│    │              │    + HKDF(env_id)       │
│  └─────────────┘    └──────┬───────┘                        │
│                            │                                 │
│                     Ciphertext                               │
│                  (IV + data + tag)                           │
└────────────────────────┼─────────────────────────────────────┘
                         │
                         ▼  Apenas ciphertext é enviado
┌──────────────────────────────────────────────────────────────┐
│                    SERVIDOR                                  │
│                                                              │
│   Armazena: ciphertext (inútil sem a chave)                 │
│   Recebe: vault proof (para verificação)                    │
│   Nunca vê: senha, chaves, plaintext                        │
└──────────────────────────────────────────────────────────────┘

O Que o Servidor Vê vs. Não Vê

text
✓ Ciphertext (dados criptografados em AES-256-GCM)
✓ IVs (vetores de inicialização — não são secretos)
✓ Auth Tags (tags de autenticação GCM)
✓ Salt do PBKDF2 (gerado no registro, público por design)
✓ Vault Proof (hash derivado para autenticação)
✓ IDs de ambientes e projetos (metadados não-secretos)
✓ Timestamps de criação e modificação
✓ Estrutura organizacional (projetos, ambientes)

Mecanismo do Vault Proof

O vault proof permite que o servidor verifique se o usuário conhece a senha correta sem que a senha ou as chaves de criptografia sejam transmitidas.

text
Geração do Vault Proof:
━━━━━━━━━━━━━━━━━━━━━

Senha Mestra + "proof_salt" (constante)
         │
         ▼
   PBKDF2-HMAC-SHA256 (100.000 iterações)
         │
         ▼
   Vault Proof (256-bit hash)
         │
         ▼
   Enviado ao servidor para verificação

O servidor armazena apenas o hash do proof.
Na autenticação, compara o proof enviado com o armazenado.
Se coincidir → acesso autorizado.
Se não coincidir → acesso negado.

        Importante: o vault proof é derivado da mesma senha mestra,
        mas com salt diferente ("proof_salt"), garantindo que:
• O proof não pode ser usado para derivar a chave de criptografia
• A chave de criptografia não pode gerar o proof
• São dois caminhos criptográficos independentes

Info

O vault proof usa um salt constante ("proof_salt") porque seu propósito é autenticação, não proteção de dados. Isso é seguro porque o proof não pode ser revertido para obter a chave de criptografia.

Implicações Práticas

🔑 Esqueceu a senha?

Não há mecanismo de recuperação. Como o servidor nunca teve acesso à sua senha ou chaves, não é possível recuperar dados sem ela. Isso é uma feature, não um bug — garante que ninguém além de você pode acessar seus segredos.

🏢 Segurança para Equipes

Em ambientes compartilhados, cada membro da equipe mantém sua própria chave mestra. Os segredos são re-criptografados com a chave de cada membro autorizado, garantindo isolamento criptográfico completo.

🔍 Auditoria

O servidor pode registrar eventos de acesso (timestamps, IPs, IDs de ambiente) sem nunca ter acesso ao conteúdo dos segredos. Isso permite auditoria de segurança sem comprometer a arquitetura zero-knowledge.