2011-07-04 23 views
0

正しい方法(または最も効果的な方法)であるパスワードを塩析するときは?塩析 - 手順の順序

A.まず、パスワードをハッシュしてから、このような塩で、パスワードのハッシュをハッシュ:

$password = "passwd"; 

$salt = "s0merndslt"; 

$password = sha1($password); 

$salty = sha1($password.$salt); 

B.は、パスワードと塩を取ると、このようにそれらを一緒にハッシュ:

$password = "passwd"; 

$salt = "s0merndslt"; 

$salty = sha1($password.$salt); 

これまでに尋ねられたことがありましたら謝罪しますが、SOのこの特定の部分に対する回答は見つかりませんでした。

答えて

2

実際にはいずれの場合も、

しかし、あなたの例#1は、(わずかに)無差別なパスワード検索ツールを減速させる時間とのトレードオフを提供します。

GPUの出現により、単純にパスワードの塩化は十分ではありません。 GPUでサポートされているbrute-forceパスワードツールは、見つかるパスワードを指定すると数分(または数秒)で短いパスワードを達成することができます。

これは、bcryptやPBKDF#2などのツールやアルゴリズムが存在する理由です。ハッシュ操作を何度も繰り返すことで、大きなハードウェアが生成されるため、商品ハードウェア上でハッシュからパスワードを見つけることができなくなります。

疑問がある場合は、独自のパスワードハッシュソリューションを実装しないでください。 bcryptまたはPBKDF#2を使用してください。

+0

ありがとうございました。これらのアルゴリズムで作業することを推奨するPHPライブラリがありますか? http://www.openwall.com/phpass/のようなもの私はbcryptとPBKDF2のクイック検索を行いましたが、公式のPHPドキュメントから何も得られませんでした。私はこれらがPHPでネイティブにサポートされていないと仮定しています... – Aaron

+0

@Aaron:ここにPBKDF#2のいくつかのバージョンがあります。ここにはWikipediaからリンクされているものがあります:http://www.itnewb.com/v/Encrypting -Password-with-Storage-for-the-RSA-PBKDF2-Standardパスワードの一部としてイテレーション(> 5000以上)をデータベースに保存する必要があることに注意してください(別途列、あなたまで) –