Kerberos (datasäkerhet)

Kerberos är ett system för autentisering inom datorteknik, för att användare kan visa vem de är för datorer och tjänster, samtidigt som de får verifierat att tjänsten verkligen är den de tror sig använda.

Funktion 

Kerberos bygger på en betrodd tredje part i kommunikationen mellan användaren och tjänsten. I princip går det ut på att användaren identifierar sig hos den tredje parten, kerberosservern, med sitt namn och sitt lösenord (känt endast för kerberosservern och användaren). Användaren får då en ticket granting ticket (tgt), som används för att få specifika biljetter till olika tjänster.

Denna biljett innehåller bland annat användarens namn krypterat med tjänstens lösenord (känt endast för Kerberos och tjänsten) och kan därför bara läsas av den begärda tjänsten. På så sätt vet tjänsten att biljetten kommer från Kerberos som också godkänt användaren. Biljetterna har ofta begränsad giltighetstid.

Implementationer 

Kerberos V (fem, den aktuella protokollversionen 2006) finns i huvudsak i tre olika implementationer: MIT-Kerberos från universitetet MIT; Heimdal som utvecklas vid Stacken, KTH och Stockholms universitet; och Microsofts implementation.

Protokoll

Klienten autentiserar sig gentemot autentiseringsservern (AS), som vidarebefordrar användarnamnet till ett nyckeldistributionscenter (Key Distribution Center, KDC). KDC:t utfärdar en biljettbeviljande biljett (ticket-granting ticket, TGT), som tidsmärks och sedan krypteras med den biljettbeviljande serverns (TGS) hemliga nyckel, och därefter skickar det krypterade resultatet tillbaka till användarens arbetsstation. Detta görs sällan, typiskt då användaren loggar in. TGT:n utlöper så småningom, även om den öppet kan förnyas av användarens sessionshanterare medan vederbörande är inloggad.

När klienten behöver kommunicera med en annan nod (som kallas "principal" i Kerberos terminologi) för att konsumera någon tjänst på den noden skickar klienten TGT:n till TGS:en, som ofta har samma nätverksvärd som KDC:t. Servicen måste vara registrerad i TGT:n med ett tjänsteprincipalnamn (Service Principal Name, SPN). Klienten använder principalnamnet för att begära tillträde till tjänsten. Efter att ha kontrollerat att TGT:n är giltig och att användaren har tillgång till den begärda tjänsten utfärdar TGS:en biljett och sessionsnycklar till klienten. Klienten skickar sedan biljetten till tjänsteservern (Service Server, SS), tillsammans med tjänstebegäran.

Klientbaserad inloggning av användare
 Användaren skriver in användarnamn och lösenord på klientmaskinen. Andra mekanismer för användaruppgifter, exempelvis pkinit (RFC 4556), möjliggör användning av publika nycklar i stället för ett lösenord.
 Klienten omvandlar lösenordet till en symmetrisk nyckel. Den använder antingen en inbyggd schemaläggare eller en envägshash, beroende på vilken krypteringssvit som används.

Klientens autentisering
 Klienten skickar användarnamnet i klartext till autentiseringsservern (AS), och begär tjänster för användarens räkning (observera att varken den hemliga nyckeln eller lösenordet skickas till AS).
 AS:n ser efter om klienten finns i databasen. Om den finns där genererar AS:n den hemliga nyckeln genom att hasha användarens lösenord från databasen (t.ex. Active Directory i Windows Server) och skickar följande två meddelanden tillbaka till klienten:
 Meddelande A: Klient/TGS-sessionsnyckel krypterad med klientens eller användarens hemliga nyckel. 
 Meddelande B: Biljettbeviljande biljett, TGT, vilken inkluderar klient-ID, klientens nätverksadress, biljettens giltighetstid samt klient/TGS-sessionsnyckeln, och har krypterats med TGS:ens hemliga nyckel.
 Då klienten har tagit emot meddelandena A och B försöker den att avkryptera meddelande A med den hemliga nyckeln som generats från användarens uppgivna lösenord. Om det lösenord som användaren skrivit in inte matchar lösenordet i AS:ens databas kommer nyckeln bli en annan och kan därför inte låsa upp meddelande A. Med ett giltigt lösenord, och därmed en giltig nyckel, kan klienten avkryptera meddelande A för att få tag på klient/TGS-sessionsnyckeln. Denna sessionsnyckel används för fortsatt kommunikation med TGS:en (men klienten kan inte avkryptera meddelande B, eftersom det har krypterats med TGS:ens hemliga nyckel). Klienten har därmed tillräckligt med information för att kunna autentisera sig hos TGS:en.

Klientens tjänstebehörighet
 När den begär tjänster skickar klienten följande meddelanden till TGS:en:
 Meddelande C: Sammansatt av TGT:n från meddelande B och den begärda tjänstens ID.
 Meddelande D: Behörighetsgivare (sammansatt av klientens ID och ett tidsmärke), krypterad med klient/TGS-sessionsnyckeln.
 När TGS:en får meddelandena C och D hämtar den meddelande B ur meddeland C. Den använder sin egen hemliga nyckel för att avkryptera meddelande B, vilket ger tillgång till klient/TGS-sessionsnyckeln. Med denna nyckel avkrypterar TGS:en meddelande D. Ifall klient-ID:erna från meddelande C respektive meddelande D stämmer överens skickar servern följande två meddelanden till klienten:
 Meddelande E: Klient-till-server-biljett (som inkluderar klientens ID, klientens nätverksadress, giltighetstid och klient/server-sessionsnyckel), krypterad med serverns hemliga nyckel.
 Meddelande F: Klient/server-sessionsnyckel krypterad med klient/TGS-sessionsnyckeln.

Klientens tjänstebegäran
 När den fått meddelandena E och F från TGS:en har klienten tillräckligt med information för att autentisera sig gentemot tjänsteservern (SS). Klienten ansluter till tjänsteservern och skickar följande två meddelanden:
 Meddelande E från avsnittet ovan (den av servern kypterade klient-till-server-biljetten).
 Meddelande G: en ny behörighetsgivare, som inkluderar klientens ID samt ett tidsmärke, och har krypterats med klient/server-sessionsnyckeln.
 SS:en avkrypterar biljetten (meddelande E) genom att använda sin egen hemliga nyckel för att få tag på klient/server-sessionsnyckeln. Med denna sessionsnyckel avkrypterar SS:en behörighetsgivaren och jämför klient-ID:erna mellan meddelande E och G. Om de stämmer överens skickar servern följande meddelande till klienten för att bekräfta sin identitet och villighet att utföra tjänster åt klienten: 
 Meddelande H: tidsmärket från klientens behörighetsgivare (plus 1 i version 4, vilket inte är nödvändigt i version 5), krypterat med klient/server-sessionsnyckeln.
 Klienten avkrypterar bekräftelsen (meddelande H) med klient/server-sessionsnyckeln och kontrollerar att tidsmärket är korrekt. Om så är fallet kan klienten lita på servern och sätter igång att begära tjänster från denna.
 Servern levererar de begärda tjänsterna åt klienten.

Källor

Datasäkerhet