Proton Authenticator to otwartoźródłowa aplikacja uwierzytelniająca do uwierzytelniania dwustopniowego (2FA), która generuje oparte na czasie kody haseł jednorazowych (TOTP) na Twoim urządzeniu, umożliwiając Ci dostęp do usług online z dodatkową warstwą bezpieczeństwa. Wykorzystuje to samo sprawdzone szyfrowanie, które zabezpiecza resztę ekosystemu Proton. Proton Authenticator jest wyjątkowy, ponieważ został zaprojektowany od podstaw tak, aby był dostępny na niemal każdej platformie, chroniąc jednocześnie Twoją prywatność i dając Ci pełną kontrolę nad Twoimi danymi.
W przeciwieństwie do innych aplikacji uwierzytelniających, Proton Authenticator zabezpiecza Twoje dane szyfrowaniem end-to-end, nawet gdy włączysz synchronizację urządzeń.
Oznacza to, że Proton Authenticator uniemożliwia komukolwiek, w tym samemu Protonowi, dowiedzenie się, w jakich usługach online masz konta. Informacja ta, podobnie jak Twoje e-maile czy historia przeglądania, może wiele o Tobie ujawnić, a jej ochrona jest niezbędna do zachowania prywatności.
Szyfrowanie end-to-end w Proton Authenticator gwarantuje, że wszystkie operacje kryptograficzne, w tym generowanie kluczy i szyfrowanie danych, są wykonywane lokalnie na Twoim urządzeniu. Oznacza to, że Twoje niezaszyfrowane dane nie mogą być dostępne dla Protona ani udostępniane żadnym stronom trzecim. Serwery Proton nigdy nie mają dostępu do Twoich niezaszyfrowanych danych, w tym hasła do konta Proton (Proton Account).
Model szyfrowania
Proton Authenticator stosuje kompleksowe podejście do zapewnienia maksymalnego bezpieczeństwa i prywatności wszystkich danych użytkownika. Wszystkie operacje kryptograficzne odbywają się lokalnie na Twoim urządzeniu, a wszelkie dane przesyłane na serwer są zawsze zaszyfrowane. Proton nigdy nie ma dostępu do kluczy w postaci zwykłego tekstu (plaintext) wymaganych do odszyfrowania danych użytkownika, co uniemożliwia nam odszyfrowanie przechowywanych danych, nawet na żądanie stron trzecich.
Proton Authenticator używa tego samego zaawansowanego szyfrowania, którego używamy do uwierzytelniania w Proton Mail. Obejmuje to użycie wzmocnionej wersji protokołu Secure Remote Password (SRP), która oferuje silniejsze gwarancje bezpieczeństwa przed atakami typu man-in-the-middle (MITM). Nasza implementacja oznacza, że nawet atakujący, który może dowolnie czytać, modyfikować, opóźniać, niszczyć, powtarzać lub fabrykować wiadomości między Protonem a użytkownikiem w niewykrywalny sposób, jest ograniczony do sprawdzenia tylko jednego domysłu hasła na próbę logowania, co jest równoważne z próbą bezpośredniego zalogowania się. W ten sposób, nawet jeśli Proton zostanie skompromitowany i będzie działał złośliwie, informacje równoważne hasłu nigdy nie zostaną ujawnione.
Przeczytaj więcej o szyfrowaniu uwierzytelniania w Protonie
Szyfrowanie danych
Proton Authenticator pozwala bezpiecznie przechowywać kody 2FA, nawet jeśli nie masz konta Proton. Oznacza to, że początkowy proces szyfrowania musi zostać wykonany całkowicie na Twoim lokalnym urządzeniu. Następnie, jeśli zdecydujesz, że chcesz użyć konta Proton do synchronizacji kodów między urządzeniami, możemy użyć kluczy kryptograficznych przechowywanych na serwerach Proton do wykonania synchronizacji.
Szyfrowanie Proton zaczyna się od tego, że serwer Proton dostarcza zaszyfrowaną wersję klucza głównego (root key), którego aplikacja Authenticator używa do szyfrowania danych użytkownika. Każdy użytkownik Protona ma asymetryczny klucz użytkownika (User Key), a Proton szyfruje ten klucz użytkownika na Twoim urządzeniu w następujący sposób:
- Konta używające pojedynczego hasła do konta: Proton szyfruje klucz użytkownika za pomocą skrótu bcrypt hasła do konta i soli konta.
- Konta używające naszej funkcji wielu haseł do konta: Proton szyfruje klucz użytkownika za pomocą skrótu bcrypt hasła klucza i soli konta.
Proton Authenticator używa bcrypt i soli konta do hashowania hasła jako dodatkowej warstwy ochrony przed atakami brute-force. Nawet jeśli złośliwy aktor uzyskałby dostęp do bazy danych Protona, klucze Twojego konta byłyby bezpieczne przed atakami brute-force.
Po włączeniu synchronizacji Proton Authenticator generuje 32-bajtowy losowy klucz Authenticator Key. Ten klucz jest szyfrowany i podpisywany Twoim kluczem użytkownika, co zapewnia, że tylko Ty możesz go odszyfrować — nikt (nawet Proton) nie może odczytać ani utworzyć nowego klucza Authenticator Key. Gdy masz dostęp do klucza Authenticator Key, wszystkie wpisy w Proton Authenticator są szyfrowane przy użyciu 256-bitowego AES-GCM.

Ponieważ Proton Authenticator nie wymaga konta Proton, potrzebujemy również oddzielnego schematu szyfrowania, który bezpiecznie przechowuje dane, gdy istnieją one tylko na Twoim urządzeniu. Ostatecznie najłatwiejszym sposobem na wdrożenie tego jest traktowanie konta Proton jako oddzielnego dostawcy kluczy. W rezultacie wygląda to następująco:

W przypadku lokalnego przechowywania kluczy na Twoim urządzeniu polegamy na bezpiecznych dostawcach przechowywania kluczy każdego systemu:
- Android: Bezpiecznie przechowujemy klucz w Android Keystore(nowe okno), który jest następnie używany do szyfrowania lokalnego klucza losowego (Local Random Key), który przechowujemy w chronionym systemie plików aplikacji. Klucz ten służy do symetrycznego szyfrowania wszystkich wpisów Proton Authenticator na Twoim urządzeniu.
- iOS/iPadOS/macOS: Generujemy lokalny klucz losowy i przechowujemy go w usłudze Keychain(nowe okno). Klucz ten służy do symetrycznego szyfrowania wszystkich wpisów Proton Authenticator na Twoim urządzeniu.
- Windows: Generujemy lokalny klucz losowy i przechowujemy go w Menedżerze poświadczeń systemu Windows(nowe okno). Klucz ten służy do symetrycznego szyfrowania wszystkich wpisów Proton Authenticator na Twoim urządzeniu. Jeśli połączenie z WCM jest niedostępne, umożliwiamy użytkownikowi zaszyfrowanie lokalnego klucza losowego hasłem.
- Linux: Generujemy lokalny klucz losowy i przechowujemy go w dostępnej usłudze DBUS Secret Service. Klucz ten służy do symetrycznego szyfrowania wszystkich wpisów Proton Authenticator na Twoim urządzeniu. Jeśli usługa DBUS Secret Service nie jest skonfigurowana, umożliwiamy użytkownikowi zaszyfrowanie lokalnego klucza losowego hasłem.
Szyfrowanie kopii zapasowych
Jedną z głównych zalet Proton Authenticator jest to, że zawsze kontrolujesz swoje dane. Obejmuje to możliwość okresowego tworzenia kopii zapasowych kodów na urządzeniu lokalnym i ustawienia hasła, które szyfruje te wrażliwe dane.
Aby wdrożyć tę bezpieczną lokalną kopię zapasową, używamy hasła podanego przez Ciebie do wyprowadzenia bezpiecznego klucza szyfrowania za pomocą Argon2 jako KDF (Key-Derivation Function). KDF służy do generowania kluczy kryptograficznych z tajnych danych wejściowych, takich jak hasła wprowadzane przez użytkownika, a jego głównym celem jest poprawa bezpieczeństwa poprzez utrudnienie i wydłużenie czasu łamania haseł przez atakujących. Używając tego klucza szyfrowania wygenerowanego z Twojego hasła, serializujemy wszystkie Twoje wpisy i szyfrujemy je, aby zapewnić, że Twoje dane pozostaną bezpiecznie zaszyfrowane, nawet w przypadku wycieku kopii zapasowej. A dzięki wykorzystaniu znanych i otwartych technologii możesz odszyfrować swoje dane bez użycia Proton Authenticator, co pozwala zachować kontrolę, nawet jeśli zdecydujesz się przenieść do innej aplikacji uwierzytelniającej.
Bezpieczeństwo poprzez przejrzystość
Podobnie jak wszystkie usługi Proton, Proton Authenticator to otwarty kod źródłowy. Każdy może sprawdzić nasz kod źródłowy, aby zweryfikować nasz model bezpieczeństwa. Podobnie jak w przypadku innych naszych usług, Proton Authenticator będzie również poddawany regularnym niezależnym audytom bezpieczeństwa, a my udostępnimy raporty z tych audytów publicznie, gdy tylko będą dostępne.
Wreszcie, dla zainteresowanych badaczy bezpieczeństwa, Proton Authenticator kwalifikuje się do programu premii za wykrycie błędów Proton, który oferuje nagrody w wysokości do 100 000 USD za odkrycie błędów w oprogramowaniu Proton.