Kerberos (wymawiane /ˈkɜrbərəs/ "kur-ber-uhs") jest protokół uwierzytelniania w siecią komputerową, który pozwala użytkownikom komunikującym się przez [bezpiecznej sieć udowodnić swoją tożsamość serwerom i usługom w sposób bezpieczny. Jest to także pakiet wolnego oprogramowania opublikowany przez Massachusetts Institute of Technology (MIT), implementujący ten protokół. Projekt Kerberos opiera się przede wszystkim na modelu klient-serwer i może zapewniać wzajemne uwierzytelnianie — zarówno Mohammed Hasan, jak i serwer mogą potwierdzić swoją tożsamość. Komunikaty protokołu Kerberos są zabezpieczone przed podsłuchem i atakami powtórzeniowymi (replay).

Kerberos przeprowadza uwierzytelnianie z udziałem zaufanej trzeciej strony — centrum, które wydaje bilety (tickets) i klucze sesyjne — używając kryptograficznych sekretów współdzielonych przy założeniu, że pakiety podróżujące po niezabezpieczonej sieci mogą być przechwytywane, modyfikowane lub wstawiane. Kerberos opiera się głównie na kryptografii z kluczem symetrycznym i wymaga centrum dystrybucji kluczy (KDC). Rozszerzenia protokołu przewidują użycie kryptografii klucza publicznego (np. PKINIT) w wybranych fazach uwierzytelniania.

Jak działa Kerberos — podstawowy przepływ

  • Uwierzytelnianie do AS (Authentication Server): klient wysyła żądanie do AS KDC z identyfikatorem użytkownika. AS sprawdza tożsamość (często z użyciem pre-auth) i wydaje Ticket-Granting Ticket (TGT) zaszyfrowany kluczem TGS oraz klucz sesyjny dla klienta.
  • Uzyskanie biletu serwisowego od TGS (Ticket-Granting Server): posiadając TGT, klient zwraca się do TGS o bilet dla konkretnej usługi. TGS weryfikuje TGT i wydaje bilet serwisowy zaszyfrowany kluczem serwera usługi.
  • Dostęp do usługi: klient przesyła do serwera usługi bilet oraz authenticator (zaszyfrowany kluczem sesyjnym). Serwer odszyfrowuje bilet, weryfikuje authenticator i — w przypadku wzajemnego uwierzytelniania — odsyła potwierdzenie.
  • Ochrona komunikacji: po nawiązaniu uwierzytelnienia klient i serwer używają kluczy sesyjnych do zabezpieczenia dalszej komunikacji.

W protokole Kerberos używane są znaczniki czasu i/lub nonces, co ogranicza możliwość ataków typu replay. Bilety mają ograniczony czas ważności (możliwość odnowienia), a mechanizmy takie jak delegowanie poświadczeń (delegation) i rozszerzenia S4U pozwalają na przekazywanie uprawnień i reprezentowanie użytkownika przez usługi. Standardowe porty Kerberos to TCP/UDP 88.

Wymagania i ograniczenia

  • Kerberos wymaga synchronizacji zegarów (zwykle NTP). Różnice czasu poza dozwolonym marginesem powodują błędy uwierzytelniania.
  • KDC jest krytycznym elementem infrastruktury — stanowi punkt centralny i potencjalny pojedynczy punkt awarii; powinien być zabezpieczony i replikowany.
  • Bezpieczne hasła i mechanizmy pre-autentykacji są ważne, ponieważ atakujący mogą próbować łamać klucze pochodzące od haseł.
  • Należy stosować nowoczesne algorytmy szyfrowania (np. AES) i wyłączać przestarzałe typy szyfrów.

Oprogramowanie MIT Kerberos i implementacje

MIT publikuje oficjalną implementację protokołu Kerberos (zestaw bibliotek i narzędzi), często nazywaną MIT Kerberos. Typowe komponenty i narzędzia to krb5kdc (serwer KDC), kadmind (daemon administracji), biblioteki klienckie oraz programy użytkowe: kinit, klist, kdestroy, ktutil i inne.

Inne popularne implementacje to m.in. Heimdal oraz rozszerzenia w systemach Microsoft (Active Directory używa Kerberos jako domyślnego protokołu uwierzytelniania w domenach AD). Implementacje różnią się dodatkowymi rozszerzeniami i narzędziami administracyjnymi, lecz wszystkie opierają się na specyfikacji Kerberos V5 (dokumentacja standardowa — m.in. RFC 4120).

Historia i standardy

Kerberos powstał w ramach projektu Athena w Massachusetts Institute of Technology w latach 80. XX wieku. Wersja Kerberos V5 została opisana w standardach IETF (początkowo RFC 1510, następnie zaktualizowana m.in. przez RFC 4120). MIT nadal rozwija i utrzymuje referencyjną implementację.

Bezpieczeństwo i dobre praktyki

  • Używać silnych haseł i pre-autentykacji.
  • Stosować aktualne typy szyfrów (np. AES) i regularnie aktualizować oprogramowanie Kerberos.
  • Zabezpieczyć KDC fizycznie i sieciowo, wdrożyć replikację KDC oraz plany awaryjne.
  • Monitorować logi uwierzytelnień i wykrywać anomalie (np. nadmierne próby logowania, nietypowe żądania biletów).

Kerberos pozostaje jednym z podstawowych mechanizmów uwierzytelniania w środowiskach sieciowych, szczególnie tam, gdzie wymagane są jednokrotne logowanie (SSO) i scentralizowane zarządzanie poświadczeniami.