Encryptiemodel
.rkvey-v5-formaat: preamble, AEAD per compartiment, append-only commits en geheimisolatie.
Het .rkvey-v5-formaat (Rust Key Vault) implementeert een gelaagd versleutelingsmodel volgens HKDF- en AEAD-best practices. Het mentale model: masterwachtwoord → mastersleutel → subsleutels → versleutelde compartimenten.
Elk item is onderverdeeld in compartimenten (metadata, beschermde geheimen, manifest en bijlagebestanden), elk met een eigen HKDF-sleutel. Het ontsleutelen van één compartiment onthult de andere niet.
QubKey v5-coderingsmodel
Hoofdwachtwoord
Gebruikersinvoer (UTF-8) — nooit opgeslagen in leesbare tekst
Argon2id
Zout
16 bytes (preambule)
Geheugen
64MB
Iteraties
3
Parallellisme
4
Uitvoer
256 bits
Hoofdsleutel
256 bits · kluisbasissleutel
HKDF-SHA256
info = "hdr"
Koptekstsleutel
kop_sleutel
HKDF-SHA256
info = "idx"
Indexsleutel
index_sleutel
HKDF-SHA256
info="compartiment"
Compartiment sleutel
compartiment_sleutel
Per invoer (v5)
HKDF(master_key, salt=file∥entry_id, info=kind∥sub_id) → Compartimentsleutel
Gecodeerde compartimenten
Sleutelafleiding
De afleiding zet uw masterwachtwoord om in bruikbare cryptografische sleutels. Argon2id is opzettelijk tijd- en geheugenintensief (~500 ms, 64 MB) om offline rate-limits af te dwingen. In v5 krijgt elk itemcompartiment vervolgens zijn eigen sleutel via HKDF.
Gebruikersinvoer → masterwachtwoord (UTF-8)
Argon2id → master_key (256 bit) met willekeurig salt
HKDF-SHA256 → index_key voor de B-Tree
HKDF-SHA256 → compartment_key per item en compartimenttype (metadata, geheimen, bijlage…)
| Parameter | Waarde | Beschrijving | Standaard |
|---|---|---|---|
Variant | Argon2id | Door OWASP aanbevolen hybride variant — bestendig tegen GPU- en side-channel-aanvallen | — |
Memory | 64 MB | Geheugen per afleiding — verhoogt de hardwarekosten van parallelle aanvallen | 65536 KB |
Iterations | 3 | Iteraties over het geheugen — veiligheid/prestatie (~500 ms) | — |
Parallelism | 4 | Parallelle threads | — |
Output | 32 bytes | Lengte van de afgeleide sleutel | — |
Salt | 16 bytes | Willekeurig salt in de preamble | — |
AEAD-versleuteling
AES-256-GCM (standaard)
- AES-NI-hardwareondersteuning op moderne processors
- Nonce: 12 bytes, authenticatietag: 16 bytes
- Theoretische limiet: ~64 GB versleutelde gegevens per sleutel
Wanneer kiezen: machines met AES-hardwareversnelling, dagelijks gebruik.
Standaardcipher op de meeste platforms voor optimale prestaties.
XChaCha20-Poly1305 (optioneel)
- Uitgebreide nonce: 24 bytes (verwaarloosbare kans op botsingen)
- Geen hardwareafhankelijkheid — constante prestaties op alle CPU's
- Aanbevolen voor langdurige sleutels
Wanneer kiezen: gearchiveerde kluizen, machines zonder AES-NI, ChaCha20-voorkeur.
Activeerbaar in de geavanceerde kluisinstellingen.
Bestandsstructuur
Structuurbeschrijving (v5):
preamble— Magic Bytes, formaatversie, Argon2id-saltheader.enc— versleutelde kluismetadata (naam, aanmaakdatum, instellingen)index/— versleutelde B-Tree voor O(log-n)-zoeken zonder ontsleuteling van geheimencompartments/— AEAD-blokken per type: metadata, beschermde geheimen, manifest, bijlagenappend/— commit-regio: nieuwe compartimenten + indexsnapshot + gevalideerde footer
Integriteit en commits
Veerkracht
Append-only commits garanderen integriteit bij onderbreking:
- Nieuwe compartimenten worden aan het einde van het bestand toegevoegd
- Een versleutelde indexsnapshot wordt geschreven
- Gegevens worden naar schijf gesynchroniseerd (fsync)
- Een gevalideerde footer sluit de commit af (consistentiepunt)
Reëel scenario: u bewerkt een item en de stroom valt uit tijdens het schrijven. Bij herstart vindt QubKey de nieuwste geldige footer — geen gegevensverlies, geen stille corruptie. Periodieke compactie schrijft een schoon bestand wanneer te veel verouderde opslag ontstaat.
Isolatie per compartiment
Via HKDF-SHA256 krijgt elk compartiment een eigen compartment_key, afgeleid van de mastersleutel met item-ID en compartimenttype. Praktische gevolgen:
- Het bekijken van een item ontsleutelt alleen metadata; geheimen blijven gemaskeerd tot expliciete weergave
- Bijlagen worden individueel geladen (download / preview), niet bij het openen van de kluis
- De B-Tree-index gebruikt zijn eigen
index_key, gescheiden van de gegevens - Het wijzigen van een geheim herschrijft ongewijzigde bijlagebestanden niet per se
Deze isolatie is native geïmplementeerd in het .rkvey-v5-formaat.
Cryptografische primitieven
| Primitief | Gebruik | Bibliotheek |
|---|---|---|
| Argon2id | Wachtwoord → sleutelafleiding | argon2 (RustCrypto) |
| HKDF-SHA256 | Sleutel → subsleutelafleiding | hkdf (RustCrypto) |
| AES-256-GCM | AEAD-versleuteling | aes-gcm (RustCrypto) |
| XChaCha20-Poly1305 | AEAD-versleuteling (alt) | chacha20poly1305 (RustCrypto) |
| HMAC-SHA256 | Bestandsintegriteit | hmac (RustCrypto) |
| CSPRNG | Willekeurige generatie | getrandom (OS) |