首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

星际无限|什么是DIDs和JOSE

随着Filecoin的热度越来越高,研究IPFS的受众也越来越广,今日星际无限将为大家梳理出如何使用两个新标准(dag-jose和EIP-2844)在IPFS中直接存储签名和加密数据的相关教程。

星际无限了解到在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中,加密的明文可能有一个或多个接收者。

2. 建立dag -jose和EIP2844

当我们将dag-jose和EIP-2844作为基本构建块去构建Ceramic 时,我们已经创建了一些较低级别的工具,它们允许我们更容易地使用这些技术。本教程将向您展示如何直接使用这些强大的工具。

IdentityWallet是一个EIP-2844的实现,使用3ID作为DID方法。它可以作为独立的DID提供程序使用,或者更方便地在3ID连接库中使用。3ID Connect允许用户使用他们的Ethereum钱包(支持更多的区块链即将到来)来访问DID提供商。js-did是一个允许开发人员以DID的形式表示用户的文库。它允许我们与当前经过身份验证的用户签署数据,对任何用户(DID)的数据进行加密,并与当前经过身份验证的用户解密数据。

3. 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实例时,我们需要执行以下操作:

请确保安装正确的多格式版本:

2)安装程序和3ID连接

在下面的示例设置中,我们使用注入的Ethereum提供程序(例如MetaMask)创建一个3ID连接和DID实例。

5. 创建签名数据结构

我们现在可以开始向IPFS签名和添加数据了!首先,我们创建一个简单的函数,它接受一个有效负载,使用did对其进行签名,并将结果数据添加到IPFS中。

正如我们在下面的代码中看到的,我们从这个方法获得了两个对象:jws,即DagJWS本身和linkedBlock,即已编码的有效负载的原始字节。在后台发生的情况是,使用dag -cbor对有效负载进行编码,然后使用已编码有效负载的CID作为创建的jws的有效负载。我们可以在DagJWS实例上以jws.link的形式访问这个有效负载CID。

使用这个函数,让我们创建我们的第一个签名数据对象:

注意,CIDs和JWS的值对您来说是不同的,因为有效负载将由DID签名。

6. 验证已签名的数据结构

验证JWS非常简单。只需检索JWS对象并将其传递给verifyJWS方法。如果签名无效,此函数将抛出错误。如果签名是有效的,它将返回用于签名JWS的DID(带键片段)。

7. IPFS中的加密数据

IPFS中的签名数据是这个难题的一部分,但可能更有趣的是加密数据。使用dag-jose和EIP-2844,我们可以将数据加密到一个或多个did,并直接存储在IPFS中。下面我们将演示如何使用js-did库提供的便利工具来完成此任务。

8. 加密IPLD数据

有一个简单的方法可以创建一个DagJWE对象,该对象被加密到一个或多个did,即createDagJWE。这个方法接受一个IPLD对象(也可能包含CID链接的JSON对象)和一个did数组。它将解析DIDs以检索在它们的DID文档中找到的公共加密密钥,并创建一个对这些密钥加密的JWE。首先,让我们创建一个helper函数,它创建一个JWE并将其放入IPFS中。

一旦我们有了这个函数,我们就可以创建一些加密的对象。在下面的示例中,我们首先创建一个简单的加密对象,然后创建一个附加的加密对象,该对象链接到上一个对象。

注意,在上面的示例中,我们使用[did.id]()将数据加密到当前经过身份验证的DID。当然,我们也可以将数据加密到未经过本地身份验证的用户的DID,比如另一个用户。

9. 解密IPLD数据

当从IPFS检索数据时,我们将得到加密的JWE。这意味着我们需要在获取数据之后对其进行解密。

既然我们已经创建了相互链接的对象,那么让我们创建一个函数来检索这些对象并递归地解密它们。

上面的函数是一个简单的示例,只记录解密的对象。我们可以用它来查看这些对象的内容。

以上就是教程的全部内容。星际无限在此希望喜欢深入研究的用户或开发者人员可以在ipfs这些强大的标准之上构建你想要的东西。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201125A0312500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券