キーペアクレームは、アプリケーションがユーザーのウォレットに新しい暗号キーペアの生成を要求できるようにする強力な機能です。これは、ユーザーのウォレットによって安全に管理されながら、あなたのサービスとの対話専用の新しいアプリケーション固有のアカウントやアイデンティティを作成するのに特に役立ちます。
サーバーでユーザーの資格情報を管理する代わりに、この責任をユーザーのDIDウォレットにオフロードすることで、セキュリティとユーザーコントロールの両方を強化できます。
ユースケース
- アプリケーション固有のアカウント: ユーザーがサインアップする際、新しいキーペアを要求して、アプリケーション内に専用のアカウントを作成できます。この新しいアカウントのDIDは、ユーザーのプライマリDIDとは異なります。
- セッションキーまたはデバイスキー: 特定のセッションやデバイス用の一時的なキーペアを生成し、キーのスコープとライフタイムを制限することでセキュリティを強化します。
- アイデンティティの移行:
migrateFromプロパティを指定することで、ユーザーを古いアカウントから新しいアカウントに移行するプロセスを容易にします。
仕組み
keyPairクレームを要求すると、DIDウォレットはあなたが提供した説明をユーザーに表示します。ユーザーが承認すると、ウォレットは設定したパラメータ(targetType)に従って新しいキーペアを生成します。デフォルトでは、ウォレットは新しいDIDをブロックチェーン上で宣言もします。その後、ウォレットは安全なDID Connectチャネルを通じて、新しいキーペア(公開鍵、秘密鍵、アドレス)をアプリケーションに返します。
パラメータ
keyPairクレームは以下のパラメータを受け付けます。
| Name | Type | Description |
|---|---|---|
description | string | 必須。 新しいキーペアが必要な理由をユーザーに説明するために表示されるメッセージ。 |
moniker | string | 必須。 新しいアカウントの人間が読める名前で、ユーザーのウォレットに表示されます。正規表現 ^[a-zA-Z0-9][-a-zA-Z0-9_]{2,128}$ に一致する必要があります。 |
declare | boolean | 任意。true(デフォルト)の場合、新しいDIDはチェーン上で宣言されます。オフチェーンのキーペアを生成するにはfalseに設定します。 |
migrateFrom | string | 任意。移行元のDIDアドレス。ウォレットはこれを使用して新しいアカウントを古いアカウントにリンクできます。 |
targetType | object | 任意。生成されるキーペアの暗号プロパティを指定するオブジェクト。 |
targetTypeオブジェクト
targetTypeオブジェクトを使用して、生成されるキーペアのタイプをカスタマイズできます。
| Key | Type | Default | Description |
|---|---|---|---|
role | string | account | DIDの役割。例:account、application、blocklet。 |
key | string | ed25519 | 暗号キーアルゴリズム。例:ed25519、secp256k1。 |
hash | string | sha3 | アドレス生成に使用されるハッシュアルゴリズム。例:sha3、sha2、keccak。 |
encoding | string | base58 | アドレスのエンコーディング。例:base58、base16。 |
例:新しいアカウントのリクエスト
これは、ユーザーの新しいキーペアを要求する方法の例です。これは、アプリケーション内のアカウントとして使用できます。
新しいキーペアをリクエストする
const claims = {
keyPair: {
description: '私たちの素晴らしいアプリの新しいアカウントを作成します',
moniker: 'my-app-account',
targetType: {
role: 'account',
},
},
};
// ハンドラ内
const { authInfo } = await authenticator.sign({
claims,
// ... 他のコンテキストプロパティ
});例:Blocklet用のキーペアの生成
Blockletを構築している場合、特定の役割を持つキーペアが必要になることがあります。また、すぐにオンチェーンで宣言せず、既存のDIDから移行することも選択できます。
Blocklet用のキーペアをリクエストする
const claims = {
keyPair: {
description: '新しいBlockletを管理するためのキーペアを生成します',
moniker: 'my-blocklet-key',
declare: false, // キーペアを生成しますが、宣言トランザクションはブロードキャストしません
migrateFrom: 'z3CtKiQt2QnLXaZfEfBYvJHTZoPXJggnHEYx4', // 移行元のDID
targetType: {
role: 'blocklet',
key: 'ed25519',
hash: 'sha3',
},
},
};
// ハンドラ内
const { authInfo } = await authenticator.sign({
claims,
// ... 他のコンテキストプロパティ
});ウォレットのレスポンス
ユーザーがリクエストを承認すると、アプリケーションのonAuthコールバックはclaims配列内で新しく生成されたキーペアを受け取ります。単一のkeyPairクレームに対するレスポンスは次のようになります。
ウォレットレスポンスの例
{
"type": "keyPair",
"sk": "...", // 新しいキーペアの秘密鍵
"pk": "...", // 新しいキーペアの公開鍵
"address": "...", // 新しいキーペアのDIDアドレス
"moniker": "my-app-account",
"meta": {}
}受け取った秘密鍵(sk)は、新しく作成されたDIDの完全な制御を許可するため、アプリケーションはこれを安全に処理する必要があります。
新しいキーペアをリクエストする方法を理解したところで、他の目的でキーを派生させることに興味があるかもしれません。