Szyfrowanie danych
Skrzynki kontaktowe wdrożone w ramach Bezpieczny Kontakt korzystają z rozwiązania zaimplementowanego przez GlobaLeaks. Protokół szyfrowania pozwala z jednej strony na łatwe użycie przez sygnalistów, a z drugiej daje mocne zabezpieczenie przed możliwymi atakami z zewnątrz.
Spis treści
Głównym i podstawowym celem zaawansowanych technik szyfrowania danych jest zapewnienie, aby zgłoszenie od sygnalisty było dostępne jedynie dla niego samego oraz dla określonego odbiorcy.
O nieco innym zagadnieniu, a mianowicie o bezpieczeństwie i szyfrowaniu połączeń sieciowych można przeczytać w sekcji Bezpieczeństwo.
Protokół szyfrowania
Protokół został opracowany i zweryfikowany we współpracy GlobaLeaks z Open Technology Fund i stanowi kompromis między bezpieczeństwem a użytecznością, mającym na celu zapewnienie łatwego użycia przez sygnalistów i rozsądnego bezpieczeństwa przed atakującymi, którzy nawet w momencie udanego złamania dostępu do serwera, nie będą w stanie odszyfrować danych standardową metodą typu bruteforce.
Szyfrowanie jest zaimplementowane dla każdego zgłoszenia, chroniąc zgłoszenia sygnalistów, w tym komentarze, wiadomości, załączniki i związane z nimi metadane. Klucze zaangażowane w szyfrowanie są na generowane zarówno na użytkownika, jak i na zgłoszenie.
Tylko i wyłącznie ci użytkownicy (sygnaliści oraz odbiorcy), do których wysłano dane, mogą uzyskać dostęp do danych.
Mechanizm ten gwarantuje, że tylko użytkownik będzie miał dostęp do danych. Użytkownicy, którzy zapomnieliby hasła, straciliby dostęp do danych, które nie będą już dostępne.
Proces szyfrowania
- Odbiorca definiuje osobiste bezpieczne hasło przy pierwszym logowaniu.
- System tworzy osobistą parę kluczy dla odbiorcy i przechowuje ją asymetrycznie zaszyfrowaną kluczem tajnym uzyskanym z osobistego hasła użytkownika.
- Sygnalista zgłaszający przypadki naruszeń wysyła zgłoszenie przez skrzynkę kontaktową.
- System generuje unikalny ciąg znaków dla zgłoszenia zgłoszonego przez sygnalistę (kod zgłoszenia).
- System generuje klucz symetryczny do szyfrowania zgłoszenia, załączonych plików i komentarzy oraz związanych z nimi metadanych i rozpoczyna szyfrowanie danych.
- System generuje asymetryczną parę kluczy i przechowuje ją symetrycznie zaszyfrowaną przy użyciu klucza tajnego pochodzącego z kodu zgłoszenia.
- System zapewnia każdemu zaangażowanemu odbiorcy i sygnalistowi dostęp do symetrycznego klucza szyfrowania zgłoszenia, przypisując każdemu z użytkowników asymetrycznie zaszyfrowaną kopię klucza.
- Użytkownicy (sygnaliści oraz odbiorcy) kontynuują wymianę informacji w zgłoszeniu, używając swoich osobistych poświadczeń dostępu i odblokowując własne osobiste klucze asymetryczne i klucze symetryczne otwieranego zgłoszenia.
Szczegóły szyfrowania
Algorytmy
Rodzaj | Implementacja |
---|---|
Szyfrowanie asymetryczne | Libsodium SealedBoxes - implementacja szyfrowania, która łączy algorytmy Curve25519, XSalsa20 i Poly1305. |
Szyfrowanie symetryczne | Libsodium SecretBoxes - implementacja szyfrowania, która łączy algorytmy XSalsa20 i Poly1305. |
Osobiste poświadczenia dostępu
W procesie uzyskiwania dostępu stosuje się dwa typy poświadczeń w zależności od roli użytkownika.
Typ poświadczenia | Rola użytkownika |
---|---|
Hasło dostępu | Hasła służą do uwierzytelniania odbiorców identyfikowanych przez nazwę użytkownika. |
Kod zgłoszenia | Kody zgłoszenia to 16-cyfrowe losowe ciągi używane do uwierzytelniania anonimowych sygnalistów. |
Dodatkowe mechanizmy szyfrujące
- System wymusza silną złożoność hasła dla odbiorców.
- Odbiorcy mają możliwość dodania uwierzytelnienia dwuetapowego (2FA - Two-factor authentication).
- System wymusza wygaśnięcie kodów zgłoszeń zgodnie ze ścisłą polityką przechowywania danych, ograniczając jednoczesną liczbę aktywnych zgłoszeń.
- Odbiorca ma także możliwość użycia własnego klucza PGP, dzięki czemu każdy plik wysłany przez odbiorcę oraz powiadomienia e-mail wysyłane przez system, są szyfrowane tym kluczem. Jest to opcjonalny i dodatkowy środek bezpieczeństwa, który należy ocenić i przyjąć w odniesieniu do konkretnego wdrożenia.
Przykładowy ekran generowania kodu QR dla uwierzytelnienia dwuetapowego
Generowanie kluczy
Klucze szyfrujące odbiorców są generowane automatycznie podczas pierwszego logowania i zabezpieczane hasłem używanym do logowania. Ta prosta, ale skuteczna zasada generowania kluczy wymaga od odbiorców wykonania pierwszego logowania przed włączeniem otrzymywania zgłoszeń od sygnalistów.
Klucz odzyskiwania konta
- System zapewnia metodę odzyskiwania klucza za pomocą klucza odzyskiwania konta i szyfrowania symetrycznego.
- Po wygenerowaniu klucza użytkownika klucz prywatny jest szyfrowany symetrycznie za pomocą losowo generowanego klucza odzyskiwania.
- Ze względu na użyteczność to odzyskiwanie jest również szyfrowane, dzięki czemu zalogowani użytkownicy posiadający hasło mogą odzyskać i zachować w bezpiecznym miejscu własny klucz odzyskiwania konta.