Contêineres Criptografados Confiáveis com Suporte a FIDO2 e Criptografia Pós-Quântica
Provedores de nuvem adoram repetir a frase "seus dados estão criptografados em repouso." Parece reconfortante, até você lembrar quem detém as chaves dessa criptografia. Se o provedor de hospedagem tem as chaves, qualquer solicitação regulatória, vazamento interno ou token de acesso comprometido pode expor seus arquivos a terceiros.
Para evitar confiar no serviço de outra pessoa, os dados são criptografados no cliente antes de serem enviados pela rede. Ferramentas como VeraCrypt, gocryptfs ou age existem para isso, mas cada uma tem seus compromissos: formatos desatualizados, falta de suporte a chaves de hardware ou complicações ao montar o contêiner como um disco regular.
Recentemente encontrei o LUKSbox, um projeto escrito em Rust. É uma ferramenta para criar contêineres de arquivos criptografados que combina as melhores ideias do mundo LUKS2, mas adaptadas para armazenamento em nuvem, pen drives USB e métodos de autenticação modernos.
O Que Está Dentro do Contêiner
O conceito central é direto: todos os dados são empacotados em um único arquivo .lbx. Para um observador externo ou serviço de nuvem, esse arquivo parece ruído aleatório sem cabeçalhos ou metadados óbvios, desde que o cabeçalho seja armazenado em um arquivo separado.
Ao mesmo tempo, o contêiner é montado no sistema operacional como um disco regular via FUSE (no Linux e macOS) ou WinFsp (no Windows). Você trabalha com ele exatamente como um pen drive comum.
O objetivo principal do projeto, conforme descrito pelos autores, é criar uma cópia segura e portátil. Você faz upload .lbx para S3, Dropbox ou uma unidade de rede compartilhada e fica tranquilo: o host é fisicamente incapaz de ler o conteúdo.
Métodos de Desbloqueio e Proteção Contra Computadores Quânticos
Normalmente, o armazenamento criptografado requer uma senha. O LUKSbox também tem senhas, criptografadas via Argon2id com parâmetros padrão rigorosos, mas os desenvolvedores foram além e adicionaram slots para chaves de hardware.
Aqui estão as opções suportadas para desbloquear o armazenamento:
- Autenticadores FIDO2. Você pode vincular um YubiKey, Nitrokey ou Google Titan via protocolo HMAC-secret. Sem tocar fisicamente na chave, o contêiner não será aberto.
- TPM 2.0. Vinculação ao chip de hardware da placa-mãe no Linux e Windows. Conveniente se o contêiner só deve ser aberto na sua estação de trabalho.
- Modo híbrido pós-quântico. Proteção contra o cenário "colete agora, descriptografe depois em um computador quântico". O LUKSbox pode combinar algoritmos clássicos com o algoritmo ML-KEM (FIPS 203, anteriormente Kyber). Um arquivo de chave separado
.kyberé criado para isso, que você pode manter fora do contêiner.
Nenhum desses slots criptografa arquivos diretamente. Eles encapsulam a Chave Mestra do Volume. Após a validação bem-sucedida de qualquer slot, a chave mestra é descriptografada e as chaves para metadados, blocos de arquivos e verificação de integridade são derivadas dela via HKDF-SHA256.
+-------------------------------------------------------------+
| Пароль / FIDO2 / TPM 2.0 / ML-KEM (.kyber) |
+------------------------------+------------------------------+
|
v
+-------------------------------+
| Master Volume Key (MVK) |
+---------------+---------------+
|
+---------------------+---------------------+
v v v
+-----------------+ +-----------------+ +-----------------+
| Header HMAC Key | | Metadata Key | | Per-file Keys |
+-----------------+ +-----------------+ +-----------------+
Segurança em Nível de Detalhes
O repositório surpreende agradavelmente pela atenção aos detalhes que muitos desenvolvedores negligenciam.
Por padrão, AES-256-GCM-SIV é usado para criptografia de blocos. A adição SIV fornece resistência à reutilização de nonce, o que é útil durante sobrescritas frequentes. Você também pode escolher ChaCha20-Poly1305 ou AES-256-GCM padrão.
Algumas descobertas interessantes do código-fonte:
- Proteção contra substituição de blocos. Cada bloco criptografado de um arquivo é equipado com dados autenticados adicionais (AAD), incluindo o ID do arquivo, índice do bloco e contador de geração. Um atacante baseado em nuvem não poderá substituir silenciosamente um novo bloco por uma versão mais antiga ou trocar peças.
- Limpeza de memória. No Linux, a chamada de sistema
memfd_secretexclui a chave mestra dos dumps de memória do kernel e imagens de hibernação. Em outros sistemas, uma combinação de bloqueio de memória e zeramento de buffer via traitsZeroizeé usada. - Proteção contra ataques de rollback. Um arquivo sidecar opcional
.anchorarmazena um contador de alterações assinado. Se um provedor reverter todo o contêiner para uma versão mais antiga, o programa perceberá. - Cabeçalho separado. Se você mover o cabeçalho para um arquivo
.hdr, o contêiner principal.lbxse torna um array de bytes sem assinaturas.
Início Rápido
O projeto é escrito em Rust, então você pode compilá-lo a partir do código-fonte da forma padrão cargo build. Pacotes pré-compilados .deb, .rpm, instaladores Windows e bundles macOS estão disponíveis para a maioria das plataformas.
Você pode gerenciar contêineres de três formas: via CLI, um assistente TUI interativo ou uma interface gráfica construída com egui.
Criando um contêiner regular e montando-o:
# Создаем хранилище с настройками по умолчанию
luksbox create my-vault.lbx
# Монтируем как директорию в Linux/macOS
luksbox mount my-vault.lbx /mnt/vault
# Или в отдельный диск в Windows
luksbox mount my-vault.lbx Z:
Adicionando uma chave de hardware FIDO2 a um contêiner existente:
luksbox enroll my-vault.lbx --kind fido2
Criando um contêiner pós-quântico com uma chave híbrida em um pen drive separado:
luksbox create secure-data.lbx --kind hybrid-pq --pq-hybrid /media/usb/key.kyber
Se você não quer lembrar das flags de linha de comando, o comando luksbox wizard inicia um diálogo passo a passo no terminal.
Cenários Práticos
O LUKSbox resolve o problema de transporte seguro e armazenamento remoto. Aqui estão situações em que o projeto parece uma boa escolha:
- Sincronização via nuvens de terceiros. Você armazena seu banco de dados de senhas, chaves pessoais ou documentos de trabalho em um único arquivo
.lbxdentro de uma pasta do Google Drive ou Yandex Disk. - Backups em servidores externos. Um script de backup monta o contêiner, coloca os dumps atualizados e desmonta o disco.
- Compartilhamento de arquivos secretos. Enviando arquivos para um colega com requisito de confirmação física via token de hardware.
Status Atual do Projeto
O projeto está em estágio pré-1.0. O formato do contêiner v3 já está congelado, fuzzing está configurado no repositório via libFuzzer e AFL++ com milhões de iterações. Quatorze rodadas internas de auditoria de segurança foram concluídas, embora uma auditoria independente de terceiros ainda esteja pendente.
Os autores alertam honestamente: um contêiner criptografado é um ponto único de falha. Se o arquivo for corrompido ou todas as chaves forem perdidas, os dados serão irrecuperáveis. Portanto, o LUKSbox é projetado para cópias portáteis protegidas, não como único local de armazenamento para arquivos criticamente importantes.
Se você precisa de uma ferramenta de criptografia moderna e multiplataforma com suporte a FIDO2 e preparação para o futuro pós-quântico, o repositório definitivamente merece uma olhada. O código-fonte é liberado sob a licença Apache-2.0.
Projetos relacionados