IBM Cloud Docs
鍵のラッピング

鍵のラッピング

ルート鍵を使用して暗号鍵を管理および保護するには、以下を使用します。 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 や base 64 エンコードのプレーン・テキストを作成したことがない場合は、**「鍵の自動ラップ (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 は、デフォルトです。または詳細については、鍵のグループ化を参照してください。
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 にアクセスすることや、後続のアンラップ要求時に同じ 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"
    }
}

The plaintext value represents the unwrapped DEK, and the ciphertext の値はラップされたDEKを表し、どちらもbase64エンコードされている。 この keyVersion.id value represents the version of the root key that was used for wrapping.

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