Beveiliging

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

KDF

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

Metagegevens
Geheimen
Att. manifest
AES-256-GCM

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)

Argon2idmaster_key (256 bit) met willekeurig salt

HKDF-SHA256index_key voor de B-Tree

HKDF-SHA256compartment_key per item en compartimenttype (metadata, geheimen, bijlage…)

ParameterWaardeBeschrijvingStandaard
VariantArgon2idDoor OWASP aanbevolen hybride variant — bestendig tegen GPU- en side-channel-aanvallen
Memory64 MBGeheugen per afleiding — verhoogt de hardwarekosten van parallelle aanvallen65536 KB
Iterations3Iteraties over het geheugen — veiligheid/prestatie (~500 ms)
Parallelism4Parallelle threads
Output32 bytesLengte van de afgeleide sleutel
Salt16 bytesWillekeurig 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

preamble
header.enc
btree_root.enc
btree_nodes.enc
core_meta.enc
protected_secrets.enc
attachment_manifest.enc
attachment_blob_*.enc
commit_N
footer (validated)

Structuurbeschrijving (v5):

  • preamble — Magic Bytes, formaatversie, Argon2id-salt
  • header.enc — versleutelde kluismetadata (naam, aanmaakdatum, instellingen)
  • index/ — versleutelde B-Tree voor O(log-n)-zoeken zonder ontsleuteling van geheimen
  • compartments/ — AEAD-blokken per type: metadata, beschermde geheimen, manifest, bijlagen
  • append/ — commit-regio: nieuwe compartimenten + indexsnapshot + gevalideerde footer

Integriteit en commits

Veerkracht

Append-only commits garanderen integriteit bij onderbreking:

  1. Nieuwe compartimenten worden aan het einde van het bestand toegevoegd
  2. Een versleutelde indexsnapshot wordt geschreven
  3. Gegevens worden naar schijf gesynchroniseerd (fsync)
  4. 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

PrimitiefGebruikBibliotheek
Argon2idWachtwoord → sleutelafleidingargon2 (RustCrypto)
HKDF-SHA256Sleutel → subsleutelafleidinghkdf (RustCrypto)
AES-256-GCMAEAD-versleutelingaes-gcm (RustCrypto)
XChaCha20-Poly1305AEAD-versleuteling (alt)chacha20poly1305 (RustCrypto)
HMAC-SHA256Bestandsintegriteithmac (RustCrypto)
CSPRNGWillekeurige generatiegetrandom (OS)