透過下面這個簡單的圖,你可以瞭解到IPFS的工作流。
1. John想要將一份PDF檔案上傳到IPFS中
2. 他把PDF放到他的工作目錄中
3. 他告訴IPFS,他想要新增這份檔案到IPFS裡,它會生成檔案的雜湊值 (因為雜湊值總是以Qm開頭,所以你可以告訴IPFS)
4.他的檔案現在就可以在IPFS網路中得到了
現在假設John想要透過IPFS與他的同事Mary分享這個檔案。 他只需要告訴Mary從上面第三步中得到的雜湊值。 然後,Mary在反向操作1-4的步驟。 Mary所需要做的就是從IPFS呼叫雜湊,並獲取PDF檔案的副本。好帥氣。
安全漏洞
然而,這有一個顯而易見的安全漏洞。 任何人得到了PDF檔案的雜湊值,那就可以隨意的在IPFS中獲取檔案副本。 因此,敏感檔案不合適存放在IPFS的生態中。 在我們不做任何處理的情況下, 分享類似於健康記錄或者圖片之類的敏感檔案是不合適的。
應用非對稱加密
幸運的是,我們有一次性的工具,可以很好的與IPFS配套使用, 在檔案上傳到IPFS之前就得到保護。 非對稱加密允許我們透過一個只有收件人才有的公鑰來加密這份檔案, 所以也就只有收件人才能從IPFS取回檔案並解密。 如果一個惡意的人員從IPFS中獲取到檔案,也不能做什麼,因為他沒辦法解密。本教程中,我們將使用GPG非對稱加密演算法。讓我們修改下帶有加密解密的流程圖,如下:
1. John上傳一份檔案到IPFS,但是隻希望Mary可以檢視到
2. 他使用了Mary提供的公鑰將檔案在本地目錄中進行加密
3. 他告訴IPFS,他想要新增這份加密檔案到IPFS,同時生成了加密檔案的雜湊
4. 他加密過的檔案已經存放到IPFS網路中了
5. Mary可以獲取到檔案,並因為她擁有生成公鑰的私鑰可以用來解密這份檔案
6. 其他惡意人員因為沒有Mary的私鑰不能夠解密這份檔案
區塊鏈
那麼區塊鏈怎麼適合呢?在我們繼續之前,我們建議你先閱讀下我們之前的文章: ”使用少於200行的GO程式碼編寫你自己的區塊鏈“。
如下的圖非常重要:
請注意BPM部分。這種簡單的文字記錄是目前所有區塊鏈都可以處理的。 也是為什麼加密貨幣很適合區塊鏈的原因。你只需要記錄交易的傳送方,接收方和開始交易的比特幣(包括以太坊等等)數量。 因為所有這些雜湊值都需要計算和驗證以保持鏈的完整性,所以區塊鏈很可怕,在將檔案或者大量資料儲存到塊中的時候將會變得非常可怕。
這也是為什麼IPFS和區塊鏈相結合的時候就會變得強大的原因。 替換掉前面的BPM,我們只儲存IPFS檔案的雜湊值!真的是太cool了。 我們只在區塊鏈中儲存簡單的資料, 同時我們享受了IPFS提供的檔案儲存和分散式點對點的特性。真是兩全其美。由於我們同時使用非對稱加密的方式(GPG)增加了安全性, 因此,我們在區塊鏈中“儲存”、加密、共享大量資料和檔案的方式將會變得非常優雅。
一個現實世界的應用就是在每一個區塊中儲存我們的健康記錄和實驗結果。 當我們獲得新的實驗結果時,我們只需要建立一個新塊, 它的內容指向IPFS中的加密影象或者實驗結果的PDF檔案。
瞭解的已經足夠多。我們開始展示如何做的吧!
接下來的教程中我將會執行如下步驟:
· 設定GPG
· 設定IPFS
· 透過別人的公鑰來加密檔案
· 上傳檔案到IPFS
· 在另外一臺機器(或者虛擬機器)上下載檔案,並且使用確定的私鑰進行解密並檢視內容
你需要如下東西
· 另外一臺計算機或者一個虛擬機器。 另外一臺計算機模擬另外一個你需要透過安全方式進行分享檔案的人
· 一個測試檔案。我們建議下載這份檔案, 這是一份PDF版本的實驗報告。 這是一個很好又切合實際的例子,因為我們是一家醫療保健公司,我們需要保護敏感的個人資訊。把這份檔案放到你的本地資料夾中
好了!我們開始吧!
建立GPG
首先讓我們在兩臺電腦上都下載GPG.
挑選與你相同的作業系統,按照安裝文章中的說明進行操作。 如果你是Mac,假設你安裝了Homebrew, 最簡單的方法就是開啟你終端執行brew install gnupg命令。
在每一臺電腦安裝完GPG之後生成一個key。使用如下步驟:
gpg --gen-key 根據提示選擇預設的方式。確保你的使用者名稱和電子郵箱選擇的密碼都已經安全的記錄或者儲存下來了。
(譯者注:我自己試驗了下,如下圖)
到這個階段,gpg會要求你做一些隨機的事情來生成加密使用的熵。 我只是輸入一堆隨機字元,直到生成完成。
當第二臺電腦上的key也建立完成後,我們需要將生成的key新增到第一臺電腦的Keyring(譯者注:秘鑰環)中,以便我們可以加密之後第二臺電腦可以解密的檔案。
使用你在建立key的時候選擇的電子郵件地址將第二臺電腦上public key匯出到一個二進位制形式檔案中。
gpg --export --armor -email > pubkey.asc
將檔案pubkey.asc移動到你的第一臺電腦裡。並確定是安全的轉移。 例如使用隨身碟會比使用郵件更好。
當檔案pubkey.asc遷移到你的本地檔案目錄後,使用如下方法匯入到秘鑰環中:
gpg --import pubkey.asc
使用gpg --list-kyes的命令來檢查匯入是否正確。 我的第二臺電腦就叫做 Cory Heath,看起來是正確的:
好極了!我們已經完成GPG的配置,現在我們去配置IPFS。
IPFS
根據你的系統選擇合適的文件在你準備使用的兩臺電腦上進行安裝IPFS。當安裝完成,使用命令ipfs init在兩臺電腦上進行初始化,並使用命令ipfs daemon讓兩臺電腦上的IPFS都在後臺執行起來。
非常好!現在我們的準備工作完成了。我們要開始加密檔案和上傳檔案了。
加密
還記得剛剛我們下載的實驗報告麼?請將這個檔案移動到你的第一臺電腦的本地工作區。
讓我們開始加密檔案(因為檔案來自於Myriad Genetics,我先將檔案的名字修改成myriad.pdf),加密使用的是第二臺電腦的公鑰(在這個例子中,叫做Cory Heath)
gpg --encrypt --recipient "Cory Heath" myriad.pdf
如果使用ls命令來檢視資料夾,你會發現一個加密後的檔案,叫做myriad.pdf.gpg
現在只有你的第二臺電腦可以解密並檢視這個檔案。試一試! 透過Email傳送給其他朋友,讓他們試著解開,你會發現他們並不能開啟檔案! 即使將檔案修改回原來為myriad.pdf的名字。
我們已經得到了加密的檔案,接下來讓我們把它傳到IPFS上。
上傳到IPFS
在第一臺電腦中使用如下命令將檔案上傳到IPFS中
ipfs add myriad.pdf.gpg
我們應該得到如下的顯示內容:
Qm...開頭的字串就是檔案的雜湊值。你可以將這個雜湊值分享給你朋友們,或者任何一個希望透過IPFS檢視檔案的人。
讓我們再一次確認,保證檔案已經在IPFS上了,可以使用ipfs pin ls命令:
你可以看到,我們的檔案雜湊值確實存在,現在可以在IPFS上使用了!
從IPFS下載
我們切換到第二臺電腦上。記住,我們是在模擬另外一個人。 為了讓其更加真實,可以與朋友分享這篇教程後交換電腦使用。
在我們這個例子中,我們使用的是帶有vagrant的Ubuntu VM, 而不是第二臺電腦。 這不是要求。
在第二臺電腦中,使用相同的雜湊值下載你從第一臺電腦中上傳的加密檔案:
ipfs get QmYqSCWuzG8Cyo4MFQzqKcC14ct4ybAWyrAc9qzdJaFYTL
如下圖就是已經下載成功了:
解密
由於我們現在在第二臺電腦上,我們使用的是第二臺電腦的公鑰進行的加密, 理論上,我們可以使在這臺電腦上進行解密,並檢視檔案內容。
我們試一試。解密下載的檔案,讓我們修改他的名字為myriad.pdf
gpg --decrypt QmYqSCWuzG8Cyo4MFQzqKcC14ct4ybAWyrAc9qzdJaFYTL > myriad.pdf
見證奇蹟的時刻:
如果一切執行正常,當我們在另外一個臺電腦上開啟檔案時,我們會看到檔案內容。
open myriad.pdf
TADA! 我們成功下載,解密並開啟了我們的檔案,該檔案在IPFS上是完全加密儲存的, 並且對於訪問內容的任何人來說都是被保護起來的。
總結和下一步
先鼓勵下自己。我們剛剛完成的功能非常強大,解決了當今區塊鏈中一些關鍵問題。
讓我們快速回顧下我們剛做的事情:
意識到區塊鏈中儲存大量資料和檔案會及其不美觀
設定IPFS,並執行,連線成網路
使用GPG保護敏感檔案,並將檔案儲存到IPFS上
瞭解IPFS中的雜湊值,以及我們如何在區塊鏈中使用分散式檔案系統,使得二者更有力的融合
之前的內容能學到多少全完取決你自己。其中有很多可以單獨成為分支的部分。可以考慮將這些例子部署到你們自己的IPFS活躍節點上,用以存放重要資料。IPFS的缺點是,當你的檔案不是足夠的流行,當你的節點停止服務,那麼檔案也將從IPFS的網路上消失。你可以使用雲伺服器來當做一個IPFS節點,先讓自己儲存,直到更多節點對你的檔案感興趣並儲存了它們。
再次檢視我們之前的“編寫你自己的區塊鏈”教程,一、二、三、四 4個部分。每一點都完成,你可以試著將IPFS和你自己大型加密檔案區塊鏈相結合。
同時,告訴我們接下來你想看到的內容!我們非常喜歡這些區塊鏈相關的技術教程。與我們聯絡的最好方式是我們的 telegram 和 twitter! 我們很樂意聽取到你的意見!
更多區塊鏈資訊:www.qukuaiwang.com.cn/news