第三章 系統設計
3.5 系統運作
3.5.1 Onion Server
有三個主要部份,分別為與 Onion Router 通訊、與 Host 通訊以及檢查 Onion Router 是否 timeout。會使用多個 thread 來完成這三個部份,其中與 Onion Router 通訊的部份,對於每一個Onion Router 都會產生相對應的 thread 來服務。
(1) 與 Onion Router 通訊:
所有的Onion Router 都必須向 Onion Server 註冊,因此 Onion Server 知道
所有Onion Router 的資訊(包含 Onion Router 的 IP address、secret key 和對應 的key ID),如圖 3.9。每一個 Onion Router 的 Key ID 都會有 216個,分別對 應65536 把不同的 secret key,其目的是要讓每個 Host 對於同一個 Onion Router 都拿到不同的secret key,因此每一個 Onion Router 可以服務 65536 個 Host。
並且每一把secret key 都有時間性,當 Host 的封包一段時間沒有經過某台 Onion Router 時,該把 secret key 便會改變。Onion Router 的資訊必須使用與 Onion Server 共有的 Secret key 加密。
當完成註冊的Onion Router 每隔一段時間必須發送 hello message 給 Onion Server,如果 Onion Server 一段時間沒有收到 hello message,表示 Onion Router 已不存在,Onion Server 能夠立即更新。hello message 包含 secret key 的更新,如圖3.9。
圖 3.9 Onion Router 與 Onion Server 的通訊
(2) 與 Host 通訊:
秘密通訊是由多群 Onion Server-Onion Routers 所組成,每一群 Onion Server-Onion Routers 會有一台 Onion Server 管理多個 Onion Routers。
當Host 要作秘密通訊時,可以有三種選擇,第一種必須要向多個 Onion Servers 詢問有哪些 Onion Routers 可以使用,如圖 3.10,目的是要分散風險,
避免某一台Onion Server 被入侵而得知那台 Onion Server 所管轄的所有 Onion Router 的資訊,因此 Host 在選擇路徑時,不可以全部都選同一 Onion
Server-Onion Routers 群內的 Onion Router。每台 Onion Server 回報現在已存 在的一部分Onion Routers 的資訊(包含 Onion Router 的 IP address、secret key 和對應的key ID)給 Host。每一個 Host 所得到的 Onion Router 資訊可能都不
一樣,以避免每一個Host 都使用相同的 Onion Router 與相同的 secret key。
此Onion Router 資訊必須使用 Onion Server 與 Host 共有的 secret key 來加密。
當Host 所擁有的 Onion Router 有變動時,Onion Server 會主動告知 Host 最新 的Onion Router 資訊,因此兩端 Host 在通訊時,並不會因為 Onion Router 的 變動而造成斷線。
第二種必須要向一個Onion Servers 提出詢問,且必須知道除了目的端之 外的其他Host,可以是一台或多台,如圖 3.11。當 Host A 要與 Host C 通訊 時,Host A 選擇 Host B 當作中繼站。封包抵達中繼站 Host B 時,Host B 再 選擇它所在群組的Onion Router,封包經過 Host B 群組的 Onion Router 之後 會抵達目的端Host C,因此可以透過中繼站來跨越不同群組。
第三種只要向一個Onion Servers 提出詢問,傳送的封包只會在單一群組 的Onion Router 之間行走,之後直接抵達目的端。
圖 3.10 向多台 Onion Server 取得 Onion Router 的資訊
圖 3.11 Host 使用中繼站的秘密通訊
可藉由Onion Server-Onion Routers 群數目的增加,讓秘密通訊的 Host 一 直增加。因此可讓無限多個Host 加入秘密通訊系統。
(3) 檢查 Onion Router 是否 timeout:
當 Onion Server 發現某一台 Onion Router 已經 timeout,便會通知擁有此 Onion Router 的 Host。可讓 Host 選擇路徑時,不會選到此台 Onion Router。