問題タブ [rainbowtable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hash - パスワードソルトはレインボーテーブル攻撃に対してどのように役立ちますか?
パスワードへのソルトの目的を理解するのに苦労しています。主な用途は、レインボー テーブル アタックを妨害することだと理解しています。ただし、これを実装するために私が見た方法は、問題を実際に難しくしているようには見えません。
ソルトを次のように使用することを提案する多くのチュートリアルを見てきました。
これは、ハッシュが元のパスワードではなく、パスワードとソルトの組み合わせにマップされるようになったためです。しかし、$salt=foo
と$password=bar
言う$hash=3858f62230ac3c915f300c664312c63f
。これで、レインボー テーブルを持つ誰かがハッシュを逆にして、入力 "foobar" を思いつくことができます。次に、パスワードのすべての組み合わせ (f、fo、foo、... oobar、obar、bar、ar、ar) を試すことができます。パスワードを取得するのにさらに数ミリ秒かかる場合がありますが、それ以外はそれほど時間はかかりません。
私が見た他の使用法は、私の Linux システムです。/etc/shadow では、ハッシュ化されたパスワードは実際にはソルトとともに保存されます。たとえば、"foo" のソルトと "bar" のパスワードは、次のようにハッシュされます$1$foo$te5SBM.7C25fFDu6bIRbX1
。te5SBM.7C25fFDu6bIRbX
ハッカーがどうにかしてこのファイルを手に入れることができたとしても、の逆ハッシュには「foo」が含まれていることが知られているため、salt の目的はわかりません。
誰もがこれに当てることができる光をありがとう。
編集:助けてくれてありがとう。私が理解していることを要約すると、ソルトはハッシュ化されたパスワードをより複雑にするため、事前に計算されたレインボー テーブルに存在する可能性がはるかに低くなります。私が以前誤解していたのは、すべてのハッシュに対してレインボー テーブルが存在すると想定していたことです。
md5 - ワードリスト内のすべての単語のMD5を作成する
単語を含む単語リストがあるとしましょう
私がしたいのは、それらをMD5ハッシュに生成することです。(30GBのワードリストがあります。すべてMD5にしたいです)どの言語でも構いません。
これは、単語リストに「テスト」という単語があると言うので、この形式で欲しいです:
098f6bcd4621d373cade4e832627b4f6=MD5でテスト
security - パスワードのハッシュに使用されるハッシュ アルゴリズムは、レインボー テーブルの生成に影響しますか?
non-random-salt-for-password-hashes について質問します。Potato Head氏は、SHA-512 の代わりに md5 を使用すると、レインボー テーブルの生成が容易になると述べています。レインボーテーブルが生成されたら、使用されるアルゴリズムは無関係だと思いましたか? レインボー テーブルを使用して既知のハッシュを確認する方法に違いはありませんか? また、どのハッシュアルゴリズムが使用されたかを知る方法はありますか?
更新を編集:
アプリケーションを保護するためではなく、ユーザーがパスワードと ID を再利用する他のすべての人を保護するために、パスワード テーブルの適切なハッシュが必要だと思います。
security - 究極のハッシュ保護-概念の議論
さて、ハッシュの全体的な問題は、ユーザーが15文字を超えるパスワードを入力しないことです。ほとんどの場合、4〜8文字しか使用しないため、攻撃者はレインボーテーブルで簡単にクラックできます。
解決策として、ユーザーソルトを使用してハッシュ入力をより複雑にし、50文字を超えて、テーブルを生成できないようにします(そのサイズの文字列では大きくなります)。さらに、ユーザーごとに新しいテーブルを作成する必要があります。問題:彼らがデータベースをダウンロードした場合、彼らはユーザーソルトを取得するので、彼らが十分に気にかけているなら、あなたは正方形に戻ります。
解決策として、サイト「pepper」とユーザーソルトを使用します。そうすれば、DBを取得したとしても、構成ファイルを知っている必要があります。問題:彼らがあなたのDBに侵入する可能性がある場合、彼らはあなたのファイルシステムに侵入し、あなたのサイトのコショウを発見するかもしれません。
したがって、これらすべてがわかっているので、攻撃者がサイトに侵入し、すべてを取得したと仮定しましょう。それで、あなたは今何をしますか?
議論のこの時点で、ほとんどの人は「この時点で誰が気にしますか?」と答えます。しかし、それは「次に何をすべきかわからないので、それほど重要ではない」という簡単な言い方です。悲しいことに、他のどこでも私は答えであるこの質問をしました。これは、ほとんどのプログラマーが非常に重要な点を見逃していることを示しています。
あなたのサイトが他の95%のサイトと同じであり、ユーザーデータ(または完全なサーバーアクセスさえも)はしゃがむ価値がないことを想像してみましょう。攻撃者は、ユーザーの1人である「Bob」を追いかけています。これは、「Bob」が銀行のサイトで使用しているのと同じパスワードをサイトで使用していることを知っているためです。彼はまた、ボブがそこに彼の命の節約を持っていることを知っています。さて、攻撃者が私たちのサイトのハッシュをクラックすることができれば、残りは簡単なものになります。
だからここに私の質問があります-追跡可能なパスなしでパスワードの長さをどのように延長しますか?または、ハッシュプロセスを複雑にして、タイムリーに複製する方法を教えてください。私が思いついた唯一のことは、ハッシュを数千回再ハッシュして、最終的なレインボーテーブルを作成するのにかかる時間を1,000倍に増やすことができるということです。これは、攻撃者がテーブルを作成するときに同じパスをたどる必要があるためです。
他のアイデアはありますか?
security - 辞書攻撃とは?
辞書攻撃と言うとき、実際の辞書を意味しているわけではありませんよね? 私の推測では、ハッカーの辞書、つまりレインボー テーブルを意味しているのではないでしょうか。
要点は、ログイン ボックスに別のパスワードを入力している誰かについて話しているのではなく、データベースへのフル アクセス権を持っている誰か (単純なパスワードではなくハッシュ化されたパスワードを持っている) について話しているということです。この人はハッシュを逆にしています。 ?
security - ソルトジェネレーションとオープンソースソフトウェア
私が理解しているように、ソルトを生成するためのベストプラクティスは、ソースコードに格納されている不可解な式(またはマジック定数)を使用することです。
私はオープンソースとしてリリースする予定のプロジェクトに取り組んでいますが、問題は、ソースに塩を生成するための秘密の公式が付属しているため、サイトでレインボーテーブル攻撃を実行できることです。
多くの人が私の前でこの問題を考えていたと思いますが、ベストプラクティスは何であるか疑問に思っています。ソルトは簡単にリバースエンジニアリングできるため、コードがオープンソースの場合、ソルトを使用しても意味がないように思われます。
考え?
hash - 複雑なパスワードを強制することは、ソルティングよりも「重要」ですか?
私は過去 2 時間かけてパスワードのソルティングについて読み、その考えを理解していることを確認しました。皆さんの何人かが、私の結論についての知識を共有してくれることを願っていました。
私が攻撃者であり、ユーザー データベースへのアクセス権を取得した場合、テーブルに存在するすべてのユーザーごとのソルトを取得し、それらを使用してレインボー テーブルを作成できます。大きなテーブルの場合、これには長い時間がかかる場合があります。リストを関心のあるユーザー (管理者、改造者) に絞り込むことができれば、より大きな辞書リストを使用してレインボー テーブルを作成し、ヒット率を上げることができます...
これが本当なら、塩漬けは実際にはそれほど役に立たないようです. 攻撃者の速度をわずかに低下させるだけです。
複雑なパスワードを強制し、一意のランダムな文字列でソルトするのが理想的ですが、複雑なパスワードを強制することはユーザーを悩ませる可能性があるため (私はそれが私を悩ませることを知っています)、多くのサイトではそれを行いません。サイトはこれでユーザーに不利益を与えているようであり、複雑なパスワードを強制することは、適切なソルティング方法よりもはるかに重要です.
これはあまり質問ではなく、状況に関する他の人への知識の要求だと思います。
encryption - ハッシュソルトには、レインボーテーブル攻撃を防ぐ以外の用途がありますか?
ソルトの唯一の目的はレインボー テーブルの攻撃を防ぐことだと聞きましたが、それ以上の価値があるのでしょうか? 辞書ベースの攻撃も防げませんか? そして、ブルートフォースについてはどうですか、そこで塩は役に立ちますか? 理由を教えてください。
次に、マイクロタイム、128 文字のソルト、および 10 億から 100 億の間の乱数を取り、それらを一緒にハッシュするアルゴリズムがあるとします。これにより、優れたレベルのセキュリティが提供されますか? たとえ攻撃者がそれらの詳細の 1 つを知っていたとしても、残りを計算することは計算上実行不可能であるように私には思えます。そうですよね?
ありがとう、
ベン
編集:明確にするために、攻撃者はハッシュ アルゴリズムにアクセスできないため、システムに情報をスパム送信することはできません。彼らが持っているのはハッシュだけであり、それがどのようにコンパイルされたかを理解する必要があります. ハッシュがどのように生成されたかを知っていたとしても、長いソルトを使用してすべての組み合わせをブルート フォースしようとすると、非現実的になりますか?
また、ハッシュはユーザーのパスワードやユーザー名ではなく、認証に使用されるランダムな文字セットです。そのため、ソルトと乱数を保存する必要はなく、結果のハッシュだけを保存する必要があります。その場合、以下のコードのようなもので表される上記のシステムは、攻撃者がユーザーのハッシュが何であるかを現実的に推測することを防ぐのに適したシステムでしょうか?
上記の数十億ではなく、わずか 1000 ~ 9999 であることはわかっています。
再度、感謝します。
cryptography - チェーンはレインボー テーブルでどのように機能しますか?
完全な初心者と同じようにレインボーテーブルでチェーンがどのように機能するか、プログラミングに関連して誰かが詳細に説明できるかどうか疑問に思っていました。
チェーンの長さは 16 バイトであることを理解しています。8 バイトは開始点を示し、8 バイトは終了を示します。また、ファイル名のチェーン長が 2400 であることも理解しています。これは、開始点と終了点の間にわずか 16 バイトで 2400 の可能なクリア テキストがあることを意味します。それはどのように機能しますか?これらの 16 バイトで、どうすれば 2400 ハッシュとクリア テキストを取得できますか、またはこれを誤解していますか?
よろしくお願いいたします。
ありがとう。
PS: 関連する論文を読み、このトピックについてかなりググりました。これらのギアを回すために重要な何かが欠けているだけだと思います。
windows - レインボー テーブル: どうやって防御するの?
最近、Windows 用の l0pht-CD を入手して、自分の PC で試してみたところ、うまくいきました!!
2600hertz.wordpress.com/2009/12/22/100-windows-xp-vista-7-パスワード-回復
同様の方法で pwd-s を格納する「ログイン シミュレーター」を設計しています。現在の実装は、上記の攻撃に対して脆弱です。このようなレインボー テーブル攻撃に対して強化する方法を (できるだけ簡単な言葉で) 誰でも説明できます。
MY GOAL : 「Login-Simulator」を可能な限り安全に構築します。(ハッキング大会を読んでください ;-) )
ありがとうございました。