まず第一に、私は自分をセキュリティの専門家と呼ぶつもりはありませんが、私はこの質問に答えなければならない立場にありました。私が見つけたものは少し驚いた:完全に安全なシステムのようなものはありません。まあ、完全に安全なシステムは、サーバーがすべてオフになっているシステムだと思います:)
当時私と一緒に仕事をしていた人が、侵入者に対する水準を上げるという観点から安全なシステムを設計することを説明しました。したがって、セキュリティ保護の各レイヤーは、攻撃の機会を減らします。
たとえば、秘密鍵を完全に保護できたとしても、システムは完全に安全ではありません。ただし、セキュリティアルゴリズムを正しく使用し、パッチを最新の状態に保つと、レベルが上がります。しかし、はい、十分に強力で十分な時間を与えられたスーパーコンピューターは暗号化を破ることができます。このすべてが理解されていると確信しているので、質問に戻ります。
質問は明確であるため、まず各ポイントに対処しようとします。
キーがファイルシステムのセキュリティモデルによって保護されているとします。しかし、(悪意のある)スーパーユーザー、またはそのような忠実度を提供しないプラットフォームはどうでしょうか?
はい。Windowsキーストアやパスワードで暗号化されたTLS秘密キーなどを使用する場合、秘密キーへのパスワード(またはアクセス)を持つユーザーに公開されます。しかし、私はあなたがレベルを上げることに同意すると思います。ファイルシステムACL(適切に実装されている場合)は、非常に優れたレベルの保護を提供します。そして、あなたは個人的に精査し、スーパーユーザーを知る立場にあります。
または、キーはソフトウェアバイナリにハードコードされていますが、常にデコンパイルできます。オープンソースソフトウェアや解釈されたコードについてはどうでしょうか。
はい、ハードコードされたキーをバイナリで見ました。繰り返しますが、これはバーを少し上げます。このシステムを攻撃する人(Javaの場合)は、Javaがバイトコード(など)を生成することを理解する必要があり、それを逆コンパイルする方法を理解しなければなりません。マシンコードに直接書き込む言語を使用している場合、これによりバーが少し高くなることがわかります。これは理想的なセキュリティソリューションではありませんが、ある程度の保護を提供できます。
キーが生成される場合、そのようなアルゴリズムは決定的(おそらく)である必要があり、同じ問題がシードに適用されます。
はい、基本的に、アルゴリズムは秘密鍵を作成するための秘密鍵情報になります。したがって、保護する必要があります。
したがって、セキュリティポリシーであるキー管理の中心的な問題を特定したと思います。鍵管理ポリシーを適切に設定することは、安全なシステムを提供するために重要です。そして、それはかなり広いトピックです。
質問は、システム(および秘密鍵)がどれだけ安全である必要があるかということです。システムで、バーをどれだけ高くする必要がありますか?
さて、あなたが喜んで支払うなら、これに対する解決策を生み出す人々がいます。HSM(ハードウェアセキュリティモジュール)を使用することになりました。基本的に、ハードウェアにキーを含む改ざん防止サーバーです。このキーを使用して、暗号化に使用される他のキーを作成できます。ここでの考え方は、(正しく構成されていれば)キーがHSMから離れないということです。HSMには多くの費用がかかります。ただし、一部のビジネス(クレジットカードデータの保護など)では、侵害のコストははるかに高くなります。だから、バランスがあります。
多くのHSMは、機能のメンテナンスと管理からキーカードを使用します。キーを変更するには、定足数のキーカード(5つのうち9つ)をサーバーに物理的に配置する必要があります。そのため、スーパーユーザーのクォーラムが共謀した場合にのみ侵害を許可することで、これにより水準がかなり高くなります。
HSMに同様の機能を提供するソフトウェアソリューションがあるかもしれませんが、私はそれらが何であるかを知りません。
これは質問への回答に役立つだけですが、これが役立つことを願っています。