Segurança

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

KDF

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

Metadados
Segredos
Att. manifesto
AES-256-GCM

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)

Argon2idmaster_key (256 bits) com salt aleatório

HKDF-SHA256index_key para o B-Tree

HKDF-SHA256compartment_key por entrada e tipo de compartimento (metadados, segredos, anexo…)

ParâmetroValorDescriçãoPadrão
VariantArgon2idVariante híbrida recomendada pela OWASP — resistente a GPU e ataques de canal lateral
Memory64 MBMemória por derivação — aumenta o custo de hardware de ataques paralelos65536 KB
Iterations3Passagens sobre a memória — equilíbrio segurança/desempenho (~500 ms)
Parallelism4Threads paralelas
Output32 bytesComprimento da chave derivada
Salt16 bytesSalt 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

preamble
header.enc
btree_root.enc
btree_nodes.enc
core_meta.enc
protected_secrets.enc
attachment_manifest.enc
attachment_blob_*.enc
commit_N
footer (validated)

Descrição da estrutura (v5):

  • preamble — magic bytes, versão do formato, salt Argon2id
  • header.enc — metadados criptografados do cofre (nome, data de criação, configurações)
  • index/ — B-Tree criptografado para busca O(log n) sem descriptografar segredos
  • compartments/ — blocos AEAD por tipo: metadados, segredos protegidos, manifesto, anexos
  • append/ — 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:

  1. Novos compartimentos são anexados ao final do arquivo
  2. Um snapshot criptografado do índice é gravado
  3. Os dados são sincronizados com o disco (fsync)
  4. 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

PrimitivaUsoBiblioteca
Argon2idSenha → derivação de chaveargon2 (RustCrypto)
HKDF-SHA256Chave → derivação de subchaveshkdf (RustCrypto)
AES-256-GCMCriptografia AEADaes-gcm (RustCrypto)
XChaCha20-Poly1305Criptografia AEAD (alternativa)chacha20poly1305 (RustCrypto)
HMAC-SHA256Integridade do arquivohmac (RustCrypto)
CSPRNGGeração aleatóriagetrandom (SO)