Şifreleme modeli
.rkvey v5 formatı: ön bilgi, bölme başına AEAD, append-only commit'ler ve gizli izolasyonu.
.rkvey v5 formatı (Rust Key Vault), HKDF ve AEAD en iyi uygulamalarına göre çok katmanlı bir şifreleme modeli uygular. Zihinsel model: ana parola → ana anahtar → alt anahtarlar → şifreli bölmeler.
Her giriş bölmelere ayrılır (meta veriler, korumalı sırlar, manifest ve ek dosyalar), her birinin kendi HKDF anahtarı vardır. Bir bölmenin çözülmesi diğerlerini açığa çıkarmaz.
QubKey v5 şifreleme modeli
Ana şifre
Kullanıcı girişi (UTF-8) — hiçbir zaman düz metin olarak saklanmaz
Argon2id
Tuz
16 bayt (giriş)
Hafıza
64MB
Yinelemeler
3
Paralellik
4
Çıkış
256 bit
Ana anahtar
256 bit · kasa kök anahtarı
HKDF-SHA256
bilgi = "hdr"
Başlık Anahtarı
başlık_anahtarı
HKDF-SHA256
bilgi = "idx"
Dizin Anahtarı
indeks_anahtarı
HKDF-SHA256
info = "bölme"
Bölme Anahtarı
bölme_anahtarı
Giriş başına (v5)
HKDF(ana_anahtar, salt=dosya∥entry_id, info=tür∥alt_id) → Bölme Anahtarı
Şifreli bölmeler
Anahtar türetme
Türetme ana parolanızı kullanılabilir kriptografik anahtarlara dönüştürür. Argon2id kasıtlı olarak zaman ve bellek yoğundur (~500 ms, 64 MB) çevrimdışı hız sınırlarını zorlamak için. v5'te her giriş bölmesi ardından HKDF ile kendi anahtarını alır.
Kullanıcı girişi → ana parola (UTF-8)
Argon2id → rastgele salt ile master_key (256 bit)
HKDF-SHA256 → B-Tree için index_key
HKDF-SHA256 → giriş ve bölme türü başına compartment_key (meta veriler, sırlar, ek…)
| Parametre | Değer | Açıklama | Varsayılan |
|---|---|---|---|
Variant | Argon2id | OWASP önerilen hibrit varyant — GPU ve yan kanal saldırılarına dayanıklı | — |
Memory | 64 MB | türetme başına bellek — paralel saldırıların donanım maliyetini artırır | 65536 KB |
Iterations | 3 | bellek üzerinde geçişler — güvenlik/performans (~500 ms) | — |
Parallelism | 4 | paralel iş parçacıkları | — |
Output | 32 bytes | türetilen anahtar uzunluğu | — |
Salt | 16 bytes | ön bilgide rastgele salt | — |
AEAD şifreleme
AES-256-GCM (varsayılan)
- modern işlemcilerde AES-NI donanım desteği
- Nonce: 12 bayt, kimlik doğrulama etiketi: 16 bayt
- teorik limit: anahtar başına ~64 GB şifreli veri
Ne zaman seçilir: AES donanım hızlandırmalı makineler, günlük kullanım.
Optimal performans için çoğu platformda varsayılan şifre.
XChaCha20-Poly1305 (isteğe bağlı)
- genişletilmiş nonce: 24 bayt (ihmal edilebilir çakışma olasılığı)
- donanım bağımlılığı yok — tüm CPU'larda tutarlı performans
- uzun ömürlü anahtarlar için önerilir
Ne zaman seçilir: arşiv kasaları, AES-NI'siz makineler, ChaCha20 tercihi.
gelişmiş kasa ayarlarında etkinleştirilebilir.
Dosya yapısı
Yapı açıklaması (v5):
preamble— Magic Bytes, format sürümü, Argon2id saltheader.enc— şifreli kasa meta verileri (ad, oluşturma tarihi, ayarlar)index/— sırları çözmeden O(log-n) arama için şifreli B-Treecompartments/— türe göre AEAD blokları: meta veriler, korumalı sırlar, manifest, eklerappend/— commit bölgesi: yeni bölmeler + dizin anlık görüntüsü + doğrulanmış footer
Bütünlük ve commit'ler
Dayanıklılık
Append-only commit'ler kesinti sırasında bütünlüğü garanti eder:
- Yeni bölmeler dosya sonuna eklenir
- Şifreli dizin anlık görüntüsü yazılır
- Veriler diske senkronize edilir (fsync)
- Doğrulanmış footer commit'i kapatır (tutarlılık noktası)
Gerçek senaryo: Bir girişi düzenliyorsunuz ve yazma sırasında elektrik kesiliyor. Yeniden başlatmada QubKey en son geçerli footer'ı bulur — veri kaybı yok, sessiz bozulma yok. Periyodik sıkıştırma çok eski alan biriktiğinde temiz bir dosya yazar.
Bölme başına izolasyon
HKDF-SHA256 ile her bölme, giriş kimliği ve bölme türüyle ana anahtardan türetilen kendi compartment_key'ini alır. Pratik sonuçlar:
- Bir girişi görüntülemek yalnızca meta verileri çözer; sırlar açık gösterime kadar maskelenir
- Ekler tek tek yüklenir (indirme / önizleme), kasa açıldığında değil
- B-Tree dizini verilerden ayrı kendi
index_key'ini kullanır - Bir sırrı değiştirmek değişmeyen ek dosyalarını zorunlu olarak yeniden yazmaz
Bu izolasyon .rkvey-v5 formatında yerleşiktir.
Kriptografik ilkel üzerine
| İlkel | Kullanım | Kütüphane |
|---|---|---|
| Argon2id | parola → anahtar türetme | argon2 (RustCrypto) |
| HKDF-SHA256 | anahtar → alt anahtar türetme | hkdf (RustCrypto) |
| AES-256-GCM | AEAD şifreleme | aes-gcm (RustCrypto) |
| XChaCha20-Poly1305 | AEAD şifreleme (alternatif) | chacha20poly1305 (RustCrypto) |
| HMAC-SHA256 | dosya bütünlüğü | hmac (RustCrypto) |
| CSPRNG | rastgele üretim | getrandom (OS) |