認証され暗号化されたデータを 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 エコシステムの価値は何ですか? |オンライン教室
オーストラリア証券取引所がブロックチェーン技術の開発と応用に着手したことに続き、別のオーストラリアの...
マイナーからのビットコインの平均流出量は減少し続けています。 BTC.comのデータによると、ビット...
先週の木曜日、ブロックチェーンカンファレンス「Blockchain Incredible Party...
BOME と SLERF は狂気じみた上昇を終え、市場は再び富を得るための「ゴールドラッシュ」を経...
8月8日午後、易邦インターナショナルは記者会見を開いた。同社の胡東会長は、先週金曜日(8月6日)、浙...
上海の格上げが迫る中、流動性担保トラックが注目されている。上海アップグレード後、アンステークが有効に...
Innosiliconの公式WeChatアカウントは声明を発表した。 Siaハードフォークに関するI...
今回、Uniswap はアグリゲーター プラットフォームとスケジューリング プロトコルをリリースした...
著名な暗号通貨専門家でコーネル大学教授のシラー氏は最近、EOSの状況は悪化すると指摘し、EOSが提案...
8月31日午前10時30分、Ultrasound.moneyのデータによると、過去24時間でイーサリ...
記者は今日、北京市朝陽区人民法院から、四川省発展改革委員会が最近、関係市(州)を組織して2022年初...
Bitcoin.comによると、最近の法的判決により、ロシアのイルクーツクにある教会は、敷地内にマイ...
2020年10月15日のメインネットの正式リリース以来、Filecoinマイニングの「暗黒時代」は...
こうすることで、スマート コントラクトを小さく保つインセンティブが生まれ、コストが削減されます。コン...
出典: ファーストクラス・ウェアハウス編集者注: 元のタイトルは「Grin v4.0 ハードフォーク...