著者は、Write for DOnationsプログラムの一部として300ドルの寄付を受け取るためにElectronic Frontier Foundationを選択しました。
前書き
LinuxディストリビューションISOなどのオープンソースソフトウェアをダウンロードした可能性があります。ダウンロードリンクの横には、ファイルのチェックサムをダウンロードするリンクがありました。 そのチェックサムリンクが何のためにあるのか疑問に思ったことはありますか? このチェックサムは、ダウンロードしたファイルの整合性を検証するために使用されます。
2016年2月20日、人気のあるLinuxディストリビューションであるLinux MintのWebサイトはhackedであり、ディストリビューションのインストールに使用されたISOが侵害されました。 侵害されたISOが発見される前に、多くの人がバックドアが焼き付けられたバージョンのLinux Mintをダウンロードし、おそらくインストールしました。
変更されたISOをダウンロードした個人がファイル検証を実行して、ダウンロードしたものが元のファイルと同じチェックサムを持っているかどうかを確認する場合、この危険なインストールはユーザーレベルで回避できます。 ハッキングされたISOには、元のISOとはまったく異なるチェックサムがありました。
ファイル検証では、ファイルがハッキングされた可能性があることを示すことができますが、ダウンロードしたファイルが正しくないか、ダウンロードプロセス中に変更されたことをユーザーに示すのに役立ちます。 ダウンロード中にTCPパケットがドロップされた場合、ダウンロードしたファイルは抜け落ちている可能性があり、ファイル検証を実行すると、ダウンロードしたものがソースサーバーで利用できるものと異なることがわかります。
このチュートリアルでは、ファイル検証とは何か、なぜ重要なのか、コマンドラインツールを使用してさまざまなオペレーティングシステムで実行する方法を学びます。
前提条件
この記事では、すべての主要なオペレーティングシステムに組み込まれているファイル検証用のコマンドラインツールを使用します。
検証するファイルと、そのファイルのMD5およびSHA1チェックサムが必要です。
ファイルの検証にはUbuntuインストールISOを使用します。 64ビットPC(amd64、x86_64)のUbuntu Minimal CD ISOをダウンロードします。 ダウンロード中は、ダウンロードリンクの横にあるMD5とSHA1の合計に注意してください。 チュートリアル全体でこれらのチェックサムを使用します。
ファイル検証の仕組み
hashingとも呼ばれるファイル検証は、マシン上にあるファイルがソースファイルと同一であることを確認するプロセスです。 ファイルをハッシュすると、checksumが残ります。これは、設定された長さのランダムな英数字の文字列です。 ファイルをハッシュしてもファイルは暗号化されず、チェックサムを取得してアルゴリズムを介して元のソースファイルを取得することはできません。
チェックサムを生成するプロセスは、多くの場合、one-way cryptographic functionと呼ばれます。 ファイルに対してハッシュを実行すると、ランダムな文字列に「要約」されます。 たとえば、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ハッシュよりも短くなりますが、どちらも設定された長さのランダムな文字列を返します。
[.note]#Note:ファイル検証の目的でもPGP / GPG署名が提供される場合があります。 これらの種類の署名はあまり一般的ではなく、確認するのがより複雑です。 チェックサムとサイトの公開鍵をダウンロードし、チェックを実行するためにシステムにgpg
を設定しておく必要があります。 これらの手順は、このチュートリアルの範囲を超えています。
#
ダウンロードしたファイルのハッシュをチェックすると、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 path/to/file ALGORITHM
です。
コマンド「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 SHA1
結果は次のようになります。
OutputSHA1 hash of mini.iso:
cce936c1f9d1448c7d8f74b76b66f42eb4f93d4a
CertUtil: -hashfile command completed successfully.
結果のハッシュをダウンロードページのハッシュと比較して、それらが一致することを確認します。