私はたくさん(数百万)のRSA秘密鍵を扱うソフトウェアに取り組んでいます。キーサイズは2048です。データベースにPEM形式で保存します。
データベースへの悪意のあるアクセスのリスクを軽減するために、キーを暗号化する必要があります。当然、PKCS#8でパスフレーズを適用することを思い浮かびます。
ただし、数百万の秘密鍵にsameパスフレーズを適用しても安全かどうかはわかりません。誰かがデータベースを入手した場合、同じパスフレーズが使用されているという事実を知っていれば、鍵を解読することは可能でしょうか?
このシナリオでPKCS#8が安全でない場合、同じパスフレーズ(またはそれらの限られた数)を使用してデータを暗号化できるという事実を踏まえて、どのような優れたオプションがありますか?
自分でHSMを購入します。
次に、その選択:
いくつかの説明のHSMベースのソリューションは、攻撃に対する真の保証を得る唯一の現実的な方法です。 HSMはセキュリティのために堅牢に設計されており、HSMに格納されているキーデータにアクセスできないように明示的に設計されています。
私はたくさん(数百万)のRSA秘密鍵を扱うソフトウェアに取り組んでいます。 ...同じパスフレーズを数百万の秘密鍵に適用する
あなたは間違いなく根本的に間違っていることをしています。単一のサーバーで何百万ものキーを保護する良い方法はありません。何百万もの秘密鍵を必要としない別の設計を見つけることをお勧めします。 100万個のキーを使用することで、どのような問題を解決できると思いますか?自分を表す単一のRSAキーを持っていることの何が問題になっていますか?
私が持っているより良いオプション
ディスク全体の暗号化を使用するだけで、レコードごとの暗号化は必要ありません。実質的に同じレベルのセキュリティが得られ、管理がはるかに簡単になります。つまり、セキュリティを危険にさらす可能性のあるエラーが発生する可能性が低くなります。
セキュリティを向上させる提案が必要な場合は、作成している内容をもう少し詳しく説明する必要があります。そうでない場合、ここでのアドバイスはどこにも行きません。
おそらく、おそらく、中間CA証明書を発行するためにのみ使用されるエアギャップされたルートCAキーがいくつかあるCAシステムのようなことを行うことができます。これは、アクセス証明書の日常的な発行に使用される中間CA証明書です。何百万もの秘密鍵を備えた単一のサーバーがあるべきではありませんが、代わりに単一のサーバーが代わりに証明書を保存する必要があります(証明書は公開鍵+属性+有効期限+ CAによって作成された暗号署名です)。個人ごとに必要な秘密鍵は1つだけですが、単一の鍵から複数の証明書を作成して、秘密鍵の所有者に関するさまざまな属性(クレーム)をアサートできます。秘密鍵の所有者は、これらの要求を証明書利用者に提出できます。証明書利用者は、鍵の所有者がアクセスを許可されているかどうかを確認します。
キーごとに異なるパスフレーズを使用すると、パスフレーズをどこに保存するかという問題が発生します。パスフレーズを個別に保存できるという点で少し優れています。また、資産の実現(侵害?)には、パスフレーズと保護されたキーの両方の妥協が必要です。
説明するエントリの数は、キーとパスフレーズをまとめるのにいくつかの自動化が必要になることを意味しています(たとえば、個別の認証で2つの異なるサービスに接続するhtml5アプリケーション)。それがアプリケーションの弱点です。しかし、システムのフロントエンドについては何も教えていません。
過去に似たようなものを作り、キーをトークンに保持するフィールドをテーブルに追加することにしました。そのトークンは、別のデータベースにある他のテーブルのキーであり、他のテーブルのパスファを保持しています。おそらくもっと良い方法がありますが、これで十分でした。
私は schema を使用できます。これは、エスクローを含むPKIに使用でき、役立つ場合があります。これは、暗号化キーの有効期間の複雑さを扱うより大きなプロジェクトの一部です。
最初:はい、PKCS#8を使用します。それは標準で広く使われています。カスタム暗号化の実装は、欠陥があり、利便性が低く、ツールが少ない可能性があります。
キー間でのパスワード共有について:
すべてに依存しますですが、結局のところ、キーにアクセスを適切に制限して、操作が必要なキーにのみアクセスできるようにする必要があります。
これらのキーがすべて同じ人物/プロセスによって同時に使用される場合、パスワードはすべて一緒にアクセスする必要があるため、異なるパスワードでそれらを暗号化してもあまり意味がありません。
一方、たとえば、従業員ごとに1つのキーを保存すると、各従業員は自分のキーとそのキーのパスワードのみを取得できます。このようにして、1つのパスワードが侵害されても、すべての秘密鍵が危険にさらされるわけではありません。
もちろん、状況に最も適したものに応じて、キーをグループ化したり、その間を行ったりできます。