« ^ »

Debian GNU/LinuxのISOファイルのチェックサムとその署名を確認する

所要時間: 約 4分

結局ダウンロードの後って何をしたら良いんだろう。チェックサムを計算して一致しているかを確認するべきだろう。そのチェックサムファイルの署名があるなら、それも正しいかを確認する。署名は、大抵の場合 OpenPGP だろう。配布元の公開鍵を入手する必要がある。どこかにある鍵サーバーから公開鍵を取得する。

Debian GNU/Linuxを例に考えてみる。Debianが使用している鍵の一覧はhttps://www.debian.org/CD/verifyに記載されている。

pub rsa4096/988021A964E6EA7D 2009-10-03 Key fingerprint = 1046 0DAD 7616 5AD8 1FBC 0CE9 9880 21A9 64E6 EA7D uid Debian CD signing key <[email protected]>

pub rsa4096/DA87E80D6294BE9B 2011-01-05 [SC] Key fingerprint = DF9B 9C49 EAA9 2984 3258 9D76 DA87 E80D 6294 BE9B uid Debian CD signing key <[email protected]>

pub rsa4096/42468F4009EA8AC3 2014-04-15 [SC] Key fingerprint = F41D 3034 2F35 4669 5F65 C669 4246 8F40 09EA 8AC3 uid Debian Testing CDs Automatic Signing Key <[email protected]>

2023年11月11日時点での記載

これらの鍵を自分が保持しているかを確認する。今回は鍵の取り扱いにGnuPGを使用する。

gpg --list-keys

フィンガープリントを見比べて、同じものがあれば公開鍵を保持している。同じものがない場合、公開鍵を持っていない。

公開鍵を持っていない場合、公開鍵を鍵サーバーから取得する。

gpg --keyserver keyring.debian.org --recv-keys 988021A964E6EA7D DA87E80D6294BE9B 42468F4009EA8AC3

公開鍵を取得したら、信用度を変更し自分の鍵を用いて署名する。そうする事で gpg --verify コマンドで署名検証をする時にワーニングが出力されなくなる。これはこの鍵が信用できる事が前提だけれども。

Debianのインストール用のイメージをDebian on CDs/DVDsから探す。一般的には受信するポイントから近い地域のミラーサイトからダウンロードする事が速く通信経路的には望ましいと言われる。

今回は理研のサーバーからamd64向けのnetinst用のISOイメージを取得する。

同じディレクトリにはいくつかのファイルが提供されている。

ファイル名用途
SHA256SUMS各ISOイメージのSHA-256を算出した結果。
SHA256SUMS.signSHA256SUMSの署名。
SHA512SUMS各ISOイメージのSHA-512を算出した結果。
SHA512SUMS.signSHA512SUMSの署名。
debian-12.2.0-amd64-netinst.iso基本となるdebianのイメージ。
debian-edu-12.2.0-amd64-netinst.iso学校の要件に合わせたバージョンのISOイメージ。
debian-mac-12.2.0-amd64-netinst.iso古い64bit Intel ChipのMacintosh用のISOイメージ。UEFIブートが除外されている。

チェックサムの結果や署名ファイルのファイルサイズは、ISOに比べて小さい。先ずはこれらを取得し正しさを確認する。今回は512bitのダイジェスト長になるSHA-512を使う。

チェックサムをダウンロードする。

curl -Lo SHA512SUMS https://ftp.riken.jp/Linux/debian/debian-cd/current/amd64/iso-cd/SHA512SUMS

このファイルの中身は次のようになっている。

11d733d626d1c7d3b20cfcccc516caff2cbc57c81769d56434aab958d4d9b3af59106bc0796252aeefede8353e2582378e08c65e35a36769d5cf673c5444f80e  debian-12.2.0-amd64-netinst.iso
32e00d8d8f69d888e7359199f188e7d1f916300585832dfcea7103b339ede7a8d310b17559b2228c53f43d204318138688a7c34431760a30675562992b6e621c  debian-edu-12.2.0-amd64-netinst.iso
130f9f4aaefb325fcb7e4fb189699922e27ff13050cb93972239afff777a3c7db2d4da07e6a9dc56b246b5c4b6ac316f750a2f0d4e2995bd629d32c5d4c07e7d  debian-mac-12.2.0-amd64-netinst.iso

チェックサムには各ISOファイルのチェックサムが次の形式で記述されている。

チェックサムの結果の16進数  ISOファイルの名前

大きなISOファイルをダウンロードする前に、このチェックサムのファイルが誰かによって改竄されていないかを確認したい。そのために SHA512SUMS.sign を使用する。このファイルは SHA512SUMS をDebianの秘密鍵によって署名したものだ。 SHA512SUMS.sign をダウンロードする。

curl -Lo SHA512SUMS.sign https://ftp.riken.jp/Linux/debian/debian-cd/current/amd64/iso-cd/SHA512SUMS.sign

中身はASCII Armor形式で記述されたOpen PGPの署名だ。

この署名は、Debianの秘密鍵を用いて署名しているから、Debianの公開鍵を用いて、署名が正しい事を検証できる。

gpg --verify SHA512SUMS.sign SHA512SUMS 2>&1
gpg: 日 10/ 8 05:24:41 2023 JSTに施された署名
gpg:                RSA鍵DF9B9C49EAA9298432589D76DA87E80D6294BE9Bを使用
gpg: "Debian CD signing key <[email protected]>"からの正しい署名 [充分]
SHA512SUMSの署名を検証する。

正しい署名である事が確認できた。つまり SHA512SUMS は信用しても良い。

次にISOファイルをダウンロードする。今回はネットインストールのため600MB程度だけれど、これはOSのデータだから物によっては大きい物では1GBを越えていく。

curl -Lo debian-12.2.0-amd64-netinst.iso https://ftp.riken.jp/Linux/debian/debian-cd/current/amd64/iso-cd/debian-12.2.0-amd64-netinst.iso

このファイルのSHA-512を計算する。SHA-512はEmacs Lispの secure-hash でも計算できるけれど、ファイルサイズが大きいので外部プログラム sha2 に任せる事にする。

sha2 -512 debian-12.2.0-amd64-netinst.iso
SHA-512 (debian-12.2.0-amd64-netinst.iso) = 11d733d626d1c7d3b20cfcccc516caff2cbc57c81769d56434aab958d4d9b3af59106bc0796252aeefede8353e2582378e08c65e35a36769d5cf673c5444f80e

この値が SHA512SUMS ファイルの中の記述と一致していれば良い。

11d733d626d1c7d3b20cfcccc516caff2cbc57c81769d56434aab958d4d9b3af59106bc0796252aeefede8353e2582378e08c65e35a36769d5cf673c5444f80e  debian-12.2.0-amd64-netinst.iso

一致している。そのためダウンロードしたISOファイルが正しいと分かる。検証にはユーティリティプログラムやスクリプトもあるけれど、基本的にはこの作業を自動で行っているにすぎない。

参考