Modelo de criptografia
Formato .rkvey v5: preâmbulo, AEAD por compartimento, commits append-only e isolamento de segredos.
O formato .rkvey v5 (Rust Key Vault) implementa um modelo de criptografia multicamada conforme as boas práticas HKDF e AEAD. O modelo mental: senha mestra → chave mestra → subchaves → compartimentos criptografados.
Cada entrada é dividida em compartimentos (metadados, segredos protegidos, manifesto e arquivos anexos), cada um com sua própria chave HKDF. Descriptografar um compartimento não revela os demais.
Modelo de criptografia QubKey v5
Senha mestra
Entrada do usuário (UTF-8) — nunca armazenada em texto simples
Argônio2id
Sal
16 bytes (preâmbulo)
Memória
64MB
Iterações
3
Paralelismo
4
Saída
256 bits
Chave mestra
256 bits · chave raiz do cofre
HKDF-SHA256
info="hdr"
Chave de cabeçalho
chave_de_cabeçalho
HKDF-SHA256
info="idx"
Chave de índice
chave_índice
HKDF-SHA256
info="compartimento"
Chave do compartimento
chave_de_compartimento
Por entrada (v5)
HKDF(master_key, salt=file∥entry_id, info=kind∥sub_id) → Chave do Compartimento
Compartimentos criptografados
Derivação de chaves
A derivação transforma sua senha mestra em chaves criptográficas utilizáveis. Argon2id é intencionalmente intensivo em tempo e memória (~500 ms, 64 MB) para impor limites de velocidade offline. Em v5, cada compartimento de entrada recebe em seguida sua própria chave via HKDF.
Entrada do usuário → senha mestra (UTF-8)
Argon2id → master_key (256 bits) com salt aleatório
HKDF-SHA256 → index_key para o B-Tree
HKDF-SHA256 → compartment_key por entrada e tipo de compartimento (metadados, segredos, anexo…)
| Parâmetro | Valor | Descrição | Padrão |
|---|---|---|---|
Variant | Argon2id | Variante híbrida recomendada pela OWASP — resistente a GPU e ataques de canal lateral | — |
Memory | 64 MB | Memória por derivação — aumenta o custo de hardware de ataques paralelos | 65536 KB |
Iterations | 3 | Passagens sobre a memória — equilíbrio segurança/desempenho (~500 ms) | — |
Parallelism | 4 | Threads paralelas | — |
Output | 32 bytes | Comprimento da chave derivada | — |
Salt | 16 bytes | Salt aleatório no preâmbulo | — |
Criptografia AEAD
AES-256-GCM (padrão)
- Suporte de hardware AES-NI em processadores modernos
- Nonce: 12 bytes, tag de autenticação: 16 bytes
- Limite teórico: ~64 GB de dados criptografados por chave
Quando escolher: máquinas com aceleração hardware AES, uso diário.
Cifra padrão na maioria das plataformas para desempenho ideal.
XChaCha20-Poly1305 (opcional)
- Nonce estendido: 24 bytes (probabilidade de colisão desprezível)
- Sem dependência de hardware — desempenho constante em todas as CPUs
- Recomendado para chaves de longa duração
Quando escolher: cofres arquivados, máquinas sem AES-NI, preferência por ChaCha20.
Ativável nas configurações avançadas do cofre.
Estrutura do arquivo
Descrição da estrutura (v5):
preamble— magic bytes, versão do formato, salt Argon2idheader.enc— metadados criptografados do cofre (nome, data de criação, configurações)index/— B-Tree criptografado para busca O(log n) sem descriptografar segredoscompartments/— blocos AEAD por tipo: metadados, segredos protegidos, manifesto, anexosappend/— região de commits: novos compartimentos + snapshot do índice + footer validado
Integridade e commits
Resiliência
Os commits append-only garantem integridade em caso de interrupção:
- Novos compartimentos são anexados ao final do arquivo
- Um snapshot criptografado do índice é gravado
- Os dados são sincronizados com o disco (fsync)
- Um footer validado encerra o commit (ponto de consistência)
Cenário real: você edita uma entrada e a energia cai durante a gravação. Ao reiniciar, o QubKey encontra o footer válido mais recente — sem perda de dados nem corrupção silenciosa. A compactação periódica reescreve um arquivo limpo quando há espaço obsoleto em excesso.
Isolamento por compartimento
Por meio de HKDF-SHA256, cada compartimento obtém seu próprio compartment_key, derivado da chave mestra com o ID da entrada e o tipo de compartimento. Consequências práticas:
- Visualizar uma entrada descriptografa apenas os metadados; os segredos permanecem mascarados até a revelação explícita
- Anexos são carregados individualmente (download / visualização), não ao abrir o cofre
- O índice B-Tree utiliza seu próprio
index_key, separado dos dados - Alterar um segredo não regrava necessariamente os arquivos anexos inalterados
Este isolamento está implementado nativamente no formato .rkvey v5.
Primitivas criptográficas
| Primitiva | Uso | Biblioteca |
|---|---|---|
| Argon2id | Senha → derivação de chave | argon2 (RustCrypto) |
| HKDF-SHA256 | Chave → derivação de subchaves | hkdf (RustCrypto) |
| AES-256-GCM | Criptografia AEAD | aes-gcm (RustCrypto) |
| XChaCha20-Poly1305 | Criptografia AEAD (alternativa) | chacha20poly1305 (RustCrypto) |
| HMAC-SHA256 | Integridade do arquivo | hmac (RustCrypto) |
| CSPRNG | Geração aleatória | getrandom (SO) |