Cryptography-hash-functions

提供:Dev Guides
移動先:案内検索

暗号化ハッシュ関数

ハッシュ関数は非常に便利であり、ほとんどすべての情報セキュリティアプリケーションで使用されています。

ハッシュ関数は、数値入力値を別の圧縮数値に変換する数学関数です。 ハッシュ関数への入力は任意の長さですが、出力は常に固定長です。

ハッシュ関数によって返される値は、*メッセージダイジェスト*または単に*ハッシュ値*と呼ばれます。 次の図は、ハッシュ関数を示しています-

ハッシュ関数

ハッシュ関数の機能

ハッシュ関数の典型的な機能は次のとおりです-

  • 固定長出力(ハッシュ値)
  • ハッシュ関数は、任意の長さのデータを固定長に変換します。 このプロセスは、多くの場合、*データのハッシュ*と呼ばれます。
  • 一般に、ハッシュは入力データよりもはるかに小さいため、ハッシュ関数は「圧縮関数」と呼ばれることもあります。
  • ハッシュは大きなデータの小さな表現であるため、「ダイジェスト」とも呼ばれます。
  • nビット出力のハッシュ関数は、* nビットハッシュ関数*と呼ばれます。 一般的なハッシュ関数は、160〜512ビットの値を生成します。
  • 運用効率
  • 一般に、入力xを持つハッシュ関数hの場合、h(x)の計算は高速な操作です。
  • 計算ハッシュ関数は、対称暗号化よりもはるかに高速です。

ハッシュ関数のプロパティ

効果的な暗号化ツールであるためには、ハッシュ関数は次の特性を持つことが望まれます-

  • プレイメージ抵抗
  • このプロパティは、ハッシュ関数を逆にすることが計算上困難であることを意味します。
  • 言い換えると、ハッシュ関数hがハッシュ値zを生成した場合、zにハッシュする入力値xを見つけるのは難しいプロセスになるはずです。
  • このプロパティは、ハッシュ値のみを持ち、入力を見つけようとしている攻撃者から保護します。
  • 第二のプレイメージ抵抗
  • このプロパティは、入力とそのハッシュが与えられることを意味し、同じハッシュで異なる入力を見つけるのは難しいはずです。
  • 言い換えると、入力xのハッシュ関数hがハッシュ値h(x)を生成する場合、h(y)= h(x)となるような他の入力値yを見つけることは困難です。
  • ハッシュ関数のこのプロパティは、入力値とそのハッシュを持ち、元の入力値の代わりに別の値を正当な値に置き換えたい攻撃者から保護します。
  • 衝突抵抗
  • このプロパティは、同じハッシュになる任意の長さの2つの異なる入力を見つけるのが難しいことを意味します。 このプロパティは、衝突のないハッシュ関数とも呼ばれます。
  • つまり、ハッシュ関数hの場合、h(x)= h(y)となるような2つの異なる入力xおよびyを見つけるのは困難です。
  • ハッシュ関数は固定ハッシュ長の圧縮関数であるため、ハッシュ関数が衝突しないことは不可能です。 コリジョンフリーのこのプロパティは、これらのコリジョンを見つけるのが難しいことを確認するだけです。
  • このプロパティにより、攻撃者は同じハッシュを持つ2つの入力値を見つけることが非常に困難になります。
  • また、ハッシュ関数が衝突に耐性がある場合は、* 2番目のプリイメージに耐性があります。*

ハッシュアルゴリズムの設計

ハッシュの中心にあるのは、ハッシュコードを作成するためにデータの2つの固定サイズブロ​​ックで動作する数学関数です。 このハッシュ関数は、ハッシュアルゴリズムの一部を形成します。

各データブロックのサイズは、アルゴリズムによって異なります。 通常、ブロックサイズは128ビットから512ビットです。 次の図は、ハッシュ関数を示しています-

ハッシュ関数構造

ハッシュアルゴリズムには、ブロック暗号のような上記のハッシュ関数のラウンドが含まれます。 各ラウンドは、固定サイズの入力(通常、最新のメッセージブロックと最後のラウンドの出力の組み合わせ)を受け取ります。

このプロセスは、メッセージ全体をハッシュするために必要な回数だけ繰り返されます。 ハッシュアルゴリズムの概略図を次の図に示します-

ハッシュアルゴリズム

なぜなら、最初のメッセージブロックのハッシュ値は2番目のハッシュ操作への入力になり、その出力は3番目の操作の結果を変更する、などです。 この効果は、ハッシュの「なだれ」効果として知られています。

雪崩の影響により、1ビットのデータでさえ異なる2つのメッセージのハッシュ値が大幅に異なります。

ハッシュ関数とアルゴリズムの違いを正しく理解してください。 ハッシュ関数は、2ブロックの固定長バイナリデータを操作してハッシュコードを生成します。

ハッシュアルゴリズムは、ハッシュ関数を使用して、メッセージを分割する方法と、以前のメッセージブロックの結果を連鎖させる方法を指定するプロセスです。

人気のあるハッシュ関数

いくつかの人気のあるハッシュ関数を簡単に見てみましょう-

メッセージダイジェスト(MD)

MD5は、長年にわたって最も一般的で広く使用されているハッシュ関数でした。

  • MDファミリは、ハッシュ関数MD2、MD4、MD5、およびMD6で構成されています。 インターネット標準RFC 1321として採用されました。 これは128ビットのハッシュ関数です。
  • MD5ダイジェストは、転送されたファイルの整合性に関する保証を提供するために、ソフトウェアの世界で広く使用されています。 たとえば、ファイルサーバーは、多くの場合、ファイルに対して事前に計算されたMD5チェックサムを提供するため、ユーザーはダウンロードしたファイルのチェックサムをファイルと比較できます。
  • 2004年、MD5で衝突が見つかりました。 分析攻撃は、コンピュータークラスターを使用して1時間でのみ成功することが報告されました。 この衝突攻撃によりMD5が侵害されたため、使用を推奨しなくなりました。

セキュアハッシュ関数(SHA)

SHAのファミリーは、4つのSHAアルゴリズムで構成されています。 SHA-0、SHA-1、SHA-2、およびSHA-3。 同じ家族のものですが、構造的に異なります。

  • 元のバージョンは、1993年に米国国立標準技術研究所(NIST)によって公開された、160ビットのハッシュ関数であるSHA-0です。 弱点はほとんどなく、あまり人気がありませんでした。 1995年後半、SHA-1は、SHA-0の弱点の疑いを修正するために設計されました。
  • SHA-1は、既存のSHAハッシュ関数の中で最も広く使用されています。 Secure Socket Layer(SSL)セキュリティを含むいくつかの広く使用されているアプリケーションとプロトコルで採用されています。
  • 2005年に、実用的な時間枠内でSHA-1の衝突を明らかにする方法が発見され、SHA-1の長期使用可能性が疑わしくなりました。
  • SHA-2ファミリーには、ハッシュ値のビット数に応じて、SHA-224、SHA-256、SHA-384、SHA-512の4つのSHAバリアントがあります。 SHA-2ハッシュ関数に対する攻撃の成功はまだ報告されていません。
  • ただし、SHA-2は強力なハッシュ関数です。 大幅に異なりますが、その基本設計はまだSHA-1の設計に準拠しています。 したがって、NISTは新しい競合ハッシュ関数の設計を求めました。
  • 2012年10月、NISTは新しいSHA-3標準としてKeccakアルゴリズムを選択しました。 Keccakには、効率的なパフォーマンスや攻撃に対する優れた耐性など、多くの利点があります。

RIPEMD

RIPENDは、RACE Integrity Primitives Evaluation Message Digestの頭字語です。 このハッシュ関数のセットは、オープンな研究コミュニティによって設計され、一般的にヨーロッパのハッシュ関数のファミリーとして知られています。

  • セットにはRIPEND、RIPEMD-128、およびRIPEMD-160が含まれます。 このアルゴリズムには256ビットおよび320ビットバージョンもあります。
  • オリジナルのRIPEMD(128ビット)は、MD4で使用されている設計原則に基づいており、疑わしいセキュリティを提供することがわかっています。 RIPEMD 128ビットバージョンは、元のRIPEMDの脆弱性を克服するための迅速な修正の代替として登場しました。
  • RIPEMD-160は改良されたバージョンであり、ファミリーで最も広く使用されているバージョンです。 256ビットと320ビットのバージョンは、偶発的な衝突の可能性を減らしますが、それぞれRIPEMD-128とRIPEMD-160と比較して、より高いレベルのセキュリティはありません。

ワールプール

これは512ビットのハッシュ関数です。

  • これは、Advanced Encryption Standard(AES)の修正バージョンから派生しています。 デザイナーの1人は、AESの共同作成者であるVincent Rijmenでした。
  • Whirlpoolの3つのバージョンがリリースされました。つまり、WHIRLPOOL-0、WHIRLPOOL-T、およびWHIRLPOOLです。

ハッシュ関数の応用

暗号化特性に基づいたハッシュ関数の2つの直接アプリケーションがあります。

パスワード保存

ハッシュ関数は、パスワードストレージを保護します。

  • パスワードを平文で保存する代わりに、ほとんどすべてのログオンプロセスがパスワードのハッシュ値をファイルに保存します。
  • パスワードファイルは、(ユーザーID、h(P))という形式のペアのテーブルで構成されます。
  • ログオンのプロセスは、次の図に示されています-

ログオンのプロセス

  • 侵入者は、パスワードにアクセスした場合でも、パスワードのハッシュのみを見ることができます。 ハッシュ関数にはプリイメージ耐性の特性があるため、ハッシュを使用してログオンしたり、ハッシュ値からパスワードを取得したりすることはできません。

データ整合性チェック

データ整合性チェックは、ハッシュ関数の最も一般的なアプリケーションです。 データファイルのチェックサムを生成するために使用されます。 このアプリケーションは、データの正確性についてユーザーに保証を提供します。

プロセスは、次の図に示されています-

データ整合性チェック

整合性チェックは、ユーザーが元のファイルに加えられた変更を検出するのに役立ちます。 ただし、独創性についての保証はありません。 攻撃者は、ファイルデータを変更する代わりに、ファイル全体を変更し、新しいハッシュをまとめて計算して受信者に送信できます。 この整合性チェックアプリケーションは、ユーザーがファイルの独創性について確信している場合にのみ役立ちます。