ハッシュとは、任意のサイズの入力データからハッシュ関数を用いて生成される固定長の文字列(ダイジェスト)です。この処理は一方向であり、ハッシュを復号したり、逆順に処理して元のデータを取得したりすることはできません。そのため、「ハッシュ暗号化」という名称は適切ではありません。ハッシュは暗号化ではありません。
一般的なハッシュアルゴリズムには以下のものがあります。
MD5 (セキュリティ目的では廃止)
SHA-1 (非推奨)
SHA-256、SHA-512 (SHA-2ファミリーの一部)
SHA-3
bcrypt、scrypt、Argon2 (安全なパスワードハッシュ用)
ハッシュ化は、サイバーセキュリティとデータの整合性においていくつかの目的を果たします。ハッシュを使用する主な理由は次のとおりです。
データ整合性: データが変更されていないことを保証します(例: ファイルのチェックサム)。
パスワードの保存: 実際のパスワードを保存する代わりに、ハッシュを比較することでパスワードを安全に保存します。
デジタル署名: ハッシュは大きな文書ではなく署名されます。
効率性: 小さく固定サイズのハッシュ値は、大きなデータブロックよりも比較が高速です。
ハッシュは決定論的で高速であるため、検証タスクに最適です。
ハッシュ関数を使用するには、以下の手順が必要です。
データの入力(例:ファイル、文字列、パスワード)。
ハッシュアルゴリズムによるデータの処理。
ダイジェストの取得。ダイジェストは、入力内容を一意に表す固定サイズの文字列です。
パスワード保護の場合:
パスワードとソルト(ランダムデータ)を組み合わせます。
安全なハッシュ関数(例:bcrypt、Argon2)を適用します。
保存生成されたハッシュとソルトを安全に保管します。
ハッシュは逆順にすることはできないため、入力(パスワードなど)を再度ハッシュ化し、新しいハッシュと保存済みのハッシュを比較することで検証します。
ハッシュ化は次のような場合に使用します。
データの整合性を検証する必要がある場合(例:破損や改ざんのチェック)。
パスワードを安全に保管する必要がある場合(暗号化または平文ではない)。
デジタル署名と証明書が関係している場合(ハッシュ化によりドキュメントの真正性が保証されます)。
高速データ比較が必要な場合(ハッシュテーブルやキャッシュなど)。
ハッシュ化は、後で元のデータを復元する必要がある場合には適していません。そのために暗号化が行われます。