2011-08-03 21 views
1

これは、AES_ENCRYPTを使用してMySQLデータベースに挿入されているデータの暗号化を生成することに関するセキュリティ上の疑問です。AES_ENCRYPTキーを保存する

データの暗号化に使用するキーを格納する最適な場所は何ですか?明らかにデータベースにはありません! :)

答えて

1

まあ、あなたは多くのオプションがありません。どこのキー(データベース、コード、ファイル)を置いても、他の人がマシンにアクセスできる限り簡単に見つけることができます。

あなたが行うことができることは、いくつかのパスワード(少なくともローカルには保存されていない)に基づいた別のキーでそのキーを暗号化し、アプリケーションの起動時にそのパスワードを尋ねることです。このようにして、暗号化されたAES_ENCRYPTキーをデータベースに格納し、パスワードでログインした後に復号化して使用することができます。

1

Security by obscurity

ウェブサーバーが侵害された場合、攻撃者はどこに格納されていてもキーにアクセスできます。コードは暗号化/復号化を行うための鍵を見つける必要があるため、 。これが本当の価値を増やす唯一のシナリオは、アプリケーション外のデータを保護することです(バックアップテープなど)。しかし、DBMのクエリを最適化し、より大きなデータフットプリントを作成する能力を犠牲にしているので、バックアップなどの目的で、個々のデータ項目ではなく、バックアップやファイルシステムを暗号化する方がはるかに意味があります。

アプリケーション内に永続的に格納されていないキー(SSL経由で提供されるHTTP基本認証パスワードなど)を使用しても、データが侵害される危険性がまだ残っています。異なるユーザ間のデータ。我々は脅威モデルであり、あなたは正しい、このようなPCI-DSSなどの外部制約

+0

を持っているかどうかを知る必要が賢明な答えを提供するために

。私がする傾向があるのは、データベースにランダムな値として格納された半分のキーと、PHPスクリプトに格納された後半の2つのレベルのキーを維持することです。誰かがPHPスクリプトとデータベースの両方にアクセスできる場合は、とにかくできることはありません。 – Ben

+0

誰かがPHPへのアクセス権を持っているかのように、データベースに半分を格納することは意味がありません。データベースにもアクセスできます。 – mgutt

関連する問題