Mechanizm działania protokołu SSH 

0

Każdy system komputerowy korzystający z protokołu klienta SSHv2 posiada unikalny klucz RSA lub DSA (SSHv1 i serwera tylko RSA). Klucz taki ma długość co najmniej 1024 bitów. W SSHv1 parę wobec tego klucza stanowi klucz generowany na serwerze SSH o długości co najmniej 768 bitów (klucz ten jest cyklicznie wymieniany). Serwer SSH w takim układzie generuje dwa klucze, jednym jest jego klucz hosta, a drugim tzw. klucz serwera.

Łącząc się z serwerem SSH, klient otrzymuje jego klucze publiczne (klucz stały 1024-bitowy przypisany do serwera oraz cyklicznie zmieniany klucz 768-bitowy). Klient porównuje klucz stały z posiadanym wzorcem i na tej podstawie określa, czy połączył się z właściwym (a nie podstawionym) serwerem SSH.

Następnie klient szyfruje określoną liczbę za pomocą kluczy publicznych otrzymanych z serwera SSH i tak zaszyfrowaną przesyła do serwera. Ten z kolei deszyfruje otrzymaną wartość za pomocą swoich prywatnych kluczy. Ustalona w ten sposób wartość staje się kluczem dla algorytmów symetrycznych służących do szyfrowania właściwej sesji komunikacyjnej. Do szyfrowania sesji służą najczęściej algorytmy Blowfish oraz Triple DES.

Z kolei w przypadku SSHv2 nie następuje wygenerowanie klucza serwera. W zamian stosuje się algorytm Diffiego-Hellmana w celu autonomicznego wygenerowania klucza sesji. Po jego uzgodnieniu do szyfrowania danych przesyłanych w ramach sesji może w SSHv2 posłużyć algorytm:

  • AES (128, 192, 256 bitów),
  • Blowfish,
  • Triple DES,
  • CAST128,
  • Arcfour.

Dodatkowo integralność sesji zapewnia jeden z algorytmów haszujących – SHAv1 lub MD5.

Powyższe akapity obrazowały funkcjonowanie SSH w fazie autoryzacji klienta i serwera. Dopiero po jej pomyślnym zakończeniu następuje właściwa autoryzacja użytkownika na zdalnym serwerze. Metody uwierzytelniania użytkownika to przede wszystkim system oparty na wymianie danych z kluczem jawnym oraz tzw. autoryzacja rhosts.

Autoryzacja rhosts
Ta druga metoda zakłada, że serwer SSH posiada w plikach /etc/hosts.equiv lub /etc/shosts.equiv albo w plikach .shosts lub .rhosts wpis zawierający nazwę komputera klienta oraz nazwę danego użytkownika. W przypadku gdy wymienione pliki zawierają takie same informacje, dostęp jest automatycznie przyznawany (bez prośby o podanie hasła).

Autoryzacja z kluczem jawnym
Metoda oparta na kluczu jawnym polega na tym, że klucz publiczny użytkownika znajduje się na serwerze SSH (wykorzystywane są klucze RSA). Na początku połączenia klient SSH deklaruje, jakiego swojego klucza publicznego „chce” użyć do połączenia. W odpowiedzi serwer SSH wysyła do klienta losową liczbę zaszyfrowaną kluczem publicznym wybranym przez klienta. Ten musi ją odszyfrować, stosując korespondujący do danego klucza publicznego własny klucz prywatny. Jeśli etap ten zakończy się sukcesem, piłeczka wraca na stronę serwera. Teraz to klient szyfruje liczbę swoim kluczem prywatnym, a serwer musi ją deszyfrować korespondującym kluczem publicznym. Jeśli w wyniku deszyfracji serwer otrzymał liczbę, którą wcześniej wysłał klientowi (zaszyfrowaną jego kluczem publicznym), to uznaje, że autoryzacja klienta zakończyła się pozytywnie.

W SSHv2 autoryzacja z kluczem jawnym została odrobinę zmodyfikowana. Po pierwsze, wykorzystywane są zarówno klucze RSA, jak i DSA. Wszystko przebiega analogicznie jak w protokole SSHv1 aż do momentu, kiedy serwer miałby wysłać zaszyfrowaną losową liczbę do klienta. W SSHv2 następuje podpisanie przez klienta kluczem prywatnym klucza sesji uzgodnionego za pomocą algorytmu Diffiego-Hellmana. Przesyłkę w takiej postaci serwer SSH weryfikuje za pomocą klucza publicznego użytkownika.

Ponadto systemy oparte na SSHv2 mogą wykorzystywać zewnętrzne metody uwierzytelniania oparte na Kerberos, X.509 oraz elektronicznych kartach chipowych SmartCards.

Pozytywne przejście przez etapy autoryzacji serwera i klienta oraz autoryzacji użytkownika pozwala zacząć pracę na zdalnej maszynie. Możliwe są dwa jej tryby. Pierwszy tryb to nieinteraktywne wykonywanie poleceń wydawanych z poziomu klienta. Drugi tryb, bardziej zaawansowany, polega na udostępnieniu użytkownikowi zdalnej powłoki. Ten tryb stanowi więc sensu stricte mechanizm zdalnej pracy na odległym systemie komputerowym.

Przeczytaj również:
1. SSH (Secure Shell) – podstawy bezpiecznej komunikacji
3. Konfiguracja Putty, bezpłatnego klienta SSH

PODZIEL SIĘ

BRAK KOMENTARZY

ZOSTAW ODPOWIEDŹ