Modello di crittografia
Formato .rkvey v5: preambolo, AEAD per compartimento, commit append-only e isolamento dei segreti.
Il formato .rkvey v5 (Rust Key Vault) implementa un modello di crittografia multistrato secondo le best practice HKDF e AEAD. Il modello mentale: password principale → chiave principale → sottochiavi → compartimenti crittografati.
Ogni voce è divisa in compartimenti (metadati, segreti protetti, manifest e file allegati), ciascuno con la propria chiave HKDF. Decifrare un compartimento non rivela gli altri.
Modello di crittografia QubKey v5
Parola d'ordine principale
Input dell'utente (UTF-8): mai archiviato in testo normale
Argon2id
Sale
16 byte (preambolo)
Memoria
64 MB
Iterazioni
3
Parallelismo
4
Produzione
256 bit
Chiave maestra
256 bit · chiave root del vault
HKDF-SHA256
informazioni="hdr"
Chiave dell'intestazione
chiave_intestazione
HKDF-SHA256
informazioni="idx"
Chiave indice
chiave_indice
HKDF-SHA256
info="compartimento"
Chiave dello scomparto
compartimento_chiave
Per voce (v5)
HKDF(master_key, salt=file∥entry_id, info=kind∥sub_id) → Chiave compartimento
Scomparti crittografati
Derivazione delle chiavi
La derivazione trasforma la password principale in chiavi crittografiche utilizzabili. Argon2id è intenzionalmente intensivo in tempo e memoria (~500 ms, 64 MB) per imporre limiti di velocità offline. In v5, ogni compartimento di voce riceve poi la propria chiave via HKDF.
Input utente → password principale (UTF-8)
Argon2id → master_key (256 bit) con salt casuale
HKDF-SHA256 → index_key per il B-Tree
HKDF-SHA256 → compartment_key per voce e tipo di compartimento (metadati, segreti, allegato…)
| Parametro | Valore | Descrizione | Predefinito |
|---|---|---|---|
Variant | Argon2id | Variante ibrida raccomandata da OWASP — resistente a GPU e attacchi side-channel | — |
Memory | 64 MB | Memoria per derivazione — aumenta il costo hardware di attacchi paralleli | 65536 KB |
Iterations | 3 | Passate sulla memoria — equilibrio sicurezza/prestazioni (~500 ms) | — |
Parallelism | 4 | Thread paralleli | — |
Output | 32 bytes | Lunghezza della chiave derivata | — |
Salt | 16 bytes | Salt casuale nel preambolo | — |
Crittografia AEAD
AES-256-GCM (predefinito)
- Supporto hardware AES-NI su processori moderni
- Nonce: 12 byte, tag di autenticazione: 16 byte
- Limite teorico: ~64 GB di dati crittografati per chiave
Quando sceglierlo: macchine con accelerazione hardware AES, uso quotidiano.
Cifrario predefinito sulla maggior parte delle piattaforme per prestazioni ottimali.
XChaCha20-Poly1305 (opzionale)
- Nonce esteso: 24 byte (probabilità di collisione trascurabile)
- Nessuna dipendenza hardware — prestazioni costanti su tutte le CPU
- Consigliato per chiavi di lunga durata
Quando sceglierlo: vault archiviati, macchine senza AES-NI, preferenza per ChaCha20.
Attivabile nelle impostazioni avanzate del vault.
Struttura del file
Descrizione della struttura (v5):
preamble— magic bytes, versione del formato, salt Argon2idheader.enc— metadati crittografati del vault (nome, data di creazione, impostazioni)index/— B-Tree crittografato per ricerca O(log n) senza decifrare i segreticompartments/— blocchi AEAD per tipo: metadati, segreti protetti, manifest, allegatiappend/— regione commit: nuovi compartimenti + snapshot indice + footer validato
Integrità e commit
Resilienza
I commit append-only garantiscono l'integrità in caso di interruzione:
- I nuovi compartimenti vengono aggiunti in coda al file
- Viene scritto uno snapshot crittografato dell'indice
- I dati vengono sincronizzati sul disco (fsync)
- Un footer validato chiude il commit (punto di consistenza)
Scenario reale: modifichi una voce e salta la corrente durante la scrittura. Al riavvio, QubKey trova il footer valido più recente — nessuna perdita di dati, nessuna corruzione silenziosa. La compattazione periodica riscrive un file pulito quando c'è troppo spazio obsoleto.
Isolamento per compartimento
Tramite HKDF-SHA256, ogni compartimento ottiene il proprio compartment_key, derivato dalla chiave principale con ID voce e tipo di compartimento. Conseguenze pratiche:
- Visualizzare una voce decifra solo i metadati; i segreti restano mascherati fino alla rivelazione esplicita
- Gli allegati vengono caricati singolarmente (download / anteprima), non all'apertura del vault
- L'indice B-Tree utilizza il proprio
index_key, separato dai dati - Modificare un segreto non riscrive necessariamente i file allegati invariati
Questo isolamento è implementato nativamente nel formato .rkvey v5.
Primitive crittografiche
| Primitiva | Uso | Libreria |
|---|---|---|
| Argon2id | Password → derivazione chiave | argon2 (RustCrypto) |
| HKDF-SHA256 | Chiave → derivazione sottochiavi | hkdf (RustCrypto) |
| AES-256-GCM | Crittografia AEAD | aes-gcm (RustCrypto) |
| XChaCha20-Poly1305 | Crittografia AEAD (alternativa) | chacha20poly1305 (RustCrypto) |
| HMAC-SHA256 | Integrità del file | hmac (RustCrypto) |
| CSPRNG | Generazione casuale | getrandom (SO) |