web-dev-qa-db-ja.com

ハッシュ結果により、パスワードの推測が近いかどうかを確認できますか?

私は最近パスワード管理について読んで(非常に興味深いものです!)、ハッシュが類似した文字列でどのように異なるのか疑問に思っていました。

結果のハッシュを実際のハッシュと比較することによって、パスワードの推測が近いかどうかを知ることは可能ですか?

たとえば、実際のパスワードが「password123」であり、ハッカーが「Password123」、「password1234」、「password124」などを試行した場合、生成されるハッシュは、ハッカーまたはそのコンピューターのいずれかが知ることができる実際のハッシュに十分似ています。彼らは正しい軌道に乗っていましたか?

ハッカーが塩、コショウ、カイエンパウダー、アドボなどを知っていると仮定しましょう。適切なパスワードを入力すると、一致するハッシュが生成されます。

(これは使用するハッシュ関数によって異なると思いますが、確かにわかりません。)

75
elmer007

いいえ、ハッシュをどの程度正確に推測したかを判断することはできません。ハッシュ関数はこれを念頭に置いて設計されています。入力の1つの変更されたビットは、出力の多くのビットを変更する必要があります。その呼ばれる 雪崩効果

以下に、いくつかのパスワード例のSHA1ハッシュを示します。

cbfdac6008f9cab4083784cbd1874f76618d2a97 - password123

b2e98ad6f6eb8508dd6a14cfa704bad7f05f6fb1 - Password123

2b4bfcc447c3c8726d26c22927a68f511d5e01cc - password124

115b55dcc1cd9a0dfdd60c120e83eaf658c45fc6 - right horse battery staple

abf7aad6438836dbe526aa231abde2d0eef74d42 - correct horse battery staple

単一のビット変更は、ハッシュ結果を完全に変更します。実際、理想的なケースでは、入力のすべてのビットが変化し、出力のすべてのビットが50%の確率で変化します。

159
ThoriumBR

いいえ、アバランシェ効果のおかげで、入力が1ビット変化しても出力に大きな違いが生じるはずです。

Md5などのハッシュ関数についても説明しています...入力サイズが与えられても、出力サイズは変わりません。 md5では、入力サイズが2ビットまたは2000ビットの場合、出力は常に32桁の英数字(16進形式)になります。したがって、md5出力をハッシュしたとしても、通常のユーザーが入力サイズを推測することはほとんど不可能です。パスワードを推測することは、通常のユーザーの範囲をはるかに超えていますが、アルゴリズムと多くの順列を適用することにより、ハイエンドの並列計算を行う方法があります。ハッシュコードがある場合に可能な入力の1つを理解するための組み合わせ...!

 md5出力:
 password123 = 482c811da5d5b4bc6d497ffa98491e38 
 Password123 = 42f749ade7f9e195bf475f37a44cafcb 
 password1234 = bdc87b9c894da5168059e00ebff ___ 9077 [7

上記の結果は、雪崩の影響を示しています。

15
Surendra Patil

上記の回答に1つの要素を追加するには、ハッシュ関数のwhole pointは、質問の種類の情報を流さないようにすることです。anythingについて判断できる場合ハッシュ関数の失敗を表す、出力を比較する入力フォームの類似性。

ハッシュ関数が何らかの仕事をするだけでなく、偶然にも、入力について何も理解できません。ハッシュ関数の仕事は、入力に関するゼロの情報を提供することであり、入力について何かを見つけることができれば2つの出力を比較すると、その原則に違反します。

13
Jason

使用するハッシュ関数によって異なります。 passwordハッシュを指定してから、疑いもなくnoを指定したため、 any種類の情報をリークしたパスワードにハッシュ関数を使用したい。ハッシュは単に一致するか一致しないかのどちらかで、それだけです。

そうは言っても、類似性情報を提供するハッシュ関数は存在します。詳細は this answer にあります。

7
TTT

いいえ。ハッシュ関数に入力されたデータと何が関係するのかは関係ありません。

たとえば、MD5の 'hello'は次のとおりです。

5d41402abc4b2a76b9719d911017c592

そしてここに「こんにちは」があります:

8b1a9953c4611296a827abf8c47804d7
4
Joshua Hunter

これは少し遠いですが、通常はありません-パスワードの推測がハッシュ値から「どれだけ正しい」かを判断する方法はありません。 LMhash のように、パスフレーズのセグメントが分割されて個別にハッシュされる場合、私が考えることができる最も近いシナリオは、でしょう。この状況では、攻撃者はパスワードの正しいセクションから情報を収集することができますが、攻撃者は各セグメントが正しいと「どれだけ近い」かを推測することはできません。

他のユーザーがハッシュと雪崩効果のすばらしい概要を説明してくれたので、ここでは説明しません。

1
Flutter

使用されるアルゴリズムによっては、パスワードがどれだけ近いかを計算することが可能であり、これにより、ブルートフォースよりもはるかに速くパスワードを解読できる衝突攻撃が発生します。

私が理解しているように、そのような欠陥のためにミリ秒でクラックされる可能性があるMD4の場合です。私はMD4エクスプロイトを分析しませんでしたが、それに組み込まれた近接方程式があると思います。

ばかげた例を見てみましょう:パスワードのASCIIコードの合計であるハッシュ関数です。パスワードABとBAは同じハッシュ131を持ちます。実際のパスワードがABの場合、システム実際のパスワードとしてBAも受け入れます。少しリバースエンジニアリングを行うと、次のような関係が示されます。a)文字を次の文字に変更すると、ハッシュに文字が追加されます。 b)パスワードに新しいAを追加すると、ハッシュに65が追加されます。そして、亀裂の準備が整いました。クラックによって返されたパスワードは、ユーザーが使用したものと同じではない可能性がありますが、システムは違いを認識しません。

はい、暗号化ハッシュアルゴリズムの目的はそれを防ぐことです。それは予測不可能であると考えられているため、総当たりが必要です。ただし、常に期待どおりに機能するとは限りません。数学は許されない。

編集:MD4、MD5、およびSHA1は、これらの種類の攻撃のために、現在は廃止されています。これらの脆弱性を回避するために新しいアルゴリズムが生まれました。そして、パスワードチェックはハッシュだけではありません。新しいアルゴリズムの採用は、私たちが望むほど速くはありません。常に更新されるLinuxの場合、基本パスワードは最新のアルゴリズムを使用する必要があります。しかし、世界中で10年以上前のソフトウェアを実行しているシステムはたくさんあると思います。オペレーティングシステムの新しいバージョンは古いアプリケーションと互換性がないか、有料のソフトウェアを使用する場合、ライセンスコストによって単純ではないからです。システムから分離された独自のパスワードデータベースを持つ多くのソフトウェアのセキュリティは弱いと思います。

0
Lucas

はい、できますが、ニアミスのハッシュを保存し、それらを関連付ける必要があるため、作業とリソース、および可能性のあるセキュリティの問題が随所にあります。たとえば、今でも、Wordpressサイトでプレーンテキストのパスワードが "試行"することを確認できます。これらのいずれかが他のどこかから既知の高エントロピーパスワードと一致する場合、どこにあるかがわかりますもちろん、誤ってキー入力されたデータを生成するアルゴリズムはありますが、これは同様のスペルミスのURLスクワッティングにより広く知られていますが、スコアを割り当てて、一致の程度と必要な程度を決定する必要があります。基本的に、これらが辞書の単語である場合は、Soundexなどでランク付けします。

0
mckenzm