Czym jest Wyprowadzanie kluczy?
Wyprowadzanie kluczy to proces przekształcania wartości źródłowej — zazwyczaj hasła, passphrase lub wspólnego sekretu — w jeden lub więcej kluczy kryptograficznych o wysokiej entropii za pomocą deterministycznego algorytmu zaprojektowanego do produkcji mocnego materiału klucza.
Hasła wybierane przez ludzi są z natury słabe jako klucze kryptograficzne. Są krótkie, mają ograniczone zestawy znaków i podążają za przewidywalnymi wzorcami. Funkcja wyprowadzania kluczy (KDF) wypełnia tę lukę, przetwarzając hasło przez obliczeniowo intensywny algorytm, który generuje klucz o stałej długości odpowiedni do szyfrowania.
Funkcje wyprowadzania kluczy są celowo zaprojektowane, by być powolne i zasobochłonne. To kontraintuicyjne w większości oprogramowania, gdzie liczy się szybkość — dla KDF powolność jest jednak cechą bezpieczeństwa. Atakujący próbujący złamać hasło brute-force musi uruchamiać KDF dla każdej próby. Jeśli KDF zajmuje 100 milisekund na próbę, sprawdzenie miliarda haseł zajęłoby ponad trzy lata — w porównaniu do sekund przy szybkiej funkcji haszującej.
Popularne KDF to PBKDF2, bcrypt, scrypt i Argon2. Każda balansuje różne zasoby (czas procesora, pamięć, równoległość) w celu odparcia różnych strategii ataku. Wybór KDF zależy od środowiska: aplikacje przeglądarkowe zazwyczaj używają PBKDF2, ponieważ jest dostępny przez Web Crypto API, podczas gdy aplikacje serwerowe mogą preferować Argon2 ze względu na jego odporność pamięciową.
Jak Vaulted używa Wyprowadzanie kluczy
Gdy ustawiasz opcjonalną passphrase dla sekretu, Vaulted używa wyprowadzania kluczy, by przekształcić ją w klucz opakowujący. Konkretnie uruchamia PBKDF2 ze 100 000 iteracji, SHA-256 i losowym 16-bajtowym salt za pośrednictwem Web Crypto API. Wyprowadzony klucz jest używany z AES-KW do opakowania oryginalnego klucza szyfrowania AES-256-GCM. Odbiorca musi podać tę samą passphrase, by wyprowadzić ten sam klucz opakowujący, rozpakować klucz szyfrowania i ostatecznie odszyfrować sekret.