http://www.7klian.com

如安在IPFS上存储签名和加密的数据

如何在IPFS上存储签名和加密的数据

在IPFS上存储颠末身份验证和加密的数据是很多Web3应用措施的焦点构建块,可是迄今为止,还没有尺度化的方法来编码这种范例的数据。

没有尺度,很多开拓人员被迫为其签名和加密的数据建设自界说名目。通过将数据存储到IPFS的特定实现中,这已经阻碍了IPFS中存储的信息的开放性和互操纵性。验证数据的另一种要领是将数据放入IPFS,并将数据的CID放入区块链(如以太坊)的智能合约中。从本质上讲,这是在数据之上添加签名并将签名记录耐久生存在区块链上的昂贵要领。

跟着EIP-2844的引入,该尺度答允钱包支持一些新的要领来基于DID和dag-joseIPLD编解码器对数据举办签名息争密,我们此刻可以简朴地将颠末身份验证和加密的数据直接放入IPFS。

什么是DID和JOSE?

DID是用于分手标识符的W3C尺度。

详细内容可以参考我们上一篇文章:Astral 构建新世界。本文仅在这里简朴先容,DID指定了从字符串标识符(譬喻did:3:bafy...)到包括用于签名验证和密钥互换的民众密钥的DID文档的一般要领。在大大都DID要领中,出于安详原因旋转键时可以更新文档。

JOSE是IETF(Internet Engineering Task Force)国际互联网工程任务组的尺度,,代表JSON工具签名和加密,险些可以表明其寄义。该尺度有两个主要原语:JWS(JSON Web签名)和JWE(JSON Web加密)。这两种名目都答允多个参加者:在JWS中,有效负载上可以有一个或多个签名,而在JWE中,加密明文可以有一个或多个吸收者。

利用dag-jose和EIP2844举办构建

当我们利用dag-jose和EIP-2844作为根基构建模块来构建Ceramic时,我们建设了一些底层东西,这些东西使我们可以更轻松地利用这些技能。

js-3id-did-provider是利用3ID作为DID要领的EIP-2844的实现。它可以单独用作DID提供措施,也可以在3ID Connect库中更利便地利用。3ID Connect答允用户利用其以太坊钱包(即将支持更多区块链)来会见DID Provider。

key-did-provider-ed25519是利用Key DID要领的EIP-2844的实现。它是同时支持签名和加密的最简朴的DID提供措施。

js-did是一个库,答允开拓人员以DID的形式暗示用户。这是我们在本教程中将要看到的主要界面。它使我们可以或许与当前颠末身份验证的用户签署数据,将数据加密给任何用户(DID),以及与当前颠末身份验证的用户解密数据。

IPFS中的签名数据

通过利用dag-jose?IPLD编解码器,我们可以建设链接和签名的数据布局。这是通过建设包括指向其他数据链接的JSON Web签名(JWS)来完成的。dag-jose编解码器办理的主要问题之一是,传统大将JWS的有效负载编码为:base64url这意味着,假如个中包括IPLD链接,则您将无法遍历这些链接。

相反,我们对DagJWS所做的是将有效负载强制为CID的字节。然后,编解码器将有效负载转换为CID实例,并将其配置link为DagJWS的属性。这使我们可以轻松地遍历生成的DAG。

配置具有dag-jose支持的IPFS

由于dag-jose是新的IPLD编解码器,因此默认环境下它尚未包括在js-ipfs中。它还实现了新的IPLD编解码器API,js-ipfs尚不支持该API。因此,在建设IPFS实例时,需要执行以下操纵:

import IPFS from 'ipfs'import dagJose from 'dag-jose'import multiformats from 'multiformats/basics'import legacy from 'multiformats/legacy'multiformats.multicodec.add(dagJose)const dagJoseFormat = legacy(multiformats, dagJose.name)const ipfs = await Ipfs.create({ ipld: { formats: [dagJoseFormat] } })

确保安装正确的多名目版本:

$ npm i multiformats@3.0.3

配置一个DID实例

在下面的示例配置中,我们利用key-did-provider-ed25519。假如您选择从上方利用网络,则将在靠山利用3ID Connect和js-3id-did-provider。

import { DID } from 'dids'import { Ed25519Provider } from 'key-did-provider-ed25519'import KeyResolver from '@ceramicnetwork/key-did-resolver'import { randomBytes } from '@stablelib/random'// generate a seed, used as a secret for the DIDconst seed = randomBytes(32)// create did instanceconst provider = new Ed25519Provider(seed)const did = new DID({ provider, resolver: KeyResolver.getResolver() })await did.authenticate()window.did = didconsole.log('Connected with DID:', did.id)

建设一个签名的数据布局

此刻我们可以开始签名并将数据添加到IPFS!首先,让我们建设一个简朴的函数,该函数接管有效负载,利用did.createDagJWS要领对其举办签名,然后将功效数据添加到IPFS。

正如我们在下面的代码中看到的那样,我们从该要领中得到了两个工具:jwsDagJWS自己和linkedBlock编码有效载荷的原始字节。靠山产生的工作是利用dag-cbor对有效负载举办编码,从此,将已编码有效负载的CID用作created的有效负载jws。我们可以通过会见DagJWS实例上的有效负载CID?jws.link。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。