web-dev-qa-db-ja.com

pg_cryptoによるデータベースの暗号化とキー管理

仮想マシンのルートパスワードを可逆暗号化形式でデータベースに保存する必要がある可能性を検討しています。その理由は、推奨されていない限りローカルログインがマシンに要求されることがあり、ルートパスワードを検索できるようにする必要があるためです。もちろんアクセスは少数の管理者に厳しく制限されます。ネットワークを介してvmにアクセスできない場合を除いて、これらは使用されません。この点でユーザーとパスワードを同期すると、同様の問題が発生します。つまり、ネットワークがダウンしている場合、sudoerは保証された最新のパスワードでどのようにログインするのですか。

キーのローテーションを計画する最良の方法は何ですか?すべての管理者が持っているパスフレーズを使用する必要がありますか?これは私の心にいくつかの赤信号を発生させます。管理者が自分のパスワードを設定できるようにキーを安全に管理する方法はありますか?たぶん、公開鍵暗号化を使用して、各管理者の公開鍵で対称鍵を暗号化しますか?

ここでは、暗号化された機密データのキー管理に関するソリューションの概要のみを探しています。そのレベルから実装する方法がわからない場合は、さらに質問することができます。

6
Chris Travers

私は暗号システムやセキュリティの専門家ではないことに注意してください。これは私が見たものであり、理にかなっていますが、以下に概説する以上のセキュリティ問題がないとは言えません。いつものように、重要な場合は適切なセキュリティ監査を受けてください。

以下では、「資格情報」は、sshキー、パスワード、または保存が必要なものを指します。

典型的なモデルは、2つのレベルの暗号を使用することです。

  • ユーザーごとに、公開/秘密鍵ペアを生成して保存します

  • ユーザーのキーの公開部分をユーザーの記録に平文で保存する

  • ユーザーのパスフレーズに暗号化されたユーザーのキーの秘密部分をユーザーのレコードに保存します。

  • 各資格情報をその資格情報に固有の対称キーで暗号化する

  • 各認証情報の対称鍵を、その鍵にアクセスする必要があるすべてのユーザーの公開鍵に暗号化し、暗号化された内容をuser_credentialsマッピングテーブル。

基本的に、公開部分がクリアテキストであり、プライベート部分がパスフレーズに暗号化されるgpgキーリングと同様に、キーリングを維持します。各ユーザーが選択したパスフレーズが強力であることを確認する必要があります。

これで、暗号化された資格情報ごとに対称鍵を生成できます。このキーをすべてのユーザーの公開キーで暗号化し、ユーザー資格情報結合テーブルに保存します。この対称キーを暗号化せずに保存しないでください。また、資格情報ごとに異なる対称キーを使用してください。

あなたはこのようなもので着陸します

[user]
user_id
username
login_password_salt
login_password_hash
public_key_text
private_key_sym_encrypted_to_passphrase

[user_credential]
user_id
credential_id
credential_key_encrypted_to_user_public_key

[credential]
credential_id
credential_data_encrypted_to_credential_key

この方法で物事を行うことには、いくつかの利点があります。

  • データベースのダンプが漏洩した場合でも、資格情報は安全であるか、パスフレーズと鍵の強度と同じくらい安全です。

  • 資格情報ごとに異なる対称鍵があるため、どのユーザーがどの資格情報にアクセスできるかを制御できます

  • 特定の資格情報へのアクセス権を持つユーザーは、別のユーザーにその資格情報へのアクセス権を与えることができます。自分のキーを使用して暗号化を解除し、他のユーザーの公開キーで暗号化するだけです。資格情報を追加したり、新しいユーザーを追加したりするために全員を集める必要はありません。

  • 各資格情報を対称キーで暗号化し、そのキーをユーザーのキーで暗号化するため、各ユーザーのキーで再暗号化しなくても、格納されている資格情報を変更できます。保存された資格情報の更新がより便利になります。

ただし、データベースのホストが危険にさらされている場合、攻撃者は、ユーザーがログインするとすぐに、任意のユーザーがアクセスできるパスワードを簡単に抽出できます。機能をラップするか、詳細なログを記録してログを検索することにより、ユーザーのパスフレーズを取得します。その後、盗まれたダンプまたはライブDBからパスワードを復号化できます。危険にさらされたデータベースホストは、ユーザーがログインして使用するまで危険はありませんが、すべて失われます。

これは、データベースのホストがセキュリティ上重要であることを意味します。ダンプを漏らすことはセキュリティにとって致命的ではありませんが、誰かがDBで実行されているコードを変更できることは致命的なセキュリティ違反です。

資格情報管理DBを使用して、必要に応じてsshキーマテリアル、パスワードなどを抽出することに加えて、ユーザーが資格情報を知る必要なく、サービスに対して認証できる認証プロキシとして使用することもできます。中古。たとえば、アプリがsshキーを復号化してsshエージェントに追加し、ユーザーがキーを直接表示してアクセスすることなく、エージェントを介してサーバーにログインするためにdecyptedキーを使用する場合があります。

4
Craig Ringer