1. 序章

さまざまな既存の攻撃やエクスプロイトにより、セキュリティは現在のデジタルシステムにとって重要な関心事になりました。 これに関連して、学界と産業界は、特定の脅威を一度に克服しながら、効率的なセキュリティメカニズムを提案する取り組みを進めました。

これらのメカニズムの1つはハッシュです。 要約すると、ハッシュは、デジタルデータにセキュリティ、プライバシー、さらには信頼性を提供することを目的としています。

ハッシュメカニズムの目的を達成するために、さまざまな数学関数を使用して、特定のデータシーケンス(ソース)を別のシーケンス(結果)に変換します。

ただし、強力なセキュリティと信頼性を保証するために、同じデータに複数のハッシュ数学関数を適用する必要がある場合があります。これは、saltingと呼ばれる方法です。

このチュートリアルでは、単純なハッシュとソルトハッシュについて学習します。 まず、ハッシュメカニズムの基本的な概念について説明します。 次に、単純なハッシュアルゴリズムを分析し、それらの長所と短所を強調します。 同様に、ソルトハッシュについても学習します。 最後に、体系的な要約で単純なハッシュとソルトハッシュを比較します。

2. ハッシュの基本

要するに、ハッシュは、与えられた可変長のバイトシーケンスを固定長の別のバイトシーケンスに変換するメカニズムで構成されています。 したがって、ハッシュ、ハッシュコード、またはダイジェストのハッシュ結果(固定長バイトシーケンス)を呼び出すことができます。

ハッシュメカニズムは、数学関数(ハッシュ関数と呼ばれることが多い)を使用して、説明されているマッピングプロセスを実行します。

数学関数のハッシュは、一方向の処理です。 したがって、特定の入力の出力を問題なく処理します。 ただし、以前に計算されたそれぞれの出力から元の入力を判別することは困難であるか、不可能ですらあります。

ハッシュに関する大きな懸念は、マッピング操作を行うための効率的な数学関数を選択することです。 このようにして、いくつかのプロパティを観察して、優れた数学関数を選択できます。

  • 簡単な計算:数学関数の計算には、複雑なアルゴリズムや多くの処理能力は必要ありません。
  • 一様分布:関数によって生成されたハッシュは、クラスターを避けて、可能なコードの範囲で均一に分布する必要があります
  • 衝突回避:衝突が発生すると、異なる入力に対して同じ出力(同じハッシュコード)が生成されます。 適切な数学関数は、衝突を可能な限り回避します

それらを回避しようとしても、ハッシュでは衝突は避けられません。 これまで見てきたように、ハッシュはすべての入力を固定長の出力にマップします。 したがって、限られた数の出力への無制限の入力があります。

このように、衝突は問題ではなく、ハッシュメカニズムを開発する際に管理すべき特性として理解することができます。

最後に、ハッシュテーブルは、元の入力をそれぞれのハッシュコードにリンクするために使用される構造です。 したがって、これらのテーブルを使用してハッシュを介して元の入力を復元できます。

次の画像は、ハッシュを計算するプロセスを抽象的に示しています。

2.1. アプリケーションのハッシュ

ハッシュには、コンピューティングのコンテキストでいくつかのアプリケーションがあります。 次に、最も一般的なアプリケーションのいくつかについて簡単に説明します。

  • 個人情報の保存:パスワード、クレジットカード番号、およびプライバシーとセキュリティの要件を持つその他の情報は、ハッシュとしてデータベースに頻繁に保存されます
  • データ構造の作成:いくつかのプログラミング言語はハッシュを使用してキー値構造を作成します。 これらの構造の例は、Pythonの辞書やJavaのHashMapsです
  • デジタルドキュメントへの署名:いくつかのデジタル署名メソッドは、ハッシュを使用してドキュメントの整合性をチェックします

3. 単純なハッシュ

単純なハッシュは、提供された入力ごとに1回だけハッシュプロセスを実行することで構成されます。 これは、ハッシュを使用する最も簡単で簡単な方法として理解できます。

ユーザーを登録するときに、特定のシステムのパスワードをハッシュしていると考えてみましょう。 単純なハッシュプロセスでは、パスワードを受け取り、それらを単一のハッシュメカニズムに送信し、結果をユーザーのテーブルの特定の列に保存します。

したがって、ユーザーがログインしようとすると、パスワードハッシュが送信されます。 次に、ログインシステムは、提供されたハッシュが登録ユーザーのハッシュに対応しているかどうかのみをチェックします。対応している場合、ログインは成功します。 それ以外の場合、ログインは失敗します。

次の画像は、提示された例を示しています。

単純なハッシュを使用する主な利点は、提供されたハッシュを保存されたハッシュと比較するパフォーマンスが高いことです。 さらに、直接比較するため、追加の操作は必要ありません。

次に、主な欠点は、単純なハッシュの脆弱性です。

たとえば、単純なハッシュの採用から恩恵を受ける攻撃は、ブルートフォース攻撃と レインボーテーブル攻撃.

4. 塩味のハッシュ

ソルトハッシュは、一連のハッシュおよび削減メカニズムに入力を送信することで構成されます。 このコンテキストでは、削減プロセスはハッシュをプレーンテキストに変換します。

削減プロセスも一方向の数学関数を使用することを強調することは重要です。 ただし、この関数はハッシュ関数を元に戻しません。 したがって、縮小プロセスはハッシュを元の入力とは異なる平文に変換します。

単一のハッシュセクションに示されているのと同じ例を考えてみましょう。 ここでも、ソルトハッシュを使用する場合、少なくとも2つのハッシュメカニズムと1つの削減メカニズムを実行します。

したがって、パスワードを受け取ると、最初のハッシュメカニズムに送信されます。 次に、このメカニズムの結果が削減メカニズムに送信されます。 次に、生成された平文は、2番目のハッシュメカニズムで再度ハッシュされます。 最後に、パスワードが保存されます。

削減およびハッシュプロセスのルーチンは、必要なだけ繰り返すことができます。

このように、ユーザーがログインしようとすると、提供されたハッシュを資格情報データベースに保存されているハッシュと比較する必要があります。 一致する場合、ログインは成功します。 ただし、一致するものがない場合は、ハッシュを減らして後続のハッシュメカニズムを実行し、データベースで結果をテストします。

このプロセスは、使用可能なすべての削減/ハッシュメカニズムが実行されるまで繰り返されます。 生成されたハッシュのいずれも一致しない場合、ログインは失敗します。

次の画像は、ハッシュの塩漬けの説明されたプロセスを示しています。

ソルトハッシュを使用する主な利点は、セキュリティの向上です。 塩漬けのハッシュは、ブルートフォース攻撃やレインボーテーブル攻撃に対してより堅牢です。

次に、主な欠点は、ハッシュを比較するために必要な追加の処理です。 ソルトハッシュは通常、一致チェックを実行するためにより多くの計算リソースと時間を必要とします。

5. 体系的な要約

前のセクションでは、単純なハッシュとソルトハッシュのメカニズムを、それらが提供するセキュリティと、それらを計算するために必要な処理能力の観点から研究しました。

要約すると、セキュリティと処理能力の間の明確なトレードオフに注意できます。このように、塩漬けハッシュのセキュリティが向上すると、それらを計算するために必要な処理能力も向上します。

したがって、単純なハッシュメカニズムを使用する主な利点は、高速な計算と、受信したハッシュを特定のハッシュテーブルと比較するための簡単で安価なプロセスにあります。

一方、ソルトハッシュメカニズムを採用する主な利点は、セキュリティが向上し、ブルートフォース攻撃やレインボーテーブル攻撃などの攻撃やエクスプロイトに対する耐性が向上することです。

次の表は、単純ハッシュとソルトハッシュの両方のいくつかの特性を示して比較しています。

6. 結論

このチュートリアルでは、単純なソルトハッシュについて学習しました。 まず、ハッシュの一般的な概念の概要を説明しました。 そこで、単純なハッシュがどのように機能するかを詳しく調べました。 同様に、ソルトハッシュの特定の特性を分析しました。 最後に、体系的な要約で調査した概念の概要と比較を行いました。

現在のコンピューティングシナリオにはハッシュが不可欠であると結論付けることができます。 ハッシュにより、安全なデータ保存やデジタル署名など、いくつかの関連機能が有効になります。

次に、単純なハッシュとソルトハッシュのどちらを選択するかは、利用可能な計算能力と処理時間とは対照的に、必要なセキュリティレベルを考慮する必要がある決定です。