Ubuntu 26.04 講座 / 公式ISOをダウンロードしてチェックサム・電子署名を検証する
Ubuntu 26.04 ISOは公式のダウンロードルートから入手した後、同じ配布場所のSHA256SUMSおよびSHA256SUMS.gpgで確認します。電子署名はチェックサムリストの署名者を検証し、SHA-256比較はダウンロードしたISOがそのリストの値と同じかどうかを確認するため、二つの検査を区別して実行する必要があります。
ISO・チェックサムリスト・署名ファイルの準備
ISOはインストールメディアの内容を含むディスクイメージです。通常のVMでは仮想光学ドライブに接続して使用できますが、物理PC用USBインストールメディアを作成する場合は別途イメージ書き込み手順が必要です。ISOファイルをダウンロードしただけではUSBが起動可能な状態にはなりません。
Ubuntu Server ダウンロードで26.04 LTSとアーキテクチャを選択します。この文章のamd64の例はubuntu-26.04.1-live-server-amd64.isoであり、他のアーキテクチャやポイントリリースを取得した場合は、実際のファイル名と同じ配布ディレクトリの検証資料を使用します。
- 例えばダウンロードフォルダ内に
ubuntu-26.04-verifyという作業フォルダを作成し、選択したISOを保存します。 - ISOがある公式配布リストから
SHA256SUMSとSHA256SUMS.gpgを受け取り、同じフォルダに置きます。amd64の例は26.04公式配布ディレクトリで確認できます。 - ファイル拡張子が隠れている場合は表示するように変更します。チェックサムを保存したファイルが
SHA256SUMS.txtやHTMLページになっていないか、ISOがまだ一時ダウンロードファイルの状態ではないか確認します。
.torrentや.zsyncはダウンロード用の別の資料であり、ISO自体ではありません。また、26.04.1 ISOに他のリリース・他のイメージ場所のチェックサムを適用すると、正常なファイルでも一致しない場合があります。3つのファイルを1つのフォルダに集めるのは作業を簡単にするためであり、ファイル同士が対応しているかを確認する作業は別途必要です。
チェックサムリストと署名ファイルは受け取ったバイトのまま使用します。テキストエディタで内容を保存するときに改行や文字エンコーディングを変更すると署名検証に失敗する場合があります。内容を読むことと、編集したファイルを再保存することを区別してください。
ハッシュ一致と電子署名検証の違い
SHA-256は、ファイルのバイト内容を固定長のハッシュ値として計算する方式です。ISOの実際の値が信頼できる期待値と同じであれば、同じ内容を受け取ったかどうかを確認できます。しかし、攻撃者がISOとチェックサムのリストを一緒にすり替えた場合、ハッシュ比較だけでは区別できません。
SHA256SUMS.gpgは、チェックサムリストに対する分離署名です。GnuPGでgpgを使って署名を検証し、使用した公開鍵のフルフィンガープリントをUbuntu公式の案内と照合した後にチェックサムを比較します。署名者が誰であるかを確認する段階と、ファイルが一致しているかを確認する段階を合わせた上で、『ハッシュが一致するので公式ファイルである』と断定することはありません。検証の基本手順は、Ubuntu公式ダウンロード検証ガイドを参照してください。
GnuPGと別の公開鍵フォルダを用意する
署名検証にはGnuPGが必要です。Ubuntuの信頼できる既存環境では、command -v gpgでコマンドの存在を確認し、存在しない場合は公式リポジトリからsudo apt install gnupgでインストールできます。Windowsでは、Gpg4win公式配布版のように信頼できるGnuPGインストールパスを使用し、新しいターミナルでgpg --versionが動作するか確認します。任意の実行ファイルを検索してダウンロードすることはありません。
以下のGPGコマンドは、作業フォルダーを現在の位置に開いたターミナルで実行します。Windows PowerShellとLinuxターミナルの両方で外部コマンドgpgを使用できますが、インストールパスが用意されている必要があります。現在のフォルダー内にubuntu-verify-keysという空のディレクトリをまず作成してください。Linuxではmkdir -m 700 ubuntu-verify-keys、Windowsではファイルエクスプローラーの新規フォルダー機能を使用できます。既に同じ名前のフォルダーがある場合は、新しい名前を決めてコマンドのパスも合わせて調整します。
別のフォルダーを指定すると、普段使用している公開鍵の保存場所と検証用の鍵を区別できます。ここには秘密鍵やログインパスワードを入れません。以下で使用する全てのフィンガープリントはUbuntuの「Ubuntu CD Image Automatic Signing Key(2012)」に対応しており、鍵の名前や短い鍵IDだけで信頼せず、公式案内の全フィンガープリントと比較する必要があります。
gpg --homedir ./ubuntu-verify-keys --keyserver hkps://keyserver.ubuntu.com --recv-keys 843938DF228D22F7B3742BC0D94AA3F0EFE21092
gpg --homedir ./ubuntu-verify-keys --fingerprint 843938DF228D22F7B3742BC0D94AA3F0EFE21092
公式案内と照合するフィンガープリントは次の通りです。スペースは読みやすくするために区切っており、比較するときは40文字全てを確認します。
8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092
鍵サーバーは公開鍵を取得する経路であり、そのサーバーから鍵を受け取ったという事実自体が所有者の信頼を保証するものではありません。鍵が交換されていたり、署名に別の鍵が使われていた場合は、エラーメッセージに表示されたIDを無条件で取得して通過させず、現在のUbuntu公式検証案内を再確認してください。
チェックサム一覧の署名を確認する
gpg --homedir ./ubuntu-verify-keys --keyid-format long --verify SHA256SUMS.gpg SHA256SUMS
最初のファイルは署名、2番目のファイルは署名対象のチェックサム一覧です。Good signatureと署名者の情報・フィンガープリントを確認し、直後の終了状態も確認できます。Linuxシェルではprintf 'exit=%s\n' "$?"、PowerShellでは$LASTEXITCODEを実行して0であることを確認します。表示される文言や日付は言語や署名時期により異なる場合があります。
独立した鍵ストアでは、This key is not certified with a trusted signature のような信頼関係の警告が表示されることがあります。これは署名計算が間違っていることを意味する BAD signature とは異なるメッセージです。ただし、警告を無条件に無視するのではなく、前の段階で確認した全体のフィンガープリントが Ubuntu 公式の案内と一致しているかどうかも合わせて判断する必要があります。分離署名の検査で二つのファイルを指定する理由は、GnuPGの verify コマンドの説明でも確認できます。
No public key の場合は、必要な公開鍵を取得しているか、指定したキー・フォルダーが同じかを確認します。BAD signature の場合は、チェックサム一覧と署名ファイルの組み合わせ、ファイルが HTML として誤って保存されていないかなどを確認し、公式の場所から再度取得します。この段階が解決されない場合、その一覧を信頼できる検証が完了したとは判断しません。
Windows PowerShell で ISO のハッシュを比較する
ISO・チェックサム・署名ファイルを置いたフォルダーをファイルエクスプローラーで開いた後、そのフォルダーをカレントディレクトリとする PowerShell ターミナルを開きます。Get-Location と Get-ChildItem でパスとファイルを確認してください。Get-Command Get-FileHashでコマンドが利用できることを確認します。見つからない場合はPowerShellのバージョンと標準のMicrosoft.PowerShell.Utilityモジュールを確認してから続けます。下記のコードは $isoName に記載されたファイルの項目が正確に1つだけ存在する場合にのみ比較を行い、64桁の値全体を大文字小文字を区別せずに照合します。ファイル名の .1・live-server・amd64/arm64 を実際のダウンロードと合わせます。
$isoName = 'ubuntu-26.04.1-live-server-amd64.iso'
$pattern = '^([0-9A-Fa-f]{64}) [ *]' + [regex]::Escape($isoName) + '$'
$entries = @(Get-Content -LiteralPath '.\SHA256SUMS' | Where-Object { $_ -match $pattern })
if ($entries.Count -ne 1) {
throw 'Expected exactly one matching checksum entry.'
}
$expected = ($entries[0] -split '\s+', 2)[0]
$actual = (Get-FileHash -LiteralPath $isoName -Algorithm SHA256).Hash
if ($actual -ieq $expected) {
'SHA-256 MATCH'
} else {
throw 'SHA-256 MISMATCH: do not use this image.'
}
計算値が同じであれば SHA-256 MATCH が出力されます。項目がないというエラーはファイル名や検証リストが異なる場合に起こり、値が異なるというエラーは内容が違うことを意味します。二つのエラーを同一のものとして扱わないでください。Get-FileHash 公式ドキュメントはファイルハッシュとアルゴリズムの選択について説明しています。
Linux で ISO ハッシュを比較する
Linuxでは三つのファイルを置いた作業フォルダーに移動した後、pwdとlsで位置を確認します。sha256sum --helpで--checkと--ignore-missingのオプションもサポートしているか確認してください。以下のコマンドはリストにありますが、現在のフォルダーにないファイルはスキップされるため、複数のアーキテクチャ・インストール形態が一緒に書かれたリストを使うと便利です。
sha256sum --check --ignore-missing SHA256SUMS
printf 'exit=%s\n' "$?"
選択したファイルについて、ubuntu-26.04.1-live-server-amd64.iso: OKと終了ステータス0を確認します。フォルダー内にISOが複数ある場合、他のファイルのOKだけを見て自分が使うファイルも通ったと思わないでください。チェックするファイルが一つもない場合や内容が異なる場合は失敗として扱われ、リストにない任意のファイルはこのコマンドで自動検証されません。
Windows PowerShellとLinuxの例は、同じISOを同じ署名検証済みリストと比較する二つの経路です。両方のOSを用意する必要はありません。ただし、Windowsでハッシュだけを比較しGPG署名を確認していない場合、完了したのはハッシュ一致確認の段階であることを区別してください。
失敗したときの点検順
| 症状 | まず確認 | 処理 |
|---|---|---|
| チェックサムリストにISO名がない | リリース・アーキテクチャ・ファイル名・ダウンロード場所 | その ISO と同じ公式配布場所の検証資料を使用 |
| ハッシュが異なる | ダウンロードが完了したか、ファイルが変更されたか | 該当 ISO の使用を停止し、公式の場所から再ダウンロード・再検証 |
| 署名キーが見つからない | 検証用の鍵フォルダー・完全なフィンガープリント・公式キーの案内 | 公式指紋を確認し、必要な公開鍵を準備 |
| 署名が正しくありません | SHA256SUMSと署名ファイルの組、HTML を保存 | 両方のファイルを公式の経路から再度取得し、まず署名を再確認してください |
検証が終了したら、ISO元のファイル名・ダウンロード先パス・確認した署名フィンガープリントと結果を作業記録に残します。仮想マシンに接続するときも、検証したそのファイルを選んでください。USBにイメージを書き込む作業やインストール対象のディスクを指定する作業はデータを変更する可能性があるため、ファイル検証完了と実際のインストール先の確認をそれぞれ行う必要があります。




