使用 Solid 私有化存儲 IPFS 文件哈希值

背景

星際文件系統 IPFS(InterPlanetary File System)是一個面向全球的、點對點的分布式文件系統,目標是為了補充(甚至是取代)目前統治互聯網的超文本傳輸協議(HTTP),將所有具有相同文件系統的計算設備連接在一起。原理用基于內容的地址替代基于域名的地址,也就是用戶尋找的不是某個地址而是儲存在某個地方的內容,不需要驗證發送者的身份,而只需要驗證內容的哈希,通過這樣可以讓網頁的速度更快、更安全、更健壯、更持久。

社交互聯數據 Solid (Social Linked Data) 由萬維網發明者 Tim Berners-Lee 發起,該項目旨在從根本上改變 Web 應用程序的中心化趨勢, 它將真正地讓數據所有權屬于用戶,并改善隱私問題。它是一組約定和工具,主要用于構建基于關聯數據的分布式社交應用。

簡單來說,IPFS 是一個任何人都可以訪問的點對點存儲平臺(可以存儲大量非結構化數據),Solid 是一個必須授權才可以使用的結構化數據計算和存儲平臺。

我們想要解決的問題是,如何私有化存儲 IPFS 文件的哈希值。存儲在 IPFS 上的文件哈希如果被泄漏,任何人都可以訪問該文件,這是極不安全的,不是每個人都想把自己的文件上傳到公有網絡里。解決哈希值的泄漏有兩種方案:

  1. 自建 IPFS 私有節點。該方案成本比較大,需要根據 IPFS 開放的協議重頭來寫;
  2. 自己寫一套或使用成熟的互聯網訪問控制(WAC,Web Access Control)方案;

綜合考慮成本、時間等因素,我們使用第二種方案。而第二種方案有非常多的實現,同時 Solid 是所有實現中最具開放性、代表性和權威性的。WAC 本身就是由 Tim Berners-Lee 在 2009 年提出的方案,如今用于 Solid 項目中是天作之合。

Solid 一個巨大的優勢在于,它想將數據的所有權還歸用戶。如果想讓用戶愿意上傳隱私數據到 IPFS 網絡中,一個重要的因素在于如何保證用戶上傳的文件哈希不被其他人非法獲取到,而 Solid 不僅可以安全的存儲文件哈希值,還可以保證文件哈希值僅為用戶所有。

于是我們寫了個 solid-ipfs 框架用來解決這個問題。

解決方案

代碼在 Github 上已開源:Eximua/solid-ipfs。

以下是以一個 WebId (用戶在 Solid 網絡中的唯一標識)為 https://alicea.solid.authing.... 的用戶舉例。

0_1544426702559_19ffdaba-998d-4435-8343-59f21e872e75-image.png
這是用戶 Alicea 在 Solid 上的個人主頁,其中 Profile 和 Public Folder 是可以公開被讀取的數據(但是寫入需要 Alicea 的權限確認),Inbox 為隱私數據,只有 Alicea 本人可以讀取和寫入。我們上傳到 IPFS 網絡中的私有文件哈希值將被存儲到 Inbox 中。

簡單來說的話,Profile、Public Folder 和 Inbox 可以理解為公有文件夾和私有文件夾。你所有的公有文件可以放到到公有文件夾里,私有的隱私數據可以放到私有文件夾內。

更簡單來說,這就是 Solid Pod。

0_1544426716055_f9db500f-93fb-4dac-92e3-9ea72bda7ff4-image.png

Solid 的數據存儲使用 RDF,RDF 是用來描述網絡資源的一個框架,他把所有資源以三元組的形式進行描述。比如(姚明,身高,226cm)定義了姚明的身高是 226 厘米。

0_1544426745892_7c28eaf5-c689-4824-b52b-b987509793da-image.png

示例中的 (alicea, type, Person) 則定義了 Alicea 的類型是人。同理,(alicea, hash, QmVCZeNR7eQNEu5Gekqqbnmk85v66cFHHjZZTGZxAqA2hD) 定義了 Alicea 的哈希值為 "QmVCZeNR7eQNEu5Gekqqbnmk85v66cFHHjZZTGZxAqA2hD"(該哈希來自于 IPFS 的某個文件)。

當然這種描述方式不是語義化的,僅供示例參考。

為了對這些 RDF 進行讀寫操作,RDF 官方封裝了 rdflib.js ,使語義計算可以在 Web 上執行(也就是可以在瀏覽器里執行語義計算啦)。

我們最終語義化的私有存儲樣例如下:

0_1544426761607_6ff02839-9f54-4734-8d1e-20862449678b-image.png

可以看到,我們使用了 "ipfs/hash" 這個命名空間(可以理解成文件夾)來存儲相應的 IPFS 文件哈希值,并且把每一個哈希值作為一個文件(哈希值.txt)存儲到 Solid Pod 中。這樣用戶在使用 Solid 賬號登錄之后我們就可以讀取用戶的文件哈希值列表,然后從 IPFS 網絡中拉取文件了。

0_1544426773245_5888d71d-9265-4207-8200-b682684b6931-image.png

具體的技術細節就不再細講了,感興趣的可以自行查看代碼:Eximua/solid-ipfs。

使用 solid-ipfs

最后介紹一下 solid-ipfs 的使用方法。

solid-ipfs 其實不止可以寫入私有數據,還可以寫入公有數據。

安裝

$ 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();

通過訪問<YOURL_SOLID_URL>/ipfs/hash/ 之后即可獲得用戶的 IPFS 哈希值列表

如果你還沒有 Solid 賬號,可以點擊這里注冊。

私有文件示例

  1. 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();

公有文件示例

  1. https://alicea.solid.authing....
  2. 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 中的資源指代一切資源,它是一個通用的,可以定義一切的規范。比如:文件夾、文件、文件類型、代碼、聊天內容、郵件等都屬于資源,RDF 主要定義了這些不同類型資源的存儲方式和數據規范。

我們為什么需要 RDF,它能解決什么問題?

RDF 看重語義化,可移植性和互操作性。語義化指你的數據存儲規范必須是人類能理解的;可移植性代表當我想把我的數據從 A 平臺移植到 B 平臺時,不需要做任何的數據格式兼容;互操作性指我在 A 平臺存儲的數據在 B 平臺上也可以進行讀取和計算。

簡單來說,就是所有的數據都共享同一套規范,減少為了兼容而產生的數據對齊時間,提升效率。RDF 是語義互聯網(Web 3.0)的重要組成部分,它的愿景是全萬維網的數據互通,變成一個大型計算平臺,目前這個概念更有名的叫法為“知識圖譜”。

Solid 資源列表:

  1. Solid 中文網
  2. Solid 中文社區

?3. Solid Pod 中國節點
?4. solid-ipfs
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276709.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276709.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276709.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用window.postMessage實現跨域通信

JavaScript由于同源策略的限制,跨域通信一直是棘手的問題。當然解決方案也有很多&#xff1a; document.domainiframe的設置&#xff0c;應用于主域相同而子域不同&#xff1b;利用iframe和location.hash&#xff0c;數據直接暴露在了url中&#xff0c;數據容量和類型都有限Fla…

appium啟動app失敗_Appium-Desktop Capability 配置及啟動App演示

Appium-Desktop Capability配置介紹desired capability的功能是配置Appium會話。為什么要配置capability&#xff0c;目的就是為了告訴Appium服務器您想要自動化的平臺和應用程序。Desired Capabilities是一組設置的鍵值對的集合&#xff0c;其中鍵對應設置的名稱&#xff0c;而…

WinRAR 命令行簡體中文說明

從命令行也可以運行 WinRAR 命令&#xff0c;常規的命令行語法描述如下:WinRAR - -命令 要 WinRAR 運行的字符組合代表功能。開關 切換操作指定類型&#xff0c;壓縮強度&#xff0c;壓縮文件類型&#xff0c;等等的定義。壓縮文件 要處理的壓縮文件名。文件 要處理的文件名。列…

以Windows服務方式運行.NET Core程序

原文:以Windows服務方式運行.NET Core程序在之前一篇博客《以Windows服務方式運行ASP.NET Core程序》中我講述了如何把ASP.NET Core程序作為Windows服務運行的方法&#xff0c;而今&#xff0c;我們又遇到了新的問題&#xff0c;那就是&#xff1a;我們的控制臺程序&#xff0c…

SparkSession.read().csv()無法定位本地文件的問題

原因是spark有兩個文件頭 [file://]代表本地 [hdfs://]代表hdfs路徑 如果路徑沒有文件頭&#xff0c;spark會將該路徑默認添加上"hdfs://" 所以如果要訪問本地csv文件&#xff0c;需要確保路徑前面有"file://" //java代碼&#xff0c;告訴spark這是本地文件…

JavaScript的10種跨域共享的方法

在客戶端編程語言中&#xff0c;如javascript和ActionScript&#xff0c;同源策略是一個很重要的安全理念&#xff0c;它在保證數據的安全性方面有著重要的意義。同源策略規定跨域之間的腳本是隔離的&#xff0c;一個域的腳本不能訪問和操作另外一個域的絕大部分屬性和方法。那…

好用的shell工具_精選5個酷斃的Python工具

來自&#xff1a;Python之禪工欲善其事必先利其器&#xff0c;一個好的工具能讓起到事半功倍的效果&#xff0c;Python社區提供了足夠多的優秀工具來幫助開發者更方便的實現某些想法&#xff0c;下面這幾個工具給我的工作也帶來了很多便利&#xff0c;推薦給追求美好事物的你。…

承載輝煌歷史 暢想無線未來

看了JustDI的文章“手機也能當電腦用&#xff1f;&#xff0d;&#xff0d;談談未來智能手機操作系統的走向”&#xff0c;作為嵌入式愛好者&#xff0c;我也想談談自己的看法。首先&#xff0c;從網絡發展的角度看&#xff0c;移動互聯網的寬帶化&#xff0c;寬帶互聯網的移動…

接口碼釋義

1xx&#xff1a;信息&#xff0c;請求收到&#xff0c;繼續處理 2xx&#xff1a;成功&#xff0c;行為被成功地接受、理解和采納 3xx&#xff1a;重定向&#xff0c;為了完成請求&#xff0c;必須進一步執行的動作 4xx&#xff1a;客戶端錯誤&#xff0c;請求包含語法錯誤或…

java讀取文件內容,文件頭有\ufeff

"\ufeff"是UTF-8 BOM編碼的文件頭&#xff0c;代表該文件按照什么字節順序排序 調用java的工具類[ UnicodeInputStream ]即可解決這個問題 //第二個參數targetEncoding為null時在getDetectedEncoding方法中會自動檢測編碼類型 UnicodeInputStream unicodeInputStrea…

6款國內外SNS開源軟件 搭建社交網站利器

SNS(Social Network Service)&#xff0c;有時稱為社交網絡&#xff0c;有時稱為社會化網絡&#xff0c;專指旨在幫助人們建立社會性網絡的互聯網應用服務。如果對SNS概念還很模糊&#xff0c;說到人人網、開心網你就明白了。 去年360圈、螞蟻網接連關站給SNS前景蒙上一層陰影&…

aop實現原理_從宏觀的實現原理和設計本質入手,帶你理解 AOP 框架的原理

點擊上方“Java知音”&#xff0c;選擇“置頂公眾號”技術文章第一時間送達&#xff01;作者&#xff1a;FeelsChaoticjuejin.im/post/5c57b2d5e51d457ffd56ffbb前言本文將從另一個角度講解 AOP&#xff0c;從宏觀的實現原理和設計本質入手。大部分講 AOP 的博文都是一上來就羅…

孟憲會老師推薦的一部C#圖解教程

Amazon五星級盛譽 C# 最新特性一覽無余 數十年開發與教學經驗的結晶 圖、表和文字完美結合&#xff0c;最易學的C# 教程 本書詳細信息&#xff1a;http://www.china-pub.com/43556 微軟4大名著評選結果揭曉&#xff1a;http://www.china-pub.com/static07/0812/jsj_micrmingz_0…

Python數據分析Numpy庫方法簡介(三)

補充&#xff1a; np.ceil()向上取整 3.1向上取整是4 np.floor()向下取整 數組名.resize((m,n)) 重置行列 基礎操作 np.random.randn()符合正態分布(鐘行/高斯)的數據 矩陣的水平拼接 np.vstack((a,b)) 矩陣的垂直拼接 np.hstack((a,b)) 點陣積&#xff1a; np.dot(a,b)/ ab…

xxl-job源碼分析

xxl-job源碼分析 xxl-job 系統說明 安裝 安裝部署參考文檔&#xff1a;分布式任務調度平臺xxl-job 功能 定時調度、服務解耦、靈活控制跑批時間&#xff08;停止、開啟、重新設定時間、手動觸發&#xff09; XXL-JOB是一個輕量級分布式任務調度平臺&#xff0c;其核心設計目標是…

定制jQuery File Upload為微博式單文件上傳

原文鏈接&#xff1a;http://avnpc.com/pages/single-file-upload-component-by-jquery-file-upload jQuery File Upload是一個非常優秀的上傳組件&#xff0c;主要使用了XHR作為上傳方式&#xff0c;并且利用了相當多的現代瀏覽器功能&#xff0c;所以可以實現諸如批量上傳、超…

vb趣味編程彈球小游戲_最好玩的微信小游戲集合,總有一款是你沒玩過的

大家好&#xff0c;這里是小雅龍生活趣味時間&#xff0c;自從17年微信推出小游戲程序以來&#xff0c;微信小游戲行業可謂是炙手可熱&#xff0c;知道2019年不斷有許許多多的微信小游戲如雨后春筍般的生根發芽。下面就由我帶大家來看看今年最好玩&#xff0c;最受歡迎的微信小…

開發MOSS2007 Masterpage的一些經驗

一直在做MOSS平臺的Masterpage開發,碰到很多的問題,總結了一些經驗,特此記錄: masterpage的所有的ContentPlaceholder詳細解釋見以下網址:http://www.cnblogs.com/WinYoung/archive/2007/06/25/791766.html 1.如果應用masterpage以后IE狀態欄出現""網頁指令碼錯誤訊息…

Golang——垃圾回收GC(2)

1 垃圾回收中的重要概念 1.1 定義 In computer science, garbage collection (GC) is a form of automatic memory management. The garbage collector, or just collector, attempts to reclaim garbage, or memory occupied by objects that are no longer in use by the pro…

java gui框架_推薦!程序員整理的Java資源大全

構建這里搜集了用來構建應用程序的工具。Apache Maven&#xff1a;Maven使用聲明進行構建并進行依賴管理&#xff0c;偏向于使用約定而不是配置進行構建。Maven優于Apache Ant。后者采用了一種過程化的方式進行配置&#xff0c;所以維護起來相當困難。Gradle&#xff1a;Gradle…