參考維基百科Kerberos (protocol) - Wikipedia
User Client-based logon
1. 用戶輸入密碼,或者根據(jù) pkinit (RFC 4556)使用公鑰?
2. 將密碼轉(zhuǎn)換成對(duì)稱密碼的key
AS -? Authentication Server - 授權(quán)服務(wù)器
TGS - Tticket-Granting Service - 票據(jù)授權(quán)服務(wù)
SS - Service Server - 服務(wù)服務(wù)器
Client Authentication
1. 客戶端將用戶 ID 以明文發(fā)送給 AS()锨络,AS 代表用戶來(lái)請(qǐng)求服務(wù)匿刮。注意在這個(gè)過程中秘鑰和密碼都沒有傳輸給 AS。
2. AS 檢查數(shù)據(jù)庫(kù)中是否有該用戶筷畦,如果有發(fā)現(xiàn)則AS通過哈希密碼產(chǎn)生秘鑰,并向客戶端返回兩個(gè)消息:
消息A - 用客戶端/用戶的秘鑰加密的 Client/TGS Session Key
消息B - 票據(jù)授權(quán)票據(jù)Ticket-Granting-Ticket(包含客戶ID,客戶網(wǎng)絡(luò)地址鳖宾,票據(jù)有效時(shí)間吼砂,Client/TGS Session Key),使用TGS的秘鑰加密鼎文。
3. 收到消息A渔肩、B后,將用戶輸入密碼生成的秘鑰嘗試用來(lái)解密消息A拇惋,如果用戶輸入的密碼和 AS數(shù)據(jù)庫(kù)中的不匹配周偎,那解密會(huì)失敗。一個(gè)有效的密碼和秘鑰可以解密獲得?Client/TGS Session Key撑帖,據(jù)此來(lái)和 TGS 進(jìn)行通信蓉坎。(消息B是客戶是無(wú)法解密的,因?yàn)槭怯肨GS的秘鑰加密)
Client Service Authorization
1. 當(dāng)請(qǐng)求服務(wù)時(shí)磷仰,客戶端將下列消息發(fā)給 TGS:
????消息C:由消息B的TGT和請(qǐng)求服務(wù)的ID組成袍嬉。
????消息D:認(rèn)證者?Authenticator (由客戶端 ID 和時(shí)間戳組成),使用?Client/TGS Session Key 加密
2. 根據(jù)收到的消息C灶平、D伺通,TGS 從消息C中檢索消息B,用TGS Session Key 解密消息B 來(lái)獲得?client/TGS session key逢享, 再據(jù)此解密消息D罐监,并比較消息C和D中的客戶端ID。若匹配瞒爬,服務(wù)器向客戶端返回兩個(gè)消息:
? ? 消息E:Client-to-server ticket?(包含客戶端ID弓柱,客戶端網(wǎng)絡(luò)地址,有效時(shí)間和 Client/Server Session Key)侧但,使用服務(wù)秘鑰加密矢空。
? ? 消息F:?Client/Server Session Key,用?Client/TGS Session Key 加密禀横。
Client Service Request
1. 收到消息E屁药、F后,客戶端有足夠信息向 SS 證實(shí)自己柏锄∧鸺客戶端連接 SS 發(fā)送兩個(gè)消息:
????消息E: 從上步獲取。
? ? 消息G:新的認(rèn)證者趾娃,包含 Client ID缭嫡,時(shí)間戳,用Client/Server Session Key 加密抬闷。
2. SS用自己的秘鑰解密消息E來(lái)獲取Client/Server Session Key妇蛀,據(jù)此來(lái)解密認(rèn)證者獲取客戶端ID并比較消息E、G中的客戶端ID。若匹配則發(fā)送如下信息來(lái)確認(rèn)客戶端的真實(shí)身份和提供服務(wù)的意愿:
? ? 消息H:客戶端的認(rèn)證者中的時(shí)間戳讥耗,用Client/Server Session Key加密有勾。
3. 客戶端用Client/Server Session Key?解密確認(rèn)(消息H)來(lái)檢查時(shí)間戳是否正確疹启。若正確古程,客戶端開始信任服務(wù)端并發(fā)起服務(wù)請(qǐng)求。
4. 服務(wù)端提供請(qǐng)求的服務(wù)喊崖。