19

暗号化は、機密性を確保するために広く採用されている技術です。実装上の欠陥を考慮していませんが、重要な点が 1 つあります。秘密鍵のストレージです。秘密鍵が盗まれると、システム全体が危険にさらされます。

編集 :

質問の幅を狭めるためにコンテキストを指定させてください。

  1. ここでは、Java Web アプリケーションが扱われます
  2. より具体的には、Spring Framework バージョン 3 が使用されます。
  3. spring security 3.1 は、アプリケーションを保護するために使用されます
  4. mysql5 データベースが利用可能です
  5. アプリケーションサーバーは tomcat6 または tomcat7 です
  6. サーバーマシンは私の管理下にありません

おそらく、質問はこのシナリオに集中することができますが、指摘したように、秘密鍵のストレージの問題は、採用されているテクノロジーに横断的です。ただし、一部のライブラリは、何らかの形で作業を容易にする独特の機能を提供する場合があります。明確なポイントは、セキュリティと実用的なことを行う必要性との間でトレードオフを見つけなければならないということです。分析を完了すると、必要なセキュリティ レベルは、保護する情報の価値に依存することは明らかです。顧客の靴のサイズを秘密にしておくために、非常に安全な戦略 (非常に多くの労力を必要とする) を強制するために、考えを変えることは無意味です.

ここでは、電子メールのパスワードを保護する必要があります (これはデータベースに保存されます)。この情報は平均して重要だと思います。

ここで私が探しているのは、合理的な努力による最善の解決策です。

質問は非常に明確です:この情報をどこに保存しますか?

  1. データベースに保存しますか?したがって、暗号化する必要があり、これには別のキーが必要です (そして、この 2 番目のキーをどこに保存しますか?)
  2. .warパッケージの中に保管していますか?ソースへの不正アクセスをどのように防止していますか?
  3. 別の戦略を採用しますか?

あなたの戦略の動機は高く評価されます。ありがとうございました

4

3 に答える 3

12

これがJava Webアプリケーションとは何の関係もありませんが、私は自由に答えを書きます.私は、問題はすべてのプラットフォームでわずかな差異にしか存在しないと思います.

基本的に、キー ストレージの候補は 3 つあります。そのうちの最初の 2 つは、次のとおりです。

  • データベース
  • アプリ (「ハードコード」)
  • WebApp を実行するサーバー上の別の場所、ほとんどの場合ファイル

あなたはすでに最初の 2 つの弱点に指を置いているので、繰り返す必要はありません。私は完全に同意します。

これが、私が第 3 候補を使用する動機でもあります。理由は次のとおりです。

  • 同じアプリの異なるインスタンスは簡単に異なるキーを持つことができるため、1 つの侵害が他のすべてに自動的に広がることはありません。
  • 攻撃者が任意のファイルを読み取ることができるような方法でサーバーが侵害された場合、とにかくゲーム オーバーです。攻撃者がアプリ バイナリまたは DB を読み取るのを止めることはできません。
  • Web サーバー上のファイル システムのセキュリティは、十分に理解されているテーマです。
  • ファイルシステムへの完全なアクセスを可能にする侵入は、アプリケーションやデータベースへの侵入よりも統計的にはるかに少ない
于 2012-12-21T13:42:55.280 に答える
7

秘密鍵をどこかに保存する必要がある場合でも。キーを手動で提供することを決定した場合でも(これはばかげています)、キーはメモリ内にあり、誰かがそれを見つけることができます。

どこに保存するかは、選択によって異なります。ただし、プレーンテキストであってはなりません。したがって、データベースにキーを保存する場合は、アプリケーションでハードコードされた二次キーを使用します。したがって、侵入者がdbにしかアクセスできない場合、暗号化されたメインキーは保護されます。

コンテナに二次キーを格納するためのアプリケーション構成に行きます。そうすれば、アプリケーションだけがこのプロパティにアクセスできるようになります。そのため、攻撃者はそのキーにアクセスするためにアプリケーションまたはコンテナを制御する必要があります。

したがって、次のシナリオを想定します。

  1. アプリケーションがハッキングされます。攻撃者はあなたと同じ権限を持っています。APIを使用して、暗号化をまったく行わずに機密情報を取得することができます。あなたのコードは彼らのためにそれをします。次のオプション:彼女はwarファイルまたはクラスファイルを取得して逆コンパイルし、ハードコードされたキーを見つけるか、使用した暗号化メカニズムについて学ぶことができます。
  2. データベースのみがハッキングされます。データベース自体にないキーでデータを暗号化しても問題ありません。

攻撃者にとってそれを難し​​くするため。ファイルシステムにファイルを配置できます。他の回答で説明されているように、適切なFS権限を追加します。ただし、さらにjava Security Managerを使用して、実際に読み取る必要があるクラスを除くすべてのJavaクラスのアクセスを制限します。また、jarファイルとクラスファイルへの変更を制限することをお勧めします。

ロックが多ければ多いほど、安全性が高まります。標準のドアロックと同じです。ロックは、さまざまなベンダーからのものであり、さまざまなメカニズムを備えている必要があります。しかし、最終的には熟練した泥棒がとにかく入ります。

于 2012-12-21T13:33:12.687 に答える
0

ファイルシステムは問題ありません。ユーザー権限を選択し、war で許可権限を使用してください。データベースや戦争コンテンツにしかアクセスできないセキュリティホールがたくさんありました

于 2012-12-21T13:58:29.890 に答える