當你深夜在瀏覽器中輸入 www.baidu.com 時有沒有想過,除了月黑風高的夜和本機的瀏覽記錄,還有誰知道你訪問了它呢?要搞清楚這件事,首先我們要了解一下訪問網站時,這其中發生了什麼。
如果你在 10 年之前訪問網站,大機率會在瀏覽器的位址列中看到這樣的網址 http://www.baidu.com ,這其中網址前面的 http
表明訪問網站使用的是 HTTP 協議。當你按下Enter鍵↩︎,訪問網站也拉開了序幕。我們知道 IP 地址是裝置在網際網路上的唯一標識,而要訪問的網站是部署在網際網路上的某一臺裝置中(伺服器),那麼這臺裝置會有一個固定的 IP 地址。那麼怎麼將網址和 IP 地址建立起聯絡呢?訪問網站的第一步就是使用 DNS 服務把網址轉換成伺服器的 IP 地址。DNS(Domain Name System)即域名系統,就是提供域名(網址)與 IP 地址相互對映的服務,方便人們訪問網站。當瀏覽器知道了 IP 地址後,會透過埠 80 向該 IP 地址傳送 TCP 連線請求,最終給你呈現出網站的內容。簡單來說,使用 HTTP 訪問網站有這樣幾步:
- 瀏覽器向 DNS 伺服器請求將網址解析為 IP 地址;
- 瀏覽器透過埠 80 向該 IP 地址傳送 TCP 連線請求;
- 瀏覽器傳送 HTTP 請求,接收伺服器 HTTP 響應並渲染網頁。
那麼哪些環節會洩露隱私呢?由於 HTTP 協議不加密🔓資料,任何人都可以在資料傳輸過程中截獲和檢視資訊。你的底褲會在網路出口被扒的一乾二淨。
如果你現在訪問網站,基本上會在瀏覽器的位址列中看到這樣的網址 https://www.baidu.com ,這其中網址前面的 https
表明訪問網站使用的是 HTTPS 協議。HTTPS 協議簡單來說 HTTPS = HTTP + TLS
。前面提到了 HTTP 是一種不加密的協議,資料在網路中是以明文傳輸的,所以並不安全。而 TLS(Transport Layer Security)是一種安全協議,可以將瀏覽器與伺服器的通訊進行加密🔐,從而向第三方隱藏網站的內容。簡單來說,使用 HTTPS 訪問網站有這樣幾步:
- 瀏覽器向 DNS 伺服器請求將網址解析為 IP 地址;
- 瀏覽器透過埠 443 向該 IP 地址傳送 TCP 連線請求,並開始 TLS 握手過程;
- 瀏覽器驗證伺服器的安全證書,和伺服器協商加密演算法和交換加密金鑰;
- 瀏覽器傳送加密的 HTTP 請求,接收伺服器加密的 HTTP 響應,解密並渲染網頁。
那麼使用 HTTPS 後就安全了嗎?雖然 HTTPS 本身是加密的,但是在訪問網站的過程中還是有可能暴露你訪問的網址。例如:
- DNS 查詢:即使是 HTTPS,DNS 查詢預設情況下也是未加密的,這意味著在網路出口仍然能知道你訪問的是哪個網站;
- 流量分析:即使使用 HTTPS 對資料進行加密,在不知道傳輸內容的情況下可以對資料包的特徵進行分析,當訪問一些特定的網站時,可能出現大小和順序相似的資料包,這種方式也可能暴露你訪問的網站。
那麼如何安全地訪問網際網路呢?流量識別技術的提高,網路中不斷增加的監視節點,導致沒有絕對的匿名性👁️。但是通常可以使用下面的技術提高訪問過程中的安全性。
VPN(Virtual Private Network)即虛擬專用網路,是一種加密通訊技術。它允許使用者透過加密的通道傳送和接收資料,從而保護資料不被未授權的人訪問或竊取。其工作原理是透過遠端伺服器重定向網路流量,這樣真實的 IP 地址就被隱藏起來,使得網路請求對可能的監視者變得不可見。這好比將你的裝置加入到另一個網路中,同時分配個另一個網路的 IP 地址。VPN 是一個統稱,它有很多的具體實現,常見的協議包括 PPTP、L2TP、IPSec 和 GRE。目前,絕大部分 VPN 協議的流量特徵均能被精確識別。
VPN 的傳輸過程
Proxy 即代理,是一種網路服務,它充當客戶端和伺服器之間的中介。代理伺服器的主要功能是代理網路使用者去獲取網路資訊。在客戶端和目標伺服器之間建立一箇中介,使得客戶端可以透過代理伺服器的 IP 地址和位置資訊來傳送請求,從而隱藏客戶端的真實 IP 地址和位置資訊。代理就相當於一位中間人,只提供了匿名服務,並不加密傳輸的資料。所以還需要使用一些其他的技術對資料進行加密,例如流量混淆。流量混淆透過改變資料包的外觀和行為,使得網路流量難以被識別和追蹤。可以透過隨機改變資料包的大小、時間間隔等特徵,使流量看起來更像是隨機資料,而不是特定型別的通訊。也可以模仿其他常見的網路協議或應用的流量特徵,使混淆後的流量看起來像是正常的網路流量。隨著時間的推移,混淆特徵也最終會被識別。
代理的傳輸過程
代理有兩種常見的技術,一個是 SOCKS5,一個是 Tor。SOCKS5 是 SOCKS 協議的第五個版本,位於 OSI 模型中的第五層會話層,因此可以處理任何型別的網路流量。由於資料是以明文傳輸的,SOCKS5 更多用在本地代理,即同一網段下的所有裝置都可以共用一個代理網路出口。Tor(The Onion Router)即洋蔥路由,是一種由上千臺中繼伺服器組成的分散式網路,用來轉發網路請求,從而保護隱私性。
Tor 的傳輸過程
網路請求在進入 Tor 網路之前會被加密三次,然後透過選擇的三個節點(入口節點、中間節點和出口節點)傳輸(如上圖的 TOR RELAY
),請求在傳入下一個節點之前會被去除一次加密。每個節點只能解密一層加密,從而無法單獨確定使用者的身份和訪問的內容。在三個節點中,第一個能夠看到來自使用者裝置的加密 Tor 流量,但它不知道使用者正在用 Tor 做什麼,它僅僅能看到“這個 IP 地址正在使用 Tor”。第三個節點能夠看到使用者傳送的 Tor 流量,但它不知道是誰傳送的這些流量,如果使用了加密傳輸(例如 HTTPS 協議),它僅能知道目標網址。當然 Tor 也有缺點,經過了多次加密和節點的轉發網路速度會變得很慢。Tor 也不能提供絕對的安全,如果監聽者能夠同時監測入口和出口節點,對流量進行計時關聯也是可能的(如上圖的 NSA
美國國家安全域性🫵)。
安全地訪問網際網路需要採取適當的措施,例如使用 HTTPS、VPN、代理等技術,但每種技術都有其優勢和侷限性,切記沒有絕對的安全😶🌫️。