web-dev-qa-db-ja.com

保存中のユーザーデータを保護するにはどうすればよいですか?

データベースのユーザー名、電子メール、パスワードのフィールドを暗号化し、保存されているユーザーファイルを暗号化したい。これどうやってするの?私はGazzangなどのソフトウェアを知っており、公開されているコストがないため、毎年数千ドルの費用がかかることしかわかりません。

自分で構築できる代替ソリューションはありますかORフィールドとユーザーファイルを暗号化できるサーバー上で実行されるソフトウェアを使用しますか?

それが違いを生むかどうかはわかりませんが、私はPHP/MYSQLを使用しており、クラウドサーバーを持っています。

5
AAA

MySQLサーバーでの暗号化の最も簡単な方法は、ランダムに生成されたパスフレーズを使用した aes_encrypt() です。

ユーザーのパスワードは暗号化しないでください。パスワードは常にハッシュ化する必要があります。パスワードはbcryptまたはsha256を使用して保存する必要があります。

5
Mikey

復号化する必要があるデータの暗号化:変数を使用してキーを設定します

  • ユーザー入力を含むクエリはログに記録しないでください。暗号化するデータが含まれます。ログに記録する必要がある場合は、データベースユーザーにログの読み取り権限を与えないでください。
  • 特権ユーザー(ローカルシステム/ルートなど)としてデータベースを実行しないでください。
  • PHPアプリケーションとは別にキーを保存し、データベースの起動時に変数をインスタンス化します
  • Rootだけがアクセスできる別の鍵で鍵を暗号化します。bashのopensslがこれを行う候補です。データベースユーザーは、キーとキー暗号化キーの両方に直接アクセスするべきではありません。

確認する必要があるデータのソルトハッシュ(パスワード)

Salting は非常に重要です。私はこれを十分に強調することはできません。比較的安価なデバイス(約2k)を使用すると、ほとんどのアルゴで1秒に100mのハッシュを実行できます。ハイエンドのデバイス(〜6k-主に産業目的で使用)は、毎秒12億以上のハッシュを達成できます(sha、 md5、md4など)攻撃者がFPGAファームを使用している場合、1秒あたり数兆の推測が行われることはありません。統計を見ることができます ここ

Johnと最適化されていないコードを使用して、Linkedinリスト(ソルトなしのハッシュ)は、デフォルトのマングリングルールを使用して24時間未満で推定されました...ハッシュをソルトします。データベースが公開されている場合、これにより、(必ずしも)即座にアクセスを危険にさらすことなく、ユーザーにパスワードを変更するよう通知することができます。

不要な場合は保管しないでください。

これは直接の問題ではないことはわかっていますが、真剣に、それは同じくらい重要です。ある時点でデータベースが危険にさらされていると仮定すると、データがない場合は公開できません。

最後:データベースのベストプラクティスセキュリティを使用します。データを検証し、ストアドプロシージャを使用して入力を処理し、データベースアクセスログを監視および監査します。

3
Ori