Architektura bezpieczeństwa
Stos Rust/Tauri, format .rkvey v5, kompartmenty, opóźnione odszyfrowywanie i model zagrożeń.
Bezpieczeństwo QubKey opiera się na architekturze warstwowej i zasadzie obrony w głąb: system plików, format .rkvey v5, kryptografia i rdzeń aplikacji w Rust chronią Twoje sekrety na każdym etapie — od zapisu po odblokowanie.
Każda warstwa zapewnia uzupełniające gwarancje. Gdy brakuje ochrony systemowej (np. brak szyfrowania dysku), warstwy aplikacji i kryptografii nadal chronią sejf. W formacie v5 sekrety wpisu są odszyfrowywane tylko wtedy, gdy je wyświetlasz lub kopiujesz — nie przy otwieraniu sejfu i nie na liście.
Interfejs (React + Tauri)
- Sklepienie
- Lornetka składana
- Szukaj
- Generator
- Kody jednorazowe
- Panel
- Synchronizuj
- Partycypujący
- Rozszerzenie przeglądarki
Rdzeń rdzy (rdzeń QubKey)
- Format .rkvey v5
- Wyprowadzenie Argon2id
- Uwierzytelnione szyfrowanie
- Indeks wyszukiwania
- Bezpieczne zobowiązania
- Czyszczenie pamięci
- Odzyskiwanie po awarii
plik .rkvey v5 w systemie plików
- Preambuła
- Zaszyfrowany nagłówek
- Zaszyfrowany indeks
- Tajne przegródki
- Załączniki
- Zaangażuj historię
Warstwy bezpieczeństwa
Przepływ odblokowania
Odblokowanie następuje według ścisłego potoku: hasło główne trafia do rdzenia Rust, Argon2id wyprowadza klucz główny, klucze podrzędne odszyfrowują nagłówek i indeks B-Tree. Kompartmenty wpisu (sekrety, załączniki) pozostają zaszyfrowane i są odczytywane tylko na żądanie. Przy blokowaniu wszystkie klucze i sekrety są usuwane z pamięci.
Hasło główne + sól
.rkvey preambuła (tekst jawny)
- Wprowadzono do rdzenia Rust (Tauri IPC) — nigdy nie wystawiono na widok WebView
- Losowa sól przechowywana w preambule (16 bajtów)
Argon2id
- 64 MB RAM · 3 iter · p=4 (domyślnie `KdfParams`)
- Odporność na GPU/ASIC
- Kalibracja ~250–500 ms w zależności od platformy
Klucz główny
256 bitów · `KeyManager::derive_master_key`
Wyprowadzenie podklucza
HKDF-SHA256(master, sól=wpis pliku, informacja=rodzaj)
klucz_nagłówka
Bezpieczny nagłówek
klucz_indeksu
Indeks drzewa B
klucz_przedziału
Przedziały
Deszyfrowanie AEAD
- AES-256-GCM lub XChaCha20-Poly1305
- Nagłówek · Indeks · Przegródki (na żądanie)
Pamięć po odblokowaniu
- Lista/widok: tylko metadane
- Sekrety i załączniki odszyfrowane tylko na żądanie
Zamek
- `KeyManager::clear_keys()` + zeruj
- Sekrety usunięte, a schowek wyczyszczony
Model zagrożeń
QubKey jest zaprojektowany pod najczęstsze scenariusze zagrożeń lokalnego menedżera. Tabela opisuje wektor ataku i wbudowaną przeciwdziałanie (format .rkvey v5).
| Zagrożenie | Wektor | Odpowiedź QubKey |
|---|---|---|
| Nieautoryzowany dostęp do pliku | Kradzież lub kopia .rkvey | Szyfrowanie AEAD + wyprowadzenie Argon2id |
| Eksfiltracja sieciowa | Przechwycenie w chmurze / MITM | Local-first: QubKey nie wysyła Twoich sekretów |
| Uszkodzenie danych | Awaria podczas zapisu | Walidowane commity append-only + odzyskiwanie przy starcie |
| Manipulacja sejfem | Ręczna modyfikacja pliku | Uwierzytelnianie AEAD na kompartment + sumy kontrolne |
| Obraz pamięci (nawigacja) | Sejf otwarty, lista / podgląd | Sekrety pozostają zaszyfrowane, dopóki ich nie wyświetlisz |
| Słabe hasło główne | Próby offline | Skalibrowany Argon2id (~500 ms) + miernik entropii |
| Ponowne użycie hasła | Wycieki na innych stronach | Panel bezpieczeństwa (lokalne wykrywanie) |
| Wycieki ze schowka | Kopiowanie sekretu | Limit czasu schowka (30 s) + czyszczenie przy blokowaniu |
| Atak kanałem pobocznym | Timing operacji krypto | Implementacje stałoczasowe (RustCrypto) |
Najlepsze praktyki
Ten model obejmuje zagrożenia, które QubKey adresuje bezpośrednio przez swoją architekturę. Dla optymalnej ochrony połącz QubKey z najlepszymi praktykami systemowymi: włączone szyfrowanie dysku, aktualny system operacyjny i silne hasło główne.
Zintegrowana ochrona
| Obszar | Jak QubKey chroni Twoje dane |
|---|---|
| Dane w spoczynku | AEAD (AES-256-GCM / XChaCha20), klucz Argon2id, osobne klucze na kompartment |
| Integralność sejfu | Walidowane commity append-only, sumy kontrolne i atomowe zapisy |
| Poufność | Zero-knowledge: Twoje sekrety pozostają zaszyfrowane na urządzeniu |
| Opóźnione odszyfrowywanie | Lista i podgląd bez sekretów; wyświetlanie / kopiowanie tylko na żądanie |
| Wyprowadzenie klucza | Skalibrowany Argon2id (~500 ms, 64 MB) chroniący hasło główne |
| Aplikacja | Izolowany rdzeń Rust, UI przez Tauri IPC, zeroization przy blokowaniu |
| Rozszerzenie przeglądarki | Lokalne Native Messaging — rozszerzenie nigdy nie otrzymuje hasła głównego |
| Sync | Opcjonalna zaszyfrowana synchronizacja wielourządzeniowa (chmura lub self-host) lub zaszyfrowany plik .rkvey (chmura, USB, NAS) |
Architektura zaufania
Zero-knowledge
QubKey organizuje zaufanie na wielu uzupełniających się poziomach:
-
Ty kontrolujesz dostęp — hasło główne i ewentualnie klucz odzyskiwania sterują dostępem do sejfu. QubKey nie może ich odczytać ani zresetować.
-
Integracja z systemem — QubKey korzysta z bezpieczeństwa OS: uprawnienia plików, szyfrowanie dysku (FileVault, BitLocker, LUKS), bezpieczne magazyny (Keychain, Credential Manager) i izolacja procesów.
-
Rozdzielenie Rust / UI — Cała kryptografia działa w rdzeniu Rust z bezpieczeństwem pamięci w czasie kompilacji. UI React komunikuje się przez Tauri IPC; WebView nie ma bezpośredniego dostępu do hasła głównego.
-
Ostrożne zarządzanie pamięcią (v5) — Przy odblokowaniu odszyfrowywane są tylko nagłówek i indeks. Sekrety i załączniki pozostają zaszyfrowane do jawnej akcji (wyświetlenie, kopiowanie, pobranie). Przy blokowaniu: zeroization i pusty schowek.
-
Rozszerzenie przeglądarki — Lokalne Native Messaging; rozszerzenie nigdy nie otrzymuje hasła głównego.
Funkcje ochronne
Automatyczne blokowanie
Sejf blokuje się po skonfigurowanym czasie bezczynności (domyślnie: 5 min.). Uruchamia zeroization i czyszczenie schowka.
Opóźnione odszyfrowywanie
Sekrety wpisu są odszyfrowywane tylko wtedy, gdy je wyświetlasz lub kopiujesz. Lista i podgląd nie pokazują chronionych pól.
Zeroization
Sekrety są usuwane z RAM przy blokowaniu (crate Rust zeroize); cache czyszczone, tylko efemeryczne odszyfrowywanie na żądanie.
Limit czasu schowka
Schowek jest automatycznie czyszczony po 30 sekundach. Konfigurowalne w ustawieniach sejfu.