← PC・IT用語集へ戻る

ハッシュ

Hash
security data beginner
データを一定の計算ルールで決まった長さの値に変換し、照合や改ざん検知に使う仕組みのこと。
ハッシュ (Hash)

概要(サマリー)

ハッシュとは、データを一定の計算ルールで決まった長さの値に変換し、照合や改ざん検知に使う仕組みのことである。元のデータが短くても、結果は短くなるとは限らない。

同じ入力を、同じ方式で計算すれば、同じハッシュ値になる。一方で、少しでも元データが変わると、ハッシュ値は大きく変わる。この性質を使って、「同じものか」「途中で変わっていないか」を確認できる。パスワード保存のように、毎回違うソルト(追加データ)を付けてから計算すると、同じパスワードでも保存される値は変わる。

開発では、パスワード保存、ファイルの改ざん確認、Gitのコミット識別などで登場する。

詳細解説

ハッシュは指紋のような値である

ハッシュは、元データから作る指紋のような値である。

たとえば、配布元がファイルのハッシュ値を公開していることがある。ダウンロード後のファイルから同じ方式で計算し、2つが一致すれば、同じ内容である可能性が非常に高い。一致は、数学的に衝突が絶対にないという証明ではない。

ハッシュ値から元データを計算で戻すことは、暗号学的ハッシュでは現実的でないように設計されている。総当たりで短いパスワードを試すことまでは防げない。この「簡単には戻さない」という性質が、セキュリティ用途で重要になる。

パスワード保存での使われ方

サービスがユーザーのパスワードを保存するとき、平文のまま保存するのは危険である。

そこで、パスワードそのものではなく、ハッシュ化した値を保存する方法が使われる。ログイン時には、入力されたパスワードを同じ方法でハッシュ化し、保存済みの値と照合する。

このとき、パスワードごとに違うソルトを付けてから計算する。ソルトがないと、同じパスワードを使う人が同じハッシュ値になり、事前に作った対照表でまとめて調べられやすくなる。

このような認証の話は、権限管理やバリデーションとも関係する。

暗号化とは違う

ハッシュ化と暗号化は似た雰囲気で語られるが、目的が違う。

暗号化は、鍵を使って元に戻せる形でデータを読めなくする。一方、ハッシュ化は原則として元に戻さず、照合のために使う。

「保存したパスワードを復元してユーザーへメールで送る」という仕様は危険であり、まともなサービス設計では避けるべきである。

ファイルの照合とGit

ファイルの配布では、SHA-256のようなハッシュ値を一緒に公開することがある。受け取り側が同じ方式で計算し、公開値と照合する。

GitのコミットIDも、その時点の内容から作るハッシュである。ここでの目的は、パスワードを隠すことではなく、内容を識別し、改ざんや取り違えに気づきやすくすることである。

AIコーディングとの関係

AIにログイン機能を作らせると、パスワードのハッシュ化が出てくることがある。

このとき、「SHA-256で単純にハッシュ化すればよい」という実装には注意が必要である。SHA-256は速いので、パスワードの総当たりに向きすぎる。OWASPのパスワード保存の案内では、新規システムでは Argon2id を第一候補にしている。使えない場合は scrypt、既存システムでそれらが使えない場合は bcrypt、FIPS が必要な場合は PBKDF2、という順である。

APIキーやトークンの扱いと同じく、セキュリティに関わる部分は、生成されたコードをそのまま採用せず確認する。

よくある勘違い

ハッシュ化すれば絶対安全?

絶対安全ではない。弱い方式、ソルトなしの実装、短すぎるパスワードなどが重なると危険である。用途に合った方式を選ぶ必要がある。

ハッシュ値から元の文字列を戻せる?

暗号学的ハッシュは、計算で元に戻す前提ではない。短いパスワードは、同じ方式で候補を片っ端から試せば当たることがある。元に戻すこと自体が目的なら、ハッシュではなく暗号化の領域である。

ハッシュ化と暗号化は同じ?

同じではない。暗号化は鍵を使って元に戻せる形でデータを読めなくする処理であり、ハッシュ化は基本的に元へ戻さず照合に使う処理である。パスワード保存では「あとで復元する」ことではなく、「入力された値が同じか確認する」ことが目的になる。

まとめ

  • ハッシュは、データを一定の計算ルールで決まった長さの値に変換し、照合や改ざん検知に使う仕組みである。
  • 同じ入力を同じ方式で計算すれば同じ値になり、少しでも元データが変わると値は大きく変わる。
  • パスワード保存ではソルトを付けるため、同じパスワードでも保存値はユーザーごとに変わる。
  • 暗号化は元に戻せる前提の処理だが、ハッシュ化は原則として元に戻さず照合のために使う。
  • パスワード用途では、単純なSHA-256ではなく、新規なら Argon2id のような専用方式を使う。

情報ソース

より詳しくAIに聞いてみよう

  • ハッシュとは何か、初心者向けに説明してください。
  • ハッシュ化と暗号化の違いを具体例で教えてください。
  • パスワード保存でハッシュ化が必要な理由を説明してください。
  • ハッシュ値がファイルの改ざん検知に使われる仕組みを教えてください。
  • AIにログイン機能を作らせるとき、パスワードのハッシュ化についてどう指示すればよいか教えてください。