暗号ハッシュ関数

暗号ハッシュ関数定義

暗号ハッシュ関数は、チェックサムと呼ばれる値を生成するために、個々のファイルやパスワードなどのデータに対して実行できるアルゴリズムの一種です。

暗号ハッシュ関数の主な用途は、データの信頼性を検証することです。 同じ暗号ハッシュ関数を使用して各ファイルから生成されたチェックサムが同一である場合にのみ、2つのファイルが同一であることが保証されます。

いくつかの一般的に使用される暗号ハッシュ関数にはMD5SHA-1が含まれますが、他にも多くのものが存在します。

注:暗号ハッシュ関数は、しばしばハッシュ関数と呼ばれますが、技術的には正しくありません。 ハッシュ関数は、暗号掛けハッシュ関数と、巡回冗長検査のような他の種類のアルゴリズムを包含するために通常使用されるより一般的な用語です。

暗号ハッシュ関数:ユースケース

Firefoxブラウザの最新バージョンをダウンロードしたとしましょう。 どんな理由であれ、Mozillaのサイト以外からダウンロードする必要がありました。 あなたが信頼することを学んだサイトではホストされていないので、ダウンロードしたインストールファイルがMozillaが提供するものとまったく同じものであることを確認したいと思います。

チェックサム計算機を使用して、特定の暗号化ハッシュ関数(SHA-2など)を使用してチェックサムを計算し 、それをMozillaのサイトに公開されているものと比較します。

それらが同等であれば、あなたが持っているダウンロードがMozillaの意図したものであることを合理的に確信できます。

チェックサムとは?を参照してください これらの特別な計算機の詳細については、チェックサムを使用して実際にダウンロードしたファイルが期待どおりになっているかどうかを確認する例があります。

暗号ハッシュ関数を逆にすることはできますか?

暗号化ハッシュ関数は、作成したチェックサムを元のテキストに戻す機能を無効にするように設計されています。

しかし、たとえそれが事実上逆転することは不可能であっても、データを100%保証するわけではありません。

レインボーテーブルと呼ばれるものを使用して、チェックサムの平文をすぐに把握することができます。 レインボーテーブルは、基本的には、対応する平文の値とともに数千、数百万、さらには何十億というものをリストする辞書です。

これは暗号化ハッシュアルゴリズムを技術的に逆転させるものではありませんが、それほど簡単である可能性もあります。 実際には、レインボーテーブルは存在する可能性のあるチェックサムをすべて列挙することができないので、弱いパスワードのような単純なフレーズには通常「役立つ」だけです。

SHA-1暗号化ハッシュ関数を使用するときにどのように動作するかを示すための虹のテーブルの簡略版です:

プレーンテキスト SHA-1チェックサム
12345 8cb2237d0679ca88db6464eac60da96345513964
パスワード1 e38ad214943daad1d64c102faec29de4afe9da3d
私は私の犬が大好き a25fb3505406c9ac761c8428692fbf5d5ddf1316
Jenny400 7d5eb0173008fe55275d12e9629eef8bdb408c1f
dallas1984 c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2

これらの値がチェックサムを使用して計算されるためには、ハッカーがそれらを生成するために使用された暗号ハッシュアルゴリズムを理解する必要があります。

保護を強化するために、ユーザーパスワードを格納する一部のWebサイトでは、値が生成された後、保存される前に、暗号化ハッシュアルゴリズムに追加の機能を実行します。

これにより、Webサーバーだけが理解し、元のチェックサムと正確に一致しない新しい値が生成されます。

たとえば、パスワードが入力され、チェックサムが生成された後、パスワードデータベースに格納される前に複数の部分に分割されて並べ替えられたり、ある文字が他の文字と交換されたりする可能性があります。 ユーザーが次回サインオンするときにユーザーが認証しようとすると、この追加機能はWebサーバーによって元に戻され、元のチェックサムが再度生成され、ユーザーのパスワードが有効であることを確認します。

これを行うと、すべてのチェックサムが盗まれたハックの有用性が制限されます。

ここでも、ハッカーが暗号化ハッシュアルゴリズムを知っていてこのカスタム暗号アルゴリズムを認識していない場合、パスワードチェックサムを知ることは役に立たないという、未知の機能を実行することです。

パスワードと暗号ハッシュ関数

レインボーテーブルと同様に、データベースによるユーザーパスワードの保存方法も同様です。 パスワードが入力されると、チェックサムが生成され、ユーザー名で記録されたものと比較されます。 2つが同一であればアクセス権が与えられます。

暗号化ハッシュ関数が非可逆チェックサムを生成するとすれば、チェックサム自体は理解できないため、パスワードを12 @ 34 $ 5ではなく12345と単純にすることができますか? それは間違いなく 、なぜここにあるの?

ご覧のように、これらの2つのパスワードは、単にチェックサムを調べるだけでは解読できません。

12345のMD5: 827ccb0eea8a706c4c34a16891f84e7b

12 @ 34 $ 5のMD5: a4d3cc004f487b18b2ccd4853053818b

したがって、一見すると、これらのパスワードのどちらかを使用することは絶対に良いと思うかもしれません。 これは、攻撃者がMD5チェックサム(誰もしない)を推測してパスワードを把握しようとした場合には真実ですが、一般的な手法であるブルートフォースや辞書攻撃が行われた場合は真ではありません。

ブルートフォース攻撃は、パスワードを推測する際に複数のランダムなスタブをとる場合です。 この場合、「12345」を推測するのは非常に簡単ですが、もう一方をランダムに見つけ出すことは非常に困難です。 ディクショナリ攻撃は、攻撃者が一般的な(そしてあまり使われない)パスワードのリストからすべての単語、数字、または句を試すことができるという点で似ています。 "12345"は確かに試されるパスワードです。

したがって、暗号化ハッシュ関数では推測不可能なチェックサムが生成されにくいにもかかわらず、すべてのオンラインおよびローカルユーザーアカウントに複雑なパスワードを使用する必要があります。

ヒント:強力なパスワードと見なされているかどうかわからない場合は、「脆弱で強力なパスワードの例 」を参照してください。

暗号ハッシュ関数の詳細

暗号化ハッシュ関数は暗号化に関連しているように見えるかもしれませんが、2つは非常に異なる方法で動作します。

暗号化は、何かが暗号化されて解読不能になるが、後で通常どおりに解読されるように暗号化される2つのプロセスです。 保存したファイルを暗号化して、アクセスした人が使用できないようにするか、オンラインでダウンロードしたりダウンロードしたりするファイル転送暗号化を利用してネットワーク上を移動するファイルを暗号化することができます。

上記のように、暗号化ハッシュ関数は、チェックサムが特別な復号化パスワードで読み取られた暗号化されたファイルのような特別なデハッシュ化パスワードで逆転されないという点で異なって動作します。 暗号化ハッシュ関数の唯一の目的は、ファイルのダウンロード、パスワードの保存、データベースからのデータの取り込みなど、2つのデータを比較することです。

暗号化ハッシュ関数が異なるデータに対して同じチェックサムを生成することは可能です。 これが起こると、衝突と呼ばれます。 明らかに、これは、暗号化ハッシュ関数の全ポイントが、それに入力されるすべてのデータに対して完全に固有のチェックサムを作成することであると考えると、大きな問題です。

衝突が発生する理由は、各暗号ハッシュ関数が入力データに関係なく固定長の値を生成するためです。 たとえば、MD5暗号ハッシュ関数は、3つの全く異なるデータブロックに対して827ccb0eea8a706c4c34a16891f84e7b、 1f633b2909b9c1addf32302c7a497983 、およびe10adc3949ba59abbe56e057f20f883eを生成します。

最初のチェックサムは12345で、2番目のチェックサムは700文字以上の数字から生成され、3番目のチェックサムは123456です。 3つの入力はすべて長さが異なりますが、結果はMD5を使用してからわずか32文字です。

お分かりのように、入力の小さな変更が完全に異なるチェックサムを生成するはずなので、作成できるチェックサムの数には実質的に制限がありません。 ただし、暗号化ハッシュ関数が生成できるチェックサムの数には限界があるため、常に衝突する可能性があります。

これが他の暗号ハッシュ関数が作成された理由です。 MD5は32文字の値を生成しますが、SHA-1は40文字を生成し、SHA-2(512)は128を生成します。チェックサムの文字数が多いほど衝突の可能性が低くなります。一意の値。