協定加密（Protocol encryption，PE）、訊息流加密（message stream encryption，MSE）或協定頭加密（protocol header encrypt，PHE）是部分對等網路檔案分享客戶端的特性，包括 BitTorrent 客戶端。它們嘗試增強隱私和保密性，並嘗試使第三方（如網際網路服務供應商）更難辨識流量頭部。

MSE/PE 在 BitComet、BitTornado、Deluge、Flashget、KTorrent、Mainline、µTorrent、qBittorrent、rTorrent、Transmission、Tixati 和 Vuze 等軟體中有被實現。PHE 在舊版本的 BitComet 中被實現。類似的協定混淆在最新版本的非 BitTorrent 系統（包括 eMule）中也有實現。



目的

截至 2005 年 1 月，BitTorrent 流量占據了住宅網際網路總流量的三分之一以上，雖然這在 2009 年下降到不足 20%。一些網際網路服務提供者通過增加其容量來處理這種流量，另有一些服務商使用專用的系統來降速對等流量以降低成本。混淆和加密會使流量更難以被檢測和控制。這些系統的最初設計目的是匿名性或保密性，但在某些國家（或地區、運營商）因網際網路服務供應商限制 BitTorrent 流量或使用者而變成必需品，他們認為 BitTorrent 流量占用過多網路資源（增加運營成本）、干擾網路正常執行，或認為或限制「非法的」檔案分享。



歷史

早期方法

協定頭加密（PHE）由 RnySmile 構想並最先在 2005 年 9 月 8 日的 BitComet 0.60 中實現。一些軟體如 IPP2P 聲稱可以檢測到使用了 PHP 的 BitComet 流量。PHE 是可以被檢測的，因為只有部分流被加密。由於沒有此協定的開放規範，其他客戶端支援它的唯一方法是通過逆向工程。

MSE/PE 的開發

2006 年 1 月下旬，Vuze（當時稱為 Azureus）的開發者決定設計並實現一個新的、開放的協定混淆方法，它被稱訊息流加密（message stream encryption，簡稱 MSE）。該協定被包含在 2006 年 1 月 19 日的 Azureus CVS 快照 2307-B29 中。

這份首稿受到了嚴重的批評，因為它缺乏幾個關鍵特徵。在幾名 BitTorrent 開發者磋商後，一份新的提案在幾天內被撰寫並實現到 Azureus 和 µTorrent beta。在 µTorrent 中，新的協定被稱為協定加密（protocol encryption，簡稱 PE）。

BitTorrent 客戶端各版本中的 MSE/PE


* BitComet 0.63 版本，發布於 2006 年 3 月 7 日。它移除了舊的協定頭加密並實現了新的 MSE/PE 以相容 Azureus 和 µTorrent。

* BitTornado 從 T-0.3.18 版本開始支援 MSE/PE。截至 2007 年 1 月 5 日，該版本仍在下載頁面上標為「實驗性」。

* BitTorrent （Mainline）從 2006 年 5 月 2 日的 4.9.2-beta 開始支援 MSE/PE。

* Deluge 從 Deluge-0.5.1 開始支援 MSE/PE。

* KTorrent 在 2006 年 4 月 29 日的 SVN 版本 535386 中實現 MSE/PE。

* rTorrent 從 rTorrent-0.7.0 開始支援 MSE/PE。

* Transmission 從 Transmission-0.90 開始支援 MSE/PE。

* Vuze（以前名為 Azureus）自 2006 年 1 月 25 日（CVS 快照 2307-B33）起支援最終版標準。Azureus 2.4.0.0 於 2006 年 2 月 10 日發布，是首個支援 MSE/PE 的穩定版本客戶端。不過，Azureus 的實現中存在瑕疵，會導致不正確的加密片段，從而雜湊檢查失敗。該瑕疵在 2.4.0.2 版本中被糾正。

* µTorrent 在 Azureus 的 beta 1.4.1 build 407 發布 4 年後支援 MSE/PE。µTorrent 的 1.5（build 436）版本於 2006 年 3 月 7 日發布；它是首個支援 PE 的 µTorrent 穩定版本。



操作

BitComet 0.60 至 0.62 版本中使用的 PHE 方法即沒有發布，也不相容 MSE/PE。

MSE/PE 使用金鑰交換結合 torrent 的 infohash 建立一個 RC4 加密金鑰。金鑰交換有助於最小化被動監聽器的風險，而 infohash 有助於避免中間人攻擊。選擇 RC4 是為了速度更快。輸出的第一個 kibibyte（1024 位元組）被丟棄以防止 Fluhrer, Mantin and Shamir attack。

該規範允許使用者選擇僅加密報頭或者完全加密整個連接。加密整個連接提供更強的混淆能力，但也消耗更多的 CPU 時間。

為確保與不支援此規範的其他客戶端的相容性，使用者還可選擇是否仍允許未加密的傳入或傳出連接。

支援的客戶端通過節點交換（PEX）和分散式雜湊表（DHT）通告它們已啟用 MSE/PE。



安全性

該加密方法若對應常用的對稱加密演算法，加密強度約為 60-80 位元。在密碼學領域，這個有效的金鑰長度相當低，但該協定不是為安全傳輸而設計，而是作為一種快速並有效的混淆方法。AES 曾被提出作為加密方法，但未被採用，因為會消耗太多的 CPU 時間。它需要迪菲 - 赫爾曼密鑰交換（Diffie–Hellman）金鑰來做到 AES 級別的安全性，而 AES 要做到會更大，或者需要橢圓曲線密碼學，使握手要使用較多的 CPU 時間。



效果

一些網際網路服務提供者正在使用更複雜的措施（例如模式 / 時量分析，或者基於信道側資料對埠進行分類）來檢測 BitTorrent 流量。這意味著加密的 BitTorrent 流量也可以被限流。但是，也有些服務商繼續使用簡單、便宜的方法來辨識和限流 BitTorrent，因此當前的方案仍有效果。

對 BitTorrent 協定加密（也稱 MSE）的分析顯示，封包大小的測量統計和 TCP 對談中前 100 個封包的封包方向可以被用來辨識混淆的協定，具有超過 96% 的準確性。

Sandvine 應用程式採用另一種途徑，通過使播種（Seeding）失效來瓦解 BitTorrent 流量。Sandvine 截取對等端到跟蹤伺服器（tracker）的通信並基於跟蹤伺服器返回的節點列表中的節點位址和埠號來辨識對等端。當 Sandvine 在之後看到已截取的對等端列表中的對等端的連接時，它可能（根據策略）傳送偽造的 TCP 重設來中斷這些連接。有多種方案來抗擊 Sandvine 的攻擊，包括對等端到跟蹤伺服器及對等端到對等端之間的通信加密，使用微軟的 Teredo 使 TCP 連接隧道化為 UDP 封包，在終端主機的 TCP 層中過濾掉 TCP 重設包，或者完全從基於 TCP 的傳輸變為基於 UDP 的傳輸等。每個解決方案都各有利弊。過濾掉 TCP 重設通常需要核心存取權限和遠端節點的參與，因為 Sandvine 會將重設封包同時發給本地和遠端節點。



批評

BitTorrent 的發明者布萊姆・科亨（Bram Cohen）反對將加密加入 BitTorrent 協定，他擔心加密可能導致客戶端之間的不相容，並還強調大多數 ISP 不封阻 torrent 協定。2006 年他寫道：「我相當懷疑有些開發者受到了他的 ISP 的限制，並更有興趣破解他的 ISP 的限制，而不是整個網際網路的效能。」 許多 BitTorrent 社群的使用者強烈反對 Cohen 的指責。Cohen 後來也添加了加密連接到他的 Mainline 客戶端使其有接收能力，但不會如此傳送加密連接。



參考資料



外部連結


* "Message Stream Encryption"（頁面存檔備份，存於網際網路檔案館）. Vuze.

* "ISPs that shape BitTorrent"（頁面存檔備份，存於網際網路檔案館）. Vuze.

* "BitTorrent End to End Encryption and Bandwidth Throttling - Part I" with µTorrent developers. Slyck News.

* "BitTorrent End to End Encryption and Bandwidth Throttling - Part II" with Azureus developers Slyck News.

* "BitTorrent and End to End Encryption"（頁面存檔備份，存於網際網路檔案館）. Slashdot.

* "Tracker Peer Obfuscation"（頁面存檔備份，存於網際網路檔案館）. BitTorrent.org.

* "Identifying the Message Stream Encryption (MSE) protocol" for Statistical Protocol IDentification. Sourceforge.

* "Block P2P Traffic on a Cisco IOS Router using NBAR"（頁面存檔備份，存於網際網路檔案館）. Cisco.

* "Aria2c VPN/Proxy Tutorial". GoTux.