區塊鏈 Blockchain – IPFS 分散式檔案系統

/ 0 評 / 0

開始學習區塊鏈時會想到一個問題:區塊鏈是一個去中心化的網絡,所有的數據都寫上鏈上,那 DAPP 的所用到的文件要存放到哪裡呢,該不會也寫到鏈上吧?如果放在傳統的中心化伺服器上,數據有機會被惡意修改,即使使用一些校驗機制保障數據正確,如果數據被刪除了,那 DAPP 是否無法使用呢?又或者在數據傳輸的過程中,前端內容有機會被DNS污染,這也與去中心化背道而馳,到底要存儲在哪呢?

區塊鏈上每個區塊的區塊空間非常細小而且相當有限,想像一下,如果將一張正常圖片的全部數據分拆寫入區塊鏈主鏈上,暫時姑且可以說是沒有問題,但如果大家將現實生活中使用的系統所有文件統統放上主鏈上,這將是何等浪費空間和嚴重影響出塊速度?而且當文件也必定會經常有所修改,而根據區塊鏈的特性是不能篡改,所以每次那怕有少許改動,整個文件又要再次寫入鏈上,實在是不科學和不現實。

而目前傳統主流中心化的系統中,靜態文件通常由伺服器或伺服器集群負責提供存儲。假設一個最基本的靜態網站,前端文件中會有網頁源文件, CSS, JS, 圖片, 影片等多種靜態文件,而這些文件通常都是集中儲存在互聯網公司的伺服器上(當然,目前也有很多CDN啦),當大家打開這個網站時,都會得到相同的文件。但如果負責運行這個靜態網站的伺服器發生錯誤、被駭客攻擊、入侵修改文件等情況而導致網站不能正常運作時,那麼大家也無法訪問這個網站了,更也不用說其他大部份的帶有數據庫的動態網站。

個人認為在區塊鏈的世界中真正的 DAPP 應該是完整去中心化的,不論是DAPP的數據或者檔案。就如早前大熱的加密貓,原則上來說不是一個真正的 DAPP,因為整個加密貓的網頁和一些網頁素材都存儲在中心化的伺服器上。目前區塊鏈就好比傳統的分散式數據庫,而為了構成一個真正意義上的 DAPP,也應該使用分散式檔案系統存儲 DAPP 的相關數據。

IPFS

IPFS(InterPlanetary File System,星際檔案系統)是一個旨在建立持久且分散式儲存和共用檔案的網路傳輸協議,是一種內容可尋址的對等超媒體分發協議(P2P),IPFS網路中的節點將構成一個分散式檔案系統。

請注意,IPFS並不是一種區塊鏈它的設計宗旨是與區塊鏈結合協同運作。儘管 IPFS 使用與區塊鏈中 Merkle Tree 類似的架構元素,但 IPFS 並不是一種基於區塊鏈的技術。

可以這樣理解,使用 IPFS 時,整個互聯網可以被當作成一個種子 Torrent 文件(有用過 BitTorrent, BT的朋友應該相當熟悉),而任何檔案、影片等資料都是存在於同一個 BT 群組並且透過同一個 Git 倉庫存取,同時共享給全互聯網上的用戶。當需要到某個檔案時,IPFS 將會像BT那樣為你尋找最接近的用戶取得檔案。

那你又可能會問,那和BT有什麼分別,直接用BT不就可以了嗎?

BT中每個種子文件背後都是一組獨立的用戶,即使是同一段影片,只要該種子內另外其他檔案那怕有少許不一樣,那就會產生兩個種子,而彼此間不能交叉互通共享,而且BT 並不支持所有的數據類型,更不關心在網絡上重複的數據,因此會產生很多冗餘數據,影響網絡整體的效率。

IPFS 在技術上大量參考了 Git 版本管理控制 及 BitTorrent,因此,在 IPFS 上,假設AB先後上載同一個檔案,而在 IPFS 上儲存數據時則只會有一份,文件是分塊(Block)存儲的,擁有相同HashBlock,只會存儲一次。

IPFS 檔案的存儲和讀取的原理與 BitTorrent 類似。IPFS 採用的索引結構是DHTDistributed Hash Table, 分散式雜湊表),與BT相同,而數據結構方面則是 Merkle DAGMerkle Directed Acyclic Graph, 有向無環圖)。

Merkle DAG 具有以下特點:

1. 內容可尋址:所有內容都是被多重 Hash 校驗和作為整個網絡上唯一識別的。

2. 無法篡改:由於所有內容都是經過多重 Hash 校驗及被用作驗證,如果文件有任何不一樣或者被修改,就馬上能夠被識別出來;

3. 刪除重複數據:由於根據內容進行 Hash,所以能夠識別出網絡上是次只存在一份,也能確保只存儲一次;

以下是一段 IPFS 簡單的介紹影片,我覺得介紹相當淺白易懂

歷史

2014年5月,IPFS協議由墨西哥人 Juan Benet 所設計,他利用比特幣區塊鏈技術的特性和網路基礎設施的優勢來實現永久存儲不可篡改的資料,移除網路上的重複檔案,以及取得儲存節點的位址資訊以用於搜尋網路中的檔案。目標是讓互聯網速度更快、更安全、更開放,讓全世界的使用者都能夠從 IPFS網絡上對等地存儲及提取檔案。

以下是 IPFS 官方的介紹影片

運作流程

引用一個例子說明 IPFS 的運作流程

  1. John 想上傳一個 PDF 檔案到 IPFS
  2. 他將他的 PDF 檔案放在他的工作目錄下
  3. 他使用 IPFS 的命令添加這個檔案,同時會得到了一個以 Qm 開頭的 Hash值
  4. 他的檔案已經在 IPFS 網絡上並可以被訪問了

接下來,John 想將這個檔案分享給他的同事 Mary,他只需要將第3步得到的 Hash 值告訴 Mary ,Mary 隨即透過這個 Hash 值,從 IPFS 下載這個 PDF 檔案。

以上這個就是簡單的 IPFS 存儲和讀取過程。

每上傳一個檔案到 IPFS 網絡上,系統將會為檔案分配一個永久不可改變的地址(一個與內容關聯的唯一加密Hash值),IPFS會將這個地址寫在不可篡改的區塊鏈主鏈上。IPFS 提供可公開訪問的數據庫,而區塊鏈則主鏈被設計為負責驗證的部份。對於重複數據方面的處理,IPFS 網絡將會自動刪除重複數據並追蹤數據的歷史版本記錄,而根據檔案地址和歷史版本記錄,可以有效避免數據被誤刪除。

“If you add it to IPFS and take that hash and put it in a block, you can then use IPFS to browse the transaction and browse the file directly on the web, Since distributed ledgers can be put on top of IPFS for application building, he calls the two systems a “great marriage”.” --- IPFS Inventor, Juan Benet

簡單來說,IPFS 以負責以P2P的方式存儲檔案本身及其歷史版本記錄,同時給出與內容對應的唯一地址,而將這些地址寫在區塊鏈上,這樣就既能確保檔案的完整性,同時又能存儲大量檔案,節省區塊鏈主鏈的網絡帶寬。

安全性

一般而言,直接上載到 IPFS 網絡上的檔案,只要知道這個地址或者是這個檔案的hash值的使用者都能夠下載。

慢著!這不是很有問題嗎?如果是一些比較敏感的資料或檔案,其他人都能夠正常訪問下載,那還有安全性可言嗎?所以我們在將一些敏感檔案上載至 IPFS 時,就必須預先對這些檔案進行加密處理。只要透過一些現成的加解密工具,就能夠很好地解決檔案赤裸地曝露的問題,同時又能利用到 IPFS的特性

然而,我們可以使用非對稱加密技術對檔案預先進行加密,然後才放到 IPFS 上,我們可以使用檔案接收方的公鑰加密檔案,然後接收方從 IPFS 網絡上下載了這個檔案,再用自己的私鑰解密。就算檔案被其他人下載下來,沒有接收方的私鑰,也無法打開。

實際做法又是何做呢?我們不妨再引用上面的例子再作修改,加入加密和解密的過程:

  1. John 想上傳一個 PDF 檔案到 IPFS,但只想讓 Mary 訪問
  2. 他將他的 PDF 檔案放在他的工作目錄下並使用 Mary 的公鑰進行加密
  3. 他使用 IPFS 的命令添加這個加密檔案,同時會得到了一個以 Qm 開頭的 Hash值
  4. 他的檔案已經在 IPFS 網絡上並可以被訪問了
  5. Mary 下載這個檔案,透過相應的私鑰解密,就可以正常訪問這個檔案
  6. 然而,其他知道這個hash值的人下載後,因為沒有私鑰,所以無法對檔案解密,也就無法正常訪問了

優缺點

優點

  1. 存儲安全性高:以往存儲在中心化系統,數據有機會被監控、因管理不善而外洩、甚至被黑客惡意修改;而 IPFS 可以在網絡上會存在多個副本區塊,並透過檔案內容的 hash 作為驗證,避免了資料被惡意篡改,存儲不穩定的情況,同時可以利用加密工具作為解決檔案的安全問題;
  2. 存儲成本分散:以往存儲在中心化系統,數據都被集中存儲,由單一互聯網公司內的伺服器硬盤負責存儲數據,隨著互聯網的爆炸式發展,存儲成本集中,另外當去到瓶頸位置時,舊數據有機會被刪除或歸檔。IPFS 則將存儲分散到網絡上所有節點,共同構成一個龐大的存儲空間;
  3. 數據穩定性高:當中心化系統出現緊急情況,集中的數據有機會出現丟失的情況,同時未能被找回。數月前,國內著名的雲計算供應商騰訊云亦曾經出現類似情況;IPFS 則將風險分散至網絡上所有節點,數據穩定性長遠而言相對較穩定;
  4. 節省網絡頻寬和成本:當所有使用者都向中心化系統讀取數據時,由於系統的網絡頻寬有限而且昂貴,所以有機會出現網絡擠塞;IPFS 則可以利用網絡上所有節點的網絡頻寬資源,同時確保能從最接近的節點讀取數據,節省網絡頻寬和資源的使用率;

缺點

  1. 檔案不可撤回,不可篡改:這個是優點也是缺點,對於目前很多使用場景下,檔案若不能被修改,可能也是不太適合;
  2. 大型檔案風險:由於 IPFS 是將檔案分拆被存放在眾多小塊中,如果當其中一個小塊不能使用,整個檔案也將失效;

激勵機制

IPFS 網絡依賴激勵機制去維護整個網絡,IPFS 網絡內所有的節點都是由很多不同獨立的節點組成,要讓節點心甘情願地貢獻自己的存儲空間和網絡頻寬,這就需要一套有效合理的激勵機制,如同比特幣、以太坊等區塊鏈一樣,存儲數據的節點就相當於區塊鏈網絡中的礦工,提供存儲數據也就能夠獲得相應的獎勵。而 FileCoin 則是一個基於 IPFS 的去中心存儲項目,它是一種運行在 IPFS 內的激勵機制,IPFS是一個P2P的網絡,而眾所周知,P2P內節點的數量越多,下載速度就越快,所以透過FileCoin這種激勵機制,能夠有效地保障 IPFS 網絡的存儲空間正常運作。

總結

IPFS 實現了真正的分散式檔案存儲,對於當前區塊鏈的缺少一個檔案存儲方面的解決方案,兩者可就如 IPFS 作者所言,是一場"完美的婚姻"。真正的DAPP除了數據是 Decentralization 外,DAPP的其他檔案也應同樣地是 Decentralization,IPFS將會很有機會成為未來區塊鏈上,所有項目的存儲配搭。IPFS 結合了比特幣區塊鏈技術的不可篡改特性、大量參考Git和BitTorrent,構建整個分散式網路基礎設施來實現永久存儲不可篡改的資料,要實現讓互聯網速度更快、更安全、更開放的目標,並非不可能。而且在目前區塊鏈世界中,主流都是在討論如何解決上層的交易速度,給出很多的解決方案,但個人認為,要實現真正去中心化的DAPP,一個分散式檔案系統同樣重要,至少目前來說 IPFS 能夠基本滿足要求。

參考文章

Learn to securely share files on the blockchain with IPFS!

【百科】浅谈IPFSFilecoin

IPFS——区块链的信息传输方式

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *