摘要:我們想要解決的問題是,如何私有化存儲文件的哈希值。解決哈希值的泄漏有兩種方案自建私有節(jié)點。同理,定義了的哈希值為該哈希來自于的某個文件。這樣用戶在使用賬號登錄之后我們就可以讀取用戶的文件哈希值列表,然后從網(wǎng)絡中拉取文件了。
背景
星際文件系統(tǒng) IPFS(InterPlanetary File System)是一個面向全球的、點對點的分布式文件系統(tǒng),目標是為了補充(甚至是取代)目前統(tǒng)治互聯(lián)網(wǎng)的超文本傳輸協(xié)議(HTTP),將所有具有相同文件系統(tǒng)的計算設備連接在一起。原理用基于內(nèi)容的地址替代基于域名的地址,也就是用戶尋找的不是某個地址而是儲存在某個地方的內(nèi)容,不需要驗證發(fā)送者的身份,而只需要驗證內(nèi)容的哈希,通過這樣可以讓網(wǎng)頁的速度更快、更安全、更健壯、更持久。
社交互聯(lián)數(shù)據(jù) Solid (Social Linked Data) 由萬維網(wǎng)發(fā)明者 Tim Berners-Lee 發(fā)起,該項目旨在從根本上改變 Web 應用程序的中心化趨勢, 它將真正地讓數(shù)據(jù)所有權屬于用戶,并改善隱私問題。它是一組約定和工具,主要用于構(gòu)建基于關聯(lián)數(shù)據(jù)的分布式社交應用。
簡單來說,IPFS 是一個任何人都可以訪問的點對點存儲平臺(可以存儲大量非結(jié)構(gòu)化數(shù)據(jù)),Solid 是一個必須授權才可以使用的結(jié)構(gòu)化數(shù)據(jù)計算和存儲平臺。
我們想要解決的問題是,如何私有化存儲 IPFS 文件的哈希值。存儲在 IPFS 上的文件哈希如果被泄漏,任何人都可以訪問該文件,這是極不安全的,不是每個人都想把自己的文件上傳到公有網(wǎng)絡里。解決哈希值的泄漏有兩種方案:
自建 IPFS 私有節(jié)點。該方案成本比較大,需要根據(jù) IPFS 開放的協(xié)議重頭來寫;
自己寫一套或使用成熟的互聯(lián)網(wǎng)訪問控制(WAC,Web Access Control)方案;
綜合考慮成本、時間等因素,我們使用第二種方案。而第二種方案有非常多的實現(xiàn),同時 Solid 是所有實現(xiàn)中最具開放性、代表性和權威性的。WAC 本身就是由 Tim Berners-Lee 在 2009 年提出的方案,如今用于 Solid 項目中是天作之合。
Solid 一個巨大的優(yōu)勢在于,它想將數(shù)據(jù)的所有權還歸用戶。如果想讓用戶愿意上傳隱私數(shù)據(jù)到 IPFS 網(wǎng)絡中,一個重要的因素在于如何保證用戶上傳的文件哈希不被其他人非法獲取到,而 Solid 不僅可以安全的存儲文件哈希值,還可以保證文件哈希值僅為用戶所有。
于是我們寫了個 solid-ipfs 框架用來解決這個問題。
解決方案代碼在 Github 上已開源:Eximua/solid-ipfs。
以下是以一個 WebId (用戶在 Solid 網(wǎng)絡中的唯一標識)為 https://alicea.solid.authing.... 的用戶舉例。
這是用戶 Alicea 在 Solid 上的個人主頁,其中 Profile 和 Public Folder 是可以公開被讀取的數(shù)據(jù)(但是寫入需要 Alicea 的權限確認),Inbox 為隱私數(shù)據(jù),只有 Alicea 本人可以讀取和寫入。我們上傳到 IPFS 網(wǎng)絡中的私有文件哈希值將被存儲到 Inbox 中。
簡單來說的話,Profile、Public Folder 和 Inbox 可以理解為公有文件夾和私有文件夾。你所有的公有文件可以放到到公有文件夾里,私有的隱私數(shù)據(jù)可以放到私有文件夾內(nèi)。
更簡單來說,這就是 Solid Pod。
Solid 的數(shù)據(jù)存儲使用 RDF,RDF 是用來描述網(wǎng)絡資源的一個框架,他把所有資源以三元組的形式進行描述。比如(姚明,身高,226cm)定義了姚明的身高是 226 厘米。
示例中的 (alicea, type, Person) 則定義了 Alicea 的類型是人。同理,(alicea, hash, QmVCZeNR7eQNEu5Gekqqbnmk85v66cFHHjZZTGZxAqA2hD) 定義了 Alicea 的哈希值為 "QmVCZeNR7eQNEu5Gekqqbnmk85v66cFHHjZZTGZxAqA2hD"(該哈希來自于 IPFS 的某個文件)。
當然這種描述方式不是語義化的,僅供示例參考。
為了對這些 RDF 進行讀寫操作,RDF 官方封裝了 rdflib.js ,使語義計算可以在 Web 上執(zhí)行(也就是可以在瀏覽器里執(zhí)行語義計算啦)。
我們最終語義化的私有存儲樣例如下:
可以看到,我們使用了 "ipfs/hash" 這個命名空間(可以理解成文件夾)來存儲相應的 IPFS 文件哈希值,并且把每一個哈希值作為一個文件(哈希值.txt)存儲到 Solid Pod 中。這樣用戶在使用 Solid 賬號登錄之后我們就可以讀取用戶的文件哈希值列表,然后從 IPFS 網(wǎng)絡中拉取文件了。
具體的技術細節(jié)就不再細講了,感興趣的可以自行查看代碼:Eximua/solid-ipfs。
使用 solid-ipfs最后介紹一下 solid-ipfs 的使用方法。
solid-ipfs 其實不止可以寫入私有數(shù)據(jù),還可以寫入公有數(shù)據(jù)。
安裝
$ npm install solid-ipfs --save
使用
import SolidIPFS from "solid-ipfs"; const main = async () => { const solidIpfs = new SolidIPFS({ url: "YOUR_SOLID_URL", // e.g. https://alicea.solid.authing.cn/inbox/ }); const result = await solidIpfs.storeHash({ hash: "YOUR_IPFS_HASH", }); console.log(result, result ? "保存成功" : "保存失敗"); } main();
通過訪問
如果你還沒有 Solid 賬號,可以點擊這里注冊。
私有文件示例https://alicea.solid.authing....
import SolidIPFS from "solid-ipfs"; const main = async () => { const solidIpfs = new SolidIPFS({ url: "https://alicea.solid.authing.cn/inbox/", // inbox -> private }); const result = await solidIpfs.storeHash({ hash: "YOUR_IPFS_HASH", }); console.log(result, result ? "保存成功" : "保存失敗"); } main();公有文件示例
https://alicea.solid.authing....
https://alicea.solid.authing....
import SolidIPFS from "solid-ipfs"; const main = async () => { const solidIpfs = new SolidIPFS({ url: "https://alicea.solid.authing.cn/public/", // public -> public }); const result = await solidIpfs.storeHash({ hash: "YOUR_IPFS_HASH", }); console.log(result, result ? "保存成功" : "保存失敗"); } main();
題外話,有的人可能對 RDF、語義計算這些概念不熟悉,這里再簡單介紹下。
RDF 為什么叫資源描述框架,這個資源具體指代什么?RDF 中的資源指代一切資源,它是一個通用的,可以定義一切的規(guī)范。比如:文件夾、文件、文件類型、代碼、聊天內(nèi)容、郵件等都屬于資源,RDF 主要定義了這些不同類型資源的存儲方式和數(shù)據(jù)規(guī)范。
我們?yōu)槭裁葱枰?RDF,它能解決什么問題?RDF 看重語義化,可移植性和互操作性。語義化指你的數(shù)據(jù)存儲規(guī)范必須是人類能理解的;可移植性代表當我想把我的數(shù)據(jù)從 A 平臺移植到 B 平臺時,不需要做任何的數(shù)據(jù)格式兼容;互操作性指我在 A 平臺存儲的數(shù)據(jù)在 B 平臺上也可以進行讀取和計算。
簡單來說,就是所有的數(shù)據(jù)都共享同一套規(guī)范,減少為了兼容而產(chǎn)生的數(shù)據(jù)對齊時間,提升效率。RDF 是語義互聯(lián)網(wǎng)(Web 3.0)的重要組成部分,它的愿景是全萬維網(wǎng)的數(shù)據(jù)互通,變成一個大型計算平臺,目前這個概念更有名的叫法為“知識圖譜”。
Solid 資源列表:Solid 中文網(wǎng)
Solid 中文社區(qū)
?3. Solid Pod 中國節(jié)點
?4. solid-ipfs
?
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/99867.html
摘要:作者簡介董天一中國區(qū)技術布道人指南作者。目前網(wǎng)絡上有一些對的解讀五花八門,各式各樣,有看好的,也有打擊的,總之一項新技術誕生之初遇到的問題都遇到了。問題文件丟失認為系統(tǒng)不可靠,會造成用戶文件的丟失。 作者簡介:董天一 ,IPFS/Filecoin中國區(qū)技術布道人 ,《IPFS指南》作者。畢業(yè)于北京大學軟件與微電子學院曾擔任甲骨文亞洲研發(fā)中心(中國)數(shù)據(jù)庫開發(fā)工程師。 資深區(qū)塊鏈技術開發(fā)...
摘要:全稱,中文名星際文件系統(tǒng),是一個旨在創(chuàng)建持久且分布式存儲和共享文件的網(wǎng)絡傳輸協(xié)議。在網(wǎng)絡中的節(jié)點將構(gòu)成一個分布式文件系統(tǒng)。使用稱為去中心化命名系統(tǒng),每個文件都可以被協(xié)作命名為易讀的名字。三項目實踐利用構(gòu)建一個去中心化不可篡改的分布式系統(tǒng)。 作者簡介:戴嘉樂( Mr.Maple ) | 前百度高級研發(fā)工程師 | IPFS應用實踐者&布道師|個人網(wǎng)站:https://www.daijial...
摘要:在中,一個文件的哈希值完全取決于其內(nèi)容,修改它的內(nèi)容,其相應的值也會發(fā)生改變。則是用一個哈希指向一個真實內(nèi)容文件的,文件更新這更改哈希的指向,當然更新指向需要有哈希對應的私鑰。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:站在Web3.0 理解IPFS是什么原文已更新,請讀者前往原文閱讀 盡管網(wǎng)絡上,已經(jīng)有不少文章討論IPFS,不過真正講明白IPFS想做什么的很少,文本嘗試站在未來Web3....
摘要:作者簡介董天一,中國區(qū)技術布道人,指南作者。由于每個文件的哈希值全網(wǎng)唯一,查詢將很容易進行。如果僅僅使用哈希值來區(qū)分文件的話,會給傳播造成困難,因為哈希值不容易記憶,就像地址一樣不容易記憶,于是人類發(fā)明的域名。 作者簡介:董天一 ,IPFS/Filecoin中國區(qū)技術布道人 ,《IPFS指南》作者。畢業(yè)于北京大學軟件與微電子學院曾擔任甲骨文亞洲研發(fā)中心(中國)數(shù)據(jù)庫開發(fā)工程師資深區(qū)塊鏈...
摘要:戴嘉樂去年月參與了的眾籌,從而了解到技術,獨立開發(fā)了兩款基于的開源應用,一個是與有關的系統(tǒng),另一個是相關的地理位置檢索系統(tǒng)。現(xiàn)在支持的數(shù)據(jù)結(jié)構(gòu),支持比特幣以太坊的區(qū)塊數(shù)據(jù)。 戴嘉樂是前百度高級研發(fā)工程師,ipfser.org&巴比特專欄作者。戴嘉樂去年8月參與了FileCoin的眾籌,從而了解到IPFS技術,獨立開發(fā)了兩款基于IPFS的開源應用,一個是與IPFS有關的wiki系統(tǒng),另一...
閱讀 3490·2019-08-30 15:53
閱讀 3405·2019-08-29 16:54
閱讀 2190·2019-08-29 16:41
閱讀 2396·2019-08-23 16:10
閱讀 3377·2019-08-23 15:04
閱讀 1342·2019-08-23 13:58
閱讀 347·2019-08-23 11:40
閱讀 2451·2019-08-23 10:26