TIPS:WindowsでMD5/SHA-1/SHA-256ハッシュ値を計算してファイルの同一性を確認するWebサイトなどで配布されているファイルは、ダウンロード時に破損したり、悪意のある攻撃者によって改ざんされていたりすることがある。ダウンロードしたファイルの「ハッシュ値」を計算して、正しいファイルであるかどうかをチェックする方法を解説する。2016■記事内目次ハッシュ値を使ってファイルの内容が正しいかどうかをチェックする多くの種類があるハッシュ値やチェックサムの計算アルゴリズムGUIでハッシュ値を計算する(7-Zipツール編)コマンドラインでハッシュ値を計算する(7-Zip、fcivツール編)7-Zipをコマンドラインで使うfcivコマンドでハッシュ値を計算するcertutilコマンドでハッシュ値を計算するPowerShellのGet-FileHashでハッシュ値を計算するハッシュ値を使ってファイルの内容が正しいかどうかをチェックするWebサイトなどで公開、配布されているプログラムやISOファイル、バイナリファイルなどをダウンロードした場合、それが正規に配布されているものであり、改ざんされていたり、ダウンロードが途中で失敗していたりしていないかどうか(一部が破損や欠落していないかどうか)を確認するのは重要なことである。内容が違っていると、プログラムのインストールや実行ができなかったり、場合によってはウイルスなどに感染してしまったりする可能性がある。手元にダウンロードしたファイルが、Webサイト上で配布されているファイルと同じかどうか、つまりバイナリデータとして完全に一致するかどうかを調べたい場合、一般的には「チェックサム(→WikiPedia)」や「ハッシュ値(→セキュリティ用語事典の解説)」「CRC」「メッセージダイジェスト(任意長のデータを小さい固定的なサイズのデータに要約/縮約する関数)」などの値を計算して比較する。これらの値は、ファイルの内容をあるアルゴリズムに基づいて計算し、64bitや256bit、512bitといった固定長のデータに変換したものである。結果は、通常は16進数で表記する。ハッシュ値を使うと、ファイルの内容や長さ、ファイル名、更新日付などにかかわらず、常に、短い固定長のデータとして簡単に比較できるようになる。内容がたった1bit違っているだけでも結果のハッシュ値は大きく異なる(ことが多い)ため、人間が見ても異なるファイルであることを簡単に判別できるようになる。Webサイトにもよるが、大きなデータやプログラムなどを配布しているサイトでは、ファイルのチェックサムやハッシュ値などの情報も同時に掲載していることが少なくない。ユーザーは、ダウンロードしたファイルのハッシュ値を計算してWebサイト上の記述と比較することにより、ダウンロードの成功/失敗、改ざんの有無を容易に判断できる。ハッシュ値情報を提供するダウンロードサイトの例バイナリファイルやISOファイルを配布するサイトでは、ファイルだけでなく、そのファイルのハッシュ値情報も同時に提供している場合が少なくない。これはマイクロソフトのISOファイルのダウンロードページの例。ローカルのPCにダウンロードしたファイルのハッシュ値を計算して、この値と比較することにより、ファイルが正しくダウンロードできたかどうかを確認できる。(1)ファイルのSHA-1ハッシュ値(160bit、16進数で40桁)。多くの種類があるハッシュ値やチェックサムの計算アルゴリズムファイル(データ)の同一性をチェックするための計算アルゴリズムには、さまざまなものがある。以下によく使われているものを挙げておく。Rivestが開発したハッシュアルゴリズム。アメリカの標準暗号化規格として当初採用されたハッシュアルゴリズム。SHA-2はSHA-1の改良系。SHA-3はSHA-2の後継規格。MD5の前身であるMD4をベースにした改良アルゴリズム。160bitのRIPEMD-160がよく使われているファイルのハッシュ値やチェックサム計算に使われる主なハッシュアルゴリズムGUIでハッシュ値を計算する(7-Zipツール編)ファイルのハッシュ値を計算するには幾つか方法やツールがあるが、まずはGUIで操作できる7-Zipツールを使う方法を紹介する。7-Zipは、ファイルやフォルダをZIPファイルに圧縮したり、逆に展開したりするためのツールであるが、ハッシュ値を計算する機能も用意されている。「7-Zip」のWebサイト(日本語)(SourceForge.JP)このツールのインストール方法や圧縮機能の使い方については、以下のTIPSを参照していただきたい。SHA]という項目が追加される。ハッシュ値を計算したいファイルを選んで右クリックし、ポップアップメニューからハッシュアルゴリズムを選択すると、そのファイルのハッシュ値が計算され、表示される。7-Zipでファイルのハッシュ値を確認するこれは7-Zipをインストールした後のエクスプローラ。ファイルを選んで右クリックすると、すぐにハッシュ値を計算できる。複数のファイルやフォルダを選んでハッシュ値を計算することもできる(2つのフォルダの内容が同一かどうかのチェックなどに使える)。(2)ハッシュアルゴリズムとして「*」を選択すると、サポートされている全部の値が計算される。(3)ファイル圧縮関連は[7-Zip]メニューで行う。計算されたハッシュ値7-Zipで計算できるハッシュ値の一覧。この中では、SHA-1がよく使われるだろう。(1)計算対象のファイル名。(2)ファイルサイズ。サイズが同じかどうかも確認すること。(3)CRC値の計算結果。(4)SHA-256とSHA-1の計算結果。先ほどのWebページに掲載されている値と比較すること。数値列が長くて分かりづらいので、まずは先頭と末尾の4〜8桁だけをちょっと見て確認し、そこが同じなら同一ファイルと考えてよいだろう(経験的に)。コマンドラインでハッシュ値を計算する(7-Zip、fciv、certutilツール編)ファイルのハッシュ値をコマンドラインで計算させたい場合は、CUIのツールを利用するとよい。このようなツールには幾つかあるが、ここでは7-Zipとfciv、certutilを紹介する。7-Zipをコマンドラインで使う7-Zipは上で紹介したGUIのファイル圧縮ツールであるが、その実行ファイル7z.exeはコマンドラインでも利用できる。7z.exeを利用するには、7-ZipのインストールフォルダをPATH環境変数に追加しておくか、インストールフォルダにある7z.exeファイルをどこか適当なコマンド用フォルダにコピーし(C:\Commandなど)、その場所をPATH環境変数に追加しておく。PATH環境変数の変更については、TIPS「環境変数を変更する」を参考にしてほしい。7-Zipを使ってハッシュ値を計算するには、7zにコマンド名「h」と、対象となるファイル名を指定する(ファイル名を省略するとカレントフォルダにある全ファイルが対象)。デフォルトではCRC32を求めるようになっているので、それ以外のハッシュ値を求めたい場合は-scrcオプションでアルゴリズムも指定する(-scrc*で全ハッシュ値を計算)。OkC:\ISO>fcivコマンドでハッシュ値を計算する7-ZipではMD5はサポートされていない。OS上でもハッシュ値を計算できる。ユーティリティの概要と入手方法(マイクロソフト)このページからダウンロードしたファイルを実行すると展開先を聞いてくるので、適当なコマンド保存用のフォルダを指定して展開し、そのフォルダをPATH環境変数に追加しておく。fcivコマンドにファイル名を指定して実行すると(ワイルドカード指定は不可。個別に指定すること)、そのファイルのMD5ハッシュ値を計算して表示する。SHA-1を計算させたい場合は-sha1オプションを付ける。-bothとするとMD5とSHA-1の両方を計算する。......MD5とSHA-1の値C:\ISO>fcivは、計算したハッシュ値をXMLファイルに保存する機能なども持っている。詳細はfcivとともにインストールされているReadMe.txtファイル(英語)か、先のダウンロードページにある解説を参照していただきたい。OSに標準で付属しているcertutil.exeコマンドを使うこともできる。OSでは、表示はされないが、利用は可能)......(以下省略)......C:\>デフォルトではSHA-1の値が表示されるが、それ以外の値を求めたい場合はアルゴリズム名も指定する。2012以前のOSではアルゴリズム名の一覧はヘルプには表示されないが、利用することは可能)。OSによっては、アルゴリズム名を英大文字で指定しないとエラーになることがあるので注意。コマンドは正常に完了しました。コマンドは正常に完了しました。コマンドは正常に完了しました。C:\ISO>PowerShellのGet-FileHashでハッシュ値を計算するコマンドラインでファイルのハッシュ値を求めたい場合、PowerShellのGet-FileHashコマンドレットも利用できる。Get-FileHash[英語](MSDNサイト)デフォルトではSHA-256の値を計算するが、-AlgorithmパラメータでSHA1/SHA256/SHA384/SHA512/MACTripleDES/MD5/RIPEMD160のいずれかのアルゴリズムを指定することもできる。<ファイル名>実行すると次のようになる。【2017/07/18】certutilコマンドを使う方法を追加しました。【2017/07/13】最新のOSに合わせて内容を更新しました。当初紹介していたHastTabツールの代わりに、7-Zipツールの使い方を記載しました。【2005/07/30】初版公開。