ソフトの配布ページに「SHA-256: 9f86d0…」といった長い文字列が載っていることがあります。何のために書かれていて、どう使うのか。そして何を保証しないのかを整理しました。
ファイルを選ぶだけで値が出ます。配布元に書かれている値と見比べてください。読み進めるのは後からで構いません。
ハッシュ値は、ファイルの中身すべてを決まった手順で計算し直した結果です。性質が3つあります。
2番目の性質が重要です。似ているかどうかを見るのではなく、完全に一致するかどうかだけを見ます。「最初の数文字が同じだから大丈夫」という確認の仕方は意味を持ちません。
また、どんなに大きなファイルでも値の長さは同じです。10ギガバイトの動画でも、1行のメモでも、同じ方式で計算すれば同じ長さの文字列になります。
| 内容 | |
|---|---|
| 確認できる | ダウンロードの途中でファイルが欠けていないか |
| 確認できる | 2つのファイルの中身が同一かどうか |
| 確認できる | 保存していたファイルが後から書き換わっていないか |
| 確認できない | そのファイルが安全かどうか |
| 確認できない | 配布元そのものが信用できるかどうか |
下の2つは誤解されやすい点です。ハッシュ値が一致するというのは、「配布元が置いたものと同じものが手元にある」という意味しかありません。配布元が置いたもの自体に問題があれば、値は一致したまま被害が出ます。
同じ理由で、配布ページが乗っ取られた場合、ファイルと一緒に掲載されているハッシュ値も書き換えられます。両方が同じ場所にあるなら、照合しても意味がありません。値が別の場所で公開されている場合に、はじめて確認の意味が出ます。
回線が不安定なときや、大きなファイルを扱うときに起きます。見た目には開けるのに動作がおかしい、という症状の原因がこれであることは珍しくありません。開く前に値を確認すれば、原因の切り分けに時間を使わずに済みます。
バックアップの整理でよくある場面です。ファイル名も更新日時もあてになりません。コピーの過程で日時は変わりますし、名前は誰でも変えられます。中身が同じかどうかを確かめられるのは、ハッシュ値だけです。
重複した写真や書類を整理するとき、値が同じものは片方を安心して消せます。逆に、名前が同じでも値が違えば、それは別のファイルです。
大きなファイルを外部とやり取りする場面で使えます。送る前に値を出しておき、相手に値だけを別の手段で伝えます。相手が受け取ったファイルの値と突き合わせれば、途中で欠けていないことを確認できます。
| 方式 | 状態 | 使いどころ |
|---|---|---|
| MD5 | 意図的に同じ値を作れることが実証済み | 破損の確認まで |
| SHA-1 | 同上。主要な場面から引退が進む | 破損の確認まで |
| SHA-256 | 現時点で有効 | 改ざんの確認に使える |
「同じ値を作れる」というのは、中身の違う2つのファイルを、同じハッシュ値になるように作れるという意味です。これができると、正規のファイルとすり替えても値が一致してしまい、確認の意味がなくなります。
ただし、偶然そうなることは実質ありえません。破損の確認という目的なら、MD5でも役に立ちます。配布元がMD5しか出していない場合は、破損の確認としては使い、改ざんの確認としては当てにしない、という受け止め方が妥当です。
ハッシュ値は、サービス側がパスワードを保存する場面でも使われています。元に戻せない性質があるため、預かった側もパスワードそのものを知らない状態を作れるからです。
だから「パスワードを忘れた」と申し出ると、教えてもらえるのではなく再設定になります。逆に言えば、登録したパスワードをそのまま教えてくれるサービスは、元に戻せる形で保存しているということです。これは避けたほうがよい設計です。
まず、そのファイルを使わないでください。原因は大きく2つに分かれます。ひとつは通信の途中でファイルが欠けた場合で、これはもう一度ダウンロードし直せば直ることがほとんどです。もうひとつは、配布されているファイル自体が本来のものと違う場合で、こちらは開いた時点で被害が出る可能性があります。区別がつかないため、まず再ダウンロードを試し、それでも一致しないなら配布元に問い合わせるのが安全な順序です。値の一部だけを見比べて似ているから大丈夫、という判断はできません。
目的によります。MD5とSHA-1は、意図的に同じ値になる別のデータを作れることが実証されています。そのため、改ざんされていないことの証明には使えません。一方で、通信の途中でファイルが欠けたかどうかを見るだけなら、偶然一致することは実質ありえないため十分役に立ちます。配布元がMD5しか出していない場合は、破損の確認としては使い、改ざんの確認としては信用しない、という受け止め方が妥当です。
できません。ハッシュ値は元に戻せない形で計算されており、この性質が仕組みの根幹です。どんなに大きなファイルでも決まった長さの文字列になるため、そもそも元の情報がすべて残っているわけではありません。ただし、短くて推測しやすいデータについては話が別です。よく使われるパスワードなどは、あらかじめ答えの一覧が作られているため、ハッシュ値から元の文字列が判明することがあります。復元されたのではなく、答え合わせをされたということです。
あります。よくあるのは、ファイルの中身が本当に少しだけ違う場合です。テキストファイルでは、改行の書き方が環境によって異なるため、見た目が同じでも中身が違うことがあります。また、写真や書類のファイルには撮影日時や作成者などの情報が埋め込まれており、これが書き換わると値も変わります。もうひとつ、計算方式が違えば当然値も違います。相手がSHA-256で出した値を、自分がMD5で計算していないか確認してください。