連載
» 2017年07月18日 05時00分 UPDATE

Tech TIPS:WindowsでMD5/SHA-1/SHA-256ハッシュ値を計算してファイルの同一性を確認する

Webサイトなどで配布されているファイルは、ダウンロード時に破損したり、悪意のある攻撃者によって改ざんされていたりすることがある。ダウンロードしたファイルの「ハッシュ値」を計算して、正しいファイルであるかどうかをチェックする方法を解説する。

[打越浩幸,デジタルアドバンテージ]

対象OS:Windows 7/Windows 8/Windows 8.1/Windows 10/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2/Windows Server 2016


ハッシュ値を使ってファイルの内容が正しいかどうかをチェックする

 Webサイトなどで公開、配布されているプログラムやISOファイル、バイナリファイルなどをダウンロードした場合、それが正規に配布されているものであり、改ざんされていたり、ダウンロードが途中で失敗していたりしていないかどうか(一部が破損や欠落していないかどうか)を確認するのは重要なことである。もし内容が違っていると、プログラムのインストールや実行ができなかったり、場合によってはウイルスなどに感染してしまったりする可能性がある。

 手元にダウンロードしたファイルが、Webサイト上で配布されているファイルと同じかどうか、つまりバイナリデータとして完全に一致するかどうかを調べたい場合、一般的には「チェックサム(→WikiPedia)」や「ハッシュ値(→セキュリティ用語事典の解説)」「CRC」「メッセージダイジェスト(任意長のデータを小さい固定的なサイズのデータに要約/縮約する関数)」などの値を計算して比較する。これらの値は、ファイルの内容をあるアルゴリズムに基づいて計算し、64bitや256bit、512bitといった固定長のデータに変換したものである。結果は、通常は16進数で表記する。

 ハッシュ値を使うと、ファイルの内容や長さ、ファイル名、更新日付などにかかわらず、常に、短い固定長のデータとして簡単に比較できるようになる。内容がたった1bit違っているだけでも結果のハッシュ値は大きく異なる(ことが多い)ため、人間が見ても異なるファイルであることを簡単に判別できるようになる。

 Webサイトにもよるが、大きなデータやプログラムなどを配布しているサイトでは、ファイルのチェックサムやハッシュ値などの情報も同時に掲載していることが少なくない。ユーザーは、ダウンロードしたファイルのハッシュ値を計算してWebサイト上の記述と比較することにより、ダウンロードの成功/失敗、改ざんの有無を容易に判断できる。

ハッシュ値情報を提供するダウンロードサイトの例 ハッシュ値情報を提供するダウンロードサイトの例
バイナリファイルやISOファイルを配布するサイトでは、ファイルだけでなく、そのファイルのハッシュ値情報も同時に提供している場合が少なくない。これはマイクロソフトのISOファイルのダウンロードページの例。ローカルのPCにダウンロードしたファイルのハッシュ値を計算して、この値と比較することにより、ファイルが正しくダウンロードできたかどうかを確認できる。
  (1)ファイルのSHA-1ハッシュ値(160bit、16進数で40桁)。
  (2)ファイル名。

多くの種類があるハッシュ値やチェックサムの計算アルゴリズム

 ファイル(データ)の同一性をチェックするための計算アルゴリズムには、さまざまなものがある。以下によく使われているものを挙げておく。

アルゴリズム 主なbit数 概要
MD5 128bit Message Digest Algorithm 5。公開暗号システムを開発したRonald  Rivestが開発したハッシュアルゴリズム。現在ではあまり推奨されていないが、ファイルの同一性チェックという用途ではまだ使われている
SHA-1 160bit Secure Hash Algorithm 1。アメリカの標準暗号化規格として当初採用されたハッシュアルゴリズム。これも現在では非推奨だが、ファイルの同一性チェックという用途ではまだ使われている
SHA-2:
SHA-256/SHA-512
256/512bit/他 SHA-2はSHA-1の改良系。SHA-2にはbit数の異なる複数の規格があり、256bitと512bitのものは特にSHA-256/SHA-512と呼ばれる
SHA-3:
BLAKE
任意 SHA-3はSHA-2の後継規格。実際にはBLAKEというアルゴリズムが採用されている
CRC32/CRC64 32/64bit 古くから(主にシリアルデータ伝送回線において)使われているチェックコード生成アルゴリズム
RIPEMD 128/160/256/320bit MD5の前身であるMD4をベースにした改良アルゴリズム。160bitのRIPEMD-160がよく使われている
ファイルのハッシュ値やチェックサム計算に使われる主なハッシュアルゴリズム

GUIでハッシュ値を計算する(7-Zipツール編)

 ファイルのハッシュ値を計算するには幾つか方法やツールがあるが、まずはGUIで操作できる7-Zipツールを使う方法を紹介する。

 7-Zipは、ファイルやフォルダをZIPファイルに圧縮したり、逆に展開したりするためのツールであるが、ハッシュ値を計算する機能も用意されている。

 このツールのインストール方法や圧縮機能の使い方については、以下のTIPSを参照していただきたい。

 7-Zipをインストールすると、エクスプローラの右クリックメニューに新しく[CRC SHA]という項目が追加される。ハッシュ値を計算したいファイルを選んで右クリックし、ポップアップメニューからハッシュアルゴリズムを選択すると、そのファイルのハッシュ値が計算され、表示される。

7-Zipでファイルのハッシュ値を確認する 7-Zipでファイルのハッシュ値を確認する
これは7-Zipをインストールした後のエクスプローラ。ファイルを選んで右クリックすると、すぐにハッシュ値を計算できる。複数のファイルやフォルダを選んでハッシュ値を計算することもできる(2つのフォルダの内容が同一かどうかのチェックなどに使える)。
  (1)ファイルを選んで右クリックし、ポップアップメニューから[CRC SHA]を選択する。
  (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*で全ハッシュ値を計算)。

C:\ISO>7z h -scrc* ja_sql_server_2017_ctp2.1_x64_dvd_10512642.iso  ……このファイルのハッシュ値を計算する

7-Zip [64] 16.04 : Copyright (c) 1999-2016 Igor Pavlov : 2016-10-04

Scanning
1 file, 1924276224 bytes (1836 MiB)
……(中略)……
Size: 1924276224

CRC32  for data:              6D577D11

CRC64  for data:              FC8465F1A833A263

SHA256 for data:              A8463A37260B0894CA2BA7C2899B9A99EF8E7EA10ED98C8026479DE8A4C5C8AC

SHA1   for data:              399396F826DD46599F7642879FEB0E2EE92EBA1D  ……SHA-1

BLAKE2sp for data:              53EFA2C0505E6AE40F8E5C7BAF81496A27494715C6832E967589E9A150F6D6BD

Everything is Ok

C:\ISO>



fcivコマンドでハッシュ値を計算する

 7-ZipではMD5はサポートされていない。MD5のハッシュ値を計算したい場合は、マイクロソフトが提供しているコマンドラインツールの「File Checksum Integrity Verifier」(無償)を利用すると、どのWindows OS上でもハッシュ値を計算できる。

 このページからダウンロードしたファイルを実行すると展開先を聞いてくるので、適当なコマンド保存用のフォルダを指定して展開し、そのフォルダをPATH環境変数に追加しておく。

 fcivコマンドにファイル名を指定して実行すると(ワイルドカード指定は不可。個別に指定すること)、そのファイルのMD5ハッシュ値を計算して表示する。SHA-1を計算させたい場合は-sha1オプションを付ける。-bothとするとMD5とSHA-1の両方を計算する。

C:\ISO>fciv ja_sql_server_2017_ctp2.1_x64_dvd_10512642.iso  ……MD5値を求める
//
// File Checksum Integrity Verifier version 2.05.
//
3dd932c52a99bfd145ddb0478057a820 ja_sql_server_2017_ctp2.1_x64_dvd_10512642.iso  ……MD5値

C:\ISO>fciv -both ja_sql_server_2017_ctp2.1_x64_dvd_10512642.iso  ……MD5とSHA-1の両方の値を求める
//
// File Checksum Integrity Verifier version 2.05.
//
                MD5                             SHA-1
-------------------------------------------------------------------------
3dd932c52a99bfd145ddb0478057a820 399396f826dd46599f7642879feb0e2ee92eba1d ja_sql_server_2017_ctp2.1_x64_dvd_10512642.iso  ……MD5とSHA-1の値

C:\ISO>



 fcivは、計算したハッシュ値をXMLファイルに保存する機能なども持っている。詳細はfcivとともにインストールされているReadMe.txtファイル(英語)か、先のダウンロードページにある解説を参照していただきたい。

certutilコマンドでハッシュ値を計算する

 ファイルのハッシュ値を計算するには、Windows Vista/Windows Server 2008以降のWindows OSに標準で付属しているcertutil.exeコマンドを使うこともできる。

※SHA-1の値を求める場合
certutil -hashfile <ファイル名>
※それ以外のハッシュ値を求める場合
certutil -hashfile <ファイル名> <アルゴリズム名>
<アルゴリズム名>=「MD2/MD4/MD5/SHA1/SHA256/SHA384/SHA512」のいずれか

C:\>certutil -hashfile -?  ……ヘルプの表示
使用法:
  CertUtil [オプション] -hashfile InFile [HashAlgorithm]
  ファイルに暗号化ハッシュを生成し表示します
……(中略)……
ハッシュ アルゴリズム: MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512 ……利用できるアルゴリズム名の一覧(Windows 8.1/Windows Server 2012 R2以降でのみ表示。それ以前のWindows OSでは、表示はされないが、利用は可能)
……(以下省略)……
C:\>



 デフォルトではSHA-1の値が表示されるが、それ以外の値を求めたい場合はアルゴリズム名も指定する。アルゴリズム名の一覧は「certutil -hashfile -?」で確認できる(注:Winodws 8/Windows Server 2012以前のOSではアルゴリズム名の一覧はヘルプには表示されないが、利用することは可能)。OSによっては、アルゴリズム名を英大文字で指定しないとエラーになることがあるので注意。

※以下Windows 10上での実行例
C:\ISO>certutil -hashfile SQLServer2017RC1-x64-JPN.iso ……certutilでハッシュ値を求める
SHA1 ハッシュ (ファイル SQLServer2017RC1-x64-JPN.iso): ……デフォルトはSHA-1になる
e46a99b704ce8a03c1ce27ded3efd30327d21104 ……SHA-1ハッシュ値
CertUtil: -hashfile コマンドは正常に完了しました。

C:\ISO>certutil -hashfile SQLServer2017RC1-x64-JPN.iso MD5 ……MD5ハッシュを求める(小文字でmd5とすると、Windows 7などではエラーになるので大文字にすること)
MD5 ハッシュ (ファイル SQLServer2017RC1-x64-JPN.iso):
f78c9887a1137004215f89060f0e4989 ……MD5ハッシュ値
CertUtil: -hashfile コマンドは正常に完了しました。

C:\ISO>certutil -hashfile SQLServer2017RC1-x64-JPN.iso SHA256 ……SHA-256ハッシュを求める(小文字のsha256がエラーになる場合は大文字でSHA256と指定すること)
SHA256 ハッシュ (ファイル SQLServer2017RC1-x64-JPN.iso):
9cc69db9441781d7cf50755d02e69f49b0771594a6749e09d6ee6532fe4877cf ……SHA-256ハッシュ値
CertUtil: -hashfile コマンドは正常に完了しました。

C:\ISO>



PowerShellのGet-FileHashでハッシュ値を計算する

 コマンドラインでファイルのハッシュ値を求めたい場合、PowerShellのGet-FileHashコマンドレットも利用できる。

 デフォルトではSHA-256の値を計算するが、-AlgorithmパラメータでSHA1/SHA256/SHA384/SHA512/MACTripleDES/MD5/RIPEMD160のいずれかのアルゴリズムを指定することもできる。

Get-FileHash <ファイル名>
Get-FileHash -Algorithm <アルゴリズム名> <ファイル名>



 実行すると次のようになる。

PS C:\ISO> Get-FileHash .\ja_sql_server_2017_ctp2.1_x64_dvd_10512642.iso  ……SHA-256の値を求める

Algorithm  Hash                                                              Path
---------  ----                                                              ----
SHA256     A8463A37260B0894CA2BA7C2899B9A99EF8E7EA10ED98C8026479DE8A4C5C8AC  C:\ISO\ja_sql_server_2017_ctp2.1_x64_dvd_10512642.iso  ……結果


PS C:\ISO> Get-FileHash -Algorithm SHA1 .\ja_sql_server_2017_ctp2.1_x64_dvd_10512642.iso  ……SHA-1の値を求める

Algorithm  Hash                                                              Path
---------  ----                                                              ----
SHA1       399396F826DD46599F7642879FEB0E2EE92EBA1D                          C:\ISO\ja_sql_server_2017_ctp2.1_x64_dvd_10512642.iso  ……結果


PS C:\ISO>


■更新履歴

【2017/07/18】certutilコマンドを使う方法を追加しました。

【2017/07/13】最新のOSに合わせて内容を更新しました。当初紹介していたHastTabツールの代わりに、7-Zipツールの使い方を記載しました。

【2005/07/30】初版公開。対象はWindows 2000/Windows XP。


Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。