區塊鏈兄弟社區,區塊鏈技術專業問答先行者,中國區塊鏈技術愛好者聚集地
原文鏈接:https://bihu.com/article/138549
本文約4000字+,閱讀(觀看)需要24分鐘
最近,越來越多的人開始對區塊鏈產生興趣。雖然大多數關注點被放在加密貨幣與各種ICO上面,但區塊鏈技術本身也同樣令人興奮。區塊鏈構建了一種民主化的信任與驗證協議,已經顛覆了傳統銀行模式,並且正在對醫療,理財,社交應用等領域產生影響。
然後,從技術上看,區塊鏈也並非沒有缺點。目前的PoW(Proof of work)共識機制, 使得交易處理速度十分緩慢,以至於在某些情況下變得幾乎沒用。風靡一時的加密貓也一度讓整個以太坊網絡陷入癱瘓。
從區塊鏈的現狀來看,在鏈上存儲大量的數據不是一個好的選擇。既然區塊鏈只能處理少量字符與文本,記錄收付款情況,那我們怎麼能在鏈上直接存儲一些較大的文件或者圖片之類的數據呢?難道區塊鏈真的只能侷限於記錄這種小微數據量的應用?
引入IPFS
IPFS全稱為Interplanet File System,中文可以叫做星際文件系統,由Protocol Labs主導開發。它是目前最有希望能被用於解決這個問題的方案。IPFS是一種點對點的傳輸協議,每個節點都存儲一系列通過hash索引的文件。當某個客戶端需要訪問這些文件的時候,只需要通過一個巧妙封裝過的抽象層,傳入文件的hash值。IPFS會通過這個hash值,從活躍的節點當中找到對應的文件,並返回文件內容給客戶端。
你可以把IPFS想象成類似我們熟悉的BT下載協議。它是一種去中心化的文件存儲與索引方式,通過hash索引,你可以更自如地管理與訪問文件,同時提供更加強大的可編程性。
下圖簡單的表述了IPFS的工作流程:
John打算上傳一份PDF文檔到IPFS
他首先把PDF文件放到電腦工作區
然後,使用IPFS相關命令添加這個文件,並且得到了文件的hash值。(IPFS的hash值總是以Qm開頭,比較好認)
上面動作結束後,這個PDF文件就可以在IPFS上面被訪問了。
現在,John打算把這個PDF通過IPFS分享給他的同事Mary。他只需要將第3步得到的hash值告訴Mary,然後Mary就能按圖索驥,從IPFS上面下載這份文件。整個過程還挺酷的!
安全漏洞
實際上,這裡有一個安全漏洞。任何得到這份PDF hash值的人,都可以輕鬆從IPFS上下載它。對於帶有敏感信息的文件並不適合這樣直接分享。因此,當我們需要在IPFS上共享一些敏感文件時,就需要預先對這些文件做一些處理。
引入不對稱加密
幸運的是,我們有現成的工具能夠很好的配合IPFS來安全的共享文件。不對稱加密技術能夠讓我們用文件接收方的公鑰加密文件,之後接收方從IPFS下載文件之後,再用私鑰解密即可。作惡方就算從IPFS上取得這個文件,也不能做任何事情,因為無法解密其內容。在這個教程中,我們將採用GPG不對稱加密算法。
讓我們重新設一下前面的工作流程,這次引入加密和解密的過程:
John打算上傳一份PDF到IPFS,但只打算給Mary一個人看。
他將PDF放入電腦的工作區,然後用Mary的公鑰對其進行加密。
然後,使用IPFS相關命令添加這個加密後的文件,並且得到了加密文件的hash值。
上面動作結束後,這個加密過的文件就可以在IPFS上面被訪問了。
Mary得知hash值之後,可以從IPFS上下載,並用她的秘鑰解密得到原PDF文件。
任何企圖作惡的一方,由於沒有Mary的密鑰,所以他們無法解密這個文件,從而保證了文件在IPFS上面的安全共享。
區塊鏈
下面這張圖很重要:
注意到每個區塊中BPM字段,這樣的簡單字段才是區塊鏈目前能夠應付的。這也是為什麼加密貨幣能夠很好的在區塊鏈上運作。因為,只要需要記錄付款地址,收款地址,轉賬的比特幣(以太坊等)數量,這樣簡單的字段。由於區塊鏈的鏈式結構,假如我們把大量文件和數據存放在鏈上,進行完整性驗證的時候,將會是一場十分恐怖的噩夢。
然而,當我們把IPFS和區塊鏈結合在一起的時候,它們就變得十分強大。實際上,我們只在區塊鏈上存儲文件的hash值,就像BPM字段那樣!這是一個不錯的想法。我們在保證區塊鏈上數據簡單性的同時,又利用到了IPFS去中心化的文件存儲!充分利用了區塊鏈和IPFS的優勢。然後,再加上不對稱加密技術(GPG),我們現在有了一套在區塊鏈上優雅地存儲,共享大量數據和文件的方法。
在實際應用中,每個區塊裡存儲的可能是健康數據或者實驗室數據的hash值。當我們得到一個新的實驗結果,我們可以將加密後的實驗結果上傳到IPFS,在新建的區塊內存儲相應的hash值即可。
說了這麼多,看看具體怎麼做吧!
本教程包含的內容:
配置GPG
搭建IPFS
用公鑰加密文件
上傳加密文件至IPFS
從IPFS下載加密文件,然後確認只有私鑰擁有者才能解密內容
需要做的準備
一臺備用電腦或者虛擬機也行。這臺備用電腦就是你的文件接收方。
一個測試文件。這個可以自己隨意定,PDF文檔,txt文件都行。
好了,下面開始!
配置GPG
在兩臺電腦上都安裝GPG,下載鏈接。如果是Mac的話,直接用brew install gnupg命令安裝。
用下面的命令,在兩臺電腦上分別生成key:
gpg --gen-key
之後按照提示,輸入name, email 然後是密碼,確保記住這個密碼。
在第二臺電腦上導出公鑰:
gpg --export --armor email > pubkey.asc
把上面命令中的email替換成你配置GPG時填入的email地址,運行即可。拷貝pubkey.asc文件到你的第一臺電腦上。最好用U盤,而不要用電子郵件這樣的常規網絡傳輸方式。
拷貝成功後,在你第一臺電腦上運行:
gpg --import pubkey.asc
這樣就導入了第二臺電腦的公鑰。可以用下面的命令檢查是否導入成功:
gpg --list-keys
在命令輸出結果中,你應該能看到第二臺電腦的name 和 email。
都做好之後,GPG的配置就完成了,繼續看看IPFS。
搭建IPFS
根據IPFS官方教程,在兩臺電腦上都下載安裝。
安裝成功之後,執行:
ipfs init
初始化結束之後,再運行:
ipfs daemon
啟動ipfs進程。
都成功之後,IPFS搭建就結束了。
用公鑰加密文件
這裡我的測試文件是一個名為 myriad.pdf 的文檔,我們用第二臺電腦的公鑰對其進行加密:
gpg --encrypt --recipient "Cory Health" myriad.pdf
需要注意的是,文件名需要根據你實際的測試文件名做更改,“Cory Health”替換為你第二臺電腦公鑰的名稱。
加密成功之後,同目錄下生成一個後綴名為.gpg的文件,只有在你第二臺電腦上才能解密並查看這個文件,你可以嘗試將它發送給你的朋友,測試是否能打開,就算他們把文件名改回myriad.pdf,也無法查看pdf的內容。
現在有了這個加密的文件,我們可以把它上傳到IPFS!
上傳加密文件至IPFS
在我們第一臺電腦上運行:
ipfs add myriad.pdf.gpg
命令成功之後,會返回一個 Qm開頭的hash值,你可以將這個hash值分享給你的朋友,或是任何人,他們就能通過IPFS下載到對應的文件。
為了確保我們上傳成功了,我們可以運行:
ipfs pin ls
返回結果裡面,應該包含剛才的hash值。
從IPFS下載加密文件
記住,我們現在是用第二臺電腦代表一個接收方,你甚至可以叫你的朋友操作第二臺電腦! 在第二臺電腦上運行:
ipfs get hashValue
把hashValue替換成上一步得到的以Qm開頭的hash值,運行並等待下載。
運行結束之後,加密文件就被下載到了你第二臺電腦上了。
解密文件
在第二臺電腦運行:
gpg --decrypt encryptFile > myriad.pdf
這個myriad.pdf就是解密後的文件,可以直接查看其內容,驗證是否解密成功。
哇喔!到這裡我已經成功通過IPFS下載,並解密了我們的文件。用這個方式,我們就可以防止其他人查看我們放在IPFS上的文件內容了!
總結與展望
現在可以放鬆慶祝一下了!我們剛才掌握了一個十分強大的方法,它能夠解決目前區塊鏈技術的一些關鍵問題。
回顧一下我們都學到些什麼:
認識到區塊鏈在數據和文件存儲方面的短板
IPFS的配置和使用
利用GPG加密敏感數據,並存儲在IPFS
理解了IPFS的去中心化文件系統,並且知道如何結合區塊鏈去管理這些hash值。同時發揮了區塊鏈和IPFS系統的優點。
之後,你可以根據自己的實際情況去使用你在這裡學到的東西。值得注意的是,如果你的文件在IPFS節點上不是很受歡迎的話,那麼你停掉自己的節點之後,很可能沒有其他的節點去保管你的文件。從而,你的文件可能會從IPFS上消失。解決的辦法就是,你可以利用雲服務搭建一個IPFS節點,來保管你的文件,直到你確定你的文件足夠受歡迎。
【本文譯自:Learn to securely share files on the blockchain with IPFS!】
閱讀更多 區塊鏈兄弟 的文章