技術 · 系統架構

應用、節點、節點網路

Gather 由兩部分組成:裝在手機上的應用,和彼此對等連線的節點。應用只連一個入口節點;節點之間組成網路,負責轉送和暫存密文。

應用

  • 以 Flutter 撰寫,同一套程式碼同時支援 Android 與 iOS。
  • 所有加密與解密都在應用內完成,金鑰保存在系統安全儲存中。
  • 群組、黑名單、收藏、標籤等使用者資料只保存在應用本機或加密備份裡,不交給節點。
  • 支援品牌化建置:同一套程式碼可以產生不同品牌的應用。

應用如何連到節點

  • 透過加密的 WebSocket(TLS)連線入口節點。
  • 應用不依賴 TLS 憑證來辨認節點:它向節點傳送隨機數,節點用自己的 Ed25519 金鑰簽章,應用核對公鑰能推出節點 ID,並核對營運方歸屬證與發布清單。
  • 應用內建多個入口;目前節點無法使用時自動換到下一台。

節點之間

  • go-libp2p 與 Kademlia DHT,連線用 TLS 或 Noise 加密,支援 NAT 偵測、打洞與中繼。
  • 自研 gossip 在節點之間傳播心跳與發布清單,傳播範圍有上限。
  • 節點發現做了分片,避免全網都去詢問同一台節點。
  • 程式碼裡不內建任何種子節點,種子只從設定讀取。

維運

  • 營運方可以在自己的節點之間做私有彙總:只回報白名單裡的計數與列舉值,不帶地址或 IP,報告要驗簽章、防重放。
  • 節點二進位檔採用可重現建置流程,並附軟體物料清單(SBOM)。