點對點隧道協議

**點對點隧道協定**（英語：Point to Point Tunneling Protocol，縮寫為 PPTP）是實現虛擬私人網路（VPN）的方式之一。PPTP 使用傳輸控制協定（TCP）建立控制通道來傳送控制命令，以及利用通用路由封裝（GRE）通道來封裝對等協定（PPP）封包以傳送資料。這個協定最早由微軟等廠商主導開發，但因為它的加密方式容易被破解，微軟已經不再建議使用這個協定。

PPTP 的協定規範本身並未描述加密或身分驗證的部份，它依靠對等協定（PPP）來實現這些安全性功能。因為 PPTP 協定內建在微軟 Windows 家族的各個產品中，在微軟對等協定（PPP）協定堆棧中，提供了各種標準的身分驗證與加密機制來支援 PPTP 。 在微軟視窗系統中，它可以搭配 PAP、CHAP、MS-CHAP v1/v2 或 EAP 來進行身分驗證。通常也可以搭配微軟點對點加密（MPPE）或 IPSec 的加密機制來提高安全性。

在 Windows 或 Mac OS 平台之外，Linux 與 FreeBSD 等平台也提供開放原始碼的版本。

## 規格

PPTP 不是 IETF 建議的標準，是由微軟、Ascend Communications（現在屬於 Alcatel-Lucent 集團）、3Com 等廠商聯合形成的產業聯盟開發。 1999 年 7 月發布的 RFC 2637 是第一個正式的 PPTP 規格書。

PPTP 以通用路由封裝（GRE）協定向對方作一般的點對點傳輸。通過 TCP1723 埠來發起和管理 GRE 狀態。因為 PPTP 需要 2 個網路狀態，因此會對穿越防火牆造成困難。很多防火牆不能完整地傳遞連線，導致無法連接。
在 Windows 或 Mac OS 平台，通常 PPTP 可搭配 MSCHAP-v2 或 EAP-TLS 進行身分驗證 ，也可配合微軟點對點加密（MPPE）進行連接時的加密。

與 PPTP 相似的另一種常見的 VPN 協定是第二層隧道協定（L2TP）。

## 應用

PPTP 因為易於設定和是首個支援微軟撥號連線的協定而流行。自 Microsoft Windows 95 OSR2 開始包含 PPTP 客戶端，但是被限制只可同時存 2 個向外連線。Windows XP 的遠端桌面連接包含 PPTP。

以往，Linux 缺乏完整的 PPTP 支援，這是因為 MPPE 是軟體專利。但是，自從在 2005 年 10 月 28 日發佈的 Linux 2.6.14 起，Linux 核心提供完整的 PPTP 支援（包含對免費版本的 MPPE 支援）。

## 實作

PPTP 是第一個被 Microsoft 撥號網路支援的 VPN 通訊協定。自 Windows 95 OSR2 起，所有的 Microsoft Windows 版本都內建了 PPTP 客戶端軟體（雖然只能支援最多兩個同時對外的連線）。
在 Mobile 版本上，Microsoft Windows Mobile 2003 與更新的版本也支援 PPTP。Windows 的路由及遠端存取套件有包含 PPTP 伺服器。
Microsoft 的實作在 MS-CHAP 認證協定內使用了單次 DES 加密，但單次 DES 常被認為無法提供資料足夠等級的安全防護。[2]

Windows Vista 與更新版本的 PPTP 開始支援 PEAP。認證機制有 PEAPv0 / EAP-MSCHAPv2 (使用密碼) 還有 PEAP-TLS (智慧卡與憑證)。
Windows Vista 同時停止了 MSCHAP-v1 的認證協定。[3]

Linux 的 PPTP 伺服器一般是使用 PoPToP [4] 套件加上 PPP 與 MPPE 的 Kernel Module。PPTP 的客戶端程式從 1997 [5] 就開始提供了，但伺服器部份要等到 Matthew Ramsay 在 1999 [6] 開發的版本從 Moreton Bay 以 GNU GPL 發行後才真正開始有人大量使用。但是，Linux 發行版本一開始通常都不包含 MPPE 的部份（因為擔心有專利問題）所以不完整，直到 2005/10/28 發佈的 Linux Kernel 2.6.14 才正式支援 MPPE。
SuSE Linux 10 是第一個有完整可用的 PPTP 客戶端程式的版本。另外還有 ACCEL-PPP 套件：它提供了 PPTP / L2TP / PPPoE 伺服器 [7]，可提供 kernel 模式的 PPTP 協定。

OpenBSD 跟 FreeBSD 在 "ports" 套件系統裡提供 PoPToP。
OSX 與 iOS 則提供內建 PPTP 客戶端程式。 OS X Server 內建了 PPTP 服務。 Cisco 與 Efficient Networks 有另外販賣給舊版 Mac OS 使用的 PPTP 客戶端程式。
許多 Android 智慧型形手機也支援 PPTP。

## 安全性

PPTP 經常被做為安全分析的課題，並在該協定中已經發現了嚴重的安全漏洞。已知的漏洞涉及所使用的底層 PPP 認證協定、MPPE 協定的設計以及 MPPE 和 PPP 認證之間在建立對談金鑰方面的整合。

以下是這些漏洞的摘要：

* MS-CHAP-v1 從根本上來說是不安全的。有工具可以從擷取到的 MSCHAP-v1 交換包中輕易地提取出 NT 密碼的雜湊值。
* 當使用 MS-CHAP-v1 時，MPPE 在通信流的兩個方向上使用相同的 RC4 對談金鑰進行加密。這可以通過將每個方向的資料流一起進行互斥或運算，用標準方法進行密文分析。
* MS-CHAP-v2 對擷取的挑戰回應（challenge response）封包容易受到字典攻擊。目前已有工具可以快速執行這一過程。
* 2012 年，有研究表明，對 MS-CHAP-v2 金鑰進行暴力攻擊的複雜性相當於對單個 DES 金鑰進行暴力攻擊。還演示了一項線上服務，它能夠在 23 小時內解密 MS-CHAP-v2 MD4 口令。
* MPPE 使用 RC4 串流加密法進行加密。沒有對密文流進行認證的方法，因此密文很容易受到位元翻轉攻擊。攻擊者可以在傳輸過程中修改流並調整單位元來改變輸出流而不可能被檢測到。這些位翻轉可能會被協定本身通過校驗和或其他方式檢測到。

EAP-TLS 被認為是 PPTP 的進階認證選擇；然而，它需要為客戶和伺服器憑證實現公鑰基礎設施。因此，對於一些遠端存取的裝置來說，它可能不是一個可行的認證選擇。大多數使用 PPTP 的網路必須應用額外的安全措施，否則會被認為完全不適合現代網際網路環境。同時，這樣做意味著在某種程度上否定了該協定的上述好處。因此，不管從哪方面考慮，使用 PPTP 都是一種雙輸的局面。 

## 其他 VPN 協定

* L2F Layer 2 Forwarding Protocol
* L2TP Layer 2 Tunneling Protocol
* PLIP Parallel Line Internet Protocol
* IPsec
* SLIP Serial Line Internet Protocol
* PPP Point-to-Point Protocol

## 參考文獻

## 外部連結

* On PPTP security （頁面存檔備份，存於網際網路檔案館）
* Windows NT: Understanding PPTP from Microsoft
* FAQ on security flaws in Microsoft's implementation （頁面存檔備份，存於網際網路檔案館），Bruce Schneier，1998
* Cryptanalysis of Microsoft's PPTP Authentication Extensions （頁面存檔備份，存於網際網路檔案館） (MS-CHAPv2), Bruce Schneier，1999
* Poptop（頁面存檔備份，存於網際網路檔案館），a PPTP Server for Linux
* PPTP Client （頁面存檔備份，存於網際網路檔案館），a Linux，FreeBSD，NetBSD and OpenBSD client
* pptpproxy，a Linux，FreeBSD，NetBSD and OpenBSD pptp protocol forwarder (proxy)
* ASLEAP（頁面存檔備份，存於網際網路檔案館），a PPTP password cracker and traffic sniffer
* PPTP Protocol Security （頁面存檔備份，存於網際網路檔案館） by James Cameron and Peter Mueller
* Setting up EAP-TLS security for PPTP