encryptionKey 要求は、アプリケーションがユーザーのウォレットから秘密の暗号化キーを要求できるようにする強力な機能です。このキーは、ウォレットのマスターシークレットと、あなたが提供する salt から決定論的に導出されます。これにより、アプリケーションはユーザーのプライマリプライベートキーを一切扱うことなく、ユーザー固有のデータを暗号化でき、セキュリティとプライバシーが向上します。
仕組み
プロセスは直接的で安全です:
アプリケーションの開始:
あなたのアプリケーションが
encryptionKey要求をリクエストし、一意のsalt文字列を提供します。ウォレットがキーを導出:
ユーザーのウォレットがリクエストを受け取ります。安全なキー導出関数(具体的には
SHA3(Buffer.concat(keyPair.sk, salt), 3))を使用して、マスターシークレットと提供されたsaltを組み合わせます。ユーザーの承認:
ウォレットはユーザーにリクエストの承認を促し、アプリケーションが暗号化キーを生成したいことを説明します。
キーの返却:
ユーザーの承認後、導出されたキーはDID Connectレスポンスの一部としてアプリケーションに返送されます。
この方法により、たとえ2つの異なるアプリケーションが同じ salt でキーを要求したとしても、導出されるキーは各ユーザー固有のマスターシークレットに紐づけられているため、異なるものになります。
パラメータ
encryptionKey 要求オブジェクトは、以下のパラメータを受け入れます:
| パラメータ | タイプ | 必須 | 説明 |
|---|---|---|---|
type | String | はい | 'encryptionKey' に設定する必要があります。 |
description | String | いいえ | キーの目的を説明するためにウォレットでユーザーに表示されるメッセージ。デフォルトは「続行するにはencryptionKeyを提供してください。」です。 |
salt | String | はい | アプリケーションによって提供される一意の文字列。これはキー導出プロセスの重要なコンポーネントです。異なるsaltを使用すると、異なるキーが生成されます。 |
delegation | String | いいえ | 委任関係を証明するオプションのJWTトークン。これにより、Agentは他のDIDに代わってキーを要求できます。 |
meta | Any | いいえ | 要求に関連付けたいカスタムメタデータを保持するためのオブジェクト。デフォルトは {} です。 |
暗号化キーの要求
以下は、アプリケーション内で encryptionKey 要求をリクエストする方法の例です。通常、DID Connectセッションを開始する際に、claimsオブジェクト内でこれを定義します。
DID Connect Claims
const claims = {
encryptionKey: {
description: 'アプリケーション設定を暗号化するためのキーを生成します',
salt: 'このユーザーとコンテキストのための一意で永続的なsalt',
},
};
// このclaimsオブジェクトはWalletAuthenticatorインスタンスに渡されます
const { authInfo } = await authenticator.sign({
claims,
// ... その他のコンテキストパラメータ
});上記の例では、アプリケーションはキーを要求し、ユーザーへの説明的なメッセージと一意の salt を提供しています。
ウォレットのレスポンス
ユーザーがリクエストを承認した後、アプリケーションのコールバックエンドポイントがウォレットのレスポンスを受信します。検証後、レスポンスペイロードの claims 配列に導出された暗号化キーが含まれます。
Wallet Response Payload
{
"userDid": "z1...",
"userPk": "...",
"claims": [
{
"type": "encryptionKey",
"salt": "a-unique-and-persistent-salt-for-this-user-and-context",
"delegation": "",
"key": "...derived_encryption_key..."
}
],
"challenge": "...",
"timestamp": 1678886400
}アプリケーションはレスポンスから key を抽出し、暗号化および復号化タスクに使用できます。
ユースケース
この要求は、アプリケーションによって保存されたユーザーデータを保護する必要があるシナリオに最適です:
- ユーザー設定の暗号化: ユーザー設定やプロファイル情報をデータベースに安全に保存します。
- アプリケーションデータの保護: アプリケーション内でのユーザーのセッションやアクティビティに特有のデータを暗号化します。
- エンドツーエンド暗号化: 暗号化された通信チャネルを作成するための共有秘密を確立します。
encryptionKey 要求を活用することで、より安全でプライバシーを保護するアプリケーションを構築できます。要求の処理方法についてさらに詳しく知るには、WalletAuthenticatorのAPIリファレンスに進んでください。