ぱんだツールズぱんだツールズ

セキュリティ

SHA256・MD5とは — ハッシュ値の仕組みと使い方

約6分

「SHA256: 3b4c9d...」——ソフトウェアをダウンロードするとき、公式サイトにこんな文字列が並んでいるのを 見たことがあるでしょう。これがハッシュ値です。意味がわからなくても長年スルーしていた人が 多いはずですが、実はファイルが本物かどうかを確認できる重要な仕組みです。 この記事では、ハッシュ値とは何か、SHA256・MD5の違い、そして実際の使い方を解説します。

ハッシュ値とは — データの「指紋」

ハッシュ関数とは、どんな長さのデータを入れても固定長の文字列を出力する一方向の変換関数です。 たとえばSHA256なら、入力が1文字の「a」でも10GBの動画ファイルでも、出力は常に64文字の16進数になります。

重要な特性が2つあります。①同じ入力から常に同じ値が出る(決定論的)、 ②入力が1バイトでも変わると全く異なる値になる(雪崩効果)。 この2つの性質により、ファイルの「指紋」として機能します。

SHA256・MD5・SHA-1の違い

アルゴリズムハッシュ長安全性主な用途
MD5128ビット(32文字)×(衝突攻撃あり)レガシー確認・非セキュリティ用途
SHA-1160ビット(40文字)△(廃止推奨)Gitのコミット管理(移行中)
SHA256256ビット(64文字)◯(現在の標準)ファイル配布・TLS(Transport Layer Security)証明書・デジタル署名
SHA-3 / SHA-512可変(最大512ビット)◎(より高安全)高セキュリティ要件の署名・政府系システム

迷ったらSHA256を選べば問題ありません。MD5は2004年に衝突(異なるデータが同じハッシュ値を持つ現象)を 意図的に起こせることが証明されており、セキュリティ用途では使ってはいけません。 ただし単純なファイルの誤転送確認程度ならMD5でも実用上は問題ないケースもあります。

実際の使われ方

1. ダウンロードしたファイルの整合性確認

ソフトウェア配布サイトがSHA256を公開する主な目的は改ざん検知です。 ダウンロード後に自分でハッシュ値を計算し、公式の値と一致すれば「配布元から届いたバイト列と完全に同じ」と確認できます。 一致しない場合はダウンロード中に壊れたか、中間者攻撃で差し替えられた可能性があります。

ファイルハッシュ確認ツールを使うと、ファイルをブラウザにドロップするだけでSHA256・MD5・SHA-1の値を同時に取得できます。 コマンドラインが不要なので、普段ターミナルを使わない方にも便利です。

2. テキストやデータのハッシュ生成

ファイルだけでなく、任意の文字列からもハッシュ値を生成できます。APIのリクエスト署名・データの 一意識別子の生成・簡易的なチェックサム確認など、プログラム中でも頻繁に使われます。ハッシュ値生成ツールでは文字列を入力するとSHA256・MD5など複数のハッシュ値を一度に表示します。

3. パスワードの安全な保存

データベースにパスワードを平文で保存すると、漏洩時にそのまま悪用されます。 そのため多くのシステムではパスワードをハッシュ化して保存します。 ログイン時は入力されたパスワードをハッシュ化し、保存値と照合するだけなので、 システムは「元のパスワードを知らなくても認証できる」仕組みになっています。

ただしSHA256は高速すぎるため、パスワード保存には不向きです。 GPUを使って1秒間に数十億回試行できてしまうからです。 パスワード保存には意図的に遅いbcrypt・Argon2・scryptを使うのが正しい選択です。

ハッシュ値の確認コマンド(ターミナル)

コマンドラインで確認したい場合は以下のコマンドが使えます。

# macOS / Linux(SHA256)

sha256sum ファイル名

# macOS 専用(shasum コマンド)

shasum -a 256 ファイル名

# Windows(コマンドプロンプト)

certutil -hashfile ファイル名 SHA256

ブラウザ上で完結させたい場合はファイルハッシュ確認ツールを使うとコマンド不要です。ファイルはサーバーに送信されず、ブラウザ内だけで処理されます。

まとめ

  • ハッシュ値はデータの「指紋」で、1バイトの変更でも全く異なる値になる
  • MD5は衝突攻撃が実証済みのため、セキュリティ用途では使ってはいけない
  • 現在の標準はSHA256。迷ったらSHA256を選べばよい
  • ダウンロードファイルのSHA256を公式値と照合することで改ざんを検知できる
  • パスワード保存には高速なSHA256は不向き。bcrypt・Argon2が正しい選択

よくある質問

ハッシュ値とは何ですか?

ハッシュ値とは、任意のデータ(ファイルや文字列)を決まった長さの固定文字列に変換した値です。同じ入力からは常に同じハッシュ値が生成され、入力が1文字でも違えばハッシュ値は全く異なる値になります。ファイルの「指紋」のようなもので、整合性確認・改ざん検知・パスワード保存などに広く使われています。

SHA256とMD5の違いは?どちらを使えばよい?

MD5はハッシュ長が128ビット(32文字)で高速ですが、意図的に同じハッシュ値を持つ別データを作れる「衝突攻撃」が実証されており、セキュリティ用途には不適切です。SHA256は256ビット(64文字)でMD5より計算コストは高いですが現在も安全とされています。単なるファイル整合性チェックならMD5でも十分ですが、パスワード・デジタル署名・セキュリティ用途にはSHA256(またはSHA-3系)を選んでください。

同じファイルなのにハッシュ値が変わることはある?

純粋に同一のバイト列であればハッシュ値は必ず一致します。ただし「同じように見えるファイル」でも、改行コード(CRLF/LF)の違い・ファイルのメタデータ・Excelが自動保存したタイムスタンプなどが原因でバイト列が変わり、ハッシュ値が変わることがあります。ハッシュ値が一致しない場合はバイト列レベルで何かが変化していることを意味します。

ハッシュ値から元のデータを復元できる?

ハッシュ関数は一方向関数であり、ハッシュ値から元データを逆算することは数学的に不可能(計算量が天文学的)とされています。これがパスワードのハッシュ保存に使われる理由です。ただし短いパスワードは「レインボーテーブル(よくあるパスワードのハッシュ一覧)」と照合して特定される危険があるため、パスワード保存にはbcrypt・Argon2など専用のハッシュ関数を使うのが正しい方法です。

「衝突」とはどういう意味ですか?なぜMD5は危ない?

衝突(コリジョン)とは、異なる2つのデータが同じハッシュ値を持つことです。本来は天文学的に起こりにくいはずですが、MD5は2004年に衝突を意図的に起こす方法が発見されました。これにより、正規ファイルと同じMD5値を持つ改ざん済みファイルを作れてしまうため、セキュリティ用途ではMD5の信頼性がゼロになりました。ファイル配布サイトでMD5を提供している場合でも、受信側はSHA256で追加確認するのが安全です。

パスワードの「ハッシュ化」と通常のハッシュ値は何が違うの?

SHA256のような汎用ハッシュ関数は高速な反面、GPUを使って1秒間に数十億回の試行が可能です。パスワード保存には意図的に遅い専用アルゴリズム(bcrypt・Argon2・scrypt)を使います。これらは「ストレッチング」と呼ばれる反復処理と「ソルト」(ランダム文字列の付加)を組み合わせることで、同じパスワードでも毎回異なるハッシュを生成し、レインボーテーブル攻撃を無効化します。

ダウンロードしたファイルのハッシュ値はどうやって確認するの?

Windowsではコマンドプロンプトで「certutil -hashfile ファイル名 SHA256」、macOS/Linuxではターミナルで「sha256sum ファイル名」または「shasum -a 256 ファイル名」を実行します。ブラウザ上で確認したい場合はファイルハッシュ確認ツールを使うとコマンド不要で手軽です。ダウンロードサイトに記載されたSHA256と一致すれば、ファイルが改ざんされていないことを確認できます。

ハッシュ値はパスワード以外にどんな場面で使われているの?

ハッシュ値は多くの場面で使われています。①ソフトウェア配布:インストーラーのSHA256を公式サイトに掲載し、ダウンロードしたファイルの整合性を確認。②Gitのコミット管理:各コミットにSHA-1ハッシュを付与し変更を追跡。③ブロックチェーン:前のブロックのハッシュ値を次のブロックに埋め込み改ざんを検知。④デジタル署名:データのハッシュ値に秘密鍵で署名することで、送信者の正当性と内容の無改ざんを証明します。

ファイルをアップロードしても大丈夫ですか?サーバーに送信されますか?

ファイルはサーバーに送信されません。ハッシュ値の計算はすべてブラウザ内(JavaScript)で処理されます。機密性の高いファイルや個人情報を含むファイルでも安心してお使いいただけます。

この記事で紹介したツール