訂閱以接收新文章的通知:

Encrypted Client Hello — 隱私權的最後一塊拼圖

2023-09-29

閱讀時間:4 分鐘
本貼文還提供以下語言版本:English日本語한국어简体中文

今天,我們很高興地宣佈為改善網際網路上每個人的隱私做出了貢獻。Encrypted Client Hello 是一項提議的新標準,可防止網路窺探使用者造訪的網站,現已在所有 Cloudflare 方案中可用。

Encrypted Client Hello - the last puzzle piece to privacy

Encrypted Client Hello (ECH) 是 ESNI 的繼任標準,它遮罩了用於協商 TLS 交握的伺服器名稱指示 (SNI)。這意味著只要使用者造訪 Cloudflare 上啟用了 ECH 的網站,除了使用者、Cloudflare 和網站擁有者之外,任何人都無法確定造訪的是哪個網站。Cloudflare 非常重視每個人的隱私,並對這項技術的應用前景感到興奮。

瀏覽網際網路和您的隱私

每當您造訪一個網站時,您的瀏覽器都會向 Web 伺服器傳送一個請求。Web 伺服器以內容作為回應,網站開始在您的瀏覽器中載入。早在網際網路誕生之初,這種情況是以「純文字」形式出現的,也就是說,您的瀏覽器透過網路傳送的內容,所有人都可以讀取:您用於瀏覽的公司網路、為您提供網際網路連線的網際網路服務提供者,以及請求在到達託管網站的 Web 伺服器之前所經過的任何網路。長期以來,隱私權宣導者一直擔心「純文字」會洩露多少資訊:如果您和 Web 伺服器之間的任何網路都能看到您的流量,這意味著他們也能看到您正在做的事情。如果您發起的是銀行轉帳,任何中間方都可以看到轉帳的目的地和金額。

那麼,如何使這些資料更加私密呢?為了防止竊聽,人們引入了 SSL 和後來的 TLS 形式的加密技術。這些了不起的通訊協定不僅能保護您的隱私,還能確保任何中間方都無法篡改您瀏覽或上傳的任何內容。但是,加密技術也僅限於此。

雖然實際內容(您正在造訪網站上的哪個特定頁面以及您上傳的任何資訊)是加密的,不會被中間方發現,但仍有一些方法可以確定使用者正在做什麼。例如,透過 DNS 請求確定所造訪網站的位址 (IP) 和 SNI 都是中間方追蹤使用情況的常用方法。

讓我們從 DNS 開始。每當您造訪一個網站時,您的作業系統都需要知道要連線到哪個 IP 位址。這是透過 DNS 請求實現的。預設情況下,DNS 是未加密的,這意味著任何人都能看到您所請求的網站。為了幫助使用者遮罩這些請求,使中間方無法看到其內容,Cloudflare 在 2019 年推出了 DNS over HTTPS (DoH)。2020 年,我們更進一步,推出了 Oblivious DNS over HTTPS,即使 Cloudflare 也無法看到使用者詢問的網站。

這樣,SNI 就成了最後一個未加密的位元,中間方可以利用它來確定您造訪的是哪個網站。執行 DNS 查詢後,瀏覽器要做的第一件事就是執行 TLS 交握。交握包含幾個步驟,包括使用哪種密碼、哪種 TLS 版本以及哪種憑證將用於驗證 Web 伺服器的身分。在交握過程中,瀏覽器將顯示它打算造訪的伺服器(網站)名稱:伺服器名稱指示。

由於工作階段尚未加密,並且伺服器不知道要使用哪個憑證,因此瀏覽器必須以純文字形式傳輸此資訊。以純文字形式傳送 SNI 意味著,任何中間方只需檢查用於連線的第一個封包,就能瞭解您正在造訪哪個網站:

這意味著,儘管 TLS 和 DoH 做出了巨大努力,但您在網際網路上造訪的網站仍然不是真正的隱秘。今天,我們透過 ECH 為這一難題添上了最後一塊缺失的拼圖。有了 ECH,瀏覽器會與 Cloudflare 進行 TLS 交握,但不會使用特定于客戶的主機名稱。這意味著,雖然中間方可以看到您正在造訪 Cloudflare 上的_一個_網站,但他們永遠無法確定具體是哪個網站。

ECH 如何運作?

要解釋 ECH 如何運作,首先要瞭解 TLS 交握是如何進行的。TLS 交握會以 ClientHello 部分開始,它允許用戶端說出要使用的密碼、TLS 版本,以及(最重要的)它要存取的伺服器 (SNI)。

使用 ECH 時,ClientHello 訊息部分被分成兩個獨立的訊息:內部部分和外部部分。外部部分包含非敏感資訊,如要使用的密碼和 TLS 版本。它還包括一個「外部 SNI」。內部部分已加密,包含「內部 SNI」。

外部 SNI 是一個普通名稱,在我們的案例中,它表示使用者正在嘗試造訪 Cloudflare 上的加密網站。我們選擇 cloudflare-ech.com 作為所有網站在 Cloudflare 上共用的 SNI。由於 Cloudflare 控制著該網域,因此我們擁有相應的憑證,能夠為該伺服器名稱協商 TLS 交握。

內部 SNI 包含使用者嘗試造訪的實際伺服器名稱。該資訊使用公開金鑰加密,只有 Cloudflare 才能讀取。一旦交握完成,網頁就會正常載入,就像透過 TLS 載入其他網站一樣。

在實踐中,這意味著任何試圖確定您正在造訪哪個網站的中間方都將只看到正常的 TLS 交握,但有一點需要注意:您在 Cloudflare 上存取啟用了 ECH 的網站時,伺服器名稱看起來都是一樣的。每次 TLS 交握看起來都是一樣的,因為它看起來像是在試圖載入 cloudflare-ech.com 的網站,而不是實際的網站。對於不希望中間方看到其所造訪網站的使用者,我們已經解決了保護使用者隱私的最後一個難題。

有關 ECH 技術的詳細資訊,請造訪我們的介紹性部落格

隱私的未來

我們很期待看到這對網際網路隱私的影響。Google ChromeFirefox 等瀏覽器已經開始加強對 ECH 的支援。如果您經營一家網站,並且您希望使用者在造訪您的網站時不會被任何中間方看到使用者在做什麼,請立即在 Cloudflare 上啟用 ECH。我們已經為所有免費區域啟用了 ECH。如果您是現有的付費客戶,只需前往 Cloudflare 儀表板申請該功能即可。我們將在未來幾週內為所有報名客戶啟用此功能。

隨著時間的推移,我們希望其他人也能跟隨我們的腳步,為所有人打造一個更加私密的網際網路。提供 ECH 的提供者越多,人們就越難監聽使用者在網際網路上的行為。說不定,我們還能徹底解決隱私問題。

如果您想瞭解有關 ECH 的更多資訊、其運作原理以及啟用方法,請存取我們的 ECH 開發人員文件

我們保護整個企業網路,協助客戶有效地建置網際網路規模的應用程式,加速任何網站或網際網路應用程式抵禦 DDoS 攻擊,阻止駭客入侵,並且可以協助您實現 Zero Trust

從任何裝置造訪 1.1.1.1,即可開始使用我們的免費應用程式,讓您的網際網路更快速、更安全。

若要進一步瞭解我們協助打造更好的網際網路的使命,請從這裡開始。如果您正在尋找新的職業方向,請查看我們的職缺
Birthday Week產品新聞Encrypted SNIResearch

在 X 上進行關注

Cloudflare|@cloudflare

相關貼文

2024年10月24日 下午1:00

Durable Objects aren't just durable, they're fast: a 10x speedup for Cloudflare Queues

Learn how we built Cloudflare Queues using our own Developer Platform and how it evolved to a geographically-distributed, horizontally-scalable architecture built on Durable Objects. Our new architecture supports over 10x more throughput and over 3x lower latency compared to the previous version....

2024年10月08日 下午1:00

Cloudflare acquires Kivera to add simple, preventive cloud security to Cloudflare One

The acquisition and integration of Kivera broadens the scope of Cloudflare’s SASE platform beyond just apps, incorporating increased cloud security through proactive configuration management of cloud services. ...

2024年9月27日 下午1:00

Network trends and natural language: Cloudflare Radar’s new Data Explorer & AI Assistant

The Cloudflare Radar Data Explorer provides a simple Web-based interface to build more complex API queries, including comparisons and filters, and visualize the results. The accompanying AI Assistant translates a user’s natural language statements or questions into the appropriate Radar API calls....