ウェブサイト上から何かのファイルをダウンロードするとき、ダウンロードリンク周辺に「SHA1」/「SHA256」/「MD5」などといった文字とともに、ランダムな文字列が記載されていることがあります。
これは、ダウンロードの途中でファイルが壊れてしまっていたり、第三者によって改ざんされていないかを確かめるのに使います。
改ざんされていることは滅多にないとしても、特に何GBもあるような大きなファイルの場合、一部分が正常にダウンロードできないという現象が時々起こります。そんな時にも、ファイルが正常ダウンロードできているか確認する(基のファイルと同一のファイルかどうか確かめる)必要があります。
目次
ハッシュ関数による改ざん検知の仕組み
- サーバー側で、ハッシュ関数(*1)を使い、ファイルの内容を基にして文字列を生成します。
- この文字列を公開します。
- このファイルをダウンロードします。
- ハッシュ関数を使い、このファイルの内容を基にして文字列を生成します。
- 2の文字列と同じ文字列が得られれば、正しいファイルであることが分かります。
あるデジタルデータから一定の長さの文字列を生成するための関数・手順のことをハッシュ関数といいます。同じデータからは必ず同じ文字列が生成されます。また、生成された文字列から基のデータに復元することはできません。
ハッシュ関数には、「SHA1」/「SHA256」/「MD5」などいろいろな種類があります。
例
例としてプログラミング言語PHP のファイルをダウンロードして、ファイルが壊れていないか確認してみます。
1. ブラウザで PHPのダウンロードページ(Windows向け)にアクセスする
(1) ブラウザを開いて アドレスバーに http://windows.php.net/download/
と入力し、続けて Enterキーを押してこのURLのページにアクセスします。
2. ファイルをダウンロードする
今回は、「VC14 x64 Non Thread Safe (2016-Sep-14 02:01:04)」をダウンロードします。
(1) Zip
をクリックするとダウンロードが始まります。(今回は ホームフォルダ内の ダウンロード\test
フォルダにダウンロードします)
(2) ここに、sha1: cd99b28cef84e0e5af6263d023c0d2d8aa37592f
と書いています。
sha1
とは、ファイルの内容をランダムな文字列に変換する方式の名前です。- その方式を使って、ファイルの内容を変換した結果が
cd99b28cef84e0e5af6263d023c0d2d8aa37592f
という文字列です(ファイル提供者が変換作業をして得られた文字列です)。
ダウンロードが完了したら次に進みます。
3. PowerShell を起動する
(1) Windowsキー
をタイプしてスタートメニューを表示し、続けて powershell
とタイプします。
(2) 「Windows PowerShell」が表示されるので、ここをクリックして PowerShell を起動します。(通常、「Windows PowerShell」にフォーカスがあたっているはずなので、Enter を押すだけでもOKです)
4. PowerShell を使って SHA1の値を算出する
(1) cd .\Downloads\test\
と入力して Enter を押し、ファイルをダウンロードしたフォルダに移動します。
(2) ls
と入力して Enter を押すとフォルダ内のファイルが一覧表示されます。
(3) 先程ダウンロードしたファイルが存在しているか確認します。
(4) Get-FileHash -Algorithm SHA1 .\php-7.0.11-nts-Win32-VC14-x64.zip
と入力して Enter を押します。
- これにより、ダウンロードしたファイルの内容から、SHA1というハッシュアルゴリズムを使って文字列を出力されます。
- ハッシュ関数の種類は
-Algorithm
引数で指定します。SHA256であれば-Algorithm SHA256
、MD5であれば-Algorithm MD5
と指定します。
(5) 出力された文字列が、ダウンロードページに記載されていた文字列と同じであることを確認します。
- 同じであれば、ファイルは壊れていないことが分かります。
- この長さの文字列を全て比較するのは大変なので、最初と最後のそれぞれ5文字くらいずつ比較してもよいと思います(ハッシュ関数は、ファイルの内容が少し違うだけでも大きく異なる文字列を出力するように作られているはずです)。
まとめ
ファイルをダウンロードする際、ウェブサイトにハッシュ関数による文字列が記載されている場合は、なるべくファイルが壊れていないか・改ざんされていないかをチェックしましょう。