LinuxディストリビューションのISOイメージの整合性を確認する方法
Linuxカーネルに基づくオペレーティングシステムをインストールすることを決定したとき、最初に行うことは、公式ディストリビューションのウェブサイトからインストールイメージ、またはISOをダウンロードすることです。しかし、実際のインストールを進める前に、イメージの整合性を確認することが重要です。それが主張しているものであり、誰もそれを侵害していないことを確認するためです。このチュートリアルでは、このタスクを達成するために従うことができる基本的な手順を見ていきます。
このチュートリアルでは、あなたが学ぶことができることは:
- gpgの暗号化と署名の基本的な違いは何ですか?
- キーサーバーからGPG公開鍵をダウンロードしてインポートする方法
- GPG署名を確認する方法
- ISOのチェックサムを確認する方法
ISOイメージの整合性を確認する方法
使用されるソフトウェア要件と規約
ダウンロードしたISOの整合性を確認するためのステップは基本的に2つあります:
- ISOのチェックサムを含むファイルの署名を確認しています。
- ファイルに提供されたチェックサムが実際のISOのものと同じであることを確認する
ここでは、両方のステップをどのように実行するかを見ていきます。
ステップ1
チェックサムファイルのGPG署名を確認する
ダウンロードしたISOが変更されていないことを確認するためには、次の単純なことを行う必要があります:そのチェックサムが通常ISOがダウンロードされたページに記載されているものと一致しているかどうかを確認します。しかし、一つの問題があります:このファイル自体が変更されていないことをどうやって確認できるのでしょうか?私たちはそのgpg署名を確認しなければなりません!ところで、gpg署名とは何か、そしてgpgで署名することと暗号化することの違いは何ですか?
暗号化と署名
Gpg暗号化はキー ペアの使用に基づいています。各ユーザーは、プライベートキーとパブリックキーを生成します。前者はその名の通り、厳密に個人的なものであり、できるだけ安全に保管しなければなりません。一方、後者は配布可能であり、一般に自由にアクセスすることができます。基本的に、gpgでは暗号化と署名の2つのことができます。
アリスとボブという2人がいるとしましょう。彼らがgpgを利用して利益を得たいのであれば、まず最初に彼らは自分の公開鍵を交換しなければなりません。
アリスがボブにプライベートメッセージを送信したい場合、そしてそのメッセージをボブだけが読めることを確実にしたい場合、彼女はボブの公開鍵でメッセージを暗号化しなければなりません。メッセージが暗号化されると、ボブの秘密鍵だけがそれを復号化できることになります。
それはGPG暗号化です。GPGでできるもう一つのことはデジタル署名を作成することです。アリスが今回パブリックメッセージを配布したいとしましょう:誰でも読むことができるべきですが、このメッセージが本物でアリスによって本当に書かれたものであることを確認する方法が必要です。この場合、アリスは自分の秘密鍵を使用してデジタル署名を生成する必要があります。アリスの署名を検証するために、ボブ(または他の誰か)はアリスの公開鍵を使用します。
実際の例 - Ubuntu 20.04 ISOのダウンロードと検証
公式サイトからISOをダウンロードする際には、確認するために対応するチェックサムファイルとその署名もダウンロードする必要があります。実際の例を見てみましょう。最新のUbuntu(20.04)のISOをダウンロードして確認したいとします。リリースページに移動し、ページの下部にスクロールすると、ダウンロード可能なファイルのリストが見つかります。
Ubuntu 20.04 リリースページ
デスクトップバージョンの配布を確認してインストールしたい場合は、以下のファイルを取得する必要があります。
- ubuntu-20.04-desktop-amd64.iso
- SHA256SUMS
- SHA256SUMS.gpg
最初のファイルは配布イメージそのものであり、2番目のファイルSHA256SUMSには、利用可能なすべてのイメージのチェックサムが含まれており、イメージが変更されていないことを確認するために必要です。3番目のファイルSHA256SUM.gpgには、前のファイルのデジタル署名が含まれています。これを使用して、それが本物であることを確認します。
すべてのファイルをダウンロードしたら、最初に行うべきことはチェックサムファイルのgpg署名を検証することです。そのためには、以下のコマンドを使用する必要があります。
gpg --verify SHA256SUMS.gpg SHA256SUMS
gpg --verify コマンドに複数の引数が提供されると、最初の引数は署名を含むファイルと見なされ、他の引数は署名されたデータを含むものと見なされます。この場合、署名されたデータはUbuntuイメージのチェックサムです。現在作業しているディストリビューションがUbuntuでなく、Ubuntuイメージを初めてチェックする場合、コマンドは次の結果を返すべきです:
gpg: Signature made Thu 23 Apr 2020 03:46:21 PM CEST
gpg: using RSA key D94AA3F0EFE21092
gpg: Can't check signature: No public key
メッセージは明確です: gpgは署名を検証できません。なぜなら、データに署名するために使用された秘密鍵に関連付けられた公開鍵が手元にないからです。その鍵はどこで入手できますか?最も簡単な方法は、キーパーサーバーからダウンロードすることです。この場合、keyserver.ubuntu.comを使用します。鍵をダウンロードして鍵束にインポートするには、次のコマンドを実行します:
gpg --keyserver keyserver.ubuntu.com --recv-keys D94AA3F0EFE21092
上記のコマンドについて少し説明しましょう。–keyserverオプションを使用して、使用するキーサーバーを指定しました。一方、–recv-keysオプションはkey-idを引数として取り、キーサーバーからインポートすべきキーを参照するために必要です。この場合、私たちが検索してインポートしたいキーのIDはD94AA3F0EFE21092です。このコマンドは次の出力を生成するはずです:
gpg: key D94AA3F0EFE21092: public key "Ubuntu CD Image Automatic Signing Key (2012) <cdimage@ubuntu.com>" imported
gpg: Total number processed: 1
gpg: imported: 1
次のコマンドを実行することで、キーが現在私たちのキーペンダントにあることを確認できます:
gpg --list-keys
インポートされたキーに関連するエントリーを簡単に見つけることができるはずです。
pub rsa4096 2012-05-11 [SC]
843938DF228D22F7B3742BC0D94AA3F0EFE21092
uid [ unknown] Ubuntu CD Image Automatic Signing Key (2012) <cdimage@ubuntu.com>
公開鍵をインポートしたので、SHA256SUM署名の検証を再度試みることができます。
gpg --verify SHA256SUMS.gpg SHA256SUMS
今回は予想通り、コマンドが成功し、良い署名の通知を受け取りました。
gpg: Signature made Thu 23 Apr 2020 03:46:21 PM CEST
gpg: using RSA key D94AA3F0EFE21092
gpg: Good signature from "Ubuntu CD Image Automatic Signing Key (2012) <cdimage@ubuntu.com>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092
上記の出力を読むと、ほぼ確実に疑問が生じるでしょう:“この署名が所有者に属するという証拠はありません”メッセージは何を意味しますか?このメッセージは、鍵をキーリングにインポートしたとしても、それを信頼されていると宣言しておらず、指定された所有者に実際に属しているという証拠がないため表示されます。このメッセージを消すためには、鍵を信頼していると宣言する必要があります。実際に信頼できるかどうかをどうやって確認できるでしょうか?二つの方法があります。
- 指定されたユーザーまたは組織にキーが属していることを個人的に確認してください。
- それが私たちがすでに信頼している鍵によって、直接または一連の中間鍵を通じて署名されていることを確認してください。
さらに、キーに対して複数の信頼レベルを割り当てることができます。このテーマに興味がある場合(確実に興味を持つべきです!)、もっと知りたい場合は、GNUプライバシーハンドブックが良い情報源です。
ステップ1
画像のチェックサムを検証しています
SHA256SUMの署名が正しいことを確認したので、実際にダウンロードしたイメージのチェックサムが、ファイルに実際に保存されているものと一致するかどうかを確認することができます。ファイルの内容は以下の通りです:
e5b72e9cfe20988991c9cd87bde43c0b691e3b67b01f76d23f8150615883ce11 *ubuntu-20.04-desktop-amd64.iso
caf3fd69c77c439f162e2ba6040e9c320c4ff0d69aad1340a514319a9264df9f *ubuntu-20.04-live-server-amd64.iso
ファイルの各行に画像に関連したチェックサムがあることがわかります。SHA256SUMファイルがUbuntu 20.04のイメージがダウンロードされたのと同じディレクトリにあると仮定すると、ISOの整合性を確認するには、以下のコマンドを実行するだけです:
sha256sum -c SHA256SUM
sha256sumはSHA256メッセージダイジェストを計算および確認するために使用されるプログラムです。この場合、私たちは-cオプションを使用して起動しました。これは--checkの短縮形です。このオプションが使用されると、プログラムに引数として渡されたファイル(この場合はSHA256SUM)に保存されたチェックサムを読み取り、関連するエントリを検証するよう指示します。上記のコマンドの出力は、以下の通りです:
ubuntu-20.04-desktop-amd64.iso: OK
sha256sum: ubuntu-20.04-live-server-amd64.iso: No such file or directory
ubuntu-20.04-live-server-amd64.iso: FAILED open or read
sha256sum: WARNING: 1 listed file could not be read
出力から、ubuntu-20.04-desktop-amd64.iso ISOが確認され、そのチェックサムがファイルに示されているものと一致することがわかります。また、ubuntu-20.04-live-server-amd64.iso イメージのチェックサムを読み取って確認することができなかったという通知もあります:これは、私たちがそれをダウンロードしたことがないため、納得できることです。
結論
このチュートリアルでは、ダウンロードしたISOを検証する方法を学びました:チェックサムファイルに記載されているチェックサムと一致することを確認する方法、そして後者のgpg署名が正しいかどうかを確認する方法を学びました。gpg署名を確認するには、それを生成した秘密鍵に対応する公開鍵が必要です:チュートリアルでは、IDを指定してキーチェーンサーバーから公開鍵をダウンロードする方法も見ました。

