鍵のラッピング

ルート鍵を使用して暗号鍵を管理および保護するには、以下を使用します。 IBM® Key Protect API およびコンソール。

データ暗号鍵アプリケーションに保管されているデータを暗号化するために使用される暗号鍵。ルート鍵データ・サービスに保管されている他の鍵の暗号化および暗号化解除に使用される対称ラップ鍵。(DEK)でラップする場合、Key Protect 複数のアルゴリズムの強度を組み合わせて、暗号化されたデータのプライバシーと保全性を保護します。

鍵ラッピングが、クラウド内の保存データのセキュリティー管理にどのように役立つかについては、エンベロープ暗号化を使用したデータ保護を参照してください。

コンソールを使用してキーをラップする

既に Key Protect のインスタンスがあり、グラフィカル・インターフェースを使用して DEK を暗号化したい場合は、IBM Cloud コンソールを使用できます。

独自のキー をインポートまたは作成したら、以下の手順に従って、そのキーを使用してデータをラップしてください

  1. IBM Cloud コンソールにログインしてください。

  2. **「メニュー」から、「リソース・リスト」**を選択し、リソースのリストを表示します。

  3. IBM Cloud リソース・リストで、Key Protect のプロビジョン済みインスタンスを選択します。

  4. 鍵のリストから、データのラップに使用するルート鍵を選択します。

  5. アイコンをクリックしてから、**「エンベロープ暗号化」**オプションをクリックしてサイド・パネルを開きます。 「Wrap key」オプションが選択されていることを確認してください。

  6. Key Protect、データをラップするか、 Base64 エンコードされた平文と、必要に応じて追加の認証データ(AAD)を提供して、データをラップすることができます。 独自の平文とAADを指定する場合は、データのアンラップ時にそれらを指定する必要があります。 AADおよび Base64 でエンコードされた平文の作成経験がない場合は、「 Wrap key for me 」オプションを選択したままにし、 Key Protect にデータのラッピングを任せてください。

  7. **「鍵のラップ (Wrap Key)」**ボタンをクリックします。

API を使用した鍵のラッピング

Key Protect 内で管理するルート鍵を使用して、指定されたデータ暗号化鍵 (DEK) を保護することができます。

サービス内でルート鍵を指定した後、以下のエンドポイントへの POST 呼び出しを行うことにより、拡張暗号化を使用して DEK をラップできます。

https://<region>.kms.cloud.ibm.com/api/v2/keys/<keyID_or_alias>/actions/wrap
  1. サービス内で鍵の処理を行うために、認証資格情報を取得します。

  2. 管理および保護する DEK の鍵の素材をコピーします。

    以下のマネージャーまたはライターの特権を持っている場合は (Key Protect インスタンス)、GET /v2/keys/<keyID_or_alias> 要求を行うことにより、特定の鍵の鍵素材を取得できます。

  3. ラッピングに使用するルート鍵の ID をコピーします。

  4. 以下の curl コマンドを実行し、ラップ操作を使用して鍵を保護します。

    $ curl -X POST \
        "https://<region>.kms.cloud.ibm.com/api/v2/keys/<keyID_or_alias>/actions/wrap" \
        -H "accept: application/vnd.ibm.kms.key_action+json" \
        -H "authorization: Bearer <IAM_token>" \
        -H "bluemix-instance: <instance_ID>" \
        -H "content-type: application/vnd.ibm.kms.key_action+json" \
        -H "x-kms-key-ring: <key_ring_ID>" \
        -H "correlation-id: <correlation_ID>" \
        -d '{
                "plaintext": "<data_key>",
                "aad": [
                    "<additional_data>",
                    "<additional_data>"
                ]
            }'
    

次の表に従って、例の要求内の変数を置き換えてください。

変数 説明
リージョン 必須。 Key Protect インスタンスが存在している地理的領域を表す、地域の省略形 (例: us-south または eu-gb)。 詳しくは、地域のサービス・エンドポイントを参照してください。
keyID_or_alias 必須。 ラッピングに使用するルート鍵の固有 ID または別名。
IAM_token 必須。 IBM Cloud アクセス・トークン。 Bearer 値を含む、IAM トークンの全コンテンツを curl 要求に組み込みます。 詳細については、アクセス・トークンのリトリーブを参照してください。
instance_ID 必須。 Key Protect サービス・インスタンスに割り当てられた固有 ID。 詳細については、インスタンス ID のリトリーブを参照してください。
key_ring_ID オプション。 鍵が含まれている鍵リングの固有 ID。 指定しないと、Key Protect は、指定されたインスタンスに関連付けられているすべての鍵リングで鍵を検索します。 より最適化されたリクエストのためには、キーホルダーIDを指定することが推奨される。 x-kms-key-ring ヘッダーなしで作成された鍵の鍵リング ID は default です。 詳しくは、鍵のグループ化を参照してください。
correlation_ID オプション。 トランザクションを追跡し、相互に関連付けるために使用される固有 ID。
data_key オプション。 管理および保護する DEK の鍵の素材。 このプレーン・テキストの値は base64 でエンコードする必要があります。 鍵素材のエンコードについて詳しくは、
        [鍵素材のエンコード](/docs/key-protect?topic=key-protect-import-root-keys#how-to-encode-root-key-material)を参照してください。 新しい DEK を生成するには、plaintext 属性を省略します。 サービスは、ランダム・プレーン・テキスト (32 バイト) を生成してその値をラップしてから、生成された値とラップされた値の両方を応答で返します。 生成およびラップされた値は Base64 でエンコードされているため、鍵を復号するにはこれらをデコードする必要があります。 |

| additional_data | オプション。 鍵のセキュリティをさらに強化するために使用される追加認証データ(AAD)。 各ストリングは、最大 255 文字を保持できます。 サービスに対してラップ呼び出を行ったときに AAD を提供した場合は、後続のアンラップ呼び出し時にも同じ AAD を指定する必要があります。 重要: Key Protect サービスは、追加の認証データを保存しません。 AAD を提供する場合は、そのデータを安全な場所に保存しておき、その後のアンラップ要求の際に、同じ AAD にアクセスして提供できるよう確保してください。 |

ラップされたデータ暗号鍵 (base64 エンコードの鍵素材を含む) が、応答のエンティティー本体で返されます。 応答本体には、提供されたプレーン・テキストをラップするために使用された鍵のバージョンの ID も含まれています。 以下のJSONオブジェクトは、その返り値の例を示しています。

{
    "ciphertext": "eyJjaXBoZXJ0ZXh0IjoiYmFzZTY0LWtleS1nb2VzLWhlcmUiLCJpdiI6IjRCSDlKREVmYU1RM3NHTGkiLCJ2ZXJzaW9uIjoiNC4wLjAiLCJoYW5kbGUiOiJ1dWlkLWdvZXMtaGVyZSJ9",
    "keyVersion": {
        "id": "02fd6835-6001-4482-a892-13bd2085f75d"
    }
}

ラップ要求を行う際に plaintext 属性を省略した場合、サービスは、生成されたデータ暗号鍵 (DEK) とラップされた DEK の両方を Base64 エンコード形式で返します。

{
    "plaintext": "Rm91ciBzY29yZSBhbmQgc2V2ZW4geWVhcnMgYWdv",
    "ciphertext": "eyJjaXBoZXJ0ZXh0IjoiYmFzZTY0LWtleS1nb2VzLWhlcmUiLCJpdiI6IjRCSDlKREVmYU1RM3NHTGkiLCJ2ZXJzaW9uIjoiNC4wLjAiLCJoYW5kbGUiOiJ1dWlkLWdvZXMtaGVyZSJ9",
    "keyVersion": {
        "id": "12e8c9c2-a162-472d-b7d6-8b9a86b815a6"
    }
}

plaintext の値はアンラップされた DEK を表し、ciphertext の値は ラップされた DEK を表します。これらの値は両方とも base64 でエンコードされています。 keyVersion.id の値は、ラッピングに使用されたルート鍵のバージョンを表します。

Key Protect がユーザーの代わりに新規データ暗号鍵 (DEK) を生成するようにする場合、ラップ要求で空の本体を渡すこともできます。 Base64 エンコードの鍵素材が含まれている生成された DEK が、ラップされた DEK とともに応答のエンティティー本体で返されます。