Niezawodne zaszyfrowane kontenery z obsługą FIDO2 i kryptografii post-kwantowej
Dostawcy chmury lubią powtarzać frazę „twoje dane są szyfrowane w spoczynku”. Brzmi to uspokajająco, dopóki nie przypomnisz sobie, kto tak naprawdę trzyma klucze do tego szyfrowania. Jeśli dostawca hostingu ma klucze, to każde żądanie regulatora, wyciek wewnętrzny lub przejęty token dostępu może otworzyć twoje pliki dla osób postronnych.
Aby uniknąć polegania na zaufaniu do usługi zewnętrznej, dane są szyfrowane po stronie klienta przed wysłaniem przez sieć. Istnieją narzędzia takie jak VeraCrypt, gocryptfs czy age, ale każde z nich ma swoje kompromisy: przestarzałe formaty, brak obsługi kluczy sprzętowych lub komplikacje przy montowaniu kontenera jako zwykłego dysku.
Ostatnio natknąłem się na LUKSbox, projekt napisany w Rust. To narzędzie do tworzenia zaszyfrowanych kontenerów plikowych, które czerpie najlepsze pomysły ze świata LUKS2, ale adaptuje je do magazynu w chmurze, dysków USB i nowoczesnych metod uwierzytelniania.
Co znajduje się wewnątrz kontenera
Główna koncepcja jest prosta: wszystkie dane są pakowane do pojedynczego pliku .lbx. Dla obserwatora z zewnątrz lub dysku w chmurze plik ten wygląda jak szum losowy bez oczywistych nagłówków czy metadanych, pod warunkiem że nagłówek jest przechowywany w osobnym pliku.
Jednocześnie kontener montuje się w systemie operacyjnym jako zwykły dysk poprzez FUSE (na Linuksie i macOS) lub WinFsp (na Windows). Pracujesz z nim tak samo jak ze zwykłym pendrivem.
Głównym celem projektu, jak opisują go autorzy, jest tworzenie przenośnych bezpiecznych kopii. Wysyłasz .lbx do S3, Dropbox lub współdzielonego dysku sieciowego i możesz spać spokojnie: host fizycznie nie jest w stanie odczytać zawartości.
Metody odblokowania i ochrona przed komputerami kwantowymi
Zazwyczaj zaszyfrowana pamięć wymaga hasła. LUKSbox również ma hasła, hashowane przez Argon2id z poważnymi domyślnymi parametrami, ale twórcy poszli dalej i dodali gniazda na klucze sprzętowe.
Oto obsługiwane opcje odblokowania magazynu:
- Autentykatory FIDO2. Możesz powiązać YubiKey, Nitrokey lub Google Titan przez protokół HMAC-secret. Bez fizycznego dotknięcia klucza kontener się nie otworzy.
- TPM 2.0. Powiązanie ze sprzętowym chipem na płycie głównej na Linuksie i Windows. Wygodne, jeśli kontener powinien otwierać się tylko na twojej stacji roboczej.
- Tryb hybrydowy post-kwantowy. Ochrona przed scenariuszem „zbierz teraz, odszyfruj później na komputerze kwantowym”. LUKSbox może łączyć klasyczne algorytmy z algorytmem ML-KEM (FIPS 203, dawniej Kyber). Dla tego celu tworzony jest osobny plik klucza
.kyber, który możesz przechowywać oddzielnie od kontenera.
Żadne z tych gniazd nie szyfruje plików bezpośrednio. Opakowują one Master Volume Key. Po pomyślnej walidacji dowolnego gniazda klucz główny jest odszyfrowywany, a klucze do metadanych, bloków plików i weryfikacji integralności są z niego wyprowadzane przez HKDF-SHA256.
+-------------------------------------------------------------+
| Пароль / FIDO2 / TPM 2.0 / ML-KEM (.kyber) |
+------------------------------+------------------------------+
|
v
+-------------------------------+
| Master Volume Key (MVK) |
+---------------+---------------+
|
+---------------------+---------------------+
v v v
+-----------------+ +-----------------+ +-----------------+
| Header HMAC Key | | Metadata Key | | Per-file Keys |
+-----------------+ +-----------------+ +-----------------+
Bezpieczeństwo na poziomie szczegółów
Repozytorium przyjemnie zaskakuje dbałością o szczegóły, które wielu programistów pomija.
Domyślnie używany jest AES-256-GCM-SIV do szyfrowania bloków. Dodatek SIV zapewnia odporność na ponowne użycie nonce, co jest przydatne przy częstych nadpisaniach. Możesz też wybrać ChaCha20-Poly1305 lub standardowy AES-256-GCM.
Kilka interesujących odkryć z kodu źródłowego:
- Ochrona przed podstawianiem bloków. Każdy zaszyfrowany fragment pliku jest wyposażony w dodatkowe dane uwierzytelniające (AAD), obejmujące ID pliku, indeks bloku i licznik generacji. Atakujący z chmury nie będzie w stanie dyskretnie zastąpić nowego bloku starszą wersją ani przestawiać fragmentów.
- Czyszczenie pamięci. Na Linuksie wywołanie systemowe
memfd_secretwyklucza klucz główny z zrzutów pamięci jądra i obrazów hibernacji. W innych systemach stosowana jest kombinacja blokowania pamięci i zerowania bufora przez cechyZeroize. - Ochrona przed atakiem wycofania. Opcjonalny plik boczny
.anchorprzechowuje podpisany licznik zmian. Jeśli dostawca wycofa cały kontener do starszej wersji, program to zauważy. - Odrębny nagłówek. Jeśli przeniesiesz nagłówek do pliku
.hdr, główny kontener.lbxstanie się tablicą bajtów bez podpisów.
Szybki start
Projekt jest napisany w Rust, więc możesz zbudować go ze źródeł standardowym sposobem cargo build. Wstępnie zbudowane pakiety .deb, .rpm, instalatory Windows i pakiety macOS są dostępne dla większości platform.
Kontenerami można zarządzać na trzy sposoby: przez CLI, interaktywnego kreatora TUI lub interfejs graficzny zbudowanego na egui.
Tworzenie zwykłego kontenera i jego montowanie:
# Создаем хранилище с настройками по умолчанию
luksbox create my-vault.lbx
# Монтируем как директорию в Linux/macOS
luksbox mount my-vault.lbx /mnt/vault
# Или в отдельный диск в Windows
luksbox mount my-vault.lbx Z:
Dodawanie klucza sprzętowego FIDO2 do istniejącego kontenera:
luksbox enroll my-vault.lbx --kind fido2
Tworzenie kontenera post-kwantowego z kluczem hybrydowym na osobnym pendrivie:
luksbox create secure-data.lbx --kind hybrid-pq --pq-hybrid /media/usb/key.kyber
Jeśli nie chcesz zapamiętywać flag linii poleceń, polecenie luksbox wizard uruchamia dialog krok po kroku w terminalu.
Praktyczne scenariusze
LUKSbox rozwiązuje problem bezpiecznego transportu i zdalnego przechowywania. Oto sytuacje, w których projekt wydaje się dobrze dopasowany:
- Synchronizacja przez zewnętrzną chmurę. Przechowujesz swoją bazę haseł, osobiste klucze lub dokumenty robocze w jednym pliku
.lbxw folderze Google Drive lub Yandex Disk. - Kopie zapasowe na zewnętrznych serwerach. Skrypt kopii zapasowej montuje kontener, umieszcza świeże zrzuty i odmontowuje dysk.
- Udostępnianie tajnych archiwów. Wysyłanie plików do kolegi z wymogiem fizycznego potwierdzenia przez token sprzętowy.
Aktualny status projektu
Projekt jest w fazie przed 1.0. Format kontenera v3 jest już zamrożony, fuzzing jest skonfigurowany w repozytorium przez libFuzzer i AFL++ z milionami iteracji. Czternaście rund wewnętrznego audytu bezpieczeństwa zostało zakończonych, choć niezależny audyt zewnętrzny jest nadal przed nami.
Autorzy uczciwie ostrzegają: zaszyfrowany kontener jest pojedynczym punktem awarii. Jeśli plik ulegnie uszkodzeniu lub wszystkie klucze zostaną utracone, dane są nieodwracalne. Dlatego LUKSbox jest przeznaczony do chronionych przenośnych kopii, a nie jako jedyne miejsce przechowywania krytycznie ważnych plików.
Jeśli potrzebujesz nowoczesnego narzędzia szyfrującego na wiele platform z obsługą FIDO2 i zabezpieczeniem na przyszłość post-kwantową, repozytorium zdecydowanie warto sprawdzić. Kod źródłowy jest udostępniony na licencji Apache-2.0.
Powiązane projekty