Teraz jeżeli pewien klient chce ustanowić połączenie z serwerem, musi
zgłosić się najpierw do KDC i pobrać klucz sesji - ważny na pewien z góry
określony czas klucz do szyfrowania wiadomości w komunikacji klient - serwer.
Stałe klucze: (odpowiadające połączeniom na powyższym rysunku)
Wszystkie połączenia oparte są na kluczu znanym tylko obu stronom.
Klucze klientów generowane są z ich hasła (np. MD5).
Hasła serwerów generowane są losowo lub z hasła administratorów odp. zasobów.
Protokół nie określa w jaki sposób ustanowić te stałe połączenia. Można
skorzystać z algorytmów opartych na szyfrowaniu z kluczem prywatnym/publicznym,
albo przenieść klucz "ręcznie".
Dodatkowo postanowiono zwolnić serwery z obowiązku utrzymywania kluczy
otwartych sesji. (Żeby pozbyć się problemów związanych z zarządzaniem bazą
kluczy wszystkich otwartych sesji i tym samym zmniejszyć nakłady na
bezpieczeństwo komunikacji po stronie serwera)
Dlatego wprowadzamy bilet. W maksymalnym uproszczeniu KDC wydaje
klientowi bilet uprawniający do korzystania z określonego serwera przez
określony czas. Wysyłając coś do serwera klient musi dołączyć do wiadomości
ten bilet, inaczej nie uzyska odpowiedzi. (Bo serwer nie będzie w stanie
przesłać bezpiecznie informacji klientowi).
Bilet:
Zostaje przydzielony przez KDC.
Jest zrozumiały tylko dla docelowego serwera.
Umożliwia przesłanie zaszyfrowanej odpowiedzi zrozumiałej tylko dla klienta.
Bilet jest wiadomością przesyłaną jako ciąg bajtów. Ma następującą postać:
- Caly bilet jest zaszyfrowany kluczem symetrycznym posiadanym tylko
przez KDC i docelowy serwer - dlatego jest zrozumiały tylko dla docelowego
serwera, nawet dla klienta stanowi "czarną skrzynkę".
- Zawiera klucz sesji (dlatego umożliwia komunikację z klientem) i pewne
dane dodatkowe, spełnijące funkcje:
- Umożliwiają zorientowanie się serwerowi, że poprawnie odkodował klucz
sesji - który jest ciągiem bitów i ma postać nieokreśloną
- Zawierają dodatkowe informacje ułatwiające komunikację i uwierzytelnianie
np. czas i nazwę klienta (szczegóły w odp. plikach RFC - patrz Bibliografia
na końcu tego dokumentu).
Na kolejnych dwóch rysunkach przyjąłem następujące oznaczenia:
Każdy klucz (przypomnę że korzystamy tylko z algorytmów z kluczem
symetrycznym) charakteryzuje się innym kolorem i po tym go odróżniamy
Duże kolorowe prostokąty są zaszyfrowane. Do odszyfrowania potrzebny
jest klucz tego właśnie koloru.
Każdy serwer i klient przechowuje (w ulotnej pamięci dostępnej tylko dla procesu
obsługującego Kerberos) klucze pokazane jako małe kolorowe kwadraciki.
(C) Grzegorz Andruszkiewicz
Poszczególne kroki uwierzytelniania: (na kolorowo wiadomości zaszyfrowane kluczem odp. koloru)
Prośba KDC o bilet i kopię klucza sesji.
KDC odsyła klucz sesji zaszyfrowany z użyciem klucza klienta + bilet.
Bilet to klucz sesji + dod. informacje zaszyfrowany z użyciem klucza serwera.
Przy każdej komunikacji z serwerem wiadomości szyfrujemy kluczem sesji i dołączamy bilet.
Pierwszą wiadomością przesłaną do serwera jest UWIERZYTELNIACZ
(ang. AUTHENTICATOR) - wiadomość służąca to uwierzytelnienia na serwerze
Uwagi:
Bilet rzeczywiście jest zrozumiały tylko dla docelowego serwera.
Zawiera klucz więc umożliwia zaszyfrowanie odpowiedzi.
Serwer nie musi pamietać klucza.
Klucz sesji ma określony okres ważności (najczęściej 8 godzin).
W rzeczywistości wprowadza się dodatkowe zabezpieczenie, ograniczające użycie
stałego klucza do minimum.
Dodajemy specjalny rodzaj biletu:
Bilet na bilet (Ticket Granting Ticket) - bilet "wyższego rzędu"
uprawniający do pobierania zwykłych biletów
Oraz nowego pośrednika:
Serwis Wydający Bilety - TGS Ticket Granting Server - wydaje
zwykłe bilety na podstawie biletów "wyższego rzędu"
.
(C) Grzegorz Andruszkiewicz
Teraz do KDC (nazywanego w niektórych źródłach Serwerem Uwierzytelniania
(Authentication Server) zgłaszamy sie tylko raz po TGT, wymazujemy z pamięci
nasz klucz stały (na schemacie nasz klucz stały jest w kółku).
Po zwykłe bilety zgłaszamy się do TGS.
Zwykle KDC i TGS są fizycznie połączone (wręcz w jeden proces).
Niestety rozwiazanie to jest nieskalowalne
.
W praktyce wszystkie serwery dostępne poprzez mechanizmy KDC dzieli się na
rozłączne grupy (ang. realms) - (serwer może być w dwóch grupach na raz,
ale pod inną nazwą).
Najczęściej te grupy pokrywają się z domenami sieciowymi.
Są połączone hierarchicznie, np.:
(C) Grzegorz Andruszkiewicz
Żeby połączyć się z serwerem nie należącym do naszej grupy, od naszego lokalnego
serwera wydającego bilety (TGS) dostajemy bilet na bilet (TGT) to TGS'a w
sąsiedniej grupie. TGS w sąsiedniej grupie daje nam już zwykły bilet (jeżeli
docelowy serwer znajduje sie w jego grupie) lub odsyła nas do kolejnego TGS'a.
Z tego wynika, że połączenie z serwerem wymaga O(lg n) aplikacji o TGT w
kolejnych TGS, przy zalożeniu że drzewo hierarchii grup jest zrównoważone
(gdzie n oznacza liczbę serwerów).
W następującym przykładzie naszą lokalną grupą jest SZJO i chcemy się połączyć
z serwerem UW. Musimy wykonać 5 połączeń pośrednich:
(C) Grzegorz Andruszkiewicz
Dla najczęściej wykonywanych połączeń można utworzyć skrót (teraz łączymy się
z naszej lokalnej grupy SZJO z JASIO) :
(C) Grzegorz Andruszkiewicz
Teraz wystarczą nam trzy połaczenia pośrednie.
Uwagi dodatkowe dotyczące Kerberos:
Jest to tylko protokól uwierzytelniania, a nie autoryzacji! Dla autoryzacji
zostało zostawione specjalne pole w strukturze AUTHENTICATOR.
Zostały dodane nowe funkcjonalności gdy korzystamy z serwerów pośrednich.
Bilet TGT (bilet na bilet) może być jeszcze "wyższego poziomu" i może
zezwalać serwerom, z którymi się kontaktujemy bezpośrednio, na pobieranie
biletów w naszym imieniu. Rozrózniamy dwa rodzaje takich biletów:
- proxy - serwer nie może ubiegać się o TGT
- forward - serwer może ubiegać się o TGT
Jeżeli ważność klucza jest zbyt krótka - jest możliwość użycia kluczy
odnawialnych (renewable keys) - odnowienie klucza jest prostsze niż pobranie
nowego biletu, a zapewnia bezpieczeństwo (że nikt nie zdąży złamać szyfru
zanim nie wymienimy klucza na nowy).
Dodatkowo obowiązkiem
Algorytmu szyfrowania
jest
zapewnić bezpieczeństwo
wykrywać naruszenie danych
Jeżeli algorytm nie spełnia drugiego punktu to osoba implementująca
musi dołączyć sume kontrolną (dzis CBC DES + MD5)
Ten warunek jest konieczny do zabezpieczenia się przed modyfikowaniem naszych
danych, a nie tylko przed ich odczytaniem przez osobę trzecią.
BIBLIOGRAFIA
Proste opisy:
www.isi.edu/gost/brian/security/kerberos.html
web.mit.edu/is/help/kerberos/whatis.html
web.mit.edu/kerberos/WWW/
Strony zawierające linki do innych dokumentów:
web.mit.edu/kerberos/WWW/papers.html
www.isi.edu/gost/info/kerberos/documentation.html
Dokładny opis działania oraz porównanie wersji 4 i 5:
ftp://athena-dist.mit.edu/pub/kerberos/doc/krb_evol.PS
Dokumentacja techniczna:
rfc1510 - The Kerberos Network Authentication Service
rfc1964 - Kerberos v5 GSS-API