Zastosowanie kryptografii w aplikacjach sieciowych

0
(0)

Uwierzytelnianie

Proces uwierzytelniania (weryfikowania) tożsamości dokonywany przez encję systemu, można ująć w dwóch krokach:

  • identyfikacja – sposób w jaki użytkownik oznajmia systemowi swoją tożsamość w celu zbudowania dowodu prawdziwości oznajmienia.
  • weryfikacja – potwierdzenie związku encji z podanym oznajmieniem.

W systemach stosuje się w celu zabezpieczenia uwierzytelnianie na podstawie hasła, jest ono zazwyczaj przechowywane w postaci skrótu, utworzonego przez funkcję mieszającą. Sprawdzenie czy podane hasło jest prawidłowe, odbywa się na zasadzie porównania, tekstu podanego przez użytkownika, który jest następnie przetwarzany przez funkcję mieszającą, ze skrótem znajdującym się najczęściej w bazie danych. Jeśli dwa ciągi znaków są identyczne następuje uwierzytelnienie, w przeciwnym wypadku hasło podane przez użytkownika jest nie prawidłowe.

W większości poradników dostępnych w Internecie, zaleca się stosowanie algorytmu MD5, jednak  samo zastosowanie tego algorytmu nie jest bezpieczne. Dla poprawy bezpieczeństwa stosuje się dodanie do hasła ciągu zwanego solą, który można wygenerować przy użyciu dowolnej funkcji mieszającej. Następnie ciąg hasło+sól jest przetwarzany przez algorytm MD5.  Dodatkowo z uwagi na zwiększenie bezpieczeństwa zaleca się zastąpienie algorytmu MD5 poprzez SHA-1, a jeszcze lepiej przez SHA-256.

Większość języków programowania aplikacji typu klient serwer posiada wbudowane funkcje mieszające, będące realizacją wyżej wymienionych algorytmów np. w języku PHP, aby skorzystać z algorytmu SHA-1, stosuje się następujący prototyp wywołania funkcji:

$skrot_wiadmosci = string sha1(tekst_jawny[, bool łańcuch_binarny]);

Mając łańcuch znaków tekst_jawny, funkcja domyślnie zwróci pseudolosowy ciąg 40 znakowy. Użycie poprzez wstawienie wartości true parametru łańcuch_binarny spowoduje, iż zwrócona wartość będzie 20 znakowym ciągiem danych binarnych, nie ma możliwości, żeby proces ten odwrócić, jednak powodem wysokiej przydatności tej funkcji (podobnie zresztą jak pozostałych funkcji mieszających) jest fakt, że dla tego samego ciągu tekst_jawny, zawsze zwróci ten sam wynik.

Podpis cyfrowy

Podpisy elektroniczne, chociaż w pewnym sensie są podobne do zwykłych, niosą za sobą większe zagrożenia z uwagi na to, iż dokumenty nimi podpisane, nie są powiązane z żadnym konkretnym nośnikiem. Można je kopiować, przetwarzać i przesyłać na znaczne odległości. Należy więc zapewnić jak najwyższy poziom bezpieczeństwa, a w tym weryfikacji podpisu. W tym celu należy przygotować dwa algorytmy: jeden w celu złożenia podpisu (dostępny tylko nadawcy wiadomości), drugi zaś w celu jego weryfikacji (dostępny wszystkim potencjalnym odbiorcom).

Schemat składania takiego mógłby przebiegać następująco:

  1. Nadawca N podpisuje wiadomość wykorzystując w tym celu algorytm podpisujący SG, który wyznacza podpis.
  2. Odbiorca O wykonuje algorytm weryfikujący VER, który zwraca AUTENTYCZNY lub BŁĄD, w przypadku gdy podpis nie należy do nadawcy N. Algorytm weryfikujący pobiera o podpisującym dostępne publiczne informacje.

Bezpieczne połączenia w aplikacjach typu klient-serwer

Protokół SSL został zaprojektowany w celu stworzenia bezpiecznego kanału komunikacyjnego dla aplikacji typu klient-serwer. Możemy wyróżnić jego następujące warstwy:

Jak można zauważyć na powyższym rysunku, SSL składa się z następujących protokołów:

  • SSL Record (podprotokół rekordu) – zapewnia poufność i spójność na potrzeby pozostałych protokołów SSL,
  • Handshake(podprotokół powitalny) – służy do wzajemnego uwierzytelnia klienta i serwera, ustala również sesję,
  • Change Cipher Spec (podprotokół zmiany szyfru) – pozwala ustalić właściwe ustawienia kryptograficzne, w normalnym trybie połączenie jest tworzone po wykonaniu tego protokołu,
  • Alert (podprotokół alarmowy)-odpowiedzialny za przekazywanie ostrzeżeń.

W specyfikacji protokołu SSL definiowane są dwa istotne pojęcia:

  • Połączenie – komunikacja w warstwach transportowych, w SSL połączenie ma charakter peer-to-peer. Ważną kwestią jest też, że zawsze odbywa się ono w ramach konkretnej sesji.
  • Sesja – to skojarzenie pomiędzy klientem, a serwerem, utworzone poprzez podprotokół powitalny i definiujące zestaw parametrów połączenia.

Protokół SSL Record gwarantuje następujące usługi związane z bezpieczeństwem:

  • uwierzytelnianie – na tym etapie sprawdzane są rekordy SSL pochodzące z TCP i uwierzytelniane są wiadomości z wyższych warstw.
  • poufność – wiadomości z wyższych warstw są szyfrowane lub deszyfrowane (jeśli pochodzą z TCP).

Wyżej wspomniany protokół przyjmuje duże ilości danych pochodzących z wyższych warstw, dzieli dane na rekordy SSL o wielkości nie większej niż 214 bajtów. Kompresuje również otrzymane rekordy (etap opcjonalny), dołącza do rekordów skompresowanych wartości MAC oraz szyfruje uwierzytelnione rekordy i dodaje nagłówki.

Ostatnim krokiem jest dołączenie nagłówka do protokołu SSL Record, ma on następującą budowę:

Kolejnym protokołem wchodzącym w skład protokołów SSL jest Handshake. Komunikacja między klientem, a serwerem rozpoczyna się od przesłania wiadomości client_hello. Po otrzymaniu wiadomości serwer ustala parametry, gdy jest to nie możliwe odpowiada hand-shake_failure, w przeciwnym wypadku wysyła wiadomość server_hello.

Uwierzytelnienie oraz wymiana kluczy realizowana jest przez serwer, który wysyła certyfikat odpowiadający wybranemu algorytmowi wymiany kluczy. W wypadku braku certyfikatu serwer wysyła wiadomość server_key_exchange. Ostatnią wiadmością serwera jest server_hello_done, po niej czeka on na odpowiedź klienta.

Certyfikat klienta jest wysyłany tylko w przypadku żądania serwera, jeśli klient nie ma certyfikatu w odpowiedzi serwer otrzyma alert no_certificate. Ostatni etap działania protokołu zaczyna się wiadomością change_cipher_spec, powoduje ona przygotowanie aktualnej specyfikacji szyfru CipherSpec. Następnie klient i serwer przekazują sobie chronioną kryptograficznie widomość finished.

Jak przydatny był ten post?

Kliknij gwiazdkę, aby go ocenić!

Średnia ocena 0 / 5. Liczba głosów: 0

Jak dotąd brak głosów! Bądź pierwszą osobą, która oceni ten post.