黃牛山人
黃牛山人

分散式出版實踐者 網誌:bchai.cc

IPFS分佈式網絡能對抗內容審查嗎?

(编辑过)

Yes and No. IPFS 能提高內容對審查的免疫力,但不能完全避免審查的影響。然而在亂世中,每個人均應該學懂 P2P 技術的基礎,甚至養成生活的習慣,因為沒有人知道今天網絡上的自由何時會消失。

讓我們來溫習一下 IPFS 應用的基礎知識。

內容選址 vs 位置選址

圖 1: IPFS 的內容選址

圖1 綠色的立方體代表 IPFS 節點,負責儲存和搜尋檔案。在 IPFS 系統中,每個檔案都擁有一個獨一無異的「哈希」(hash,或內容指紋)字串,雖然格式很長很複雜不是人類能看得懂,但每個節點憑著這 hash 字串便能找到所代表的檔案在 IPFS 網絡上的位置。

hash 字串的例子: Qma8gELJHYoJYxhr8JQmmmckSP8mPa34Wrj7NwivGLfkKc

如上圖所示,檔案儲存在節點 A,客戶端卻只需向節點 B 查詢檔案的 hash,節點 B 便會尋找到檔案的網絡位置,並以適當的路徑下載檔案提供給客戶端。在訪問的過程中客戶端無需知道節點 A 的資料。

我們可以瀏覽器訪問 IPFS 節點的 http gateway,即以 https 這種一般瀏覽器支援的協議在網絡中下載一個 IPFS 中的檔案,格式是

https://<ipfs gateway 網址>/ipfs/<file hash>

隨便在 Google 也可搜尋到很多有提供 http gateway 的 IPFS 公共節點。大家可試試用瀏覽器訪問一下以下例子:

https://10.via0.com/ipfs/Qma8gELJHYoJYxhr8JQmmmckSP8mPa34Wrj7NwivGLfkKc

你也可試試把上面例子中的 “10.via0.com” 改成其他的 http gateway,如 ipfs.io,ipfs.fleek.co 等等,只要 gateway 正常運作便能下載檔案,客戶端完全不用知道檔案實際的位置在哪裡。這種客戶端只需知道內容指紋的 hash,不用理會檔案實際網絡位置的選址方式,稱為「內容選址」(content addressing),對照傳統的「位置選址」(location addressing) 訪問方式。

審查方封殺內容其中一個最普遍的方法是封禁內容所在的位址,例如域名 (domain) 或 IP 地址。然而由於客戶端下載檔案時不用直接訪問檔案所在的伺服器地址,令審查方不知實際應該封禁哪個地址,增加審查的難度。


加泰隆尼亞的經驗

圖 2: 審查機構封禁節點地址的手段

審查方一般擁有公權力和大量資源,不介意剝奪公眾的自由以維護統治結構,所以會粗暴地封禁每個 IPFS 的 http gateway 的 IP 地址或網域;用戶應對的方法只能被封一個便訪問另一個。如圖 2,只要 IPFS 的所有節點一天沒被完全封禁,用戶仍可以下載到檔案,當然用戶必須找到尚未被禁的 gateway 地址才行。

加泰隆尼亞政府在 2017 年曾經舉行獨立公投,過程中西班牙政府用盡方法阻止,包括封禁公投相關的資訊網站。加泰政府於是把整個網站搬到 IPFS 上,民眾可透過 gateway.ipfs.io 訪問。西班牙政府於翌日立即封禁了 gateway.ipfs.io,但民眾仍可透過其他節點如 ipfs.io 等訪問網站,甚至出現更多民間自發建立的節點保持資訊流通,扺抗西班牙政府的粗暴專權。

加泰隆尼亞總理在 twitter 發佈公投網站的 IPFS 版本訊息

讓每個 Brave 民眾成為節點

審查機構可以封禁所有 IPFS 公共節點,但難以封禁所有民眾的 IP 地址,因為這將嚴重影響經濟活動。

目前 Brave browser 內建支援 IPFS 節點設定,能讓每個 Brave 用戶都成為節點幫忙分享檔案。實際操作上仍有不少細節需要克服,例如 Brave 雖能令用戶成為節點,但卻未能成為網關 (http gateway),當所有公共節點網關被封後,一般民眾仍是欠一個方便的方法下載被禁的檔案;但這是令人鼓舞的發展方向。

讓每個客戶端成為 IPFS 節點

成功安裝 Brave browser 後,在設定搜尋 “IPFS” 關鍵字會搜到一堆相關設定。因為這功能感覺還不是很穩定,我會把 IPFS public gateway fallback 選項打開,讓 local IPFS node 無故壞掉時自動改以公共節點訪問檔案。另外我也會打開 IPFS Companion 選項,打開後 Brave 會請求安裝外掛,提供一個較方便的用戶介面控制節點狀態。

Brave 有關 IPFS 的設定

啓動節點後,可在瀏覽器網址欄輸入 brave://ipfs ,若設定成功便能看到以下資訊,包括 API 和 gateway 本地址址、已儲存的 ipfs object 量(每個 object 好像是 256 bytes,但乘積的值不對,有待進一步理清),已連接的 peers 量等等資料。如果節點啟動失敗,這頁會空空如也,每次我遇到這問題先是用 IPFS companion 重啟節點,再不行便只懂重啟電腦解決。

在 Brave 網址欄輸入 brave://ipfs

當成功啟動節點後,可試試在 Brave 網址欄直接訪問本地的節點下載一個 IPFS 上的檔案,格式是 ipfs://<hash>,例如:

ipfs://Qma8gELJHYoJYxhr8JQmmmckSP8mPa34Wrj7NwivGLfkKc

有別於訪問 IPFS 公共節點如 ipfs.io,客戶端訪問本機節點時會由本機節點直接在 IPFS 網絡中搜尋和下載檔案,用戶不用知道任何公共節點網關的地址。若放在上文提及過的加泰隆尼亞的例子中應用,民眾在西班牙政府封禁了 gateway.ipfs.io 後,只需訪問本機節點便可繼續瀏覽網站了。

另外,每個 IPFS 節點下載過一個檔案後,會把檔案暫存在節點中一段時間。我試過在下載過一次 Qma8gELJHYoJYxhr8JQmmmckSP8mPa34Wrj7NwivGLfkKc 這檔案後,關掉 WIFI 網絡連結再重載一次 ipfs://Qma8gELJHYoJYxhr8JQmmmckSP8mPa34Wrj7NwivGLfkKc ,本機節點仍能成功回應,代表檔案已暫存了在本機。這點所以重要是因為若民眾都用自己節點下載,變相在各節點中都留下了一個內容備份,令資料的儲存更分散。


把重要史料永遠「釘」在網絡上

Pinata – IPFS pinning service

然而 IPFS 節點在分享檔案時留下的暫存備份不是永久的,在空間不夠時便會自動刪除備份釋放空間。若想檔案長久地留存在節點上,需要指示節點 “pin” 著某筆資料。反過來說,若在整個 IPFS 網絡上沒有人 pin 著某個檔案,則在一段時間後該檔案將不再存在網絡上。

介紹一個簡單易用,而且免費入門的 IPFS pinning 服務網站 Pinata,操作有如上傳檔案至一般的網盤,每個上傳了的檔案會有一個獨特的 hash,而且會 pin 了在 IPFS 中。上文用作範例的圖片 Qma8gELJHYoJYxhr8JQmmmckSP8mPa34Wrj7NwivGLfkKc 便是 pin 了在 Pinata 的。

人類歷史中,擁有公權力的機構不斷透過改寫歷史,剝奪出版自由以禁絕異見,達至控制過去以掌握現在的目的。然而今天公民社會可在網絡重奪歷史的話語權,把公民共享的記憶寫在網絡上,例如 pin 在 IPFS 使其不朽。例如 2019 有關香港 「721 元朗事件」的調查節目,市民知道政府遲早要把這不利自己的資訊毁屍滅跡,都自發「手動 backup」到自己的私人儲存空間,但資料藏在家中的硬碟是意義不大的。我一直希望有個方案可以方便地讓公民把重要的記憶「釘」在 IPFS 上,集大眾的力量於公共空間保存史料。

參考 Pinata 的收費,每 pin 1 GB 的資料大約只需每月港幣 1.2 元,即 1000 位市民每人花 1 元便能把該集調查節目釘在 IPFS 上幾十年。怎樣,你願意付出這微小的力量嗎?


無法阻止粗暴和無恥

IPFS 雖能有效提高資料在網絡上的可用性,卻沒有任何隱匿使用者的保護措施,政權因此可以無恥地宣稱發佈資訊的人「犯法」,罪名可以是任意安上的「煽動分裂国家」之類的,再以粗暴的手段監禁道出真相的人。在加泰隆尼亞的公投事件中,西班牙政府便拘捕了不少發佈公投資訊網站的公民。

因此,利用 IPFS 發佈老大哥不喜歡的資訊,必需配合匿名技術,好好保護自己的私隱。當然,最穩妥還是別在老大的地盤做「犯法」的事咯,切勿親身試法,你懂的。

CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…
加载中…

发布评论