點對點隧道協議

点对点隧道协议（英语：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 进行身份验证，通常也可以与 或 IPSec 的加密机制结合使用以增强安全性。

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

 规格 
PPTP不是IETF建议的标准，是由微软、（現在属于 Alcatel-Lucent 集团）、3Com 等厂商联合形成的产业联盟开发RFC 263。 1999年7月发布的 RFC 2637 是第一個正式的PPTP規格書。

PPTP以通用路由封装（GRE）协议向对方作一般的点对点传输。通过 TCP 1723 端口來发起和管理 GRE 状态。因为 PPTP 需要 2 个网络状态，因此会对穿越防火墙造成困难。很多防火墙不能完整地传递链接，导致无法连接。
在 Windows 或 macOS 平台，通常PPTP可搭配 MSCHAP-v2 或 EAP-TLS 进行身份验证 ，也可配合 进行连接时的加密。

与 PPTP 相似的另一种常见的 VPN 协议是第二层隧道协议（L2TP）Layer Two Tunneling Protocol "L2TP" ,RFC 2661, W. Townsley et al., 1999-08。

 应用 

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 
 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

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