IPFS分佈式網絡能對抗內容審查嗎?
Yes and No. IPFS 能提高內容對審查的免疫力,但不能完全避免審查的影響。然而在亂世中,每個人均應該學懂 P2P 技術的基礎,甚至養成生活的習慣,因為沒有人知道今天網絡上的自由何時會消失。
讓我們來溫習一下 IPFS 應用的基礎知識。
內容選址 vs 位置選址
圖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 地址。然而由於客戶端下載檔案時不用直接訪問檔案所在的伺服器地址,令審查方不知實際應該封禁哪個地址,增加審查的難度。
加泰隆尼亞的經驗
審查方一般擁有公權力和大量資源,不介意剝奪公眾的自由以維護統治結構,所以會粗暴地封禁每個 IPFS 的 http gateway 的 IP 地址或網域;用戶應對的方法只能被封一個便訪問另一個。如圖 2,只要 IPFS 的所有節點一天沒被完全封禁,用戶仍可以下載到檔案,當然用戶必須找到尚未被禁的 gateway 地址才行。
加泰隆尼亞政府在 2017 年曾經舉行獨立公投,過程中西班牙政府用盡方法阻止,包括封禁公投相關的資訊網站。加泰政府於是把整個網站搬到 IPFS 上,民眾可透過 gateway.ipfs.io 訪問。西班牙政府於翌日立即封禁了 gateway.ipfs.io,但民眾仍可透過其他節點如 ipfs.io 等訪問網站,甚至出現更多民間自發建立的節點保持資訊流通,扺抗西班牙政府的粗暴專權。
讓每個 Brave 民眾成為節點
審查機構可以封禁所有 IPFS 公共節點,但難以封禁所有民眾的 IP 地址,因為這將嚴重影響經濟活動。
目前 Brave browser 內建支援 IPFS 節點設定,能讓每個 Brave 用戶都成為節點幫忙分享檔案。實際操作上仍有不少細節需要克服,例如 Brave 雖能令用戶成為節點,但卻未能成為網關 (http gateway),當所有公共節點網關被封後,一般民眾仍是欠一個方便的方法下載被禁的檔案;但這是令人鼓舞的發展方向。
成功安裝 Brave browser 後,在設定搜尋 “IPFS” 關鍵字會搜到一堆相關設定。因為這功能感覺還不是很穩定,我會把 IPFS public gateway fallback 選項打開,讓 local IPFS node 無故壞掉時自動改以公共節點訪問檔案。另外我也會打開 IPFS Companion 選項,打開後 Brave 會請求安裝外掛,提供一個較方便的用戶介面控制節點狀態。
啓動節點後,可在瀏覽器網址欄輸入 brave://ipfs ,若設定成功便能看到以下資訊,包括 API 和 gateway 本地址址、已儲存的 ipfs object 量(每個 object 好像是 256 bytes,但乘積的值不對,有待進一步理清),已連接的 peers 量等等資料。如果節點啟動失敗,這頁會空空如也,每次我遇到這問題先是用 IPFS companion 重啟節點,再不行便只懂重啟電腦解決。
當成功啟動節點後,可試試在 Brave 網址欄直接訪問本地的節點下載一個 IPFS 上的檔案,格式是 ipfs://<hash>,例如:
ipfs://Qma8gELJHYoJYxhr8JQmmmckSP8mPa34Wrj7NwivGLfkKc
有別於訪問 IPFS 公共節點如 ipfs.io,客戶端訪問本機節點時會由本機節點直接在 IPFS 網絡中搜尋和下載檔案,用戶不用知道任何公共節點網關的地址。若放在上文提及過的加泰隆尼亞的例子中應用,民眾在西班牙政府封禁了 gateway.ipfs.io 後,只需訪問本機節點便可繼續瀏覽網站了。
另外,每個 IPFS 節點下載過一個檔案後,會把檔案暫存在節點中一段時間。我試過在下載過一次 Qma8gELJHYoJYxhr8JQmmmckSP8mPa34Wrj7NwivGLfkKc 這檔案後,關掉 WIFI 網絡連結再重載一次 ipfs://Qma8gELJHYoJYxhr8JQmmmckSP8mPa34Wrj7NwivGLfkKc ,本機節點仍能成功回應,代表檔案已暫存了在本機。這點所以重要是因為若民眾都用自己節點下載,變相在各節點中都留下了一個內容備份,令資料的儲存更分散。
把重要史料永遠「釘」在網絡上
然而 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 發佈老大哥不喜歡的資訊,必需配合匿名技術,好好保護自己的私隱。當然,最穩妥還是別在老大的地盤做「犯法」的事咯,切勿親身試法,你懂的。