web-dev-qa-db-ja.com

サーバー側の暗号化キーはどこに保存しますか?

データベースに単一のキーで対称的に暗号化されたデータがいくつかあります。コードにハードコーディングするのではなく、暗号化キーを格納するより安全な方法を探しています。どこに安全に保管できますか?

129
Radek

おおまかな洗練度の高い順に、可能性を示します。

  1. 外部ハードウェアセキュリティモジュールを使用します。製品の業界全体 は、機密性の高い操作を外部デバイスにオフロードするために設計されています。これは問題を解決するほどrelocateしませんが、はるかに安全なデバイスに問題を再配置します。完全にそれはセキュリティの勝利です。あなたがハイステークスをしているなら、これはほぼ間違いなくあなたのソリューションに影響を与えます。

  2. 暗号化をハードウェアに結び付けます。理論的にはHSMはこれを正確に実行します。ハードウェアベースの暗号化だけではなく、HSMからの高度化を期待する傾向があるだけです。しかし、真のHSMがもたらすスループットとコンプライアンスが必要ない場合は、より安価なオプションを利用できます。 TPMチップはこの目的のために部分的に発明されたものであり、TPMチップとの統合方法を示す多くの例が存在します。さらに、専用の暗号化ハードウェアはかなり安価になり、 オープンソースU2Fキー のようなデバイスの用途を変更することは、思ったよりも簡単です。

  3. 暗号化キーを管理者ログインに関連付けます(たとえば、暗号化キーを管理者ログインで暗号化します)。これは、何かを暗号化/復号化するためにログインする必要があるため、わずかに役立ちます。しかしプラス面としては、ログインしていない限り、誰も暗号化/復号化できません(つまり、より強力な制御)。 Windowsの安全なストレージの多くはこのように機能します。

  4. 起動時に暗号化キーを入力し、それをメモリに保存します。これにより、オフライン攻撃から保護されます(RAMからキーをキャプチャしない限り、するのが難しい)。上記のオプションに似ていますが、また異なります。ただし、サーバーは使用できない状態で起動するため、作業を行う前に手動でキーを入力する必要があります。

  5. 別のサーバーにキーを保存します。例:キーをWebサーバーに配置し、暗号化されたデータをデータベースサーバーに配置します。キーだけでなくデータベースも取得する必要があるため、ある程度保護されます。また、両方のサーバーにアクセスできる必要もあります。驚くほど安全ではありませんが、とにかく非常に人気のあるオプションです。自分がやっていると思っているほとんどの人rightはこのようにしています。これを行うことを検討している場合は、上記の最初の2つのオプションのいずれかも検討してください。

  6. 同じサーバー上の別の場所にキーを保存します。限界的なセキュリティを追加しますが、全体ではありません。ほとんどの小規模な操作はこれを実行します-実行すべきではありませんが、実行します。通常、サーバーが1つしかなく、どこかのクラウドで実行されているためです。これは、鍵をロックに置いたままにする代わりに、ドアに鍵をかけるようなものです。最も無能な攻撃者を阻止することが保証されています。

  7. キーをデータベースに保存します。これで、試行することすらありません。それでも、憂鬱なほど人気のあるオプション。

多くのクラウドベースのKMSソリューション(例: [〜#〜] aws [〜#〜][〜#〜] gcp [〜#〜]Azure )最も効果的に使用すると、暗号化がクラウドVMまたは環境にバインドされます。 VMの一意のIDは、ハイパーバイザーが簡単に確立してアサートできます。KMSは、そのIDと割り当てたアクセス許可の組み合わせを使用して、HSM管理のアクセスを許可します暗号化キー。これは、オプション1と2の組み合わせに似ており、Cloud VMの一時的な性質を考慮して調整されます。これらのKMSソリューションは、一般に、プラットフォームの他のIDメカニズムとも互換性があり、暗号化キーをログインキーに効果的に結び付けます。オプション3。

145
tylerl

私はこれが少し前に答えられたことを理解していますが、タイラーの良い答えにいくつかの例を与えるために:

  • 私は彼のを使用してパスワードをサービスアカウントに関連付け、Powershellコマンドレットを使用してそれを取得する予定です。これにより、スクリプトを大幅に変更する必要がなくなります。サービスアカウントのパスワードはActive Directoryにあり、最初に侵害する必要があります。 2つのサーバーで使用したので、これは私にとってはうまくいきます。

  • 彼の#5については、コンプライアンスを満たすために、外部ストレージを備えた別のサーバーにキーをプレーンテキストで保存することができました。そのストレージ自体が暗号化され、アクセスが制限されていたためです。タイラーが言及するように、後者はそれほど安全ではないように見えますが、タフな査定者にとっても十分でした。

5
Mike

キー管理用に2層アーキテクチャを作成できます。

  1. テーブルスペースまたは列ベースを暗号化して保存時にデータを暗号化するためのキー。
  2. ロックを解除するマスターキー1。

マスターキーには、次のような確立されたキー管理ソリューションのいずれかを使用します。

  • Amazon AWS KMS
  • Oracle Vault
  • Microsoft MKS。
  • またはオープンソースのもの。

キーマネージャーは、マネージドキーが使用されるインフラストラクチャと同等以上の可用性をサポートする必要があることに注意してください。

2
Hugo R