2011-08-09 15 views
0

Jquery SHA512.jsを使用して暗号化を送信し、ユーザー名とパスワードをサーバーに送信しています。 サーバーでは、ハッシュを格納したDBを作成するために次の作業を行っています。SHA暗号化 - 塩は本当に必要ですか?

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

これはすべて問題なく動作します。

私の質問は、塩の価値は何ですか? Saltがパスワードに適用された時点で、パスワードは既にサーバーにあり、インターネット経由では転送されません。また、Saltはパスワードハッシュの隣に格納されます。

したがって、誰かがハッシュのテーブルを取得する必要があり、そうした場合は、塩分とコードの残りの部分を取得し、私のサイトで一般的にしたいことをすることができます。

私は塩を塗るのが良いと分かりますが、私はそれを行いますが、それはサーバー上でのみ起こり、ブラウザーからサーバーには起こらないので、私はその価値に疑問を抱いています。何か不足していますか?

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

THX

答えて

4

塩のポイントは、2人のパスワードが同じであれば、それは難しく見ることにすることです。 SHAについての1つのことは、それが容易に可逆的ではないということです。ほとんどの攻撃では一般的なパスワードのハッシュが生成されるため、複雑なパスワードの場合は特に塩では難しくなります(ユーザー名は塩として、他のユーザーはランダムに生成された数字を使用します)。通常、サーバー側のコードでこれを実行したい(私はそれがブラウザのコード上で行うのは安全だとは思わない)。ハッシュだけを保存しているサーバには実際のパスワードを保存しないでください。もしあなたがまだそれを知らないのであれば塩を入れてください。

もう一度見て、2つのハッシュを1つ他の256、次に512です。これは悪い考えです。複数のハッシュを計算する時間を無駄にします。

+0

私は最初の段落の答えを+1します。第2段落は将来間違っているかもしれません。 Marc B.への私のコメントを参照してください。 –

+0

@Marc、そうですね、実際にその論文を数週間前に読んだのですが、かなり面白いです。ハッシュをハッシュする方法はありますが、その効果はありますが、実際に元の文字列を見つけるほうが簡単です。私はこれをどこかに示した別の論文を持っていましたが、私は今それを見つけることができません。 –

2

このようなミキシングハッシュは、無意味です。 sha512ハッシュを取ってsha256で実行すると、キースペースが半減するので、CPUの無駄な時間と衝突の倍増です。オッズはまだ微視的には微妙に小さくなりますが、それでも考慮する必要があります。

塩は、突き合わせカバーメカニズムとして存在します。何らかの理由でデータベースがリークする場合(ダンプファイルが「失われた」など)、共通のパスワードのsha256/512虹のテーブルを生成し、テーブルにヒットがあるかどうかを確認するのは簡単です。ハッシュテーブルは、虹のテーブルを生成するためにはるかに高価にするためにそこにあります。例えば"パスワード"はハッシュとチェックが容易です。 "パスワード#^ $ @#%#^ Y#@#$ @#^%$^Y %% $"は虹ではるかに少ないです。

+0

ソルトを使用すると、ハッシュから一般的なパスワードを復元することも防ぎます。たとえば、「hello」のmd5ハッシュをGoogle検索します(http://www.google.co.uk/search?sourceid=chrome&ie) = UTF-8&q = 5d41402abc4b2a76b9719d911017c592) –

+0

@Chris:これは虹のテーブルのためです。ハッシュから元の文字列を取り出すことができるという点で、md5自体は壊れていませんが、ハッシュを同じ値にする文字列を見つけるために衝突を計算/編成するのはかなり簡単です。塩は、衝突、特にオーケストレーションされたものに対して保護しません。 –

+0

@MarcB - SHA-2のメッセージ拡張機能により、SHA-2(512)出力をSHA-2(256)経由で実行すると、線形近似による衝突の計算に対する抵抗力が強化されます.SanadhyaとSarkarの参照と情報。 SHA-256の実行される操作上の複雑さは、SHA-512に似ています。例えば、小シグマ1関数は3回転を持ち、シフトXORdを持ちます。 SHA-512は、例えば6回転と2シフトを持たず、SHA-512レジスタが大きいので回転が大きいだけです。 –

0

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

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

(ダブルハッシュは必要)あってはならない

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

は、ユーザ(例えばユーザID)についてユニークなものです。ランダムな値を選択する場合は、ハッシュ値を格納する必要があります。

関連する問題