天天看點

加密機制Kerberos原理

Kerberos是一種加密機制。Kerberos據說是希臘神話中一條三個頭的看家神犬,兇猛異常。加密機制以此為名,估計是自認為很厲害,好打得吧。

Kerberos的設計意圖,是希望整個認證過程不依賴于作業系統安全、主機實體安全、網址認證、網絡安全之類,即使網絡上傳送的資料包被任意地讀取、修改和插入資料,它也渾然不懼。這就比https更厲害了。https就是用來保護資訊在傳輸過程中不被竊取篡改的,但它依賴于CA認證中心和證書。

這麼牛逼,是怎麼做到的?其實就是加密咯。傳輸的資訊都經過加密,是以不怕洩露;而且還可以驗證,是以不怕篡改和抵賴。老實說,加密和校驗都不是什麼新鮮招,但妙就妙在它的加密方式。

它用對方的密碼做密鑰進行加密。

具體一點,就是它沒有用非對稱加密,什麼私鑰公鑰、你來我往這麼複雜。用的就是對稱加密,簡單多了。唯一的訣竅,在于許多加密資訊,其密鑰用的是資訊接收者的密碼。

什麼意思?

在Kerberos機制中,由Client、Application Server、KDC三大部分組成。Client、Application Server好了解,KDC則是一個居于中心地位的中央認證子產品,叫KDC(key distribution center):密鑰發放中心。KDC由兩個子產品組成:認證服務子產品AS(authentication service),授權服務子產品TGS(ticket granting service,票據授權服務)。認證和授權是安全驗證的兩個主題。認證解決你是誰的問題,授權則解決你能做啥的問題。

Kerberos的運作流程如下圖:

加密機制Kerberos原理

結合上圖,解說如下:

1、需要憑證

用戶端(client)想去通路某應用伺服器1(Application 1 Server),結果Application 1 Server說,你啥憑證都沒有,沒身份,沒授權,恕不接待。

2、尋求憑證

用戶端于是找到KDC,報上自己的username(應該是賬号)。

3、發送憑證

KDC.AS向client發回一個包,裡面有一個票據TGT和一把密鑰SK_TGS,記作{TGT,SK_TGS},這個包使用了client的密碼進行加密。其中,TGT本身又是一個包{ user, address, tgs_name, start_time, lisftime, SK_TGS},它是用KDC.TGS的密碼進行加密的!注意到TGT裡也包含了一份相同的SK_TGS。SK_TGS是client和KDC.TGS進行會話的密鑰。

4、得到憑證

client收到KDC.AS發回的包以後,用自己的密碼解開,得到TGT和SK_TGS。然後,client向KDC.TGS發送[TGT,Authenticator]。其中Authenticator={ user, addresss, start_time, lifetime},使用了SK_TGS進行加密。

5、校驗憑證

KDC.TGS收到client發來的包後,用自己的密碼解開TGT,得到了SK_TGS。然後,用SK_TGS解開Authenticator,将裡面的内容與TGT裡的相關資訊進行比對和驗證。

驗明正身以後,KDC.TGS為 client 和 Application 1 Server 之間生成一個會話密鑰SK_Service;然後發送給 client 一個包:[ {SK_Service}SK_TGS,ST]。其中,SK_Service使用SK_TGS加密,票據ST使用Application 1 Server 的密碼加密。同樣,ST本身也是一個包,内容為:{ user, address, start_time, lifetime, SK_Service }。請注意裡面也有一份SK_Service。

6、開啟對話

client收到KDC.TGS發回的包,利用SK_TGS解密得到SK_Service,然後用SK_Service加密生成Authenticator,然後向Application 1 Server發送[ ST,Authenticator ]。

Application 1 Server用自己的密碼解開ST,得到裡面的會話密鑰SK_Service,以此解開Authenticator,然後對比驗證。從此與client之間使用SK_Service開始進行了愉快的對話。

7、需要“單點登入”

client想通路第2個應用伺服器Application 2 Server,遭拒

8、單點登入

由于在有效時間内,client的身份已被證明,是以無須再向KDC.AS進行身份認證,直接與KDC.TGS申請Application 2 Server的通路授權。。。

由上可知,Kerberos主要是使用了類似電子信封這一安全技術,将密鑰放在加密票據裡,而而票據的加密往往又使用了對方的密碼作為密鑰。另外,一個傳輸包往往存在票據和加密包兩種對象,而票據和加密包裡的内容又有相關性,用票據裡的密鑰解開加密包後,可以互為參照,防止了篡改和抵賴。初初看Kerberos,覺得非常繞,各種票據、會話密鑰滿天飛,但隻要明白這個套路,就不難了解。

繼續閱讀