🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付

背景

互聯網上有一個名為暗網的區域,只有使用特定的軟體才能訪問
作為暗網的一部分,基於Tor構建的網絡非常著名

本文將在解釋Tor如何實現匿名通信的機制後,說明如何訪問Tor網路內的.onion域名

Image

Tor是什麼

Tor_icon.png

Tor是一項於1990年代由美國海軍研究所開發的技術
它基於將通信流量經過多個伺服器並在每個階段進行加密的想法,以實現匿名通信
Tor的功能主要有以下兩個:

  • 實現匿名通信
    通過經由Tor網路來增加在互聯網上通信被追蹤的難度
  • 匿名地公開服務
    使用Tor可以在不暴露伺服器IP地址的情況下公開服務
    這些服務用特殊的域名.onion進行管理,因為後述的原因,只能透過Tor訪問

根據Tor的概念,全球有不同的管理者運營的伺服器,這些伺服器運行著Tor
截至2025年10月,全球約有8000個中繼伺服器和90萬個.onion域名存在

Tor還能在檢查或封鎖的地區提供繞過這些限制的優點
此外,對於取材或揭發的場合,也有助於保護信息提供者的匿名性

另一方面,它也被用於非法物品的買賣及隱藏攻擊路徑

Tor瀏覽器

Tor瀏覽器使得通過瀏覽器進行的通信可以經由Tor進行
本文不使用Tor瀏覽器,但它結合了方便性和安全性

Tor是增強匿名性的有效手段,但本篇文章不建議利用其匿名性進行非法行為

快速體驗Tor的匿名通信

在本文開始說明之前,實際使用Tor來感受一下IP地址的隱匿情形
我們將在顯示客戶端IP地址的網站ipinfo.io上進行以下兩項測試:

  • 直接訪問
  • 通過Tor訪問

直接訪問

stodo@TDRK:~/tor$ curl https://ipinfo.io
{
  "ip": "my.house.ip.address",
  "hostname": "softbankxxxxxxxxxxxx.bbtec.net",
  "city": "Tokyo",
  "region": "Tokyo",
  "country": "JP"
}

在直接訪問中顯示了我契約的供應商的IP地址(IP地址資訊已被隱藏)

通過Tor訪問

# tor在同一主機上啟動並在9050端口偵聽
stodo@TDRK:~$ curl --socks5 127.0.0.1:9050 https://ipinfo.io
{
  "ip": "185.220.101.18",
  "hostname": "berlin01.tor-exit.artikel10.org",
  "city": "Berlin",
  "region": "State of Berlin",
  "country": "DE"
}

Tor客戶端作為代理運行,因此使用curlsocks5選項通過Tor訪問ipinfo.io

Tor的情況下,顯示的IP地址是從Tor網路的出口伺服器得到的
在此次連接中,似乎是柏林的一個伺服器作為出口
通過這樣的方式,我們確定了使用Tor能夠隱蔽客戶端的IP地址

Tor提供了一個用於檢視行為的控制端口
可以通過名為nyx的軟體檢視Tor的行為
讓我們來確認一下在進行通信時經過了哪些伺服器

# 當Tor客戶端啟動時執行
stodo@TDRK:~$ nyx
~~選擇Connections標籤~~
 │ 127.0.0.1              -->  185.220.101.18:9003 (de)    目的: Conflux_linked, Circuit ID: 5                   3.3m (CIRCUIT)
 │ │  64.65.0.3:443 (us)          43C4B296233A29D80479A6839D93B59474336B12  skyzoobrooklyn                            1 / Guard
 │ │  45.140.164.238:12233 (fr)   FCB8177297C038F892895494F56B198AF8766235  EfilTor                                   2 / Middle
 │ └─ 185.220.101.18:9003 (de)    2268E58FFB596F3CE87E34CA8E87F1C82496E90E  artikel10ber71                            3 / End

此次形成的通訊路徑經由美國、法國和德國
ipinfo.io位於堪薩斯城,因此數據包在日本→美國→法國→德國→美國之間運動

Tor網路的構成要素

Tor網路的構成如下
實際上,每個元素在Tor網路上都有多個副本,並分散在全球各地

Tor網絡.png

目錄授權(DA)和目錄快取(DirCache)

生成並簽名網路中Tor節點列表的節點
DA與普通的Tor節點不同,是由信任的個人或團體在全球運營的10台伺服器

DA作為Tor網路的信任基石運行
只有10台伺服器,似乎在攻擊Tor網路時容易成為目標
研究顯示,通過對DA進行DDos攻擊可使Tor的分散目錄失效
https://arxiv.org/pdf/2509.10755

DA收集參與網絡的Tor中繼的元資料(公鑰、標誌、頻寬等),並生成簽名的共識文檔(consensus

DA的信息被硬編碼在源碼中,並在Tor過程啟動時作為首個連接目標使用

Tor儲存庫的./src/app/config/auth_dirs.inc中被硬編碼

stodo@TDRK:~/tor$ head ./src/app/config/auth_dirs.inc
"moria1 orport=9201 "
  "v3ident=F533C81CEF0BC0267857C99B2F471ADF249FA232 "
  "128.31.0.39:9231 1A25C6358DB91342AA51720A5038B72742732498",
"tor26 orport=443 "
  "v3ident=2F3DF9CA0E5D36F2685A2DA67184EB8DCB8CBA8C "
  "ipv6=[2a02:16a8:662:2203::1]:443 "
  "217.196.147.77:80 FAA4 BCA4 A6AC 0FB4 CA2F 8AD5 A11D 9E12 2BA8 94F6",
"dizum orport=443 "
  "v3ident=E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58 "
  "45.66.35.11:80 7EA6 EAD6 FD83 083C 538F 4403 8BBF A077 587D D755",

不過,客戶端並不是直接向DA查詢下載consensus

實際上存在名為目錄快取(DirCache)的多個快取節點,這些節點定期獲取DA簽名的共識並將其分發給客戶端

客戶端在啟動時或定期更新時,主要從DirCache獲取簽名的共識並將其緩存到本地(/var/lib/tor/cached-microdesc-consensus
根據獲取的共識,客戶端構建通信路徑

以下是保存在客戶端/var/lib/tor/cached-microdesc-consensus中的Tor節點信息,抽取了一個示例
附加了像<暱稱>這樣的補充信息

<暱稱> <簽名> <固定值> <固定值> <IP地址> <用於中繼的端口> <DA用端口 0為不使用>
r hubbabubbaABC AA0RwL8wxI/YFkTtKqPTczpRSdE 2038-01-01 00:00:00 83.108.59.221 9001 0
<建構回路所需信息的hash值>
m u3EWSW8rpXgDzfSsKSS1736R/qAfeklMhfpTW67/lsc
<該節點的狀態標誌>
s Fast Guard HSDir Running Stable V2Dir Valid
<版本>
v Tor 0.4.8.10
<支援的子協議>
pr Conflux=1 Cons=1-2 Desc=1-2 DirCache=2 FlowCtrl=1-2 HSDir=2 HSIntro=4-5 HSRend=1-2 Link=1-5 LinkAuth=1,3 Microdesc=1-2 Padding=2 Relay=1-4
<頻寬>
w Bandwidth=20000

進入守衛

Tor網絡的入口節點
Entry Guard與客戶端進行通信,因此知道客戶端和中繼的信息

中繼

負責中繼Entry GuardExit Guard的節點
Middle Relay知道Entry GuardExit Guard的信息,但並不知道客戶端的信息及通信目標伺服器的信息

出口守衛

Tor網絡的出口節點
它知道與中繼和目標伺服器的連接信息
Exit Guard就是通信目標伺服器看到的連接來源

洋蔥服務

用於公開.onion域名服務的節點
通過在Onion Service上提供服務,客戶端和伺服器可以在彼此之間不知道身份的情況下進行通信
詳細信息將在後述,主要原因是.onion域名的內容只能通過Tor訪問

  • .onion域名無法查詢DNS
  • 訪問Onion Service所需的信息只能從Tor網絡獲得
  • Onion Service的運作如同反向代理,使其內容只能通過Tor訪問

Onion Service提供的內容僅能通過Tor訪問

目前,Tor網路上似乎有約90萬個Onion Service在運行
https://metrics.torproject.org/networksize.html

Tor網路通信流程

將解釋客戶端通過Tor網絡訪問目標伺服器的流程

1. 客戶端從DA獲取中繼節點的信息

客戶端獲取來自DARelay Node信息,以決定通信路徑(GUARDMIDDLEEXIT
並通過路徑上的節點進行DH密鑰交換以共享會話共享密鑰
客戶端獲得GUARDMIDDLEEXIT三個會話共享密鑰
GUARDMIDDLEEXIT則僅擁有自己的密鑰

2. 將數據包進行三重加密並發送

將TCP有效負載依次用EXITMIDDLEGUARD會話共享密鑰進行加密後發送
將有效負載包裹在3層洋蔥皮的印象

Tor網絡 (3).png

3. 每個節點用自己的共享密鑰解密通信後轉發給下一個節點

用自身的共享密鑰解密前一節點發送的數據包,然後根據解密結果更改IP頭並發送到下一個節點
這個解密過程像是剝去洋蔥皮

Tor網絡 (2).png

Tor網絡 (4).png

4. 數據包到達目標伺服器

Exit Guard接收到數據包後進行解密,提取出原本的有效負載並將其發送給目標伺服器
目標伺服器僅能知道Exit Guard的信息

Tor網絡 (6).png

到這裡為止,我們已經介紹了Tor進行匿名通信的機制,但即使使用Tor也有可能導致身份被識別的情況
例如著名網站經營者因為社交媒體或論壇的暱稱重複而被識別,或是某學生因為「Tor訪問記錄」而被識別出其身份的案例
如果社交媒體賬號或論壇上的暱稱導致個人被識別,那就毫無意義,而通過Tor進行的行為雖被隱匿,但訪問Tor的事實卻無法隱匿

最後安全漏洞的確是人類自身

有關使用Tor導致被識別的案例,請參考下列資料的「為什麼使用Tor的罪犯會被逮捕」
https://unit42.paloaltonetworks.com/ja/tor-traffic-enterprise-networks/

通過洋蔥服務匿名公開服務的機制

迄今為止,我們講述了Tor如何使客戶端隱匿其發送源IP的手法
但是,這僅僅是Tor功能的一部分
在世上有些人希望匿名使用服務,也有些人希望匿名公開服務

訪問.onion域名的步驟

當客戶端訪問.onion時,相關的Tor節點構成如下

Tor網絡 (11).png

隱藏服務目錄(HSDir)

分散保存Onion Service信息的伺服器

會合點(RP)

會合點如其名,是客戶端和Onion Service的通信交匯伺服器
客戶端和Onion Service同時連接到RP,通過RP作為中介進行通信,從而隱藏了彼此的存在

介紹點(ItP)

用於通知Onion Service``RP信息的伺服器
ItPOnion Service決定,並起到將客戶端決定的RP告知Onion Service的作用

描述符

包含Onion Service的公鑰及ItP的信息
Onion Service生成並登記到HSDir
客戶端將根據此描述符確立與Onion Service的通信

1. Onion Service將描述符登記到HSDir

Onion Service生成一個洋蔥地址作為識別服務的地址
洋蔥地址是包含Onion Service公鑰信息的字符串
例如,我在本地網路上生成的地址如下所示
bx3w3mhfzy7bu56b4sc3vo5cr5ddxwgy4noeben752ia63g6cjqslead.onion

Onion Service隨機選擇一個Introduction Point(ItP),這個ItP可以比喻為希望隱藏行蹤的重要人物所信賴的中介人
Onion Service將洋蔥地址、公鑰和ItP信息登記至HSDir作為描述符

2. 客戶端決定會合點(RP)

客戶端隨機選擇一個RP
客戶端和Onion Service分別與RP通信,通過RP進行信息交換
這個RP可以比作是要人和其通信時所用的保險櫃,透過保險櫃進行信件的交換,雙方能在不知道彼此身分的情況下進行通知

如果能將所用的RP告知Onion Service,則客戶端和伺服器在互不知曉的情況下就能夠通過RP進行通信
此時將使用先前Onion Service設定並登記到HSDirItP

3. 通知Onion Service通信所用的RP

客戶端從HSDir獲取Onion Service描述符
描述符中包含Onion Service指定的ItP信息,因此通知使用該ItPRP
Onion Service通過ItP了解到將與客戶端通訊所用的RP
這像是通過中介告知要人所選擇的保險櫃,以進行信件的交換

4. 客戶端與伺服器通過會合點通信

通過上述步驟,已經共享了Onion Service和客戶端所使用的RP
今後將通過RP作為中介展開客戶端與伺服器的通信

訪問.onion域名必須經由Tor的原因

在解釋完必要的前提後,將說明為何訪問.onion域名必須經由Tor
原因其實很簡單,主要有以下三個:

無法查詢DNS

Tor網路在路由和服務發布方面被設計為不依賴其他中央管理系統
.onion域名不與DNS系統有關,因此無法註冊至DNS
https://datatracker.ietf.org/doc/html/rfc7686#section-1

Tor網路的設計是使其不因路由和服務發布受到任何中央控制機構的支配,因此無法註冊、分配、轉讓或撤銷.onion名稱。

當權威DNS伺服器被詢問.onion的IP地址時,必須返回NXDOMAIN(不存在該域名的錯誤)

權威DNS伺服器:當被詢問.onion時,權威伺服器必須使用NXDOMAIN回應。

如上所述,由於未在DNS中註冊,當嘗試解析.onion域名時只會返回NXDOMAIN

stodo@TDRK:~$ nslookup bx3w3mhfzy7bu56b4sc3vo5cr5ddxwgy4noeben752ia63g6cjqslead.onion 8.8.8.8
Server:         8.8.8.8
Address:        8.8.8.8#53

** server can't find bx3w3mhfzy7bu56b4sc3vo5cr5ddxwgy4noeben752ia63g6cjqslead.onion: NXDOMAIN

與Onion Service通信所需信息僅能從HSDir獲得

在普通網絡中,輸入像osstech.co.jp這樣的域名時,會向DNS發送請求,並根據獲得的IP地址訪問內容
而在Tor網路中,從.onion域名訪問內容的過程截然不同
Tor的訪問中,客戶端需從HSDir獲取Onion ServiceItP,然後使用該ItP將通信所用的RP共享給客戶端和Onion Service
最終,客戶端和Onion Service通過RP建立加密的通信通道

因此,僅能通過Tor網路Onion Service進行通信

反向代理的運作

假設您知道了.onion域名的IP地址,那情況會如何呢?
即使如此,通常的瀏覽器也無法訪問.onion域名
Onion Service像是反向代理,只將在Tor經由的加密通道上建立的連接轉發給內容伺服器
根據最佳實踐,內容伺服器應僅接受來自Onion Service的通信,並僅在127.0.0.1:80上偵聽流量

HiddenServicePort行指定了一個虛擬端口(即訪問您的Onion Service的用戶將使用的端口),上述情況下表示對Onion Service的80端口的任何流量都應轉發到127.0.0.1:80

# 透過tor訪問
root@026914cb9bc2:/# curl --socks5 http://localhost:9050 http://bx3w3mhfzy7bu56b4sc3vo5cr5ddxwgy4noeben752ia63g6cjqslead.onion/darkweb.html
Hello Dark Web

# 指定Onion Service的IP地址
root@026914cb9bc2:/# curl http://10.5.1.14/darkweb.html
curl: (7) Failed to connect to 10.5.1.14 port 80 after 0 ms: Couldn't connect to server

結論

  • Tor網路為服務的使用者和提供者雙方提供匿名性
  • 通過會合點作為中介進行通信可以提供匿名性
  • .onion域名不會被註冊於DNS上
  • 除非經由Tor,否則無法訪問.onion域名上的服務
  • 即使知道.onion域名的IP地址,仍然因其反向代理的運作而被拒絕訪問

參考資料

資料1:
由帕洛阿爾托網路提供的簡明Tor說明
https://unit42.paloaltonetworks.com/ja/tor-traffic-enterprise-networks/

資料2:
共識的說明
https://jordan-wright.com/blog/2015/05/14/how-tor-works-part-three-the-consensus/?utm_source=chatgpt.com

資料3:
中繼信息表示的含義
https://spec.torproject.org/dir-spec/consensus-formats.html#section-3.4.1

資料4:
.onion是特殊的域名
https://datatracker.ietf.org/doc/html/rfc7686#section-1

資料5:
針對通過RP進行通信的說明
https://community.torproject.org/onion-services/overview/


原文出處:https://qiita.com/todotodo/items/fd631b42eb18f9cfacd2


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝17   💬4   ❤️6
550
🥈
我愛JS
📝1   💬4   ❤️2
47
🥉
酷豪
1
#5
1
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付