PAP和CHAP協議介紹

1. 前言
PAP和CHAP協議是目前的在PPP(MODEM或ADSL撥號)中普遍使用的認證協議,CHAP在RFC1994中定義,是一種挑戰響應式協議,雙方共享的口令信息不用在通信中傳輸;PAP在RFC1334中定義,是一種簡單的明文用戶名/口令認證方式。

2. PAP
PAP全稱爲:Password Authentication Protocol(口令認證協議),是PPP中的基本認證協議。PAP就是普通的口令認證,要求將密鑰信息在通信信道中明文傳輸,因此容易被sniffer監聽而泄漏。

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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type    | Length     |     Authentication-Protocol |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

對於PAP,參數爲:
Type = 3,Length = 4,Authentication-Protocol = 0xc023(PAP)

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          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+

Code:1字節,表示PAP包的類型
      1    認證請求
      2    認證確認
      3    認證失敗
Identifier:ID號,1字節,輔助匹配請求和迴應
Length:2字節,表示整個PAP數據的長度,包括Code, Identifier, Length和
          Data字段。
Data:可能是0字節或多個字節,具體格式由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字段值和挑戰包中的相同,Identifier字段必須每次認證時改變。

Peer-ID-Length:長度1個字節,表示Peer-ID域的長度

Peer-ID:可爲0到多個字節長,表示認證對方的名稱。

Passwd-Length:長度1個字節,表示Password域的長度

Password:可爲0到多個字節長,表示認證的口令,明文

對於認證確認(Code = 2)和認證失敗(Code = 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個字節,表示Message域的長度

Message:可爲0到多個字節長,具體內容由應用實際實現時確定,RFC中沒有限制其
   內容,推薦使用可讀的ASCII字符表示信息內容。

3. CHAP

CHAP全稱爲:Challenge Handshake Authentication Protocol(挑戰握手認證協議),主要就是針對PPP的,除了在撥號開始時使用外,還可以在連接建立後的任何時刻使用。

CHAP 協議基本過程是認證者先發送一個隨機挑戰信息給對方,接收方根據此挑戰信息和共享的密鑰信息,使用單向HASH函數計算出響應值,然後發送給認證者,認證 者也進行相同的計算,驗證自己的計算結果和接收到的結果是否一致,一致則認證通過,否則認證失敗。這種認證方法的優點即在於密鑰信息不需要在通信信道中發 送,而且每次認證所交換的信息都不一樣,可以很有效地避免監聽攻擊。

CHAP缺點:密鑰必須是明文信息進行保存,而且不能防止中間人攻擊。

使用CHAP的安全性除了本地密鑰的安全性外,網絡上的安全性在於挑戰信息的長度、隨機性和單向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,參數固定爲:

Type = 3,Length = 5,Authentication-Protocol = 0xc223(CHAP),Algorithm = 5 (MD5)

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          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+

Code:1字節,表示CHAP包的類型
      1    挑戰
      2    響應
      3    成功
      4    失敗

Identifier:ID號,1字節,輔助匹配挑戰、響應和回答,每次使用CHAP時必須改變

Length:2字節,表示整個CHAP數據的長度,包括Code, Identifier, Length和
          Data字段。

Data:可能是0字節或多個字節,具體格式由Code字段決定,成功或失敗類型包中長度
      可能爲0

對於挑戰(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字段值和挑戰包中的相同。

Value-Size:此字段1字節表示Value的長度

Value:至少是一個字節,可變長,按網絡序傳輸,挑戰/響應信息在此字段中說明,
      挑戰信息必須是隨機的,在每次認證時改變,挑戰信息是由應用在實際實現
      中自己定義的,RFC中並沒有規定挑戰信息的具體格式;

響應值按下面的公式進行計算:
   Response=HASH(Identifier+secret+Challenge)

其中“+”號表示將各數據在內存中串起來,其中HASH算法可以使用MD5,所以計算出來的HASH值是固定的,16字節長。

   Name:至少一個字節,用來標誌所傳的這個包,必須是以'/0'或“/r/n”結束,
       Name字段的長度可根據Length和Value-Size計算出來。

對於成功(Code = 3)或失敗(Code = 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字段和挑戰/響應信息一致。

Message可以是0字節,也可以是多個字節,內容可以根據實際應用自己確定。

4. 結語

PAP和CHAP在目前的PPP應用中都在使用,CHAP相對要複雜一些,但安全性也高一些。在PPP具體實現中通常是同時使用,在Linux下PPP的實現中,如果服務器要求的PAP認證失敗,會再次要求用CHAP認證。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章