join和join in的區(qū)別_radius協(xié)議的共享密鑰_wangpengqi的專欄
本文關(guān)鍵詞:radius協(xié)議,由筆耕文化傳播整理發(fā)布。
從事Radius協(xié)議開發(fā)有段時間了,小弟不怕才疏學(xué)淺,賣弄一下,從radius協(xié)議談?wù)剬ι矸菡J(rèn)證的認(rèn)識,也總結(jié)一下自己。
一.radius協(xié)議原理
RADIUS(Remote Authentication Dial In User Service) 用戶遠(yuǎn)程撥入認(rèn)證服務(wù),它主要針對的遠(yuǎn)程登錄類型有:SLIP、PPP、telnet和rlogin等。radius協(xié)議應(yīng)用范圍很廣,包括普通電話、上網(wǎng)業(yè)務(wù)計費(fèi),對VPN的支持可以使不同的撥入服務(wù)器的用戶具有不同權(quán)限。
RADIUS典型應(yīng)用環(huán)境如下:
RADIUS數(shù)據(jù)包分為5個部分:
(1) Code:1個字節(jié),用于區(qū)分RADIUS包的類型:常用類型有:
接入請求(Access-Request),Code=1;接入允許(Access-Accept),Code=2;接入拒絕(Access-Reject),Code=3;計費(fèi)請求(Accounting-Request),Code=4等。
(2)Identifier:一個字節(jié),用于請求和應(yīng)答包的匹配。
(3)Length:兩個字節(jié),表示RADIUS數(shù)據(jù)區(qū)(包括Code, Identifier, Length, Authenticator, Attributes)的長度,單位是字節(jié),最小為20,最大為4096。
(4)Authenticator:16個字節(jié),用于驗證服務(wù)器端的應(yīng)答,另外還用于用戶口令的加密。RADIUS服務(wù)器和NAS的共享密鑰(Shared Secret)與請求認(rèn)證碼(Request Authenticator)和應(yīng)答認(rèn)證碼(Response Authenticator),共同支持發(fā)、收報文的完整性和認(rèn)證。另外,用戶密碼不能在NAS和RADIUS 服務(wù)器之間用明文傳輸,而一般使用共享密鑰(Shared Secret)和認(rèn)證碼(Authenticator)通過MD5加密算法進(jìn)行加密隱藏。
(5)Attributes:不定長度,最小可為0個字節(jié),描述radius協(xié)議的屬性,如用戶名、口令、IP地址等信息都是存放在本數(shù)據(jù)段。
各個屬性的詳細(xì)編碼信息,以及數(shù)據(jù)格式,限于篇幅,這里不作具體介紹,,感興趣的,可以參看RFC文檔,或與我交流。
二.radius協(xié)議實(shí)現(xiàn)
目前,開源軟件包freeRadius , tinyRadius,可以下載到其實(shí)現(xiàn)的源碼。freeRadius是目前功能最強(qiáng)大的開源RADIUS 服務(wù)器軟件,采用C語言實(shí)現(xiàn),采用了多進(jìn)程,進(jìn)程池的處理方法,擁有很好的吞吐處理能力,同時,提供了連接各種數(shù)據(jù)庫的應(yīng)用接口,方便用戶根據(jù)自己的需要進(jìn)行適當(dāng)?shù)臄U(kuò)展。值得一提的是,它采用模塊化處理,用戶可以定做適合自己的認(rèn)證計費(fèi)處理模塊。
freeRadius的功能強(qiáng)大,也造成了它模塊的龐大,不易維護(hù),對安裝環(huán)境有一些要求。tinyRadius采用Java開發(fā),短小精悍,能接收各種標(biāo)準(zhǔn)協(xié)議中的數(shù)據(jù)包,可以快速的完成對RADIUS數(shù)據(jù)包的封裝與解包,我們可以自己的需要進(jìn)行某些處理,具有很大的自由度,唯一的缺陷是單線程,沒有數(shù)據(jù)庫接口。
三.radius協(xié)議對安全的考慮
RADIUS采用UDP協(xié)議基于以下幾點(diǎn)原因:
1. NAS和RADIUS服務(wù)器大多在同一個局域網(wǎng)中,使用UDP更加快捷方便。
2. 簡化了服務(wù)端的實(shí)現(xiàn)。
事實(shí)證明,采用UDP協(xié)議可行,RADIUS有自己的機(jī)制,來解決UDP丟包特點(diǎn)。
如果NAS向某個RADIUS服務(wù)器提交請求沒有收到返回信息,那么可以要求備份RADIUS服務(wù)器重傳。由于有多個備份RADIUS服務(wù)器,因此NAS進(jìn)行重傳的時候,可以采用輪詢的方法。如果備份RADIUS服務(wù)器的密鑰和以前RADIUS服務(wù)器的密鑰不同,則需要重新進(jìn)行認(rèn)證。
下面重點(diǎn)從radius協(xié)議來談下它在身份認(rèn)證中如何確保安全認(rèn)證的。
1. Authenticator:鑒別碼,分為請求鑒別碼,回應(yīng)鑒別碼。
在“Access-Request”數(shù)據(jù)包中,Authenticator是一個16字節(jié)的隨機(jī)數(shù),稱為“Request Authenticator”。 在機(jī)密的整個生存周期中(如RADIUAS服務(wù)器和客戶端共享的機(jī)密),這個值應(yīng)該是不可預(yù)測的,并且是唯一的,因為具有相同密碼的重復(fù)請求值,使黑客有機(jī)會用已截取的響應(yīng)回復(fù)用戶。因為同一機(jī)密可以被用在不同地理區(qū)域中的服務(wù)器的驗證中,所以請求認(rèn)證域應(yīng)該具有全球和臨時唯一性。
為防止數(shù)據(jù)包中數(shù)據(jù)被截獲被篡改,回應(yīng)鑒別碼采用如下方式生成:
ResponseAuth = MD5(Code+ID+Length+RequestAuth+ Attributes+Secret);
回應(yīng)鑒別碼是對整個數(shù)據(jù)包進(jìn)行MD5演算產(chǎn)生的16字節(jié)索引,防止偽造服務(wù)器的回應(yīng)。
2.加密方式。PAP,CAHP,EAP以及Unix登錄認(rèn)證三種加密認(rèn)證方式。最常用的是前兩種,下面介紹下:
PAP加密,采用此加密方法時,密碼存放在User-Password屬性中。
User-Password加密方法:
1.在密碼的末尾用nulls代替填補(bǔ)形成多個十六個字節(jié)的二進(jìn)制數(shù);
2.把密碼按16個字節(jié)為一組劃分為p1、p2等等;
b1=MD5(Secret + Authenticator) c(1) = p1 異或 b1
b2 = MD5(S + c(1)) c(2) = p2 異或b2
.
.
.
bi = MD5(S + c(i-1)) c (i) = pi 異或 bi
c(1)+c(2)+...+c (i)
在接收時,這個過程被反過來,由于采用異或方式貫穿在每16個字節(jié)之間,同樣的算法再異或一次,然后配合MD5演算,從而生成原始的密碼,盡管這種加密方式是可逆的,黑客截獲到密文后,能通過一定的手段來破解出密碼,但如果共享密鑰未知的情況下,很難破解,也就只能采用蠻力破解方法。使用共享密鑰應(yīng)采用合適的長度,來防止破解,不應(yīng)過短。
PAP加密方法使密碼以密文的方式在網(wǎng)絡(luò)中進(jìn)行傳輸,使黑客仍有有機(jī)可乘的機(jī)會,但CHAP加密方法阻止了密碼的傳輸。
CHAP加密,采用此加密方法時,密碼存放在Chap-Password屬性中。
這種加密方法的原則是不是密碼在網(wǎng)絡(luò)中進(jìn)行傳輸,而只是傳輸一個索引值,從而增加了安全性,但這樣做的代價是,RADIUS服務(wù)端必須要知道用戶的密碼,從而再現(xiàn)密碼索引值來和發(fā)來的認(rèn)證請求中的密碼索引值比對。
Chap-Password加密方法:
Md5(chapId+password+chapChallenge);
chapId :可以是隨機(jī)產(chǎn)生的一字節(jié)碼;
chapChallenge :NAS生成一個隨機(jī)挑戰(zhàn)字(16個字節(jié)比較合適)
該字段有時缺失,讀取Authenticator域作為挑戰(zhàn)字。
3.共享密鑰(Secret):共享密鑰在密碼加密以及數(shù)據(jù)包的鑒別碼部分都參與了運(yùn)算,即使RADIUS數(shù)據(jù)包被截獲,但不知道共享密鑰,很難破解用戶的密碼偽造數(shù)據(jù)。共享密鑰應(yīng)采用合適的長度,不應(yīng)過短,寬大密碼范圍能有效提供對窮舉搜尋攻擊的防衛(wèi),隨著密鑰長度的增加,其破解花費(fèi)的時間將大大增加。
4.為防止非法用戶的重放攻擊,造成服務(wù)器癱瘓。如果在一個很短的時間片段里,一個請求有相同的客戶源IP地址、源UDP端口號和標(biāo)識符,RADIUS服務(wù)器會認(rèn)為這是上一個重復(fù)的請求,將直接丟棄,不做任何處理。
四.總結(jié)
radius協(xié)議本身比較易掌握,在應(yīng)用中,可以結(jié)合其自身的密碼方式,實(shí)現(xiàn)滿足企業(yè)需要的更高強(qiáng)度的強(qiáng)認(rèn)證,比如結(jié)合各種令牌卡,手機(jī)短信等等。對協(xié)議進(jìn)行開發(fā),離不開各種抓包工具,像sniffer,tcpdump,ethereal等抓包工具的使用。
外部用戶要訪問某局域網(wǎng)絡(luò)中計算機(jī)設(shè)備,其訪問方式有多種,比如采用VPN撥號,Telnet等等。如用戶Telnet登陸時,產(chǎn)生用戶名和密碼信息,而NAS服務(wù)器AAA配置中指定了采用RADIUS作為認(rèn)證服務(wù)器,則將其封裝成RADIUS請求數(shù)據(jù)包發(fā)送到RADIUS服務(wù)器進(jìn)行身份認(rèn)證,RADIUS服務(wù)器通過NAS和用戶進(jìn)行交流,以提示用戶認(rèn)證通過與否,以及是否需要Challenge身份認(rèn)證。
其工作原理為:用戶接入NAS (Net Access Server),NAS一般為路由器等設(shè)備,NAS向RADIUS服務(wù)器使用Access-Request數(shù)據(jù)包提交用戶信息,包括用戶名、密碼等相關(guān)信息,其中用戶密碼是經(jīng)過MD5加密的,雙方使用共享密鑰,這個密鑰不經(jīng)過網(wǎng)絡(luò)傳播;RADIUS服務(wù)器對用戶名和密碼的合法性進(jìn)行檢驗,必要時可以提出一個Challenge,要求進(jìn)一步對用戶認(rèn)證,也可以對NAS進(jìn)行類似的認(rèn)證;如果合法,給NAS返回Access-Accept數(shù)據(jù)包,允許用戶進(jìn)行下一步工作,否則返回Access-Reject數(shù)據(jù)包,拒絕用戶訪問;如果允許訪問,NAS向RADIUS服務(wù)器提出計費(fèi)請求Account-Require,RADIUS服務(wù)器響應(yīng)Account-Accept,對用戶的計費(fèi)開始,同時用戶可以進(jìn)行自己的相關(guān)操作。
RADIUS還支持代理和漫游功能。簡單地說,代理就是一臺服務(wù)器,可以作為其他RADIUS服務(wù)器的代理,負(fù)責(zé)轉(zhuǎn)發(fā)RADIUS認(rèn)證和計費(fèi)數(shù)據(jù)包。所謂漫游功能,就是代理的一個具體實(shí)現(xiàn),這樣可以讓用戶通過本來和其無關(guān)的RADIUS服務(wù)器進(jìn)行認(rèn)證。
RADIUS能夠?qū)崿F(xiàn)其功能依賴于它自身的數(shù)據(jù)包結(jié)構(gòu)。RADIUS采用的是UDP傳輸協(xié)議,認(rèn)證和計費(fèi)監(jiān)聽端口一般分別為:1812,1813。
以太網(wǎng)上的RADIUS封裝后的包結(jié)構(gòu)如下:
以太幀頭
IP包頭
UDP包頭
RADIUS數(shù)據(jù)包
以太網(wǎng)FCS
在這里我們關(guān)心的是紅色RADIUS數(shù)據(jù)包部分。
RADIUS數(shù)據(jù)包的格式如下:
本文關(guān)鍵詞:radius協(xié)議,由筆耕文化傳播整理發(fā)布。
本文編號:82289
本文鏈接:http://sikaile.net/wenshubaike/shangbiaozhuanli/82289.html