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

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

» 2022年05月18日 05時00分 公開

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Tech TIPS」のインデックス

連載目次

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

対象OS:Windows 8.1/Windows 10/Windows 11、Windows Server 2012/Windows Server 2012 R2/Windows Server 2016/Windows Server 2019/Windows Server 2022


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

 本Tech TIPSでは、Windows OS環境を対象として、「ハッシュ値」というものを利用してファイルの破壊や改ざんがないか確認する具体的な方法を説明する。また複数ファイルを一括で照合するためのスクリプト例も紹介しよう。

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

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

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

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

ハッシュ値情報を提供するダウンロードサイトの例(GitHubのPowerShell 7リリースページ) ハッシュ値情報を提供するダウンロードサイトの例(GitHubのPowerShell 7リリースページ)

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

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

アルゴリズム 主な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がよく使われている
ファイルのハッシュ値やチェックサム計算に使われる主なハッシュアルゴリズム

ファイルのハッシュ値を計算するためのツール

 ファイルのハッシュ値を求めるには、そのためのソフトウェアツール(アプリやコマンド)が必要だ。本Tech TIPSでは、Windows OS環境で使える幾つかのハッシュ計算ツールのうち、下表のものを紹介しよう。

  実行環境 インストール済み? MD5 SHA-1 SHA-256 SHA-384 SHA-512
7-Zip WindowsのGUI × × × ×
7z.exe コマンドプロンプトなど × × × ×
certutil.exe コマンドプロンプトなど
Get-FileHash PowerShell
md5sum WSL(Linux) × × × ×
sha1sum WSL(Linux) × × × ×
sha256sum WSL(Linux) × × × ×
sha384sum WSL(Linux) × × × ×
sha512sum WSL(Linux) × × × ×
本Tech TIPSで紹介するハッシュ計算ツール

「7-Zip」を使ってGUIでハッシュ値を計算する

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

 このツールを使うには、別途インストールする必要がある。その方法については、Tech TIPS「ZIPファイルにパスワードを付ける」を参照していただきたい。

 7-Zipをインストールすると、エクスプローラの右クリックメニューに新しく[7-Zip]−[CRC SHA]−[<ハッシュアルゴリズム>]という項目が追加される([CRC SHA]−[<ハッシュアルゴリズム>]の場合もある)。ハッシュ値を計算したいファイルを選んで右クリックし、ポップアップメニューからハッシュアルゴリズムを選択すると、そのファイルのハッシュ値が計算され、表示される。ただしWindows 11の場合は、右クリックしたらまず[他のオプションを表示]をクリックすること(これで[7-Zip]メニューが現れる)。

「7-Zip」でファイルのハッシュ値を確認する(1/3) 「7-Zip」でファイルのハッシュ値を確認する(1/3)
「7-Zip」でファイルのハッシュ値を確認する(2/3) 「7-Zip」でファイルのハッシュ値を確認する(2/3)
「7-Zip」でファイルのハッシュ値を確認する(3/3) 「7-Zip」でファイルのハッシュ値を確認する(3/3)

7-Zip付属の「7z.exe」コマンドでハッシュ値を計算する

 上述の7-Zipをインストールすると、「7z.exe」というコマンドラインコマンドも一緒にインストールされる。これを利用すると、コマンドプロンプトなどのCUIでファイルのハッシュ値を計算できる。

 7z.exeを利用するには、7-ZipのインストールフォルダをPATH環境変数に追加しておく必要がある。その方法の詳細については、Tech TIPS「Path環境変数を設定/編集して、独自のコマンドを実行可能にする」を参考にしてほしい。

「7z.exe」を実行できるようにPATH環境変数を変更する 「7z.exe」を実行できるようにPATH環境変数を変更する

 7z.exeを使ってハッシュ値を計算するには、7zにコマンド名「h」と、対象となるファイル名を指定する(ファイル名を省略するとカレントフォルダにある全ファイルが対象)。デフォルトではCRC32を求めるようになっているので、それ以外のハッシュ値を求めたい場合は「-scrc」オプションでアルゴリズムも指定する。

7z h -scrc<アルゴリズム名> <ファイル名>



 <アルゴリズム名>には「CRC32」「CRC64」「SHA1」「SHA256」「BLAKE2sp」「*」のいずれかを指定できる(英小文字でもよい)。「*」は全てのハッシュ値を表示させるためのオプションだ。

7z h -scrc* sample.dat  ……全てのハッシュ値を表示
7z h -scrcsha256 sample.dat  ……SHA-256の値を表示



「7z.exe」コマンドを使ってハッシュ値を計算する 「7z.exe」コマンドを使ってハッシュ値を計算する

 7z.exeコマンドのヘルプを表示させるには、「-h」オプションを指定する。

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

 7-Zipのようなツールをインストールできない(したくない)場合は、「certutil.exe」コマンドが利用できる。これはWindows Vista/Windows Server 2008以降のWindows OSに標準で付属している。

 certutil.exeコマンドでハッシュ値を計算するには、「-hashfile」オプションと、対象となるファイル名を指定する。デフォルトではSHA-1を求めるようになっているので、それ以外のハッシュ値を求めたい場合は、ファイル名の後にアルゴリズム名も指定する。

certutil -hashfile <ファイル名> <アルゴリズム名>



 <アルゴリズム名>には「MD2」「MD4」「MD5」「SHA1」「SHA256」「SHA384」「SHA512」のいずれかを指定できる。英小文字で指定してもよい。ただし、Windows 7など以前のWindows OSでは英大文字で指定しないとエラーになることがあるので注意が必要だ。

certutil -hashfile sample.dat  ……SHA-1の値を表示
certutil -hashfile sample.dat sha256  ……SHA-256の値を表示



 certutil.exeは対象ファイルをワイルドカードで指定できない。そのため、複数ファイルのハッシュ値を一括で計算するには、以下のようにforコマンドを併用するといった工夫が必要だ。

「certutil.exe」を使ってハッシュ値を計算する 「certutil.exe」を使ってハッシュ値を計算する

 certutil.exe -hashfileコマンドのヘルプを表示させるには、「-hashfile」と一緒に「-?」オプションも指定する。

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

 PowerShellが利用できるなら、ファイルのハッシュ値の計算には「Get-FileHash」コマンドレットが便利だろう。

 デフォルトではSHA-256の値を計算するので、それ以外のハッシュ値を求めたい場合は、「-Algorithm」パラメータでアルゴリズムも指定する。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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