著者はhttps://www.brightfunds.org/organizations/electronic-frontier-foundation-inc[Electronic Frontier Foundation]を選択して、https://do.co/w4do-cta [Write DOnations]プログラム。

前書き

LinuxディストリビューションISOなどのオープンソースソフトウェアをダウンロードした可能性があります。ダウンロードリンクの横には、ファイルのチェックサムをダウンロードするリンクがありました。 そのチェックサムリンクが何のためにあるのか疑問に思ったことはありますか? このチェックサムは、ダウンロードしたファイルの整合性を検証するために使用されます。

2016年2月20日、人気のLinuxディストリビューションであるLinux MintのWebサイトはhttps://blog.linuxmint.com/?p=2994[hacked]であり、ディストリビューションのインストールに使用されたISOが侵害されました。 侵害されたISOが発見される前に、多くの人がバックドアが焼き付けられたバージョンのLinux Mintをダウンロードし、おそらくインストールしました。

変更されたISOをダウンロードした個人がファイル検証を実行して、ダウンロードしたものが元のファイルと同じチェックサムを持っているかどうかを確認する場合、この危険なインストールはユーザーレベルで回避できます。 ハッキングされたISOには、元のISOとはまったく異なるチェックサムがありました。

ファイル検証では、ファイルがハッキングされた可能性があることを示すことができますが、ダウンロードしたファイルが正しくないか、ダウンロードプロセス中に変更されたことをユーザーに示すのに役立ちます。 ダウンロード中にTCPパケットがドロップされた場合、ダウンロードしたファイルは抜け落ちている可能性があり、ファイル検証を実行すると、ダウンロードしたものがソースサーバーで利用できるものと異なることがわかります。

このチュートリアルでは、コマンドラインツールを使用して、さまざまなオペレーティングシステムでファイル検証とは何か、なぜ重要なのか、どのように検証するのかを学びます。

前提条件

この記事では、すべての主要なオペレーティングシステムに組み込まれているファイル検証用のコマンドラインツールを使用します。

検証するファイルと、そのファイルのMD5およびSHA1チェックサムが必要です。

ファイルの検証にはUbuntuインストールISOを使用します。 64ビットPC(amd64、x86_64)用のhttps://help.ubuntu.com/community/Installation/MinimalCD[Ubuntu Minimal CD ISO]をダウンロードします。 ダウンロード中は、ダウンロードリンクの横にあるMD5とSHA1の合計に注意してください。 これらのチェックサムは、チュートリアル全体で使用します。

ファイル検証の仕組み

_hashing_としても知られるファイル検証は、マシン上にあるファイルがソースファイルと同一であることを確認するプロセスです。 ファイルをハッシュすると、設定された長さのランダムな英数字の文字列である_checksum_が残ります。 ファイルをハッシュしてもファイルは暗号化されず、チェックサムを取得してアルゴリズムを介して元のソースファイルを取得することはできません。

チェックサムを生成するプロセスは、「一方向暗号化機能」と呼ばれることがよくあります。 ファイルに対してハッシュを実行すると、ランダムな文字列に「要約」されます。 たとえば、1000文字のドキュメントがあるとします。 MD5アルゴリズムを使用してファイルをハッシュすると、結果のチェックサムは32個のランダムな文字になります。 2000文字の長さのファイルをハッシュする場合、結果のMD5チェックサムは32文字のままです。 ソースファイルの長さが10文字しかない場合でも、MD5チェックサムはランダムな32文字のままです。

同じファイルでハッシュを実行するたびに、そのファイルのすべてのビットが変更されていない限り、常に同じ文字列のハッシュが取得されます。 ただし、ファイル内の余分なスペースなど、1つでも異なる場合、チェックサムは完全に異なります。

ファイル検証で通常表示されるチェックサムには、_MD5_または_SHA_の2種類があります。

MD5アルゴリズムは、暗号化の世界では簡単にハッキングできるという多くの批判を受けていますが、ファイル検証に関してはこれは問題になりません。 ファイルの整合性の検証に関しては、暗号化ツールの弱さは重要ではありません。 MD5は成熟した仕様であり、ハッシュを実行する他の方法よりも高速であるため、私たちにとっては良いことです。

最近、一部の最新の暗号化で使用されているハッシュアルゴリズムであるため、チェックサムに対するSHAハッシュアルゴリズムの使用が増加しています。 ただし、MD5とは異なり、SHAにはさまざまなバージョンがあり、チェック時には正しいバージョンを使用することが重要です。 バージョンは、1、2、3などの数字として、または256、384、512などのSHAが連続して実行される回数として識別されます。 使用するチェックサムは、使用するSHAのバージョンを指定する必要があります。 サイトが番号なしでラベルSHAのハッシュのみを指定している場合、SHA1を使用していると想定しても安全です。

ファイル検証の目的では、両方の方法が等しく有効です。 アルゴリズムは異なりますが、MD5ハッシュはSHAハッシュよりも短くなりますが、どちらも設定された長さのランダムな文字列を返します。

ダウンロードしたファイルのハッシュをチェックすると、2つの異なる保証が提供されます。 まず、一致するチェックサムを使用すると、ダウンロードしたファイルがソースと同一であり、第三者によって変更されていないことを確認できます。 次に、ファイルが転送中に破損または変更されていないことがわかります。 これらのケースは両方とも重要です。どちらかが発生した場合、ダウンロードがマシンに有害であるか、まったく機能しない可能性があるためです。

チェックサムとは何か、そしてファイルのチェックを行う理由がわかったので、OSでそれを行う方法に取り掛かりましょう。 Linuxから見ていきます。

Linuxでのファイル検証の実行

ほとんどのLinuxディストリビューションには、各ハッシュアルゴリズム用のコマンドラインツールがあります。 ツール名のパターンは、「HASH-TYPE」と「sum」という単語です。 したがって、MD5でハッシュするには、プログラム名は `+ md5sum `です。 SHA 256でハッシュするには、コマンドは ` sha256sum +`です。 正確な名前がわからない場合は、ハッシュアルゴリズム名を入力してからTabキーを2回押すと、ほとんどのディストリビューションにそのアルゴリズム名で始まるすべてのコマンドが表示されます。 以下にいくつかの一般的なチェックについて説明します。

MD5ハッシュアルゴリズムを使用して最初のチェックを実行します。 `+ md5sum +`コマンドを実行し、ハッシュしたいファイルへのパスを渡します:

md5sum mini.iso

結果は次のようになります。

Output8388f7232b400bdc80279668847f90da  mini.iso

「8388f」で始まるこのランダムな文字列はチェックサムであり、これはダウンロードページで提供されるチェックサムと比較する必要があるものです。

ファイルを変更するとチェックサムが完全に異なるため、時間を節約するために、最初の数文字をチェックし、最後の数文字はすべての文字ではなくソースと同じです。

たとえば、「mini.iso」のチェックサムが一致することをすばやく確認する場合は、両方のチェックサムが「8388f」で始まり、「f90da」で終わることを確認します。 両方が一致する場合、完全なハッシュがほぼ同じ(ほぼ100%)である可能性が高くなります。

100%確実にしたい場合は、ローカルチェックの出力の下にあるWebサイトからチェックサムをコピーして貼り付け、すべての文字が並んでいるかどうかを確認します。

Output8388f7232b400bdc80279668847f90da  mini.iso
8388f7232b400bdc80279668847f90da

それでは、SHAハッシュのチェックを見てみましょう。 最も一般的なSHAハッシュコマンドは、「+ sha1sum 」および「 sha256sum 」です。 ファイルへのパスを渡すことで、 ` sha1sum +`コマンドを実行します。

sha1sum mini.iso

結果は次のようになります。

Outputcce936c1f9d1448c7d8f74b76b66f42eb4f93d4a  mini.iso

結果の値をWebページの値と比較して、一致することを確認します。

次に、macOSでのファイルの検証を見てみましょう。

macOSでのファイル検証の実行

Linuxとは異なり、macOSには、アルゴリズムごとに1つではなく、2つのハッシュコマンド( + md5 +`と `+ shasum +)しかありません。 ただし、これらのツールだけで必要なすべてのチェックを実行できます。

さまざまなアプリケーションとさまざまなオペレーティングシステムにもかかわらず、これらのツールから得られるハッシュはすべてのOSで同じです。

`+ md5 `はスタンドアロンアルゴリズムであるため、macOSでは独自のコマンドです。 ` md5 +`コマンドを実行し、確認したいファイルへのパスを渡します:

md5 mini.iso

結果は次のようになります。

OutputMD5 (mini.iso) = 8388f7232b400bdc80279668847f90da

ご覧のとおり、macOSの出力はLinuxの出力とまったく同じではありませんが、ファイル名と32文字のランダムな文字列が表示されます。 文字を元のMD5チェックサムと比較し、それらが一致することを確認します。

次に、SHAチェックサムの検証を見てみましょう。 macOSには、 `+ shasum +`と呼ばれるSHAチェックを実行するためのユーティリティが1つあります。 実行するときに、必要なタイプのSHAチェックを引数として提供します。

`+ -a +`フラグを使用してSHA1を指定して、次のコマンドを実行します。

shasum -a 1 mini.iso

結果は次のようになります。

Outputcce936c1f9d1448c7d8f74b76b66f42eb4f93d4a  mini.iso

この値を元のファイルのSHA1ハッシュと比較します。 一致しない場合は、ファイルをダウンロードして、もう一度ハッシュを確認してください。

SHA 256チェックを実行する必要がある場合、コマンドは `+ shasum -a 256 mini.iso +`になります。 タイプを指定しない場合、デフォルトはSHA1になります。

次に、Windowsでのファイルの検証を見てみましょう。

Windowsでのファイル検証の実行

Windows 7以降のバージョンには、すべてのハッシュニーズを処理できる「+ certutil +」アプリが含まれています。 出力はLinuxおよびmacOSとは大きく異なりますが、チェックサムは同じで有効です。 以下の両方の例では、PowerShellを使用しています。

コマンドの形式は、「+ certutil -hashfile +」です。

コマンド「certutil」では大文字と小文字が区別されないため、「CertUtil」、「certUtil」、および「certutil」はすべて有効です。 ただし、アルゴリズムでは大文字と小文字が区別されます。つまり、「md5」は機能しないため、「MD5」と入力する必要があります。

`+ mini.iso +`ファイルのMD5ハッシュを確認するには、次のコマンドを実行します。

certutil -hashfile mini.iso MD5

結果は次のようになります。

OutputMD5 hash of file mini.iso:
8388f7232b400bdc80279668847f90da
CertUtil: -hashfile command completed successfully.

SHAアルゴリズムの場合、同じコマンドを実行しますが、「+ MD5 」ではなく「 SHA1 +」を使用します。

`+ SHA `の後の数字は、SHAの異なるバージョンまたは反復を指定します。 したがって、SHA1ハッシュには ` SHA `または ` SHA1 `を使用し、SHA 256アルゴリズムが必要な場合は ` SHA256 +`を使用します。

certutil -hashfile mini.iso

結果は次のようになります。

OutputSHA1 hash of mini.iso:
cce936c1f9d1448c7d8f74b76b66f42eb4f93d4a
CertUtil: -hashfile command completed successfully.

結果のハッシュをダウンロードページのハッシュと比較して、それらが一致することを確認します。

結論

ダウンロード中にダウンロードしたファイルが破損していないことを確認する場合でも、悪意のある人がダウンロードサーバーをハッキングしていないことを確認する場合でも、ファイルのハッシュをチェックするのに余分な時間がかかります。

コマンドラインがファイルの検証を簡単にするには少々不便な場合、代わりに使用できるGUIベースのツールがいくつかあります。

  • macOS:https://itunes.apple.com/us/app/hashtab/id517065482?mt=12[HashTab]

  • Linux:https://gtkhash.sourceforge.io/[GtkHash]

  • Windows:http://implbits.com/products/hashtab/[HashTab]またはhttp://code.kliu.org/hashcheck/[HashCheck]