點對點隧道協議

點對點隧道協議（，縮寫為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。

過往因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 伺服器一般是使用 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。
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 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

传输层协议
穿隧協議
已攻破的密码算法
虛擬私人網路