ShibaHubShibaHub
開発者向け

ハッシュ値とは?SHA-256の仕組みとパスワード保存への応用

ハッシュ関数の一方向性と雪崩効果の仕組み、SHA-1〜SHA-512の違い、パスワード保存にbcryptが推奨される理由がわかります。

ファイルの改ざんチェックや、パスワードの保存などで必ず出てくる「ハッシュ値」「SHA-256」という言葉。なんとなく「データを変換した値」というイメージはあっても、仕組みを正確に説明できる人は意外と少ないかもしれません。この記事ではハッシュ関数の基本的な仕組みと、パスワード保存への応用、注意すべき点を解説します。

1. ハッシュ関数とは何か

ハッシュ関数とは、どんな長さの入力データを与えても、常に決まった長さの値(ハッシュ値)を出力する関数です。例えばSHA-256であれば、1文字の文字列を入力しても、数百MBのファイルを入力しても、出力されるハッシュ値は常に256bit(16進数で64文字)の固定長になります。

実際にどのような値になるか試したい場合は、ハッシュ生成ツールで文字列やファイルのハッシュ値を計算できます。

2. 「一方向性」とは何を意味するのか

ハッシュ関数の最も重要な性質が「一方向性」です。これは、入力データからハッシュ値を計算するのは簡単にできるのに、できあがったハッシュ値から元の入力データを逆算することは現実的には不可能、という性質を指します。

暗号化との大きな違いはここにあります。暗号化は「鍵があれば元のデータに戻せる(復号できる)」ことを前提にした仕組みですが、ハッシュ関数は「そもそも元に戻すことを想定していない」仕組みです。この一方向性があるからこそ、後述するパスワードの保存などに活用できます。

3. 入力が1文字変わるだけで結果が大きく変わる「雪崩効果」

良いハッシュ関数は、入力データをほんの1文字変えるだけでも、出力されるハッシュ値が全く違う値になるように設計されています。この性質は「雪崩効果(アバランチ効果)」と呼ばれます。

例えば「password」と「Password」のように先頭の1文字の大文字・小文字を変えただけでも、SHA-256で計算したハッシュ値は見た目に共通点が全くない、別の文字列になります。この性質によって、ハッシュ値を見ただけで元のデータの内容や似ているかどうかを推測することが難しくなっています。

4. SHA-1・SHA-256・SHA-384・SHA-512の違い

ハッシュ関数にはいくつかの種類があり、主に出力されるハッシュ値のビット数(長さ)と安全性のレベルが異なります。

種類出力のビット数現状の位置づけ
SHA-1160bit脆弱性が指摘されており、現在は非推奨
SHA-256256bit現在広く使われている標準的な選択肢
SHA-384384bitSHA-256より長く、より高い安全性が必要な場面向け
SHA-512512bitSHA-2系列の中で最も長い出力を持つ

SHA-1は以前広く使われていましたが、異なる入力から同じハッシュ値が作れてしまう「衝突」を実用的なコストで起こせることが研究で示されており、現在は新規の利用は避け、SHA-256以上を使うことが推奨されています。

5. ハッシュ関数の用途

  • ファイルの改ざん検知・チェックサム:ダウンロードしたファイルのハッシュ値が公開されている値と一致するかを確認し、破損や改ざんがないかを検証する
  • Gitなどのバージョン管理:コミットの内容からハッシュ値を計算し、変更があったかどうかを管理する
  • パスワードの保存:サービス側がパスワードを平文(そのままの文字列)で保存せず、ハッシュ化した値だけを保存する

パスワードをハッシュ化して保存しておけば、データベースが漏えいした場合でも、一方向性のおかげで攻撃者がハッシュ値から元のパスワードを直接逆算することはできません。

6. 重要な注意点:パスワード保存には単純なSHA-256だけでは不十分

ここで誤解しやすいのが、「SHA-256でハッシュ化していれば、パスワードの保存はそれで安全」という考え方です。SHA-256などの汎用的なハッシュ関数は、一方向性はあるものの計算がとても高速にできてしまうという特徴があります。

計算が高速だと、攻撃者は考えられるパスワードの候補を片っ端からハッシュ化して比較する「総当たり攻撃」を高速に行えてしまいます。よく使われるパスワードとそのハッシュ値の対応表(レインボーテーブル)を事前に用意しておく攻撃も知られています。そのため、パスワードの保存には、ソルト(ユーザーごとに異なるランダムな値を加える仕組み)と、計算を意図的に低速化する仕組みをあらかじめ組み込んだ、bcryptやArgon2のような専用のアルゴリズムを使うことが推奨されています。これらはSHA-256単体よりも総当たり攻撃にかかる時間を大幅に増やすことができ、現在のパスワード保存における標準的な選択肢とされています。

7. チェックサムとしての使われ方

ソフトウェアの配布サイトで、インストーラーのファイルと一緒に「SHA-256: a1b2c3…」のような文字列が公開されていることがあります。これはダウンロードしたファイルが通信の途中で壊れていないか、あるいは第三者に改ざんされていないかを確認するためのチェックサムです。手元のファイルのハッシュ値を自分で計算し、公開されている値と1文字でも違っていれば、ファイルが正規のものではない可能性があると判断できます。この用途では雪崩効果によって、たとえ1バイトだけ改ざんされていてもハッシュ値が大きく変わるため、改ざんの有無をかなり高い精度で検出できるようになっています。

まとめ

ハッシュ関数は、どんな入力からも固定長の値を一方向に生成する関数で、ファイルの改ざん検知やパスワードの保存など幅広い場面で活用されています。ただしパスワードの保存については、単純なSHA-256だけでなく、ソルトと低速化を組み込んだbcryptやArgon2のような専用アルゴリズムを使うことが重要です。まずはハッシュ生成ツールで実際のハッシュ値を確認してみてください。

この記事に関連する計算ツール
コラムをもっと見る計算ツールの背景知識をわかりやすく解説見る
広告広告枠レスポンシブ / 728 × 90