次の方法で共有


Azure Cloud HSM でのキー管理

効果的なキー管理は、Azure Cloud HSM のパフォーマンス、セキュリティ、効率性を最適化するために重要です。 この記事では、キー ストレージの制限、キー ラッピング セキュリティ、キー属性、キャッシュ戦略を処理するためのベスト プラクティスと推奨事項について説明します。

キーストレージの制限を管理する

ハードウェア セキュリティ モジュール (HSM) には、1 回に格納できるトークンとセッション キーの最大数に制限があります。 これらの制限の詳細については、 Azure Cloud HSM サービスの制限に関するページを参照してください。

Azure Cloud HSM サービスの制限を超えないようにするには、次の 1 つ以上の戦略を使用してキーを効率的に管理することを検討してください。

  • キーのローテーション: キーを頻繁にローテーションして、古いキーが置き換えられ、新しいキーの領域が解放されるようにします。 頻繁なローテーションは、セキュリティを維持しながら、HSM をストレージの制限内に維持するのに役立ちます。
  • キー階層: 主キーを使用して他のキーを暗号化するキー階層を使用します。 この階層により、HSM に直接格納する必要があるキーの数が減ります。
  • キーの共有と再利用: 複数のセッションまたはトークンを持つアプリケーションの場合は、キーを共有するか、再利用して格納される合計数を減らすことを検討してください。
  • キーの削除: キーが不要になった後 (たとえば、セッションが終了した後)、新しいキーの領域を解放するために安全に削除されていることを確認します。

キーを作成してから 24 時間待って、Azure Cloud HSM デプロイ内の同期とバックアップが完了していることを確認します。

キーラッピングを管理する

Azure Cloud HSM の EXTRACTABLE 属性を使用して、キーを抽出可能または非トレース可能としてマークします。 既定では、HSM キーは抽出可能として設定されます。 HSM から抽出可能なキーをエクスポートするには、キーラップを使用してキーを暗号化します。 その後、キーを使用する前に、同じラッピング キーでラップ解除する必要があります。

これに対し、どのような状況でも、非トレース 可能なキーを Azure Cloud HSM からエクスポートすることはできません。 nonextractable としてキーを設定した後、キーを抽出可能に変更する方法はありません。 キーを抽出可能にする必要があるかどうかを慎重に検討し、それに応じてキー属性を設定することが重要です。

アプリケーションでキーの折り返しが必要な場合は、 信頼されたキー ラッピングを使用することをお勧めします。 この方法では、HSM ユーザーが、管理者が明示的に信頼済みとして指定したキーのみをラップおよびラップ解除することを制限します。

  • EXTRACTABLE=0: EXTRACTABLE 属性を 0 に設定して作成されたキーは、マスクされたオブジェクト以外ではエクスポートできません。 HSM から一切出さないようにするキーに最適です。

  • WRAP_WITH_TRUSTED=1: 既定では、Azure Cloud HSM SDK を使用して作成された抽出可能なキーは、信頼されたキー ラッピングを使用します。 ただし、PKCS#11 の仕様では、既定で WRAP_WITH_TRUSTEDCK_FALSE (0) に設定されます。 信頼されたキー ラッピングを使用しない場合、暗号化ユーザーは承認なしでキーのプライベート マテリアルをエクスポートできます。 クライアント アプリケーションにアクセスし、それらのキーを使用するユーザーは、プレーンテキストでエクスポートできます。

Azure Cloud HSM プロバイダーの主な属性のサポート

Azure Cloud HSM プロバイダー 秘密キーと対称キーの既定の属性 EXTRACTABLE=0 をサポートしています プロバイダー内でのWRAP_WITH_TRUSTEDの構成をサポートします 既定の WRAP_WITH_TRUSTED 値
azcloudhsm_util EXTRACTABLE!WRAP_WITH_TRUSTED イエス イエス 1 (0 はパラメーターを使用して設定できます)
PKCS#11 EXTRACTABLE!WRAP_WITH_TRUSTED イエス イエス 0 (PKCS#11 仕様で指定されていますが、API で 1 に設定できます)
CNG/KSP EXTRACTABLE!WRAP_WITH_TRUSTED いいえ いいえ 1
OpenSSL エンジン EXTRACTABLE!WRAP_WITH_TRUSTED いいえ いいえ 1
JCE !EXTRACTABLE!PERSISTANT!WRAP_WITH_TRUSTED イエス いいえ 1

Cryptography API: Next Generation (CNG) プロバイダーを使用して作成するキーは、常に EXTRACTABLEとして設定されます。 CavImportKey.exe ツールを使用すると、キー ハンドルを使用して他の Azure Cloud HSM ツールから CNG プロバイダーにキーをインポートできます。 このインポートにより、既存のキー ハンドルからキー ストレージ プロバイダー (KSP) にキーが作成されます。

CNG または KSP をプロバイダーとして使用する証明機関の場合、CNG プロバイダー内で生成されたすべてのキーは引き続き抽出可能としてマークされます。 HSM でキーが TRUSTED としてマークされている場合 (ユーザーが生成したキー暗号化キーなど)、 WRAP_WITH_TRUSTED 変更後も、これらのキーの秘密キープレーンテキストを抽出するために使用される可能性があります。

このような場合は、キーをEXTRACTABLEとしてマークしたくない場合は、azcloudhsm_utilを使用してキーを生成することをお勧めします。 getAttributeを使用して、生成されたキーに目的の属性があることを確認することをお勧めします。

キー属性を使用してキーのアクセス許可を管理する

キー属性を使用して、アクセス許可などの主要な機能を管理します。 キーを生成するときは、キー属性を使用して、そのキーの特定の操作を許可または制限するアクセス許可を指定します。 目的に必要な属性のみを持つキーを生成することをお勧めします。

たとえば、暗号化に 使用される Advanced Encryption Standard (AES) キーでは、HSM の外部でキーをラップすることはできません。 Azure Cloud HSM SDK の属性の詳細については、 統合ガイドを参照してください。

キー オブジェクトをキャッシュして待機時間を最適化する

待機時間を短縮するには、可能な限りキー オブジェクトをキャッシュすることを検討してください。 キーを検索すると、Azure Cloud HSM クラスター内の各 HSM に対してクエリが実行されます。 この操作はコストがかかり、効率的にスケーリングされません。 キー検索の方法は、プロバイダーによって異なります。

  • PKCS#11 の場合、キー検索では C_FindObjects API が使用されます。
  • Java Cryptography Extension (JCE) の場合、キー検索では KeyStore 値が使用されます。

最適なパフォーマンスを得るために、キー検索コマンド ( findKeykey listなど) は 、アプリケーションの起動時に 1 回だけ使用することをお勧めします。 返されたキー オブジェクトをアプリケーション メモリに格納します。 後でこのキー オブジェクトが必要な場合は、各操作でクエリを実行するのではなく、キャッシュから取得します。 クエリを実行すると、パフォーマンスに大きなオーバーヘッドが発生します。