0

私はJquery SHA512.jsを使用して暗号化を送信し、ユーザー名とパスワードをサーバーに送信しています。サーバーでは、DB に格納された HASH を作成するために次のことを行っています。

$dbhash = = hash('sha256',(hash('sha512',$user) . hash('sha256',$extremesalt)));

これはすべてうまくいきます。

私の質問は、塩の価値は何ですか? ソルトがパスワードに適用された時点で、パスワードはすでにサーバー上にあり、インターネットを介して転送されていません。また、Salt はパスワード ハッシュの隣に保存されます。

したがって、誰かが私のテーブルをハッシュで取得する必要があるようです。もしそうなら、ソルトと残りのコードを取得して、サイト全体で必要なことを行うことができます。

塩を適用するのが良いことはわかりますが、そうしますが、それはサーバー上でのみ発生し、ブラウザからサーバーへは発生しないため、その価値に疑問があります. 何か不足していますか?

もう 1 つの質問 - ブラウザからサーバーにソルトを適用することは可能ですか。ソースをチェックした場合は表示されないか、少なくとも表示された場合は表示されると思います(例:私の原因ではjqueryで表示されます)。したがって、実質的な価値はありません。

どうも

4

4 に答える 4

4

ソルトのポイントは、2人のパスワードが同じであるかどうかを確認しにくくすることです。SHAの1つは、簡単に元に戻せないことです。ほとんどの攻撃は一般的なパスワードのハッシュを生成することを伴うため、かなり複雑なパスワードの場合、特にソルトを使用すると難しくなります(ソルトとしてユーザー名を使用する人もいれば、ランダムに生成された番号を使用する人もいます)。通常、これはサーバー側のコードで実行する必要があります(ブラウザーのコードで実行するのは安全ではないと思います)。また、ハッシュのみを保存するサーバーに実際のパスワードを保存しないでください(まだ知らない場合はソルトも保存してください)。

もう一度見てみると、2つのハッシュを次々に256、次に512を使用していることがわかります。これは悪い考えです。1つを使用してそれを使い続けてください。複数のハッシュを計算するのに時間を浪費します。

于 2011-08-09T21:54:21.153 に答える
2

そのようなハッシュを混合することはかなり無意味です。sha512ハッシュを取得してsha256を実行すると、必然的にキースペースが半分になります。そのため、CPU時間を無駄にし、衝突の確率を2倍にするだけです。オッズはまだ消えるほど小さい/微視的ですが、それでも考慮すべきことがあります。

塩はお尻を覆うメカニズムとしてそこにあります。何らかの理由でデータベースがリークした場合(たとえば、ダンプファイルが「失われた」場合)、一般的なパスワードのsha256 / 512レインボーテーブルを生成し、テーブルにヒットがあるかどうかを確認するのは簡単です。ハッシュは、レインボーテーブルの生成をはるかに高価にするためにあります。たとえば、「パスワード」は簡単にハッシュして確認できます。「password#^ $ @#%#^ Y#@#$ @#^%$ ^ Y %% $」は、虹色になる可能性がはるかに低くなります。

于 2011-08-09T21:55:53.620 に答える
0

あなたのアプリはわかりませんが、SSLを使用してユーザー名/ pwdをサーバーに送信し、SSLの公開鍵暗号化で暗号化を処理してもらいたいと思いませんか。サーバーは適切なハッシュを生成して、ハッシュされたパスワードを保存するか、以前に保存されたハッシュと比較して検証することができます。

于 2011-08-09T21:56:12.990 に答える
0
$dbhash = = hash('sha256',(hash('sha512',$user) . hash('sha256',$extremesalt)));

する必要があります(ダブルハッシュの必要はありません)

$dbhash = = hash('sha512',$pass + $salt);

ここで、passはパスワードであり、saltはユーザーに固有の何かです(たとえば、userid)。ランダムな値を選択する場合は、ハッシュと一緒に保存する必要があります。

于 2011-08-09T21:59:39.870 に答える