PAP和CHAP協(xié)議介紹2009-09-25 18:40
2009-04-14 23:06 PAP和CHAP協(xié)議介紹
本文檔的Copyleft歸yfydz所有,使用GPL發(fā)布,可以自由拷貝,轉載,轉載時請保持文檔的完整性,嚴禁用于任何商業(yè)用途。
msn: yfydz_no1@hotmail.com
1. 前言
PAP和CHAP協(xié)議是目前的在PPP(MODEM或ADSL撥號)中普遍使用的認證協(xié)議,CHAP在RFC1994中定義,是一種挑戰(zhàn)響應式協(xié)議,雙方共享的口令信息不用在通信中傳輸;PAP在RFC1334中定義,是一種簡單的明文用戶名/口令認證方式。
2. PAP
PAP全稱為:Password Authentication Protocol(口令認證協(xié)議),是PPP中的基本認證協(xié)議。PAP就是普通的口令認證,要求將密鑰信息在通信信道中明文傳輸,因此容易被sniffer監(jiān)聽而泄漏。
PAP協(xié)商選項格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length | Authentication-Protocol |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
對于PAP,參數(shù)為:
Type = 3,Length = 4,Authentication-Protocol = 0xc023(PAP)
PAP數(shù)據(jù)包格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+
Code:1字節(jié),表示PAP包的類型
1 認證請求
2 認證確認
3 認證失敗
Identifier:ID號,1字節(jié),輔助匹配請求和回應
Length:2字節(jié),表示整個PAP數(shù)據(jù)的長度,包括Code, Identifier, Length和
Data字段。
Data:可能是0字節(jié)或多個字節(jié),具體格式由Code字段決定,成功或失敗類型包中長
度可能為0。
對于認證請求(Code = 1)類型,PAP包格式為:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Peer-ID Length| Peer-Id ...
+-+-+-+-+-+-+-+-+-+-+-+-+
| Passwd-Length | Password ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+
Code(Code = 1),Identifier和Length字段含義如前面所述,響應包的Identifier字段值和挑戰(zhàn)包中的相同,Identifier字段必須每次認證時改變。
Peer-ID-Length:長度1個字節(jié),表示Peer-ID域的長度
Peer-ID:可為0到多個字節(jié)長,表示認證對方的名稱。
Passwd-Length:長度1個字節(jié),表示Password域的長度
Password:可為0到多個字節(jié)長,表示認證的口令,明文
對于認證確認(Code = 2)和認證失?。–ode = 3)類型,PAP包格式為:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Msg-Length | Message ...
+-+-+-+-+-+-+-+-+-+-+-+-+-
其中:
Code,Identifier和Length字段含義如前面所述,響應包的Identifier字段值和認證請求包中的相同。
Msg-Length:長度1個字節(jié),表示Message域的長度
Message:可為0到多個字節(jié)長,具體內容由應用實際實現(xiàn)時確定,RFC中沒有限制其
內容,推薦使用可讀的ASCII字符表示信息內容。
3. CHAP
CHAP全稱為:Challenge Handshake Authentication Protocol(挑戰(zhàn)握手認證協(xié)議),主要就是針對PPP的,除了在撥號開始時使用外,還可以在連接建立后的任何時刻使用。
CHAP 協(xié)議基本過程是認證者先發(fā)送一個隨機挑戰(zhàn)信息給對方,接收方根據(jù)此挑戰(zhàn)信息和共享的密鑰信息,使用單向HASH函數(shù)計算出響應值,然后發(fā)送給認證者,認證 者也進行相同的計算,驗證自己的計算結果和接收到的結果是否一致,一致則認證通過,否則認證失敗。這種認證方法的優(yōu)點即在于密鑰信息不需要在通信信道中發(fā) 送,而且每次認證所交換的信息都不一樣,可以很有效地避免監(jiān)聽攻擊。
CHAP缺點:密鑰必須是明文信息進行保存,而且不能防止中間人攻擊。
使用CHAP的安全性除了本地密鑰的安全性外,網絡上的安全性在于挑戰(zhàn)信息的長度、隨機性和單向HASH算法的可靠性。
CHAP選項格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length | Authentication-Protocol |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Algorithm |
+-+-+-+-+-+-+-+-+
對于CHAP,參數(shù)固定為:
Type = 3,Length = 5,Authentication-Protocol = 0xc223(CHAP),Algorithm = 5 (MD5)
CHAP數(shù)據(jù)包格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+
Code:1字節(jié),表示CHAP包的類型
1 挑戰(zhàn)
2 響應
3 成功
4 失敗
Identifier:ID號,1字節(jié),輔助匹配挑戰(zhàn)、響應和回答,每次使用CHAP時必須改變
Length:2字節(jié),表示整個CHAP數(shù)據(jù)的長度,包括Code, Identifier, Length和
Data字段。
Data:可能是0字節(jié)或多個字節(jié),具體格式由Code字段決定,成功或失敗類型包中長度
可能為0
對于挑戰(zhàn)(Code = 1)和響應(Code = 2)類型,CHAP包格式為
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Value-Size | Value ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Name ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
其中:
Code,Identifier和Length字段含義如前面所述,響應包的Identifier字段值和挑戰(zhàn)包中的相同。
Value-Size:此字段1字節(jié)表示Value的長度
Value:至少是一個字節(jié),可變長,按網絡序傳輸,挑戰(zhàn)/響應信息在此字段中說明,
挑戰(zhàn)信息必須是隨機的,在每次認證時改變,挑戰(zhàn)信息是由應用在實際實現(xiàn)
中自己定義的,RFC中并沒有規(guī)定挑戰(zhàn)信息的具體格式;
響應值按下面的公式進行計算:
Response=HASH(Identifier+secret+Challenge)
其中“+”號表示將各數(shù)據(jù)在內存中串起來,其中HASH算法可以使用MD5,所以計算出來的HASH值是固定的,16字節(jié)長。
Name:至少一個字節(jié),用來標志所傳的這個包,必須是以'\0'或“
”結束,
Name字段的長度可根據(jù)Length和Value-Size計算出來。
對于成功(Code = 3)或失?。–ode = 4)類型
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message ...
+-+-+-+-+-+-+-+-+-+-+-+-+-
Code,Identifier和Length字段含義如前面所述,Identifier字段和挑戰(zhàn)/響應信息一致。
Message可以是0字節(jié),也可以是多個字節(jié),內容可以根據(jù)實際應用自己確定。
4. 結語
PAP和CHAP在目前的PPP應用中都在使用,CHAP相對要復雜一些,但安全性也高一些。在PPP具體實現(xiàn)中通常是同時使用,在Linux下PPP的實現(xiàn)中,如果服務器要求的PAP認證失敗,會再次要求用CHAP認證。