3

何千人ものユーザーがいて、パスワードを非常に安全にしたいとします。今、私はそれmd5()を使用するのが最も安全ではないことを学びました、しかし私が安全であるためにできると思うことはそれを塩漬けにすることです(これは新しいことではないことを私は知っています)。そのため、このために2つのテーブルを作成することを考えていました。1つaccountsはアカウントに関連付けられたすべての情報を持つと呼ばれsalt、2つ目のテーブルは次のように呼ばれauth、フィールドがあります。account_id, password

まず、登録時にソルトを作成します(ランダムに生成されます)

$salt = "#52/sBsO8";

次に、提供されたすべての情報はaccounts、それらの1つであるsaltに送られます

次に、データベースに情報を正常に配置した後、authテーブルに保存されるパスワードを作成します。この方法では、パスワードはユーザーが入力するパスワードのmd5ではなく、ソルトのmd5であり、ユーザーが入力するパスワードです。

したがって、のパスワードauth

$password = md5($user_entered_password . $salt);

テスト文字列:PHPコード

$password = "123";
$salt = "#52/sBsO8";
echo md5($password) ." / ";
echo md5($password . $salt);

出力:202cb962ac59075b964b07152d234b70 / dfbf0b257c5182af0ae893c2680f4594

問題は、これはパスワードを処理するための非常に安全な方法ですか?Webサイトをmd5()復号化するため、パスワードを推測する方法はたくさんあります。また、復号化するWebサイトは実際には復号化せずmd5()、数百万の文字列のmd5ハッシュを持っているだけです。

4

3 に答える 3

1

md5は、「人気のある」ハッシュアルゴリズムの中で最も安全性が低い可能性があります。
PHPを使用しているので、より良いオプションは次のようになります:http crypt: //php.net/manual/en/function.crypt.php

crypt($password, $salt)

さまざまなハッシュ方法の適切な比較については、パスワードハッシュに関するJeffAtwoodの投稿を参照してください。

ブルートフォーシングベンチマークに関する抜粋:

MD5 23070.7 M / s
SHA-1 7973.8 M / s
SHA-256 3110.2 M / s
SHA-512 267.1 M / s
NTLM 44035.3 M / s
DES 185.1 M / s
WPA / WPA2 348.0 k / s

DESは短すぎて最近は考慮できませんが、低いほど良いです(56ビット、@ thebodに感謝)。

編集:

上記のベンチマークメソッドにはリストされていませんが、cryptサポートする最良のハッシュメソッドはblowfishです。これを使用する例を次に示します。

// $salt has to be built with exactly these components:
// '$2a$' . $2DigitsNumberAroundTen . '$' . $TwentyTwoLetters
$salt = '$2a$07$somesillystringforsalt';
crypt( $password, $salt );
于 2012-06-08T15:40:33.960 に答える
1
  1. パスワードのハッシュ関数は遅くする必要があります(ある程度の計算時間が必要です)。ほとんどのハッシュアルゴリズムは高速になるように設計されていますが、これにより、すべてのソルトに対してレインボーテーブルを簡単に作成できます。
  2. ソルトはランダムである必要があり、保存されているパスワードごとに個別に生成する必要があります。このソルトはハッシュと一緒に保存する必要がありますが、秘密ではありません(プレーンテキストにすることができます)。ソルトは辞書攻撃をより困難にし、異なるソルトはレインボーテーブルを実行不可能にします。
  3. 理想的には、既存のハッシュを壊すことなく、後で新しいハードウェアの計算時間を調整できます。

そのため、パスワードをハッシュするためにbcryptを使用する必要があります。これは、パスワードをハッシュするために特別に設計されたものです。そして、bcryptを使うことを恐れないでください!これはセキュリティの高いサイト専用ではなく、md5ハッシュを使用するのと同じくらい簡単に使用できます。

phpassのような定評のあるライブラリを使用することをお勧めします。PHPがそのようなハッシュを生成する方法を理解したい場合は、この記事を読むことができます。

于 2012-06-08T16:19:45.957 に答える
-1

なぜこれがより安全だと思いますか?ユーザーがパスワードを入力します。ユーザーは馬鹿ではないと想定し、自分だけが知っているものを選択します。その個人がそれをで入力した場合、それはどのように異なりsaltますか?

これは実際にはそれをより不安定にします。なぜなら、人がテーブルを手にした場合、その人は何か作業する必要があるからです。

コンピューターが安全であること、ネットワークが安全であること、そしてユーザーに賢明で安全なパスワードを教えることに力を注ぐことをお勧めします。

于 2012-06-08T15:41:13.490 に答える