結局ダウンロードの後って何をしたら良いんだろう。チェックサムを計算して一致しているかを確認するべきだろう。そのチェックサムファイルの署名があるなら、それも正しいかを確認する。署名は、大抵の場合 OpenPGP
だろう。配布元の公開鍵を入手する必要がある。どこかにある鍵サーバーから公開鍵を取得する。
Debian GNU/Linuxを例に考えてみる。Debianが使用している鍵の一覧はhttps://www.debian.org/CD/verifyに記載されている。
これらの鍵を自分が保持しているかを確認する。今回は鍵の取り扱いに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.sign | SHA256SUMSの署名。 |
SHA512SUMS | 各ISOイメージのSHA-512を算出した結果。 |
SHA512SUMS.sign | SHA512SUMSの署名。 |
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の公開鍵を用いて、署名が正しい事を検証できる。
正しい署名である事が確認できた。つまり 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ファイルが正しいと分かる。検証にはユーティリティプログラムやスクリプトもあるけれど、基本的にはこの作業を自動で行っているにすぎない。
参考
- https://blends.debian.org/edu/
- https://ftp.riken.jp/Linux/debian/debian-cd/current/amd64/iso-cd/
- https://ftp.riken.jp/Linux/debian/debian-cd/current/amd64/iso-cd/SHA512SUMS
- https://ftp.riken.jp/Linux/debian/debian-cd/current/amd64/iso-cd/SHA512SUMS.sign
- https://gnupg.hclippr.com/documents/editkey/
- https://gnupg.hclippr.com/documents/howto/
- https://ja.wikipedia.org/wiki/%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%82%B5%E3%83%A0
- https://ja.wikipedia.org/wiki/SHA-2
- https://kiririmode.hatenablog.jp/entry/20151101/1446303600
- https://linuxcodevserver.github.io/blog/2022/07/31/2022073101/
- https://magicode.io/okaits7534/articles/8e2c7ad956954a578c5e9ea5fb367a1b
- https://pineplanter.moo.jp/non-it-salaryman/2019/09/23/linux-get-iso-image/
- https://qiita.com/YuichiTanaka007/items/7c21f8941f7855224764
- https://qiita.com/honono-bonono/items/0eb4f678da4adf816d77
- https://qiita.com/kanatatsu64/items/bc05ed460eae5a4cb69e
- https://qiita.com/umi/items/2074aac509a6e78c4ef4
- https://qiita.com/y518gaku/items/435838097c700bbe6d1b
- https://scrapbox.io/xorphitus/OpenPGP_%E9%8D%B5%E3%81%AE%E7%94%9F%E6%88%90%E3%81%A8%E9%81%8B%E7%94%A8%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
- https://text.baldanders.info/openpgp/openpgp-key-management/
- https://uhoho.hatenablog.jp/entry/2023/05/05/201057
- https://wiki.debian.org/DebianEdu/
- https://wiki.gentoo.org/wiki/GnuPG/ja
- https://www.confrage.com/security/pgp/pgp4_12.html
- https://www.debian.or.jp/cdimage/
- https://www.debian.org/CD/mirroring/rsync-mirrors
- https://www.debian.org/CD/verify
- https://www.fnifni.net/gpg%E3%82%92%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B%E5%82%99%E5%BF%98%E9%8C%B2/
- https://www.mizucoffee.com/archives/361
- https://www.mizucoffee.com/archives/361#toc_id_3
- https://zenn.dev/spiegel/articles/20200920-gnupg-cheat-sheet
- https://zenn.dev/takc923/articles/391ea8a4e03f43