2012-02-26 17 views
-1

私は以下の方法でAES暗号化のユーザのパスワードを暗号化しています。私はちょうどこれが良い練習であるか知ってほしい、または私が従うべき他の方法がある。誰かが私にSALTの「なぜあなたは使用していない 『と言って混乱』ベローは、私が使用していますサンプルクエリであると私は?SALT AES暗号化を使用することができます。。PHP MySQLユーザパスワード暗号化

INSERT INTO user(id,passowrd) VALUES (1,AES_ENCRYPT('mypassword','key')); 

答えて

8
  • は、私はあなたのデータベース列が「passowrd」と命名されていません願っています

さておき...

塩、それはあなたが辞書攻撃から保護するためにをハッシュする前に、各パスワードに追加する必要がランダムビットですが、暗号化方式ではありません。

は、AES暗号化を使用してユーザーパスワードを保管する必要があります。これは元に戻すことができます。あなたはユーザーのパスワードであることに気づかず、知っているだけです。パスワードを可逆形式で保存しないでください。

は代わりに、あなたは安全な一方向ハッシュ、SHA256などやパスワードに加えて、いくつかのランダムデータの、さえbcryptのを使用しています。このランダムなジャンク「塩」は、各ユーザーに対して生成され、ハッシングの前にパスワードに付加されます。その後、ハッシュされたデータとともにデータベースに格納され、後でパスワードを比較することができます。

この方法で、レインボーテーブル(ハッシュ・ツー・平文のマッピングの大辞典)と呼ばれるもので、攻撃者が一緒に来ることができないとああ見える」を参照してください、ジョー・ユーザーが自分のパスワード 『パスワード』を作ることにしました! "これは、各アカウントに独自のソルトがある場合、それぞれのパスワードを独立して攻撃する必要があるため、データベース内のすべてのパスワードをブルートフォースすることも防ぎます。

+3

+1ほとんどの場合、塩分のある一方向ハッシュを使用する必要があります。可逆暗号化を使用すると、間違った人物がパスワードにアクセスする可能性があります(たとえ自分の従業員であっても、たとえば暗号化/復号化アルゴリズムにアクセスできる人でも)。ほとんどのユーザー(不幸な)パスワードをリサイクルする傾向があることを考えると、これは重大なリスクをもたらします。 –

+0

あなたの答えにBorealidを感謝します。 –

0

塩は、ハッシュの文字列に追加された一連の文字なので、攻撃者が元の文字列を取得するのは困難です。

しかし、ハッシュに基づいていない暗号アルゴリズムでは、攻撃者が元の文字列を塩で取得し、それを削除するためのロジックが必要なため、塩は必要ありません。

+0

BTW、Borealidが提案したように、代わりにハッシュを使用してみませんか?後で復旧する必要がない文字列の暗号化よりも安全ですが、パスワードのように比較するだけです。 – Adonais

0

AES_ENCRYPTでは、使用しているキーは塩です。私はMD5やSHAのような一方向ハッシュを好むが、保存しているような解読可能なパスワードのようなものが多い。