點對點隧道協議（英語：PointtoPoint Tunneling Protocol，縮寫為 PPTP）是實現虛擬專用網（VPN）的一種方式。PPTP 使用傳輸控制協議（TCP）建立控制通道以傳送控制命令，並利用通用路由封裝（GRE）通道封裝點對點協議（PPP）資料包以傳送資料。該協議最早由微軟等廠商主導開發，但由於其加密方式容易被破解，微軟現已不建議使用此協議。 PPTP 的協議規範本身並未描述加密或身份驗證部分，而是依靠點對點協議（PPP）來實現安全功能。由於 PPTP 協議內置於微軟 Windows 系列產品中，因此微軟的點對點協議（PPP）協議棧提供了多種標準的身份驗證與加密機制以支援 PPTP。例如，在微軟視窗系統中，PPTP 可以搭配 PAP、CHAP、MSCHAP v1v2 或 EAP 進行身份驗證，通常也可以與微軟點對點加密（MPPE）或 IPSec 的加密機制結合使用以增強安全性。 在 Windows 或 Mac OS 平臺之外，Linux 與 FreeBSD 等平臺也提供開放原始碼的版本。 規格 PPTP 不是 IETF 建議的標準，是由微軟、（現在屬於 AlcatelLucent 集團）、3Com 等廠商聯合形成的產業聯盟開發 RFC 263。 1999 年 7 月發布的 RFC 2637 是第一個正式的 PPTP 規格書。 PPTP 以通用路由封裝（GRE）協定向對方作一般的點對點傳輸。透過 TCP1723 埠來發起和管理 GRE 狀態。因為 PPTP 需要 2 個網路狀態，因此會對穿越防火牆造成困難。很多防火牆不能完整地傳遞連線，導致無法連線。 在 Windows 或 Mac OS 平臺，通常 PPTP 可搭配 MSCHAPv2 或 EAPTLS 進行身份驗證 ，也可配合進行連線時的加密。 與 PPTP 相似的另一種常見的 VPN 協定是第二層隧道協議（L2TP）Layer Two Tunneling Protocol L2TP RFC 2661 W Townsley et al 199908。 應用 PPTP 因為易於設定和是首個支援微軟撥號連線的協議而流行。自 Microsoft Windows 95 OSR2 開始包含 PPTP 使用者端，但是被限制只可同時存 2 個向外連線。Windows XP 的遠端桌面連線包含 PPTP。 過往因 MPPE 是軟體專利，所以 Linux 曾缺乏完整的 PPTP 支援。但是，自從在 2005 年 10 月 28 日發布的 Linux 2614 起，Linux 核心提供完整的 PPTP 支援（包含對免費版本的 MPPE 支援）。 實作 PPTP 是第一個被 Microsoft 撥號網路支援的 VPN 通訊協定。自 Windows 95 OSR2 起，所有的 Microsoft Windows 版本都內建了 PPTP 使用者端軟體（雖然只能支援最多兩個同時對外的連線）。 在 Mobile 版本上，Microsoft Windows Mobile 2003 與更新的版本也支援 PPTP。Windows 的路由及遠端存取套件有包含 PPTP 伺服器。 Microsoft 的實作在 MSCHAP 認證協定內使用了單次 DES 加密，但單次 DES 常被認為無法提供資料足夠等級的安全防護。2 Windows Vista 與更新版本的 PPTP 開始支援 PEAP。認證機制有 PEAPv0 EAPMSCHAPv2 使用密碼 還有 PEAPTLS 智慧卡與憑證。 Windows Vista 同時停止了 MSCHAPv1 的認證協定。3 Linux 的 PPTP 伺服器一般是使用 PoPToP 4 套件加上 PPP 與 MPPE 的 Kernel Module。PPTP 的使用者端程式從 1997 5 就開始提供了，但伺服器部份要等到 Matthew Ramsay 在 1999 6 開發的版本從 Moreton Bay 以 GNU GPL 發行後才真正開始有人大量使用。但是，Linux 發行版本一開始通常都不包含 MPPE 的部份（因為擔心有專利問題）所以不完整，直到 20051028 發布的 Linux Kernel 2614 才正式支援 MPPE。 SuSE Linux 10 是第一個有完整可用的 PPTP 使用者端程式的版本。另外還有 ACCELPPP 套件：它提供了 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 認證之間在建立會話金鑰方面的整合。 以下是這些漏洞的摘要： MSCHAPv1 是不安全的，因為已有工具可以從捕獲到的 MSCHAPv1 交換包中輕易地提取出 NT 密碼的雜湊值。 當使用 MSCHAPv1 時，MPPE 在通訊流的兩個方向上使用相同的 RC4 會話金鑰進行加密。這可以透過將每個方向的資料流一起進行異或運算，用標準方法進行密文分析。 MSCHAPv2 對捕獲的挑戰響應（challenge response）資料包容易受到字典攻擊。目前已有工具可以快速執行這一過程。 2012 年，有研究表明，對 MSCHAPv2 金鑰進行暴力攻擊的複雜性相當於對單個 DES 金鑰進行暴力攻擊。還演示了一項線上服務，它能夠在 23 小時內解密 MSCHAPv2 MD4 口令。 MPPE 使用 RC4 流密碼進行加密。沒有對密文流進行認證的方法，因此密文很容易受到位元翻轉攻擊。攻擊者可以在傳輸過程中修改流並調整單位元來改變輸出流而不被檢測到。這些位翻轉可能會被協議本身透過校驗和或其他方式檢測到。 EAPTLS 被認為是 PPTP 的高階認證選擇；然而，它需要為使用者和伺服器證書實現公鑰基礎設施。因此，對於一些遠端訪問的裝置來說，它可能不是一個可行的認證選擇。大多數使用 PPTP 的網路必須應用額外的安全措施，否則會被認為完全不適合現代網際網路環境。同時，這樣做意味著在某種程度上否定了該協議的上述好處。因此，不管從哪方面考慮，使用 PPTP 都是一種雙輸的局面。 其他 VPN 協議 L2F Layer 2 Forwarding Protocol L2TP Layer 2 Tunneling Protocol PLIP IPsec SLIP Serial Line Internet Protocol PPP PointtoPoint Protocol 參考文獻 外部連結 On PPTP security Windows NT Understanding PPTP from Microsoft FAQ on security flaws in Microsofts implementation ，Bruce Schneier，1998 Cryptanalysis of Microsofts PPTP Authentication Extensions MSCHAPv2 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 EAPTLS security for PPTP Category 傳輸層協議 Category 穿隧協議 Category 已攻破的密碼演算法 Category 虛擬私人網路