暗号ハッシュ関数は、個々のファイルやパスワードなどのデータに対して実行され、チェックサムと呼ばれる値を生成するアルゴリズムです。
暗号ハッシュ関数の主な用途は、データの信頼性を検証することです。同じ暗号ハッシュ関数を使用して各ファイルから生成されたチェックサムが同一である場合にのみ、2つのファイルが同一であるとみなすことができます。
いくつかの一般的に使用される暗号化ハッシュ関数には、MD5およびSHA-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つが同一であればアクセス権が与えられます。
暗号化ハッシュ関数が非可逆チェックサムを生成すると仮定すると、パスワードを 12345、 の代わりに 12@34$5単にチェックサム自体が理解できないためです。いいえ、ここには理由があります。
これらの2つのパスワードは、単にチェックサムだけを見るだけでは解読できません。
12345のMD5: 827ccb0eea8a706c4c34a16891f84e7b
12 @ 34 $ 5のMD5: a4d3cc004f487b18b2ccd4853053818b
一見すると、これらのパスワードのどちらかを使用しても問題ないと思われるかもしれません。これは、攻撃者が誰もしていないMD5チェックサムを推測してパスワードを把握しようとした場合に当てはまりますが、一般的な手法であるブルートフォース攻撃や辞書攻撃が行われた場合は当てはまりません。
ブルートフォース攻撃は、パスワードを推測する際に複数のランダムなスタブが使用された場合に発生します。この場合、推測するのは簡単でしょう 12345しかし、ランダムに他のものを見つけ出すのはかなり難しいです。ディクショナリ攻撃は、攻撃者が一般的な(それほど一般的ではない)パスワードのリストからすべての単語、数字、または句を試すことができる点で似ています。12345 その共通のパスワードの1つです。
暗号化ハッシュ関数では推測が困難なチェックサムが生成されますが、オンラインとローカルのすべてのユーザーアカウントには複雑なパスワードを使用する必要があります。
暗号ハッシュ関数の詳細
暗号化ハッシュ関数が暗号化に関連しているように見えるかもしれませんが、2つは異なる方法で動作します。
暗号化は、何かが暗号化されて解読不能になった後に解読され、後で通常どおりに使用される双方向のプロセスです。保存したファイルを暗号化して、アクセスしたすべてのユーザーがそのファイルを使用できないようにするか、ファイル転送の暗号化を使用して、オンラインでアップロードまたはダウンロードするようなネットワーク上のファイルを暗号化できます。
暗号化ハッシュ関数は、チェックサムが特別なデハッシング・パスワードで取り消されることがない点で異なって動作します。暗号化ハッシュ関数の唯一の目的は、ファイルのダウンロード、パスワードの保存、データベースからのデータの取り込みなどの2つのデータを比較することです。
暗号化ハッシュ関数が異なるデータに対して同じチェックサムを生成することは可能です。これが起こると、それは衝突と呼ばれます。これは、暗号化ハッシュ関数の全ポイントが、それに入力されるすべてのデータに対して一意のチェックサムを作成することを考えると、大きな問題です。
衝突は、各暗号ハッシュ関数が入力データにかかわらず固定長の値を生成するために起こります。たとえば、MD5暗号ハッシュ関数は、3つの全く異なるデータブロックに対して827ccb0eea8a706c4c34a16891f84e7b、1f633b2909b9c1addf32302c7a497983、およびe10adc3949ba59abbe56e057f20f883eを生成します。
最初のチェックサムは 12345。 2番目の文字は700文字以上の数字から生成され、3番目の文字は 123456.
3つの入力はすべて長さが異なりますが、結果は常にMD5チェックサムが使用されてからわずか32文字です。
入力の各小さな変更が全く異なるチェックサムを生成するため、作成できるチェックサムの数に制限はありません。 1つの暗号ハッシュ関数が生成できるチェックサムの数には限界があるため、常に衝突する可能性があります。
これが他の暗号ハッシュ関数が作成された理由です。 MD5は32文字の値を生成しますが、SHA-1は40文字を生成し、SHA-2(512)は128を生成します。チェックサムの文字数が多いほど、衝突が発生しにくくなります。




