重複の可能性あり:
MD5 ハッシュ値はなぜ元に戻せないのでしょうか?
MD5 に関する質問を読んでいたのですが、あることを思い出して困惑しました。とても簡単な質問で、よくわからない質問だったらごめんなさい。あるアルゴリズムを使って何かを 1 つのものに変換する方法と、そのアルゴリズムを逆に使ってそれを元に戻す方法がないことが理解できません。
それで、これはどのように可能でしょうか?
また、入力文字列よりもデータが少ないため、複数の文字列で同じ MD5 ハッシュが作成される可能性があるため、他のハッシュ システムの方が優れているのでしょうか?
ベストアンサー1
基本的に、MD5 の出力には入力よりも少ない情報しか含まれていないためです。これが基本的にハッシュ アルゴリズムと暗号化アルゴリズムを区別するものです。
簡単な例を挙げましょう。10 桁の数字のハッシュを計算するアルゴリズムを想像してください。このアルゴリズムは「最後の 2 桁を返す」ものです。8023798734 のハッシュを取得すると 34 になりますが、34 しか取得できなかった場合、ハッシュ アルゴリズムによって 8 桁の情報が破棄されるため、元の数字が何であるかを判断する方法はありません。これは MD5 と似ていますが、ハッシュはデータの一部を切り取るのではなく、複雑な手順で計算されます。
では、あるハッシュが他のハッシュより優れているのはなぜでしょうか?まず、異なるハッシュアルゴリズムは、衝突(2つの入力が同じ出力を生成する場合)。衝突の確率は、ハッシュ出力の可能な数に反比例します。衝突はハッシュの望ましくない特徴です。なぜなら、データが変更されるとハッシュも変更されるからです。そのため、より良いハッシュアルゴリズムを得るための1つの方法は、より多くの可能な出力を持つハッシュを使用することです。上記の数字の例では、最後の2桁ではなく最後の4桁を取ることで、特定のハッシュ(技術的には「衝突」と呼ばれます)との衝突の確率が減ります。原画像) は 100 分の 1 ではなく 10000 分の 1 になるため、どのようなセットであっても、10 桁の数字すべてが異なるハッシュ値を持つ可能性が高くなります。
暗号セキュリティの問題もあります。ハッシュを使用してデータが改ざんされていないことを確認する場合、改ざんを行う人がどのような入力から特定の出力が得られるかを予測できないことが望ましいです。予測できれば、出力(ハッシュ)が同じままになるように入力データを変更することができます。数字の例に戻ると、1879483129という番号をメールで送るとします。極めて重要この番号は変更されずにあなたに届きます。私はあなたに電話して、その番号のハッシュ値 (29) を伝えるかもしれませんが、「最後の 2 桁」アルゴリズムは暗号的に安全ではないため、悪意のあるハッカーが途中で番号を変更して、たとえば 5555555529 に変えても、あなたは違いに気付かないでしょう。
それは明らかになっているMD5は暗号的に安全ではない(そしてSHA-1も危険にさらされている)。つまり、任意の出力に対応する異なる入力を見つけることができるということです。これは、ランダムなビット反転などから保護するための優れたアルゴリズムですが、誰かが意図的にデータを破壊しようとする可能性がある場合は、SHA-256以上のより安全なものを使用する必要があります。HMACスキームの一部として。