Contenitori Crittografati Affidabili con Supporto FIDO2 e Crittografia Post-Quantistica
I provider cloud amano ripetere la frase "i tuoi dati sono crittografati a riposo". Sembra rassicurante, finché non ti ricordi chi detiene le chiavi di quella crittografia. Se il provider di hosting ha le chiavi, allora qualsiasi richiesta delle autorità, fuga di dati interna o token di accesso compromesso può aprire i tuoi file a terzi.
Per evitare di affidarsi alla fiducia nel servizio di qualcun altro, i dati vengono crittografati lato client prima di essere inviati sulla rete. Esistono strumenti come VeraCrypt, gocryptfs o age per questo scopo, ma ognuno ha i suoi compromessi: formati obsoleti, mancanza di supporto per chiavi hardware o complicazioni quando si monta il contenitore come un disco normale.
Recentemente ho scoperto LUKSbox, un progetto scritto in Rust. È uno strumento per creare contenitori di file crittografati che prende le migliori idee dal mondo LUKS2 ma le adatta per l'archiviazione cloud, le chiavette USB e i metodi di autenticazione moderni.
Cosa c'è dentro il contenitore
Il concetto fondamentale è semplice: tutti i dati vengono raggruppati in un singolo file .lbx. Per un osservatore esterno o un drive cloud, questo file appare come rumore casuale senza intestazioni o metadati evidenti, a condizione che l'intestazione sia archiviata in un file separato.
Allo stesso tempo, il contenitore si monta nel sistema operativo come un disco normale tramite FUSE (su Linux e macOS) o WinFsp (su Windows). Puoi lavorarci proprio come con una normale chiavetta USB.
L'obiettivo principale del progetto, come descritto dagli autori, è creare una copia sicura e portatile. Carichi .lbx su S3, Dropbox o un'unità di rete condivisa e stai tranquillo: l'host è fisicamente impossibilitato a leggere i contenuti.
Metodi di sblocco e protezione dai computer quantistici
In genere, l'archiviazione crittografata richiede una password. Anche LUKSbox ha password, crittografate tramite Argon2id con parametri predefiniti seri, ma gli sviluppatori sono andati oltre aggiungendo slot per chiavi hardware.
Ecco le opzioni supportate per sbloccare l'archiviazione:
- Autenticatori FIDO2. Puoi associare una YubiKey, Nitrokey o Google Titan tramite il protocollo HMAC-secret. Senza toccare fisicamente la chiave, il contenitore non si aprirà.
- TPM 2.0. Associazione al chip hardware della scheda madre su Linux e Windows. Comodo se il contenitore deve aprirsi solo sulla tua postazione di lavoro.
- Modalità ibrida post-quantistica. Protezione contro lo scenario "raccogli ora, decrittografa dopo su un computer quantistico". LUKSbox può combinare algoritmi classici con l'algoritmo ML-KEM (FIPS 203, ex Kyber). Per questo viene creato un file chiave separato
.kyber, che puoi tenere separato dal contenitore.
Nessuno di questi slot crittografa i file direttamente. Avvolgono la Master Volume Key. Dopo la validazione riuscita di uno slot qualsiasi, la chiave master viene decrittografata e le chiavi per i metadati, i blocchi di file e la verifica dell'integrità vengono derivate da essa tramite 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 |
+-----------------+ +-----------------+ +-----------------+
Sicurezza a livello di dettagli
Il repository sorprende piacevolmente per l'attenzione ai dettagli che molti sviluppatori trascurano.
Per impostazione predefinita, viene utilizzato AES-256-GCM-SIV per la crittografia a blocchi. L'aggiunta SIV fornisce resistenza al riutilizzo del nonce, utile durante sovrascritture frequenti. Puoi anche scegliere ChaCha20-Poly1305 o AES-256-GCM standard.
Alcune scoperte interessanti dal codice sorgente:
- Protezione dalla sostituzione dei blocchi. Ogni blocco crittografato di un file è dotato di dati autenticati aggiuntivi (AAD), inclusi l'ID del file, l'indice del blocco e il contatore di generazione. Un attaccante basato su cloud non sarà in grado di sostituire silenziosamente un nuovo blocco con una versione precedente o scambiare i pezzi.
- Pulizia della memoria. Su Linux, la chiamata di sistema
memfd_secretesclude la chiave master dai dump della memoria del kernel e dalle immagini di ibernazione. Su altri sistemi, viene utilizzata una combinazione di blocco della memoria e azzeramento del buffer tramite i trattiZeroize. - Protezione dagli attacchi di rollback. Un file sidecar opzionale
.anchormemorizza un contatore delle modifiche firmato. Se un provider riporta l'intero contenitore a una versione precedente, il programma se ne accorgerà. - Intestazione separata. Se sposti l'intestazione in un file
.hdr, il contenitore principale.lbxdiventa un array di byte senza firme.
Avvio rapido
Il progetto è scritto in Rust, quindi puoi compilarlo dal codice sorgente nel modo standard cargo build. Pacchetti precompilati .deb, .rpm, programmi di installazione Windows e bundle macOS sono disponibili per la maggior parte delle piattaforme.
Puoi gestire i contenitori in tre modi: tramite CLI, una procedura guidata TUI interattiva o un'interfaccia grafica basata su egui.
Creare un contenitore normale e montarlo:
# Создаем хранилище с настройками по умолчанию
luksbox create my-vault.lbx
# Монтируем как директорию в Linux/macOS
luksbox mount my-vault.lbx /mnt/vault
# Или в отдельный диск в Windows
luksbox mount my-vault.lbx Z:
Aggiungere una chiave hardware FIDO2 a un contenitore esistente:
luksbox enroll my-vault.lbx --kind fido2
Creare un contenitore post-quantistico con una chiave ibrida su un'unità flash separata:
luksbox create secure-data.lbx --kind hybrid-pq --pq-hybrid /media/usb/key.kyber
Se non vuoi ricordare i flag della riga di comando, il comando luksbox wizard avvia una finestra di dialogo passo-passo nel terminale.
Scenari pratici
LUKSbox risolve il problema del trasporto sicuro e dell'archiviazione remota. Ecco situazioni in cui il progetto sembra una buona scelta:
- Sincronizzazione tramite cloud di terze parti. Conservi il tuo database delle password, le chiavi personali o i documenti di lavoro in un singolo file
.lbxall'interno di una cartella Google Drive o Yandex Disk. - Backup su server esterni. Uno script di backup monta il contenitore, inserisce i nuovi dump e smonta il disco.
- Condivisione di archivi segreti. Invio di file a un collega con requisiti di conferma fisica tramite token hardware.
Stato attuale del progetto
Il progetto è in fase pre-1.0. Il formato del contenitore v3 è già bloccato, il fuzzing è configurato nel repository tramite libFuzzer e AFL++ con milioni di iterazioni. Sono stati completati quattordici round interni di audit di sicurezza, sebbene un audit indipendente di terze parti sia ancora in programma.
Gli autori avvertono onestamente: un contenitore crittografato è un singolo punto di errore. Se il file viene danneggiato o tutte le chiavi vengono perse, i dati sono irrecuperabili. Pertanto, LUKSbox è progettato per copie portatili protette, non come unica posizione di archiviazione per file di importanza critica.
Se hai bisogno di uno strumento di crittografia moderno e multipiattaforma con supporto FIDO2 e una protezione futura dall'informatica quantistica, il repository merita sicuramente un'occhiata. Il codice sorgente è rilasciato sotto la licenza Apache-2.0.
Progetti correlati