更新:ソルトとは何か、レインボーテーブルとは何か、辞書攻撃とは何か、ソルトの目的は何かを尋ねていないことに注意してください。私は質問しています:ユーザーのソルトとハッシュを知っているなら、彼らのパスワードを計算するのはとても簡単ではありませんか?
私はプロセスを理解しており、いくつかのプロジェクトで自分で実装しています。
s = random salt
storedPassword = sha1(password + s)
保存するデータベース:
username | hashed_password | salt
私が見たソルティングのすべての実装は、パスワードの最後または最初にソルトを追加します。
hashed_Password = sha1(s + password )
hashed_Password = sha1(password + s)
したがって、彼の塩の価値があるハッカーからの辞書攻撃(ha ha)は、上記の一般的な組み合わせで保存されている塩に対して各キーワードを実行するだけです。
確かに、上記の実装は、根本的な問題を実際に解決することなく、ハッカーに別のステップを追加するだけですか?この問題を回避するための代替手段はありますか、それとも私は問題を誤解していますか?
私が考えることができる唯一のことは、ソルトとパスワードをランダムなパターンで組み合わせたり、他のユーザーフィールドをハッシュプロセスに追加したりする秘密のブレンドアルゴリズムを使用することです。実りあることを証明するための辞書攻撃のためにそれらを。(コメントで指摘されているように、更新します。ハッカーがすべての情報にアクセスできると想定するのが最善であるため、これはおそらく最善ではありません)。
ハッカーがパスワードとハッシュのリストを使用してユーザーデータベースをハッキングすることを提案する方法の例を挙げましょう。
ハッキングされたデータベースのデータ:
RawPassword (not stored) | Hashed | Salt
--------------------------------------------------------
letmein WEFLS... WEFOJFOFO...
一般的なパスワード辞書:
Common Password
--------------
letmein
12345
...
ユーザーレコードごとに、共通のパスワードをループしてハッシュします。
for each user in hacked_DB
salt = users_salt
hashed_pw = users_hashed_password
for each common_password
testhash = sha1(common_password + salt)
if testhash = hashed_pw then
//Match! Users password = common_password
//Lets visit the webpage and login now.
end if
next
next
これが私の主張をよりよく説明してくれることを願っています。
10,000個の一般的なパスワードと10,000個のユーザーレコードがある場合、できるだけ多くのユーザーパスワードを検出するには、1億個のハッシュを計算する必要があります。数時間かかる場合がありますが、実際には問題ではありません。
クラッキング理論に関する最新情報
私たちは破損したウェブホストであり、SHA1ハッシュとソルトのデータベースにアクセスし、それらをブレンドするためのアルゴリズムを持っていると想定します。データベースには10,000のユーザーレコードがあります。
このサイトは、GPUを使用して1秒あたり2,300,000,000のSHA1ハッシュを計算できると主張しています。(実際の状況ではおそらく遅くなりますが、今のところはその引用された図を使用します)。
(((95 ^ 4)/ 2300000000)/ 2)* 10000 = 177秒
最大長が4文字で、計算速度(可変)で除算し、2で除算した(パスワードを検出するための平均時間が平均して順列の50%を必要とすると仮定)、95個の印刷可能なASCII文字の全範囲が10,000の場合ユーザーは、長さが4以下のすべてのユーザーのパスワードを計算するのに177秒かかります。
リアリズムのために少し調整してみましょう。
(((36 ^ 7)/ 1000000000)/ 2)* 10000 = 2日
大文字と小文字を区別せず、パスワードの長さが7文字未満で、英数字のみを使用すると、10,000ユーザーレコードを解決するのに4日かかります。また、オーバーヘッドと非理想的な状況を反映するために、アルゴリズムの速度を半分にしました。
これは線形ブルートフォース攻撃であることを認識することが重要です。すべての計算は互いに独立しているため、複数のシステムで解決するのに最適なタスクです。(つまり、実行時間の半分になる、異なるエンドからの攻撃を実行する2台のコンピューターを簡単にセットアップできます)。
このタスクをより計算コストの高いものにするために、パスワードを1,000回再帰的にハッシュする場合を考えます。
(((36 ^ 7)/ 1 000 000 000)/ 2)* 1000秒= 10.8839117時間
これは、最大7文字の英数字を表し、1人のユーザーの引用符で囲まれた数値から実行速度が半分未満です。
1,000回の再帰的なハッシュは、包括的攻撃を効果的にブロックしますが、ユーザーデータに対する標的型攻撃は依然として脆弱です。