En 400-6655-581
5
返回列表
> 資源中心 > 文章>榮譽(yù)&資訊> 技術(shù)干貨 | 從入門到到崩潰系列-Kerberos解讀一

技術(shù)干貨 | 從入門到到崩潰系列-Kerberos解讀一

文章

2019-05-10瀏覽次數(shù):101

\r Kerberos首先聲明,這是一篇非常嚴(yán)謹(jǐn)?shù)目破瘴恼?,?qǐng)認(rèn)真的,帶著思考進(jìn)行閱讀。 \r

\r

\r Kerberos這一詞由來(lái)不得不追溯到希臘神話里三頭狗的故事,它其實(shí)本名叫Cerberus(刻耳柏洛斯),發(fā)音是不是很像?\r

\r

這只dog據(jù)說是希臘神話中惡魔王提豐的孩子,這個(gè)惡魔王的孩子都比較另類,除了這只dog以外,還有西游路上想吃唐僧肉的九頭蛇,以及任何場(chǎng)合都能讓人石化的美杜莎等等。這只dog既然不是善類,它肯定不是長(zhǎng)這樣:\r

\r

網(wǎng)上某百科說它長(zhǎng)這樣:\r

\r


\r

\r

姑且不論其長(zhǎng)什么樣,但它的地位是無(wú)可替代的:那就是安全的守護(hù)者!它既防止活人進(jìn)入冥界,又防止冥界的亡靈前往人間。 \r\r

\r

研發(fā)初衷是為了保護(hù)自己的網(wǎng)絡(luò)服務(wù)器。 \rr

為了打破這種局面,后來(lái)瑞典皇家理工在V4版本上包裝了一下,繞過了美國(guó)出口管制局,讓其可以在美國(guó)境外發(fā)行使用。后來(lái)這群人可能覺得人生需要一個(gè)新的高度,于是又發(fā)明了KerberosV5的版本。 \r

\r

雖然我們現(xiàn)在廣泛使用的也是KerberosV5的版本,但是可能和前面那個(gè)V5沒什么關(guān)系。 \r

\r

 \r

\r

Kerberos目前作為一套網(wǎng)絡(luò)安全認(rèn)證協(xié)議,是為了解決網(wǎng)絡(luò)上一個(gè)“證明自己是自己”問題,讓服務(wù)端和客戶端建立相互信任機(jī)制。這個(gè)問題如果放到我們自己身上可能會(huì)很尷尬,如果你去派出所去開這么一個(gè)證明你媽是你媽的證明,往往會(huì)這樣: \r

\r

<p font-size:14px;background-color:#ffffff;"="" style="white-space: normal; text-align: center; color: rgb(51, 51, 51);"> \r\r

\r 那我們?cè)趺醋C明自己是自己呢?\r

\r

\r \r

\r

\r 對(duì)于兩個(gè)需要需要互相訪問的客戶端/服務(wù)端,它們也需要這么一個(gè)證件或者信物,證明它們可以相互信任。簡(jiǎn)單而言,它的場(chǎng)景是這樣的: \r

\r

\r  \r

\r

\r \r

\r

\r 當(dāng)然,Kerberos作為一款有著廣泛使用基礎(chǔ),并且安全性極高的認(rèn)證協(xié)議,其內(nèi)部機(jī)制很復(fù)雜,接下來(lái),我們就剖析一下Kerberos認(rèn)證。 \r

\r

\r
\r

\r

\r \r

\r

\r 在這個(gè)認(rèn)證過程中,會(huì)有3個(gè)角色:KDC(key distribution center)、Client(客戶端)、Server(服務(wù)端), 正好象征著三頭狗的三個(gè)頭(不要再糾結(jié)是三個(gè)頭還是五十個(gè)頭了!)。KDC是整個(gè)Kerberos認(rèn)證的核心模塊,負(fù)責(zé)存儲(chǔ)密鑰(長(zhǎng)期和臨時(shí))以及進(jìn)行認(rèn)證。 \r

\r

\r 另外,我們需要了解四個(gè)概念: \r

\r

\r Long-Term Key: \r

\r

\r 那些長(zhǎng)期存儲(chǔ)并且不會(huì)失效的數(shù)據(jù)信息; \r

\r

\r Short-Time Key: \r

\r

\r 臨時(shí)存儲(chǔ)的并且一段時(shí)間后就失效的數(shù)據(jù)信息; \r

\r

\r Master Key: \r

\r

\r 存儲(chǔ)在KDC中用戶標(biāo)識(shí)身份信息的數(shù)據(jù)信息; \r

\r

\r Session Key: \r

\r

\r 在認(rèn)證周期中使用到的數(shù)據(jù)信息,一旦超過認(rèn)證周期,認(rèn)證數(shù)據(jù)信息失效。 \r

\r

\r 一般來(lái)說,Master Key屬于Long-Term Key,這類信息長(zhǎng)期存在KDC中,并且不會(huì)失效,無(wú)論是KDC自己,Client還是Server都有自己的Master Key. \r

\r

\r Session Key屬于Short-Time Key,其實(shí)是包含Master Key信息的臨時(shí)拷貝,這類信息只在認(rèn)證周期內(nèi)有效,一旦認(rèn)證期過,也就沒用了。 \r

\r

\r 大概兩者就是正式工和臨時(shí)工的區(qū)別吧。 \r

\r

\r
\r

\r

\r  \r

\r

\r 整個(gè)認(rèn)證過程會(huì)用到Master Key和Session Key,但是認(rèn)證過程復(fù)雜, 一個(gè)Kerberos認(rèn)證過程要正常完成,需要有三個(gè)過程: \r

\r

\r
\r

\r

\r Authentication Service Exchange \r

\r

\r (KRB_AS_REQ) \r

\r

\r Client向KDC服務(wù)器獲取TGT(Ticket Grant ing Ticket),TGT是獲取Service Ticket的基礎(chǔ)許可票據(jù),有此票據(jù)后可以在有效期內(nèi)獲得KDC中所有需要訪問的Server Ticket。 \r

\r

\r Ticket Granting Service Exchange \r

\r

\r (KRB_TGS_REQ): \r

\r

\r Client向KDC獲取Server Ticket(即Session Key),該Server Ticket用于后續(xù)Client與Server之間交互使用。 \r

\r

\r Client/Server Exchange \r

\r

\r (KRB_AP_REQ): \r

\r

\r Client向Server提交Client Info與Server Ticket(即Session Key),Server端驗(yàn)證通過后,向Client提供服務(wù)。 \r

\r

\r  \r

\r

\r 這里要注意一下,Server Ticket并不是由KDC直接發(fā)給Server端的,而是KDC發(fā)給Client, 并由Client轉(zhuǎn)交給Server,這么做的好處是Server端不用維護(hù)一個(gè)Session列表,同時(shí)能夠避免因網(wǎng)絡(luò)問題引起KDC到Client和Server之間的通信問題。\r

\r

\r 看完上面這幾個(gè)過程,是不是感覺難以理解?。?/span> \r

\r

\r
\r

\r

\r \r

\r

\r 為了便于理解,我們引入一個(gè)場(chǎng)景: \r

\r

\r 一個(gè)IT人員出差忘記帶身份證了要住酒店。 \r

\r

\r 這個(gè)場(chǎng)景中有以下信息: \r

\r

\r KDC: 公安網(wǎng)內(nèi)部身份認(rèn)證系統(tǒng) \r

\r

\r Server: 酒店 \r

\r

\r Client: 入住IT \r

\r

\r Master Key: 公安網(wǎng)內(nèi)的人員身份信息,酒店信息以及派出所信息 \r

\r

\r Session Key: 住宿臨時(shí)身份證明\r

\r

\r 在這個(gè)場(chǎng)景中,酒店要讓他入住的話,需要兩個(gè)信息:入住人信息和證件。 \r

\r

\r 正巧我們的苦逼IT忘記帶了證件,他要順利入住,必須先去公安部門開一個(gè)住宿臨時(shí)證明,然后再回來(lái)辦理。\r

\r

\r 這可以分解為Kerberos的三個(gè)過程: \r

\r

\r Authentication Service Exchange: \r

\r

\r 戶口登記,該人員(Client)必須在公安系統(tǒng)(KDC)有登記,有戶籍信息(TGT),才能夠開出相關(guān)證明,當(dāng)然該戶籍信息可能是長(zhǎng)期的可能是短期的(例如集體戶口),但是TGT一般是周期比較短的。 \r

\r

\r  \r

\r

\r Ticket Granting Service Exchange: \r

\r

\r 臨時(shí)住宿證明(Session Key)辦理,該人員(Client)通過提交戶籍信息(TGT),公安系統(tǒng)(KDC)查驗(yàn)后,給予其開具臨時(shí)住宿證明(Session Key)。 \r

\r

\r
\r

\r

\r \r

\r

\r Client/Server Exchange: \r

\r

\r 該人員(Client)向酒店(Server)提交臨時(shí)住宿證明(Session Key)和入住人信息(Client Info),酒店(Server)辦理入住。 \r

\r

\r  \r

\r

\r
\r

\r

\r 在理解以上內(nèi)容中,需要有一些注意的地方:\r

\r

\r 人員身份信息是Master Key,指的是姓名,出生日期,身份證號(hào)這些不會(huì)變的東西;\r

\r

\r 而戶籍信息是TGT,除了Master Key的信息外,還附帶了會(huì)變的住址,登記派出所,登記時(shí)間等數(shù)據(jù)信息。\r

\r

\r Kerberos認(rèn)證過程是雙向的,入住人員也可以向公安系統(tǒng)驗(yàn)證該酒店是否有登記,是否是黑店。\r

\r

\r 實(shí)際的Kerberos過程比這個(gè)稍復(fù)雜,因?yàn)樯婕暗郊用芙饷艿牟僮鳌?/span>\r

\r

\r Client端拿到的Session Key本身內(nèi)容包含Client Info,而且是經(jīng)過Server端Master Key加過密的。 \r

\r

\r Server端在拿到Client提交的Session Key和Client Info以后,會(huì)對(duì)Session Key進(jìn)行解密,將Session Key包含的Client Info與之前提交的進(jìn)行對(duì)比,兩者一致才予以放行。\r

\r

\r Session Key有效期時(shí)間不會(huì)太長(zhǎng),一般默認(rèn)都是8小時(shí)或者24小時(shí)。因?yàn)樵诰W(wǎng)絡(luò)上一旦被截獲,有效期越長(zhǎng)帶來(lái)的解密風(fēng)險(xiǎn)越高,就越可能被篡改和替代。\r

\r

\r 正是有如此復(fù)雜的內(nèi)部過程,Kerberos完美的解決了網(wǎng)絡(luò)上Client與Server信任的問題。當(dāng)然Kerberos還有很多其他特性,我們后續(xù)再聊······\r

\r

\r  \r