Qubes OS 動作環境・ダウンロード・PGPチェック

このポストではQubes OSをインストールする前に必要な事項を解説していきます。

Qubes OSの動作環境

Qubes OSは仮想化を利用するのでパソコンのメモリがたくさん必要です。できれば16GBあることが望ましいですが、8GBでもなんとかなるそうです。Qubes OS 4.1以降ではインテルのCPUならVT-xに加えてVT-dの仮想化支援機能が必要です。10年前のパソコンだとVT-dがついていなくて使用不可のものが結構あると思います。AMDの場合は普通の仮想化支援(AMD-V)に加えてIOMMU((AMD-Vi)という機能が必要だそうです。ハードディスクだと処理スピードがのろいので、SSDの使用が推奨されてます。

公式サイトに載っている動作環境の最低条件は以下の通りです:

  • CPU: 64-bit Intel or AMD processor (also known as x86_64, x64, and AMD64)
    • Intel VT-x with EPT or AMD-V with RVI
    • Intel VT-d or AMD-Vi (also known as AMD IOMMU)
  • Memory: 6 GB RAM
  • Storage: 32 GB free space 1

Qubes OSは動かないパソコンが結構あるのが難点です。AMDよりもインテルのCPUの方が総じてインストール成功率が高く、インテルのCPUでオンボードのグラフィックスを利用するのが一番確実らしいです。Qubesチームは "Intel integrated graphics processor (IGP) strongly recommended"だと言っています。Qubesのコミュニティがインストールの成功・失敗事例をまとめているので参考にしてください。

USB接続の外付けのディスクにインストールする場合はsys-usbは作成されません。

Qubes OSは「ベアメタルで」、すなわち、パソコンに直接インストールすべきものです。VirtualBoxにQubes OSをインストールした成功例がレポートされていますがそのようなことはQubesOSの公式では推奨されていません。Qubes OSを気軽に試してみたい人は、USBメモリか外付けのSSDにインストールするほうがよいと思います。USBメモリにQubes OSをインストールすると、それを別のPCに接続して起動できるかテストすることでQubes OSの動作確認ができるそうです。

UEFI(BIOS)の設定変更

Qubes OSをインストールする前にパソコンのUEFIの設定画面から Secure Bootをオフにすることと2、仮想化機能(IntelのCPUならVT-xとVT-dの両方)をオンにすることを忘れないでください。

Qubes OSのISOダウンロード及び検証

このセクションではISOをダウンロードしてPGPの検証を行う手順を書いていきます。以下では Linux mint21を使用しています。

まずはこのダウンロードページから最新のISOを落とします。2024年2月改訂時点のQubes OSの最新版は R4.2.0です。 Qubes-R4.2.0-x86_64.isoのサイズはおよそ6.1GBあります。

$ wget https://mirrors.edge.kernel.org/qubes/iso/Qubes-R4.2.0-x86_64.iso

Qubes OSのバージョンナンバーは 4.1 4.0 3.2など最初の数字2つまでがバージョンの区別の番号で、最後の数字はパッチの番号です。例えばR4.2.0をインストールした人はアップデートしていけば、R4.2.1やR4.2.2と同等なものになります。

QubesOSのISOのサインの仕組みは、

  • 一番大本のマスターキーの Qubes Master Signing Key (QMSK)
  • リリース・サイニング・キー release signing key (RSK)

の2つのキーがあって、マスターキーの秘密鍵がRSKの公開鍵に対して署名しています。そしてRSKの秘密鍵がISO関連のファイルに署名しています。なお、現在のRSK(qubes-release-4.2-signing-key.asc)はQubesのバージョンR4.2に使われています。

今からやっていくのは、1. マスターキーの公開鍵の取得とそれを信頼する作業、2. RSKの公開鍵の取得とそれがマスターキーで署名されていることの確認、3. ISO関連のファイルを取得してそれがRSKで署名されていることの確認の3つです。

マスターキーの取得

(この小節の参考URLはこちら)

gpgコマンドでQubesのマスターキーをインポートします。

$ gpg --fetch-keys https://keys.qubes-os.org/keys/qubes-master-signing-key.asc

出力:

gpg: 鍵を'https://keys.qubes-os.org/keys/qubes-master-signing-key.asc'から要求
gpg: 鍵DDFA1A3E36879494: 公開鍵"Qubes Master Signing Key"をインポートしました
gpg: 処理数の合計: 1
gpg:               インポート: 1

上記の代わりに wget や curlでascファイルをダウンロードして、 gpg --import /path/to/qubes-master-signing-key.ascなどとやってもOKです。

つぎにこのQubesのマスターキーのフィンガープリントを表示して、公式URLなどで公開されているフィンガープリントと同じものかどうか確認します。

$ gpg --fingerprint 'Qubes Master Signing Key'

出力:

pub   rsa4096 2010-04-01 [SC]
      427F 11FD 0FAA 4B08 0123  F01C DDFA 1A3E 3687 9494
uid           [  不明  ] Qubes Master Signing Key

こうしてgpgコマンドで計算したマスターキーのフィンガープリント(427Fで始まり9494で終わる40ケタの16進数)が、たとえばここここで公開されているものと同じかチェックしてください。また下記のTwitterで公開されているものと比較してもよいでしょう。

Youtubeの動画内でもフィンガープリントが出てきます。 www.youtube.com

フィンガープリントが本物かどうかのチェックをやる必要性があるのはどうしてでしょうか。これは、攻撃者が自分で公開鍵・秘密鍵のペアを作成し、ニセのISOにその秘密鍵で署名して、ニセのISOファイルとニセの公開鍵ファイルを被害者に渡すような詐欺行為を防止するためです。公開鍵そのものは極端に文字数が大きく人間がチェックするのには不向きなので、そのハッシュ値であるフィンガープリントで確認する仕組みです。

フィンガープリントが正しいことを確認し終えたら、このマスターキーを編集して信頼することにします。

$ gpg --edit-key "Qubes Master"

出力:

gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


pub  rsa4096/DDFA1A3E36879494
     作成: 2010-04-01  有効期限: 無期限       利用法: SC  
     信用: 未定義     有効性: 不明の
[  不明  ] (1). Qubes Master Signing Key

gpg>

念のためにフィンガープリントを確認しましょう(gpg>の右側を入力):

gpg> fpr

出力:

pub   rsa4096/DDFA1A3E36879494 2010-04-01 Qubes Master Signing Key
 主鍵フィンガープリント: 427F 11FD 0FAA 4B08 0123  F01C DDFA 1A3E 3687 9494

信頼するために trustというサブコマンドを入力します:

gpg> trust

出力:

pub  rsa4096/DDFA1A3E36879494
     作成: 2010-04-01  有効期限: 無期限       利用法: SC  
     信用: 未定義     有効性: 不明の
[  不明  ] (1). Qubes Master Signing Key

他のユーザの鍵を正しく検証するために、このユーザの信用度を決めてください
(パスポートを見せてもらったり、他から得たフィンガープリントを検査したり、などなど)

  1 = 知らない、または何とも言えない
  2 = 信用し ない
  3 = まぁまぁ信用する
  4 = 充分に信用する
  5 = 究極的に信用する
  m = メーン・メニューに戻る

あなたの決定は? 

すでにフィンガープリントが正しいことを確認し終えているので「あなたの決定は? 」の答えに 5 「究極的に信用する」を選びます。

あなたの決定は? 5      # 5 を入力して改行
本当にこの鍵を究極的に信用しますか? (y/N) y      # y を入力して改行

出力:

pub  rsa4096/DDFA1A3E36879494
     作成: 2010-04-01  有効期限: 無期限       利用法: SC  
     信用: 究極        有効性: 不明の
[  不明  ] (1). Qubes Master Signing Key
プログラムを再起動するまで、表示された鍵の有効性は正しくないかもしれない、
ということを念頭においてください。

最後に quitと打ってマスターキーの編集を終えます。

gpg> quit

再度マスターキーを表示させて究極的に信頼されたことを確認します:

$ gpg --list-keys 'Qubes Master'

出力:

(略)
pub   rsa4096 2010-04-01 [SC]
      427F11FD0FAA4B080123F01CDDFA1A3E36879494
uid           [  究極  ] Qubes Master Signing Key

[ 究極 ] という表示が出ていれば大丈夫です。

リリース・サイニング・キー(RSK)の取得・検証

(この小節の参考URLはこちら)

最初にqubes-release-4.2-signing-key.ascというRSKを取得します。

$ gpg --keyserver-options no-self-sigs-only,no-import-clean --fetch-keys https://keys.qubes-os.org/keys/qubes-release-4.2-signing-key.asc

出力:

gpg: 鍵を'https://keys.qubes-os.org/keys/qubes-release-4.2-signing-key.asc'から要求
gpg: 鍵E022E58F8E34D89F: 公開鍵"Qubes OS Release 4.2 Signing Key"をインポートしました
gpg: 処理数の合計: 1
gpg:               インポート: 1
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: 深さ: 0  有効性:   1  署名:   1  信用: 0-, 0q, 0n, 0m, 0f, 1u
gpg: 深さ: 1  有効性:   1  署名:   0  信用: 1-, 0q, 0n, 0m, 0f, 0u

このRSKの有効性を確かめます。

$ gpg --check-signatures "Qubes OS Release 4.2 Signing Key"

出力:

pub   rsa4096 2022-10-04 [SC]
      9C884DF3F81064A569A4A9FAE022E58F8E34D89F
uid           [  充分  ] Qubes OS Release 4.2 Signing Key
sig!3        E022E58F8E34D89F 2022-10-04  Qubes OS Release 4.2 Signing Key
sig!         DDFA1A3E36879494 2023-06-03  Qubes Master Signing Key

gpg: 正しい署名2個

DDFA1A3E36879494 2023-06-03 Qubes Master Signing Keyが含まれる行の冒頭が sig! になっていれば、このリリースキーがマスターキーで署名されていることの証しです。sig- の場合は無効な署名です。sig%の場合は署名を検証するときにエラーが起きています。上の出力ではsig!ですから、正当なリリースキーであることがわかりました。

ISOの検証

Qubes OSのISOファイルを検証するやり方は2通りあります。1つはsha256sumなどのハッシュ値を含むファイルをダウンロードして、そのファイルがRSKで署名してあることを確認しつつ、ISOファイルのハッシュ値を計算した結果がそのファイルに記載されたハッシュ値と同じか確かめる方法です。もう1つは、RSKでISOファイルに分離署名してできた署名ファイルをダウンロードして、その署名ファイルとISOファイルを検証するやり方です。どちらか1つをやれば十分です。

ハッシュ値による検証

(この小節の参考URLはこちら)

ダウンロードのページからCryptographic hash values をダウンロードします。

$ wget https://mirrors.edge.kernel.org/qubes/iso/Qubes-R4.2.0-x86_64.iso.DIGESTS

ISOファイル(Qubes-R4.2.0-x86_64.iso)が置いてあるディレクトリにこのDIGESTSファイルを移動させてください。

sha256sumを計算します。

$ sha256sum -c Qubes-R4.2.0-x86_64.iso.DIGESTS 
Qubes-R4.2.0-x86_64.iso: OK
sha256sum: 警告: 書式が不適切な行が 23 行あります

「書式が不適切な行が 23 行」の警告は無視して大丈夫です。Qubes-R4.2.0-x86_64.iso: OKの表示が出ていれば、パソコン上のISOファイルから計算したsha256sumのハッシュ値とDIGESTSファイルの作成者が計算したハッシュ値が同じだったことになります。しかし、攻撃者がニセのISOファイルとニセのDIGESTSファイルを送りつけていたらマズイので、DIGESTSファイルに対して正しくリリースキーで署名されているか確認します。

$ gpg --verbose --verify Qubes-R4.2.0-x86_64.iso.DIGESTS 
gpg: 外装ヘッダー: Hash: SHA256
gpg: 元のファイル名=''
gpg: 2023年12月18日 03時35分48秒 JSTに施された署名
gpg:                RSA鍵9C884DF3F81064A569A4A9FAE022E58F8E34D89Fを使用
gpg: pgp信用モデルを使用
gpg: "Qubes OS Release 4.2 Signing Key"からの正しい署名 [充分]
gpg: テキストモード署名、ダイジェスト・アルゴリズム SHA256、鍵アルゴリズム rsa4096

"Qubes OS Release 4.2 Signing Key"からの正しい署名という表示があるので、DIGESTSファイルはRSKによって正しく署名されていることが確認できました。これでようやくQubes-R4.2.0-x86_64.iso ファイルが本物であることが分かりました。

分離署名ファイルによる検証

(この小節の参考URLはこちら)

上のハッシュ値によるISOファイルの検証をすでに終えている場合は、以下の分離署名ファイルによる検証をやる必要はありません。

ダウンロードページから Detached PGP signature をダウンロードします。

$ wget https://mirrors.edge.kernel.org/qubes/iso/Qubes-R4.2.0-x86_64.iso.asc

ISOファイル(Qubes-R4.2.0-x86_64.iso)が置いてあるディレクトリにこのascファイルに移動させてください。 署名を確認するために gpgのverifyコマンドを使います。

$ gpg --verbose --verify Qubes-R4.2.0-x86_64.iso.asc Qubes-R4.2.0-x86_64.iso

出力:

gpg: 2023年12月18日 03時34分24秒 JSTに施された署名
gpg:                RSA鍵9C884DF3F81064A569A4A9FAE022E58F8E34D89Fを使用
gpg: pgp信用モデルを使用
gpg: "Qubes OS Release 4.2 Signing Key"からの正しい署名 [充分]
gpg: バイナリ署名、ダイジェスト・アルゴリズム SHA256、鍵アルゴリズム rsa4096

「"Qubes OS Release 4.2 Signing Key"からの正しい署名 [充分]」が表示されたので、ISOファイルにRSKの署名がなされていることが確認できました。これによりQubes-R4.2.0-x86_64.iso ファイルが本物であることが分かりました。

Qubes OSのISOファイルをUSBメモリに焼く

USBメモリをLinuxパソコンに差してから、どのデバイスになったのか(/dev/sdbなど)を確認します。いくつかやり方がありますが、ここでは inxiコマンドを使いました。sudo dmesgで出力の一番下の方を見てもわかると思います。

$ inxi --disk
Drives:
  Local Storage: total: 312.86 GiB used: 15.18 GiB (4.9%)
  ID-1: /dev/sda vendor: (略)
  ID-2: /dev/sdb type: USB vendor: (略)
    size: 14.77 GiB

/dev/sdbがUSBメモリであることがわかったので、ISOファイルをここにコピーします。

$ sudo cp ~/Downloads/Qubes-R4.2.0-x86_64.iso /dev/sdb && sync

これでQubes OSのインストールの準備が整いました。次回はこのUSBメモリを用いてQubes OSのインストールを開始します。


[補足] ISOを焼いたUSBメモリからハッシュ値を計算する方法

(この節の参考URLはこちら)

すでにQubes OSのISOをコピーし終えたUSBメモリを持っている場合で、USBの中身がニセモノのISOにすり替わっていないか確認したいときの対処法が公式ページに書いてあったので紹介します。

今利用しているOSにすでに外敵が侵入しているリスクを考え、USBにISOを焼く作業をしたパソコンとは別のオフラインのLinuxパソコンで確認作業を行います。

ISOファイルが入っているパソコン上で、最初にISOファイルのバイト数をメモしておきます。

$ stat Qubes-R4.2.0-x86_64.iso
  File: Qubes-R4.2.0-x86_64.iso
  Size: 6517848064  Blocks: 12730184   IO Block: 4096   通常ファイル
(以下略)

あるいはダウンロードのページQubes-R4.2.0-x86_64.iso の項目の上にマウスを持ってきてもバイト数が6517848064であることは把握できます。

つぎにオフラインのLinuxパソコンにUSBを差し込みます。USBのデバイス名(/dev/sdbなど)を把握したら、つぎのコマンドをターミナルから入力します。なおcount=以下にメモしておいたバイト数を書きます。

$ sudo dd if=/dev/sdb bs=1M count=6517848064 iflag=count_bytes | sha256sum

出力:

6215+1 レコード入力
6215+1 レコード出力
6517848064 bytes (6.5 GB, 6.1 GiB) copied, 59.5017 s, 110 MB/s
26203f27c68ef757f0bd01f194c466c5629c0a5996859db92b37e323eee8714c  -

最後の行の 2620 ... 714c のところがsha256sumのハッシュ値です。この値が以前ダウンロードして署名を検証した Qubes-R4.2.0-x86_64.iso.DIGESTS ファイルに書いてあった値と比べて同じであれば、USBメモリの中のISOがホンモノであるということになります。


  1. 私は公称32GBのUSBメモリにインストールしてみようとしたところ、ストレージの容量不足でインストールに失敗しました。あとでUSBメモリの容量を正確に図ってみると31GB少々しかありませんでした。32GBを確実に上回るストレージを用意したほうがよさそうです。
  2. Qubes OSはsecure bootをサポートしていません