天天看點

星際無限 | IPFS中的簽名資料

随着Filecoin的熱度越來越高,研究IPFS的閱聽人也越來越廣,今日星際無限将為大家梳理出如何使用兩個新标準(dag-jose和EIP-2844)在IPFS中直接存儲簽名和加密資料的相關教程。

1240

星際無限了解到在IPFS上存儲經過身份驗證和加密的資料是許多Web3應用程式的核心建構塊,但是到目前為止還沒有一種标準化的方法來編碼這類資料。

由于沒有一個标準,許多開發人員不得不為他們的簽名和加密資料建立自定義格式。這就禁止了存儲在IPFS中的資訊的開放性和互操作性,因為它将資料存儲到IPFS的特定實作中。另一種驗證資料的方法是将資料放入IPFS中,并将資料的CID放在區塊鍊(如Ethereum)上的智能合約中。這實際上是在資料上添加簽名并在區塊鍊上持久化簽名記錄的一種較貴的方法。

随着EIP-2844的引入,這個标準允許錢包支援幾種基于DIDs和dag -jose IPLD編解碼器的簽名和解密資料的新方法,我們現在可以直接将經過身份驗證和加密的資料放入IPFS中。在本教程中,您将了解如何使用js-did和3ID Connect!

1.什麼是DIDs和JOSE?

DIDs是用于分散辨別符的W3C标準。它指定了從字元串辨別符出發的一般方式,例如did:3:bafy…,到包含用于簽名驗證和密鑰交換的公鑰的DID文檔。

在大多數DID方法中,由于安全原因,當鍵被旋轉時,文檔可以被更新。JOSE是IETF的一個标準,它代表JSON對象簽名和加密,這就很好地解釋了它是什麼。這個标準中有兩個主要的原語:JWS (JSON Web簽名)和JWE (JSON Web加密)。這兩種格式都允許多個參與者:在JWS中,有效負載上可以有一個或多個簽名,而在JWE中,加密的明文可能有一個或多個接收者。

  1. 建立dag -jose和EIP2844

當我們将dag-jose和EIP-2844作為基本建構塊去建構Ceramic 時,我們已經建立了一些較低級别的工具,它們允許我們更容易地使用這些技術。本教程将向您展示如何直接使用這些強大的工具。

IdentityWallet是一個EIP-2844的實作,使用3ID作為DID方法。它可以作為獨立的DID提供程式使用,或者更友善地在3ID連接配接庫中使用。3ID Connect允許使用者使用他們的Ethereum錢包(支援更多的區塊鍊即将到來)來通路DID提供商。js-did是一個允許開發人員以DID的形式表示使用者的文庫。它允許我們與目前經過身份驗證的使用者簽署資料,對任何使用者(DID)的資料進行加密,并與目前經過身份驗證的使用者解密資料。

  1. IPFS中的簽名資料

通過使用dag-jose IPLD編解碼器,我們可以建立連結和簽名的資料結構。這是通過建立包含指向其他資料的連結的JSON Web簽名來實作的。dag -jose編解碼器解決的主要問題之一是JWS的有效負載傳統上編碼為base64url,這意味着如果它包含任何IPLD連結,您就不能周遊這些連結。相反,我們使用DagJWS将有效負載強制為CID的位元組。然後,編解碼器将有效負載轉換為CID執行個體,并将其設定為DagJWS的link屬性。這允許我們輕松地得到DAG。

[if !supportLists]4. [endif]設定您的環境

本節将介紹如何設定本教程所需的一些特定依賴項。如果您隻想跳過安裝部分,我們準備了一個簡單的場地,它捆綁了ipfs、3id-connect和dids。您可以通過打開web頁面,單擊connect,然後打開developer控制台來使用它,您可以在其中運作指令,以下兩部分可跳過。

1)在dag -jose支援下設定IPFS

由于dag -jose是一種新的IPLD編解碼器,預設情況下它還沒有包含在js-ipfs中。它還實作了新的IPLD編解碼器API,而js-ipfs也不支援這個API。是以,在建立IPFS執行個體時,我們需要執行以下操作:

1240

請確定安裝正确的多格式版本:

1240

2)安裝程式和3ID連接配接

在下面的示例設定中,我們使用注入的Ethereum提供程式(例如MetaMask)建立一個3ID連接配接和DID執行個體。

1240

  1. 建立簽名資料結構

我們現在可以開始向IPFS簽名和添加資料了!首先,我們建立一個簡單的函數,它接受一個有效負載,使用did對其進行簽名,并将結果資料添加到IPFS中。

正如我們在下面的代碼中看到的,我們從這個方法獲得了兩個對象:jws,即DagJWS本身和linkedBlock,即已編碼的有效負載的原始位元組。在背景發生的情況是,使用dag -cbor對有效負載進行編碼,然後使用已編碼有效負載的CID作為建立的jws的有效負載。我們可以在DagJWS執行個體上以jws.link的形式通路這個有效負載CID。

1240

使用這個函數,讓我們建立我們的第一個簽名資料對象:

1240

注意,CIDs和JWS的值對您來說是不同的,因為有效負載将由DID簽名。

  1. 驗證已簽名的資料結構

驗證JWS非常簡單。隻需檢索JWS對象并将其傳遞給verifyJWS方法。如果簽名無效,此函數将抛出錯誤。如果簽名是有效的,它将傳回用于簽名JWS的DID(帶鍵片段)。

1240

  1. IPFS中的加密資料

IPFS中的簽名資料是這個難題的一部分,但可能更有趣的是加密資料。使用dag-jose和EIP-2844,我們可以将資料加密到一個或多個did,并直接存儲在IPFS中。下面我們将示範如何使用js-did庫提供的便利工具來完成此任務。

  1. 加密IPLD資料

有一個簡單的方法可以建立一個DagJWE對象,該對象被加密到一個或多個did,即createDagJWE。這個方法接受一個IPLD對象(也可能包含CID連結的JSON對象)和一個did數組。它将解析DIDs以檢索在它們的DID文檔中找到的公共加密密鑰,并建立一個對這些密鑰加密的JWE。首先,讓我們建立一個helper函數,它建立一個JWE并将其放入IPFS中。

1240

一旦我們有了這個函數,我們就可以建立一些加密的對象。在下面的示例中,我們首先建立一個簡單的加密對象,然後建立一個附加的加密對象,該對象連結到上一個對象。

1240

注意,在上面的示例中,我們使用did.id将資料加密到目前經過身份驗證的DID。當然,我們也可以将資料加密到未經過本地身份驗證的使用者的DID,比如另一個使用者。

  1. 解密IPLD資料

當從IPFS檢索資料時,我們将得到加密的JWE。這意味着我們需要在擷取資料之後對其進行解密。

既然我們已經建立了互相連結的對象,那麼讓我們建立一個函數來檢索這些對象并遞歸地解密它們。

1240

上面的函數是一個簡單的示例,隻記錄解密的對象。我們可以用它來檢視這些對象的内容。

1240

以上就是教程的全部内容。星際無限在此希望喜歡深入研究的使用者或開發者人員可以在ipfs這些強大的标準之上建構你想要的東西。

繼續閱讀