対象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サイト上の記述と比較することにより、ダウンロードの成功/失敗、改ざんの有無を容易に判断できる。
ファイル(データ)の同一性をチェックするための計算アルゴリズムには、さまざまなものがある。以下によく使われているものを挙げておく。
アルゴリズム | 主な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ツールを使う方法を紹介する。
7-Zipは、ファイルやフォルダをZIPファイルに圧縮したり、逆に展開したりするためのツールであるが、ハッシュ値を計算する機能も用意されている。
このツールのインストール方法や圧縮機能の使い方については、以下のTIPSを参照していただきたい。
7-Zipをインストールすると、エクスプローラの右クリックメニューに新しく[CRC SHA]という項目が追加される。ハッシュ値を計算したいファイルを選んで右クリックし、ポップアップメニューからハッシュアルゴリズムを選択すると、そのファイルのハッシュ値が計算され、表示される。
ファイルのハッシュ値をコマンドラインで計算させたい場合は、CUIのツールを利用するとよい。このようなツールには幾つかあるが、ここでは7-Zipとfciv、certutilを紹介する。
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>
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ファイル(英語)か、先のダウンロードページにある解説を参照していただきたい。
ファイルのハッシュ値を計算するには、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コマンドレットも利用できる。
デフォルトでは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© Digital Advantage Corp. All Rights Reserved.