11

特定のテーブルの特定の列を暗号化/復号化する組み込みの暗号化機能です。私が懸念しているのは、鍵をどこかに保管する必要があることです。確かにキーをファイルに保存し、そのファイルのアクセス許可と、それにアクセスするアプリケーションのアクセス許可を制御できますが、それで十分でしょうか? キーなどを取得する Web サービスを作成することもできます。

私は小さな店にいて、アプリケーションがインストールされているマシンにアクセスできるのは私だけ (おそらく他に 1 人) です。 編集:層を追加しない限り、データを復号化する必要があるこのアプリケーションの Web に面した部分があることを追加する必要があります。

私はうんざりするように見えましたが、誰も防弾の答えを持っているようには見えません。

これは、十分に解決しなければならない問題の 1 つですか? MySQL と PHP (おそらく Python) を使用している場合、これにアプローチするより良い方法はありますか?

4

3 に答える 3

8

暗号化で MySQL ビルドを使用することが問題の最善の解決策になるかどうかはわかりません。

PHP のM_CRYPTパッケージは非常に優れていると考えられており、ニーズに最適なアルゴリズムを柔軟に選択できます。

キーを他のサーバーに保存することには、1 つの大きな利点があります。それは、キーが暗号化されたデータと同じマシン上にないことです*)。そのため、攻撃者が侵害されたマシンを十分に制御できない限り、キーに到達することはできません。
攻撃者がデータが保存されているマシンを完全に制御できるようになると、Web サービスにキーを問い合わせることができる可能性が高くなります。

ただし、あるマシンから別のマシンにキーを送信すると、保護する必要があるまったく新しい領域が開かれます。おそらく、より多くのキーと暗号化レイヤーが含まれているため、間違いが発生する可能性が高くなります。

*)もう 1 つのオプションは、Web サーバーの起動時にパスワードを入力し、それをメモリにのみ保持することです。

考えられる解決策
Web アクセスを持つユーザーのファイルを暗号化するために次の方法を使用するソリューションが採用されている場合 (お使いの環境はわかりませんが、役立つかもしれません):

  • ユーザーの作成時に、長いランダム キーが新しいユーザーに割り当てられます。
  • このランダム キーは、ユーザー レコードの暗号化された列に格納されます。
    (この列のみが暗号化され、残りのレコードのパフォーマンスに影響を与えません! )
  • ランダム キー列の暗号化は、ファイルまたはメモリに保存された 1 つのマスター パスワードで行われます。
    (より良いオプションは、Web サーバーを開始するときにパスワードを入力し、それをメモリにのみ保存することです。 )
    (別のアプローチは、ユーザーにパスワードを入力させ、それを使用してランダム キー列を暗号化/復号化することですが、私はそれがセキュリティを向上させるか低下させるかはわかりません
  • 暗号化が必要なすべてのドキュメントは、そのユーザーのランダム キーで暗号化され、ディスクに保存されます。
  • ドキュメントは、最小限の権限でファイル システムに保存されます。

このアプローチの利点は次のとおり
です。 1. ランダム キーはデータベースで暗号化されます。そのため、暗号化された列と組み合わせて、データベース サーバーのセキュリティを強化できます。2. ドキュメントはさまざまなキーで保存されます。攻撃者がキーを入手した場合、ドキュメントの一部のみが危険にさらされます。

ただし
、攻撃者がマスターパスワードを入手し、ユーザーテーブルへの読み取りアクセス権を取得した場合、システム全体が再び壊れます。

于 2009-05-02T10:35:31.760 に答える
4

おそらく、Webにアクセスできないディレクトリにあり、可能な限りファイルシステムのアクセス許可でロックダウンされているファイルに保存します。

Web向けスクリプトは、変数、特にユーザー提供のファイルを使用してファイルシステムファイルを開かないようにする必要があります。入力フィルターを通過したものをスリップさせて(ユーザー提供のデータを正しくフィルター処理しているのですか?)、キーファイルの内容を放棄するオプションを彼らに与えないでください。ハードコードされた文字列へのファイルパスを保持し、define()のみを保持します。ほとんどのデータはMySQLに保存されているため、これは問題にはなりません。

復号化を行うときは、キーをきれいに初期化された変数に読み込み、復号化を行ってから、キー変数を上書きして(たとえば、xの文字列で)、変数の設定を解除します。これはおそらくすべて少し厄介に聞こえますが、キーがメモリ内でクリアになっている時間を最小限に抑え、PHPスクリプトを飛び回る他のすべての変数からキーを分離すると、安全性が低下することはありません。

あなたと他の1人だけがマシンに物理的にアクセスできる場合、これはおそらく問題ありません。誰かが侵入して箱を盗んだ場合、とにかく彼らはあなたのすべてのデータを持っているので、ゲームオーバーです。

于 2008-10-24T08:56:25.913 に答える
1

「AES_ENCRYPT」と「AES_DECRYPT」で使用する「列固有」のキーの使用を検討しているようです。コメンターが言ったように、侵入するとすべてのデータにアクセスできるため、これは悪い考えです.

ソルトの有無にかかわらず、「ユーザー提供」のパスワードを使用すると、より安全になります。

とはいえ、暗号化キーがそれを使用するアプリケーションによってのみ読み取り可能であれば、おそらく「十分」です。マシンが侵入された場合でも、1 つのキーでデータをより高速に取得できます。

于 2008-10-24T03:02:21.183 に答える