Czym jest Web Crypto API?
Web Crypto API to standard W3C udostępniający interfejs JavaScript do zestawu prymitywów kryptograficznych — obejmujących szyfrowanie, deszyfrowanie, generowanie kluczy, haszowanie i podpisywanie — zaimplementowanych natywnie w przeglądarce.
Przed pojawieniem się Web Crypto API aplikacje webowe wymagające kryptografii musiały korzystać z bibliotek JavaScript implementujących algorytmy od podstaw. Biblioteki te były wolne (działały w interpreterze JavaScript), potencjalnie podatne na ataki timing i nie mogły korzystać z akceleratorów kryptograficznych obecnych we współczesnych procesorach.
Web Crypto API rozwiązuje te problemy, udostępniając natywny silnik kryptograficzny przeglądarki dla JavaScript. Operacje takie jak szyfrowanie AES, generowanie kluczy i wyprowadzanie kluczy PBKDF2 działają jako skompilowany kod natywny, korzystając z implementacji o stałym czasie (odpornych na ataki timing side-channel) i akceleracji sprzętowej przez instrukcje AES-NI we współczesnych procesorach.
API jest z założenia asynchroniczne — wszystkie operacje zwracają obiekty Promise zamiast blokować główny wątek. Obiekty CryptoKey tworzone przez API są domyślnie nieprzezroczyste i nie mogą być wyodrębnione z pamięci, chyba że zostaną wyraźnie oznaczone jako eksportowalne, co stanowi dodatkową ochronę przed przypadkowym wyciekiem klucza.
Jak Vaulted używa Web Crypto API
Vaulted polega wyłącznie na Web Crypto API przy wszystkich operacjach kryptograficznych. Używa crypto.subtle.generateKey do tworzenia kluczy AES-256-GCM, crypto.subtle.encrypt i decrypt do właściwego szyfrowania oraz crypto.subtle.deriveKey z PBKDF2, gdy używana jest passphrase. Korzystając wyłącznie z kryptografii natywnej przeglądarki, Vaulted unika zależności od zewnętrznych bibliotek kryptograficznych i korzysta z implementacji o stałym czasie z akceleracją sprzętową.