ホーム / ハッシュ値とは

ハッシュ値とは ― ファイルが壊れていないかを確かめる

ソフトの配布ページに「SHA-256: 9f86d0…」といった長い文字列が載っていることがあります。何のために書かれていて、どう使うのか。そして何を保証しないのかを整理しました。

配布元の値と、手元の値を見比べる

ハッシュ値は、ファイルの中身から計算される指紋のようなものです。中身が1文字でも違えば、まったく別の値になります。配布元の値と手元の値を見比べて、同じなら中身は同一、違うなら壊れているか差し替えられている、と判断できます。

ファイルを選ぶだけで値が出ます。配布元に書かれている値と見比べてください。読み進めるのは後からで構いません。

指紋のようなもの、という意味

ハッシュ値は、ファイルの中身すべてを決まった手順で計算し直した結果です。性質が3つあります。

2番目の性質が重要です。似ているかどうかを見るのではなく、完全に一致するかどうかだけを見ます。「最初の数文字が同じだから大丈夫」という確認の仕方は意味を持ちません。

また、どんなに大きなファイルでも値の長さは同じです。10ギガバイトの動画でも、1行のメモでも、同じ方式で計算すれば同じ長さの文字列になります。

確認できること、できないこと

内容
確認できるダウンロードの途中でファイルが欠けていないか
確認できる2つのファイルの中身が同一かどうか
確認できる保存していたファイルが後から書き換わっていないか
確認できないそのファイルが安全かどうか
確認できない配布元そのものが信用できるかどうか

下の2つは誤解されやすい点です。ハッシュ値が一致するというのは、「配布元が置いたものと同じものが手元にある」という意味しかありません。配布元が置いたもの自体に問題があれば、値は一致したまま被害が出ます。

同じ理由で、配布ページが乗っ取られた場合、ファイルと一緒に掲載されているハッシュ値も書き換えられます。両方が同じ場所にあるなら、照合しても意味がありません。値が別の場所で公開されている場合に、はじめて確認の意味が出ます。

実際に役立つ場面

ダウンロードが途中で欠けたとき

回線が不安定なときや、大きなファイルを扱うときに起きます。見た目には開けるのに動作がおかしい、という症状の原因がこれであることは珍しくありません。開く前に値を確認すれば、原因の切り分けに時間を使わずに済みます。

2つのファイルが同じか調べたいとき

バックアップの整理でよくある場面です。ファイル名も更新日時もあてになりません。コピーの過程で日時は変わりますし、名前は誰でも変えられます。中身が同じかどうかを確かめられるのは、ハッシュ値だけです。

重複した写真や書類を整理するとき、値が同じものは片方を安心して消せます。逆に、名前が同じでも値が違えば、それは別のファイルです。

送ったファイルが無事に届いたか確かめたいとき

大きなファイルを外部とやり取りする場面で使えます。送る前に値を出しておき、相手に値だけを別の手段で伝えます。相手が受け取ったファイルの値と突き合わせれば、途中で欠けていないことを確認できます。

MD5・SHA-1・SHA-256 の使い分け

方式状態使いどころ
MD5意図的に同じ値を作れることが実証済み破損の確認まで
SHA-1同上。主要な場面から引退が進む破損の確認まで
SHA-256現時点で有効改ざんの確認に使える

「同じ値を作れる」というのは、中身の違う2つのファイルを、同じハッシュ値になるように作れるという意味です。これができると、正規のファイルとすり替えても値が一致してしまい、確認の意味がなくなります。

ただし、偶然そうなることは実質ありえません。破損の確認という目的なら、MD5でも役に立ちます。配布元がMD5しか出していない場合は、破損の確認としては使い、改ざんの確認としては当てにしない、という受け止め方が妥当です。

パスワードの保存に使われる理由

ハッシュ値は、サービス側がパスワードを保存する場面でも使われています。元に戻せない性質があるため、預かった側もパスワードそのものを知らない状態を作れるからです。

だから「パスワードを忘れた」と申し出ると、教えてもらえるのではなく再設定になります。逆に言えば、登録したパスワードをそのまま教えてくれるサービスは、元に戻せる形で保存しているということです。これは避けたほうがよい設計です。

なお、短くて推測しやすいパスワードは、あらかじめ答えの一覧が作られているため、値から元の文字列が判明します。ハッシュにしたから安全、ではありません。長さと予測しにくさが必要です。

気をつける点

業務ファイルのハッシュ値を出すために、ファイルを外部のサイトにアップロードしては本末転倒です。このサイトのツールは端末の中だけで計算し、ファイルを送信しません。社外に出せない資料でも、そのまま確認できます。

ハッシュ値を計算するツール

よくある質問

ハッシュ値が一致しませんでした。どうすればよいですか?

まず、そのファイルを使わないでください。原因は大きく2つに分かれます。ひとつは通信の途中でファイルが欠けた場合で、これはもう一度ダウンロードし直せば直ることがほとんどです。もうひとつは、配布されているファイル自体が本来のものと違う場合で、こちらは開いた時点で被害が出る可能性があります。区別がつかないため、まず再ダウンロードを試し、それでも一致しないなら配布元に問い合わせるのが安全な順序です。値の一部だけを見比べて似ているから大丈夫、という判断はできません。

MD5はもう使わないほうがいいですか?

目的によります。MD5とSHA-1は、意図的に同じ値になる別のデータを作れることが実証されています。そのため、改ざんされていないことの証明には使えません。一方で、通信の途中でファイルが欠けたかどうかを見るだけなら、偶然一致することは実質ありえないため十分役に立ちます。配布元がMD5しか出していない場合は、破損の確認としては使い、改ざんの確認としては信用しない、という受け止め方が妥当です。

ハッシュ値から元のファイルを復元できますか?

できません。ハッシュ値は元に戻せない形で計算されており、この性質が仕組みの根幹です。どんなに大きなファイルでも決まった長さの文字列になるため、そもそも元の情報がすべて残っているわけではありません。ただし、短くて推測しやすいデータについては話が別です。よく使われるパスワードなどは、あらかじめ答えの一覧が作られているため、ハッシュ値から元の文字列が判明することがあります。復元されたのではなく、答え合わせをされたということです。

同じファイルのはずなのに値が違うことはありますか?

あります。よくあるのは、ファイルの中身が本当に少しだけ違う場合です。テキストファイルでは、改行の書き方が環境によって異なるため、見た目が同じでも中身が違うことがあります。また、写真や書類のファイルには撮影日時や作成者などの情報が埋め込まれており、これが書き換わると値も変わります。もうひとつ、計算方式が違えば当然値も違います。相手がSHA-256で出した値を、自分がMD5で計算していないか確認してください。