在 Tor 中,當多個中繼點擁有相同的運營者時,它們應宣告自己是同一個「family」的成員。
在 Tor 目前的設計中,若要將中繼點設定為某個 family 的成員,每個中繼點都需要在其設定中列出 family 的其他所有成員,並將該清單發布給客戶端。
這些清單維護起來可能令人頭疼,下載時也需要耗費大量資源。
Happy Families 設計是 Tor 0.4.9.2-alpha 中的一項新功能,它將(最終)提供一種更簡單的方法來配置中繼系列,並且在客戶端獲取網路目錄資訊時也將節省大量流量。
(很遺憾,在過渡到 happy families 的期間,這將產生 額外 的工作量。我們認為從長遠來看是值得的。)
如果您是需要在 Tor 網路上配置系列的中繼運營商,您應該閱讀本文。
基本思想
在 Happy Families 設計中,每個中繼點 family 都由所有成員共享的秘密 family 簽署金鑰來識別。
Family 成員使用此金鑰簽署憑證,以證明其屬於該 family。
要成為 Alpha 測試者,您需要做:
- 為您的 family 產生一個金鑰。
- 將該金鑰複製到每個中繼點。
- 設定您的中繼點使用該金鑰。
更詳細
產生家庭密鑰
首先,您需要等待所有中繼都執行 0.4.9.2-alpha 或更高版本。
然後,若要產生 family 金鑰,請執行:
tor --keygen-family MyKey
這將建立一個名為 MyKey.secret_family_key 的檔案;它也會將類似以下的結果輸出到標準輸出:
# Generated MyKey.secret_family_key
FamilyId wweKJrJxUDs1EdtFFHCDtvVgTKftOC/crUl1mYJv830
儲存該 FamilyID 行;您之後會用到它!
(請勿使用此範例中的值——那不是您的 family ID。)
設定您的中繼
將 MyKey.secret_family_key 檔案(或您命名的任何名稱)複製到每個中繼點的 KeyDir 中。
(預設情況下,這是 keys 子目錄,位於您的 DataDir 之下。)
檔案名稱必須以 .secret_family_key 結尾。
然後,新增 FamilyId 設定行至您的 torrc。
若您的中繼點正在運行,您需要告知其重新載入設定(通常使用 SIGHUP。)
有效嗎?
若操作正確,您應能在中繼點的描述符中看到 family-cert 項目,看起來如下:
family-cert
-----BEGIN FAMILY CERT-----
AQwAB2K5AXJrxBpgTXDIvHKFShmCCD2yLnDaBf2lWaInBhR2R56HAQAgBAAjv69J
jy+7BSRh1GnGF7Zxm+AMXvJYWkUCWY+5KU8Bymkz5N4D/QNs4K6bOjLokAwD4raT
J34t8b7uxHXuFS2F2VN5Ygr3//vGsB00jideQ5Cj9aX+BLSZ2FjC6GK2XAo=
-----END FAMILY CERT-----
一旦足夠的目錄權限運行 0.4.9.2-alpha 或更高版本,它們將在中繼的微描述符中包含相應的條目,該條目將類似於:
family-ids ed25519:wweKJrJxUDs1EdtFFHCDtvVgTKftOC/crUl1mYJv830
注意:您仍然需要配置 MyFamily!
遺憾的是,您仍需要像以前一樣設定 MyFamily 選項:在所有客戶端都支援 Happy Families 之前,它們仍需要查看舊版 family 清單。
我們將盡力使這個過渡期盡可能短。
一旦不再需要包含 MyFamily,我們將發布公告。
附加資訊:如何過渡家庭鑰匙
若您的某個中繼點遭到入侵,或您不小心洩露了 family 金鑰,您需要更換金鑰。
(若不這樣做,對手的中繼點可能會偽稱是您 family 的成員。)
為此,我們建議採用逐步的流程。
- 按照上述方式產生新的 family 金鑰。
給它一個與舊金鑰不同的檔案名稱。
- 將新的 family 金鑰複製到您的每個中繼點,不要替換舊的 family 金鑰。
- 在所有中繼點的設定中新增新的
FamilyID 行,不要移除舊的。
此時,您的中繼點將都是 兩個 family 的成員。
- 等待幾天,讓新的 family 資訊有時間傳播。
- 從您的中繼點設定中移除舊的
FamilyID 行。
可選操作:同時移除舊的 family 金鑰。
附加資訊:此次過渡的預期節省
我們計劃同時移除 MyFamily 和舊版 TAP onion 金鑰。
當我們這樣做時,我們估計最終網路的微描述符將是其當前大小的 10% 左右。
(遺憾的是,這可能不是永久性的節省:當我們過渡到後量子密碼學時,我們可能需要再次增大微描述符的大小。但至少這次變更將為此預留空間。)