Arquitetura de segurança
Stack Rust/Tauri, formato .rkvey v5, compartimentos e descriptografia sob demanda para proteger seus segredos.
A segurança do QubKey baseia-se em uma arquitetura em camadas e no princípio de defesa em profundidade: o sistema de arquivos, o formato .rkvey v5, a criptografia e o núcleo da aplicação em Rust protegem seus segredos em cada etapa — do armazenamento ao desbloqueio.
Cada camada oferece uma garantia complementar. Se faltar uma proteção do sistema (por exemplo, sem criptografia de disco), as camadas de aplicação e criptografia continuam protegendo seu cofre. Com o formato v5, os segredos de uma entrada são descriptografados somente quando você os visualiza ou copia — não ao abrir o cofre e não na lista.
Interface (Reagir + Tauri)
- Cofre
- Pastas
- Procurar
- Gerador
- Códigos únicos
- Painel
- Sincronizar
- Compartilhamento
- Extensão do navegador
Núcleo de ferrugem (Núcleo QubKey)
- Formato .rkvey v5
- Derivação Argon2id
- Criptografia autenticada
- Índice de pesquisa
- Confirmações seguras
- Limpeza de memória
- Recuperação de falhas
Arquivo .rkvey v5 no sistema de arquivos
- Preâmbulo
- Cabeçalho criptografado
- Índice criptografado
- Compartimentos secretos
- Anexos
- Histórico de commits
Camadas de segurança
Fluxo de desbloqueio
O desbloqueio segue um pipeline rigoroso: a senha mestra chega ao núcleo Rust, Argon2id deriva a chave mestra, subchaves descriptografam o cabeçalho e o índice B-Tree. Os compartimentos das entradas (segredos, anexos) permanecem criptografados e são lidos somente quando necessário. Ao bloquear, todas as chaves e segredos são apagados da memória.
Senha mestra + Sal
.rkvey preâmbulo (texto simples)
- Inserido no núcleo Rust (Tauri IPC) – nunca exposto ao WebView
- Salt aleatório armazenado no preâmbulo (16 bytes)
Argônio2id
- 64 MB de RAM · 3 iter · p = 4 (padrão `KdfParams`)
- Resistência GPU/ASIC
- Calibrado ~250–500 ms dependendo da plataforma
Chave mestra
256 bits · `KeyManager::derive_master_key`
Derivação de subchave
HKDF-SHA256(mestre, salt=arquivo∥entrada, info=tipo)
chave_de_cabeçalho
Cabeçalho seguro
chave_índice
Índice de árvore B
chave_de_compartimento
Compartimentos
Descriptografia AEAD
- AES-256-GCM ou XChaCha20-Poly1305
- Cabeçalho · Índice · Compartimentos (sob demanda)
Memória após desbloqueio
- Lista/visualização: somente metadados
- Segredos e anexos descriptografados somente sob demanda
Trancar
- `KeyManager::clear_keys()` + zerar
- Segredos apagados e área de transferência limpa
Modelo de ameaças
O QubKey foi projetado para os cenários de ameaça mais comuns de um gerenciador local. A tabela descreve o vetor de ataque e a contramedida integrada (formato .rkvey v5).
| Ameaça | Vetor | Resposta do QubKey |
|---|---|---|
| Acesso não autorizado ao arquivo | Roubo ou cópia de .rkvey | Criptografia AEAD + derivação Argon2id |
| Exfiltração pela rede | Interceptação na nuvem / MITM | Local-first: o QubKey não envia seus segredos |
| Corrupção de dados | Falha durante a gravação | Commits append-only validados + recuperação na inicialização |
| Manipulação do cofre | Alteração manual do arquivo | Autenticação AEAD por compartimento + checksums |
| Dump de memória (navegação) | Cofre aberto, lista / visualização | Segredos permanecem criptografados até você visualizá-los |
| Senha mestra fraca | Tentativas offline | Argon2id calibrado (~500 ms) + medidor de entropia |
| Reutilização de senhas | Vazamentos em outros sites | Painel de segurança (detecção local) |
| Vazamentos da área de transferência | Copiar um segredo | Tempo limite da área de transferência (30 s) + apagamento ao bloquear |
| Ataque de canal lateral | Timing em operações cripto | Implementações de tempo constante (RustCrypto) |
Boas práticas
Este modelo cobre as ameaças que o QubKey aborda diretamente por meio de sua arquitetura. Para proteção ideal, combine o QubKey com as boas práticas do sistema: criptografia de disco ativa, SO atualizado e senha mestra forte.
Proteção integrada
| Área | Como o QubKey protege seus dados |
|---|---|
| Dados em repouso | AEAD (AES-256-GCM / XChaCha20), chave Argon2id, chaves dedicadas por compartimento |
| Integridade do cofre | Commits append-only validados, checksums e gravações atômicas |
| Confidencialidade | Zero-knowledge: seus segredos permanecem criptografados no seu dispositivo |
| Descriptografia sob demanda | Lista e visualização sem segredos; exibir / copiar somente quando necessário |
| Derivação de chaves | Argon2id calibrado (~500 ms, 64 MB) para proteger a senha mestra |
| Aplicação | Núcleo Rust isolado, interface via Tauri-IPC, Zeroization ao bloquear |
| Extensão do navegador | Native Messaging local — a extensão nunca recebe a senha mestra |
| Sincronização | Sincronização multi-dispositivo criptografada opcional (nuvem ou self-host) ou arquivo .rkvey criptografado (nuvem, USB, NAS) |
Arquitetura de confiança
Zero-knowledge
O QubKey organiza a confiança em vários níveis complementares:
-
Você controla o acesso — a senha mestra e, se aplicável, a chave de recuperação controlam o acesso ao cofre. O QubKey não pode lê-las nem redefini-las.
-
Integração com o sistema — o QubKey aproveita a segurança do seu SO: permissões de arquivo, criptografia de disco (FileVault, BitLocker, LUKS), armazenamento seguro (Keychain, Credential Manager) e isolamento de processos.
-
Separação Rust / interface — Toda a criptografia roda no núcleo Rust com segurança de memória em tempo de compilação. A interface React se comunica via Tauri-IPC; o WebView não tem acesso direto à senha mestra.
-
Gestão prudente da memória (v5) — Ao desbloquear, apenas o cabeçalho e o índice são descriptografados. Segredos e anexos permanecem criptografados até uma ação explícita (visualizar, copiar, baixar). Ao bloquear: Zeroization e área de transferência vazia.
-
Extensão do navegador — Native Messaging local; a extensão nunca recebe a senha mestra.
Recursos de proteção
Bloqueio automático
O cofre é bloqueado após inatividade configurável (padrão: 5 min). Aciona Zeroization e apagamento da área de transferência.
Descriptografia sob demanda
Os segredos de uma entrada são descriptografados somente quando você os visualiza ou copia. A lista e a visualização não exibem campos protegidos.
Zeroization
Os segredos são apagados da RAM ao bloquear (crate Rust zeroize); caches esvaziados, descriptografia efêmera somente sob demanda.
Tempo limite da área de transferência
A área de transferência é esvaziada automaticamente após 30 segundos. Configurável nas configurações do cofre.