點對點隧道協議

點對點隧道協議（英語：Point-to-Point Tunneling Protocol，縮寫為 PPTP）是實現虛擬專用網（VPN）的一種方式。PPTP 使用傳輸控制協議（TCP）建立控制通道以發送控制命令，並利用通用路由封裝（GRE）通道封裝點對點協議（PPP）數據包以發送數據。該協議最早由微軟等廠商主導開發，但由於其加密方式容易被破解，微軟現已不建議使用此協議。

PPTP 的協議規範本身並未描述加密或身份驗證部分，而是依靠點對點協議（PPP）來實現安全功能。由於 PPTP 協議內置於微軟 Windows 系列產品中，因此微軟的點對點協議（PPP）協議棧提供了多種標準的身份驗證與加密機制以支持 PPTP。例如，在微軟視窗系統中，PPTP 可以搭配 PAP、CHAP、MS-CHAP v1/v2 或 EAP 進行身份驗證，通常也可以與Microsoft Point-to-Point Encryption 或 IPSec 的加密機制結合使用以增強安全性。

在Windows 或 macOS平台之外，Linux 與 FreeBSD等平台也提供開源版本。

## 規格

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

PPTP以通用路由封裝（GRE）協議向對方作一般的點對點傳輸。通過 TCP 1723 埠來發起和管理 GRE 狀態。因為 PPTP 需要 2 個網路狀態，因此會對穿越防火牆造成困難。很多防火牆不能完整地傳遞連結，導致無法連接。

在 Windows 或 macOS 平台，通常PPTP可搭配 MSCHAP-v2 或 EAP-TLS 進行身份驗證，也可配合 微軟點對點加密進行連接時的加密。

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

## 應用

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

過往因MPPE是軟體專利，所以Linux曾缺乏完整的PPTP支援。但是，自從在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 伺服器一般是使用 PoPToP4 套件加上 PPP 與 MPPE 的 Kernel Module。PPTP的使用者端程式從 19975 就開始提供了，但伺服器部份要等到 Matthew Ramsay 在 19996開發的版本從 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。

macOS 與 iOS 曾提供內建 PPTP 使用者端程式，但在 2016 年發表的 iOS 10 和 macOS Sierra 中，PPTP 支援被移除。OS X Server 內建了 PPTP 服務。Cisco 與 Efficient Networks 有另外販賣給舊版 Mac OS 使用的 PPTP 使用者端程式。

許多 Android 智慧型手機也支援 PPTP，不過官方版本的 Android 12 已移除了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 並行線路網際網路協議
- 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