認証され暗号化されたデータを IPFS に保存することは、多くの Web3 アプリケーションの中心的な構成要素ですが、これまでのところ、このタイプのデータをエンコードするための標準化された方法はありませんでした。 標準がなかったため、多くの開発者は署名および暗号化されたデータ用にカスタム形式を作成せざるを得ませんでした。データを IPFS の特定の実装に保存することにより、IPFS に保存された情報のオープン性と相互運用性が妨げられていました。データを検証する別の方法は、データを IPFS に格納し、データの CID を Ethereum などのブロックチェーン上のスマート コントラクトに格納することです。本質的には、データに署名を追加し、ブロックチェーン上に署名の記録を保持するコストのかかる方法です。 EIP-2844 の導入により、ウォレットが DID と dag-joseIPLD コーデックに基づいてデータの署名と復号化を行う新しい方法をサポートできる標準が実現し、認証および暗号化されたデータを IPFS に直接置くことができるようになりました。 DID は、分散識別子の W3C 標準です。 詳細については、前回の記事「Astral が新しい世界を構築」を参照してください。簡潔にするために、DID では、文字列識別子 (例: did:3:bafy...) から署名検証と鍵交換のための公開鍵を含む DID ドキュメントに変換するための一般的な方法を指定します。ほとんどの DID アプローチでは、セキュリティ上の理由からキーがローテーションされるときにドキュメントを更新できます。 JOSE は IETF (Internet Engineering Task Force) の標準であり、JSON Object Signature and Encryption の略称です。その意味はほぼこれで説明できます。この標準には、JWS (JSON Web 署名) と JWE (JSON Web 暗号化) という 2 つの主要なプリミティブがあります。どちらの形式でも複数の参加者が許可されます。JWS ではペイロードに 1 つ以上の署名が存在する可能性があり、JWE では暗号化されたプレーンテキストの受信者が 1 人以上存在する可能性があります。 基本的な構成要素として dag-jose と EIP-2844 を使用して Ceramic を構築した際に、これらのテクノロジをより簡単に使用できるようにする低レベルのツールを作成しました。 js-3id-did-provider は、3ID を DID メソッドとして使用する EIP-2844 の実装です。単独で DID プロバイダーとして使用することも、3ID Connect ライブラリ内でより便利に使用することもできます。 3ID Connect を使用すると、ユーザーは Ethereum ウォレットを使用して DID プロバイダーにアクセスできます (他のブロックチェーンのサポートも近日中に開始されます)。 key-did-provider-ed25519 は、Key DID メソッドを使用した EIP-2844 の実装です。これは、署名と暗号化の両方をサポートする最もシンプルな DID プロバイダーです。 js-did は、開発者がユーザーを DID の形式で表現できるようにするライブラリです。これは、このチュートリアルで取り上げるメイン インターフェースです。これにより、現在認証されているユーザーでデータに署名したり、任意のユーザー (DID) に対してデータを暗号化したり、現在認証されているユーザーでデータを復号化したりできるようになります。 dag-jose IPLD コーデックを使用すると、リンクされ署名されたデータ構造を作成できます。これは、他のデータへのリンクを含む JSON Web 署名 (JWS) を作成することによって行われます。 dag-jose コーデックが解決する主な問題の 1 つは、JWS ペイロードが従来 base64url としてエンコードされていることです。つまり、IPLD リンクが含まれている場合、それらを通過することはできません。 代わりに、DagJWS では、ペイロードを CID のバイトに強制します。次に、コーデックはペイロードを CID インスタンスに変換し、それを DagJWS のリンク プロパティとして設定します。これにより、結果の DAG を簡単に走査できるようになります。 dag-jose は新しい IPLD コーデックであるため、js-ipfs にはまだデフォルトで含まれていません。また、js-ipfs がまだサポートしていない新しい IPLD コーデック API も実装しています。したがって、IPFS インスタンスを作成するときは、次の操作を行う必要があります。 正しいマルチフォーマットバージョンがインストールされていることを確認してください。 以下の設定例では、key-did-provider-ed25519 を使用します。上記のネットワークを使用することを選択した場合、バックグラウンドで 3ID Connect と js-3id-did-provider が使用されます。 これで、IPFS への署名とデータの追加を開始できます。まず、ペイロードを受け入れ、did.createDagJWS メソッドを使用して署名し、結果のデータを IPFS に追加する簡単な関数を作成しましょう。 以下のコードからわかるように、このメソッドからは、jwsDagJWS 自体と linkedBlock でエンコードされたペイロードの生のバイトの 2 つのオブジェクトが取得されます。バックグラウンドでは、ペイロードが dag-cbor を使用してエンコードされ、その後、エンコードされたペイロードの CID が作成された jws のペイロードとして使用されます。 jws.link を介して DagJWS インスタンス上のペイロード CID にアクセスできます。 この関数を使用して、最初の署名付きデータ オブジェクトを作成しましょう。 // 最初の署名済みオブジェクトを作成しますconst cid1 = await addSignedObject({ hello: 'world' })// DagJWS をログに記録します:console.log((await ipfs.dag.get(cid1)).value)// >{// > payload: "AXESIHhRlyKdyLsRUpRdpY4jSPfiee7e0GzCynNtDoeYWLUB",// > signatures: [{// > signature: "h7bHmTaBGza_QlFRI9LBfgB3Nw0m7hLzwMm4nLvcR3n9sHKRoCrY0soWnDbmuG7jfVgx4rYkjJohDuMNgbTpEQ",// > protected: ], // > link: CID(bafyreidykglsfhoixmivffc5uwhcgshx4j465xwqntbmu43nb2dzqwfvae)// > }// ペイロードをログに記録:ipfs.dag.get(cid1, { path: '/link' }).then(b => dag.get(cid2, { path: '/link/prev/link' }).then(b => console.log(b.value))// > { // > hello: 'getting the hang of this'// > prev: CID(bagcqcerappi42sb4uyrjkhhakqvkiaibkl4pfnwpyt53xkmsbkns4y33ljzq)// > }// 古いペイロードをログに記録:ipfs.dag.get(cid2, { path: '/link/prev/link' }).then(b => console.log(b.value))// > { // > hello: '慣れてきました'// > prev: CID(bagcqcerappi42sb4uyrjkhhakqvkiaibkl4pfnwpyt53xkmsbkns4y33ljzq)// > } > { hello: 'world' } ペイロードは DID によって署名されるため、CID と JWS の値は異なることに注意してください。 JWS の検証は非常に簡単です。 JWS オブジェクトを取得して、verifyJWS メソッドに渡すだけです。署名が無効な場合、この関数はエラーをスローします。署名が有効な場合は、JWS の署名に使用された DID (キー フラグメントを含む) を返します。 IPFS でデータに署名するのは難しい問題ですが、おそらくもっと興味深いのはデータの暗号化です。 dag-jose と EIP-2844 を使用すると、データを 1 つ以上の DID に暗号化し、IPFS に直接保存できます。以下では、js-did ライブラリが提供する便利なツールを使用してこれを行う方法を示します。 1 つ以上の DID に暗号化された DagJWE オブジェクトを作成する簡単な方法があります。createDagJWE。このメソッドは、IPLD オブジェクト (CID リンクの JSON オブジェクトも含まれる場合があります) と DID の配列を受け入れます。 DID を解決して、DID ドキュメント内にある公開暗号化キーを取得し、それらのキーで暗号化された JWE を作成します。まず、JWE を作成して IPFS に配置するヘルパー関数を作成しましょう。 この機能があれば、暗号化されたオブジェクトをいくつか作成できます。次の例では、最初に単純な暗号化オブジェクトを作成し、次に前のオブジェクトにリンクされた追加の暗号化オブジェクトを作成します。 上記の例では、[did.id](を使用していることに注意してください。 IPFS からデータを取得した後、暗号化された JWE のみが取得されます。つまり、データを取得した後でそれを復号化する必要があるということです。相互にリンクされたオブジェクトはすでに作成されているので、これらのオブジェクトを取得して再帰的に復号化する関数を作成しましょう。 上記の関数は例であり、復号化されたオブジェクトのみをログに記録します。これを使用して、これらのオブジェクトの内容を表示できます。 |
<<: イーサリアムネットワークの1日の取引量はビットコインより28%高い
>>: 2021 年の Polkadot エコシステムの価値は何ですか? |オンライン教室
1. 翻訳者序文:タイトル画像は万向副会長:暁鋒より拝借。肖氏の講演資料にはブロックチェーンの要素が...
Facebook のプライバシー侵害に対する反応はさまざまで、データ侵害の規模に衝撃を受けた人から、...
原題:「国盛通信宋家基 | カナンテクノロジーの詳細:世界初の採掘機械株、業界拡張はAIに注目」著者...
英国財務省は、ステーブルコインを規制する提案を起草しているとともに、現金の代替として中央銀行デジタル...
ロシア中央銀行は本日、デジタルルーブル導入の可能性に関する報告書を発表した。報道によると、銀行はこの...
Ethereum PoS アップグレード日が近づくにつれ、コミュニティ内の複数のチームが、Ethe...
先週、ビットコインの採掘から取引までの汚染レベルが高いため、テスラは自動車購入の支払い方法としてビッ...
見慣れた光景?イーサリアム(ETH)の開発者は、ネットワークへの攻撃に対処するために硬分叉を使用する...
Bitcoin Core ソフトウェアがさらにアップグレードされ、この新しいアップデートである Bi...
高度な研究開発に取り組んでいる米国の大手防衛機関は現在、安全なブロックチェーンベースのメッセージング...
BlockBeatsによると、ビットコイン採掘会社Greenidge Generation Hold...
昨日の早朝、ずっと高騰していた金価格が突然「一転」して暴落し、7年ぶりの大幅な下落を記録しました!金...
BlockBeatsによると、1月11日、暗号資産アナリストのジョセフ・ヤング氏は、CryptoQu...
ビットコインネットワークは取引の混雑と高額な手数料に直面しているため、多くの人々がこれらの問題を回避...
合併に注目が集まる中、いくつかの問題が浮上している。 – ハードフォークされたトークンをどのように評...