<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ELC</id>
	<title>ArchWiki - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ELC"/>
	<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php/%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/ELC"/>
	<updated>2026-08-20T03:53:30Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=GRUB&amp;diff=41688</id>
		<title>GRUB</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=GRUB&amp;diff=41688"/>
		<updated>2026-08-09T08:18:58Z</updated>

		<summary type="html">&lt;p&gt;ELC: ELC (トーク) による版 41687 を取り消し&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートローダー]]&lt;br /&gt;
[[Category:GNU]]&lt;br /&gt;
[[de:GRUB]]&lt;br /&gt;
[[en:GRUB]]&lt;br /&gt;
[[es:GRUB]]&lt;br /&gt;
[[pl:GRUB]]&lt;br /&gt;
[[pt:GRUB]]&lt;br /&gt;
[[ru:GRUB]]&lt;br /&gt;
[[zh-hans:GRUB]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Master Boot Record}}&lt;br /&gt;
{{Related|GUID Partition Table}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|GRUB Legacy}}&lt;br /&gt;
{{Related|GRUB/EFI サンプル}}&lt;br /&gt;
{{Related|GRUB/ヒントとテクニック}}&lt;br /&gt;
{{Related|マルチブート USB ドライブ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[https://www.gnu.org/software/grub/ GRUB] (GRand Unified Bootloader) は[[ブートローダー]]です。現在の GRUB は &#039;&#039;&#039;GRUB 2&#039;&#039;&#039; とも呼ばれています。元の GRUB ([[GRUB Legacy]]) はバージョン 0.9x に対応しています。このページでは GRUB 2 についてのみ説明します。&lt;br /&gt;
&lt;br /&gt;
{{Note|この記事全体で、{{ic|&#039;&#039;esp&#039;&#039;}} は [[EFI システムパーティション]] (別名 ESP) のマウントポイントを表します。}}&lt;br /&gt;
&lt;br /&gt;
== サポートされているファイルシステム ==&lt;br /&gt;
&lt;br /&gt;
GRUB には[https://www.gnu.org/software/grub/manual/grub/html_node/Features.html#Features 複数のファイルシステム] (特に重要なものとしては [[FAT32]]、[[ext4]]、[[Btrfs]]、[[XFS]]) に対する独自のサポートがあります。注意事項に関しては [[#サポートのないファイルシステム]] 章を見てください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ファイルシステムには、GRUB がまだ対応していない新しい機能が導入されることがあります。その場合、GRUB と互換性の無い機能を無効化しない限り、そのファイルシステムを {{ic|/boot}} に対して使用するべきではありません。この問題は、[[パーティショニング#/boot|/boot パーティション]]を別に分けて、[[FAT32]] などの広くサポートされているファイルシステムを使用することで、回避することができます。}}&lt;br /&gt;
&lt;br /&gt;
== UEFI システム ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 次のページを読んで理解しておくことをおすすめします: [[Unified Extensible Firmware Interface]]、[[パーティショニング#GUID Partition Table]]、[[Arch ブートプロセス#UEFI_2]]。&lt;br /&gt;
* UEFI を使うようにインストールする場合、Arch のインストールメディアを UEFI モードで起動することが重要です。さもないと、&#039;&#039;efibootmgr&#039;&#039; が GRUB の UEFI ブートエントリを追加できません。[[#デフォルト/フォールバックのブートパス|フォールバックブートパス]]へのインストールは NVRAM を使用しないため、BIOS モードでも可能です。&lt;br /&gt;
* UEFI を使用してディスクから起動するには EFI システムパーティションが必要です。[[EFI システムパーティション#既存のパーティションの確認]] に従って、すでに EFI システムパーティションが存在するかどうかを確認してください。存在しない場合は作成する必要があります。&lt;br /&gt;
* この記事全体で、{{ic|insmod}} を使って追加の GRUB2 モジュールを挿入可能であると仮定しています。[[#Shim-lock]] で議論されているように、これはセキュアブートが有効化されている UEFI システムには当てはまりません。セキュアブートシステム上で標準の GRUB EFI ファイル {{ic|grubx64.efi}} に含まれていない追加の GRUB モジュールを使用したい場合は、{{ic|grub-mkstandalone}} を使って追加の GRUB モジュールを含めた GRUB EFI {{ic|grubx64.efi}} を再生成しなければなりません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== インストール ===&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* UEFI の実装はマザーボード製造者ごとに異なっています。以下で説明されている手順は広い範囲の UEFI システムで動作するように意図されています。しかし、この方法を適用しているにも関わらず問題が発生する場合は、あなたのハードウェア固有のケースにおける詳細な情報を (可能であれば解決策も) 共有することが推奨されます。そのようなケースのために [[GRUB/EFI サンプル]] の記事が提供されています。&lt;br /&gt;
* このセクションでは、あなたが x64 (64 ビット) UEFI のシステムに対して GRUB をインストールしようとしていると仮定します。IA32 (32 ビット) UEFI の場合は (32 ビット CPU と混同しないでください)、適切な場所で {{ic|x86_64-efi}} を {{ic|i386-efi}} に置き換えてください。[[Unified Extensible Firmware Interface#UEFI ファームウェアのビット数を調べる]] の手順を見て、UEFI のビット数を調べてください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、{{Pkg|grub}} と {{Pkg|efibootmgr}} を[[インストール]]してください。&#039;&#039;GRUB&#039;&#039; はブートローダである一方、&#039;&#039;efibootmgr&#039;&#039; はブートエントリを NVRAM に書き込むために GRUB のインストールスクリプトによって使用されます。&lt;br /&gt;
&lt;br /&gt;
そして、以下の手順に従って GRUB をディスクにインストールしてください:&lt;br /&gt;
&lt;br /&gt;
# [[EFI システムパーティション#パーティションのマウント|EFI システムパーティションをマウント]]してください。そして、このセクションの後の部分で出てくる {{ic|&#039;&#039;esp&#039;&#039;}} という記述をそのマウントポイントに置き換えてください。&lt;br /&gt;
# ブートローダの識別子を選んでください、ここでは仮に {{ic|GRUB}} としましょう。{{ic|&#039;&#039;esp&#039;&#039;/EFI/}} にあなたが選んだものと同じ名前のディレクトリが作成され、そこに EFI バイナリが格納されます。その名前が UEFI ブートメニューの GRUB ブートエントリの名前になります。&lt;br /&gt;
# 以下のコマンドを実行して、GRUB EFI アプリケーション {{ic|grubx64.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/GRUB/}} に、モジュールを {{ic|/boot/grub/x86_64-efi/}} にインストールしてください。&lt;br /&gt;
::{{Note|&lt;br /&gt;
::* GRUB をブートローダとしてインストールするシステム内でパッケージをインストールし、{{ic|grub-install}} を実行してください。つまり、ライブインストール環境から起動している場合、{{ic|grub-install}} は (インストール先の) chroot 環境の中で実行する必要があるということです。何らかの理由で、インストールされたシステムの外で {{ic|grub-install}} を実行する必要がある場合、マウントした {{ic|/boot}} ディレクトリへのパスを {{ic|1=--boot-directory=}} オプションに渡してください。例: {{ic|1=--boot-directory=/mnt/boot}}&lt;br /&gt;
::* 一部のマザーボードは、空白を含む {{ic|bootloader-id}} を扱うことができません。}}&lt;br /&gt;
::{{bc|1=# grub-install --target=x86_64-efi --efi-directory=&#039;&#039;esp&#039;&#039; --bootloader-id=GRUB}}&lt;br /&gt;
&lt;br /&gt;
上記のインストール作業が完了した後、メインの GRUB ディレクトリが {{ic|/boot/grub/}} に作成されています。別の場所を指定する方法については [[GRUB/ヒントとテクニック#代替インストール方法]] を見てください。{{ic|grub-install}} は[[#ファームウェアブートマネージャーに GRUB エントリを作成する|ファームウェアのブートマネージャにもエントリを作成]]しようとすることに注意してください。その名前は上記の例では {{ic|GRUB}} となります。しかし、ブートエントリが埋まっていると、これは失敗します。この場合は [[efibootmgr]] を使って必要ないエントリを削除してください。&lt;br /&gt;
&lt;br /&gt;
設定を確定したあとに[[#メイン設定ファイルの生成|メインの設定ファイルを生成]]することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--removable}} オプションを使うと、GRUB は {{ic|&#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTX64.EFI}} にインストールされます ({{ic|i386-efi}} ターゲットの場合は {{ic|&#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTIA32.EFI}})。その結果、EFI 変数がリセットされた場合やドライブを他のコンピュータに移した場合でもそのドライブから起動することができるようになります。通常は BIOS を使用する方法と同じようにドライブを選択することで使うことができます。Windows とデュアルブートする場合、Windows は通常そこに EFI 実行ファイルを配置するので注意してください。とはいえ、そのファイルは Windows の UEFI ブートエントリを再生成するためだけに使用されます。[[Mac]] 上に GRUB をインストールする場合、このオプションを使用する必要があります。一部のデスクトップマザーボード (特に MSI のマザーボード) はここに保存されている EFI 実行ファイルしか見ないので、このオプションが必須になります。&lt;br /&gt;
UEFI アップデートを実行すると、既存の UEFI ブートエントリが削除されるかもしれません。なので、&amp;quot;removable&amp;quot; なブートエントリを有効化しておくと、それをフォールバックとして利用できます。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|--efi-directory}} と {{ic|--bootloader-id}} は GRUB UEFI 専用です。{{ic|--efi-directory}} は、非推奨となった {{ic|--root-directory}} を置き換えます。&lt;br /&gt;
* {{ic|grub-install}} コマンドに &#039;&#039;device_path&#039;&#039; オプション (例えば {{ic|/dev/sda}}) が無いことに気付いたかもしれません。実際、&#039;&#039;device_path&#039;&#039; は GRUB EFI インストールスクリプトによって無視されます。UEFI ブートローダーは MBR ブートコードもパーティションブートセクタも全く使用しないのです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
問題が発生した場合は [[#UEFI|UEFI のトラブルシューティング]] を見て下さい。加えて [[GRUB/ヒントとテクニック#UEFI の詳細情報]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートサポート ===&lt;br /&gt;
&lt;br /&gt;
GRUB は、CA 鍵か shim のいずれかを使用するセキュアブートを完全にサポートしています。しかし、インストールのコマンドは、どちらを使用するかによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* [[セキュアブート]]を不適切に設定すると、システムが起動不能になる可能性があります。セキュアブートを有効化した後に何らかの理由により起動できなくなった場合、ファームウェアでセキュアブートを無効化し、システムを再起動する必要があります。&lt;br /&gt;
* ブートローダで不必要なモジュールをロードすると、セキュリティリスクを発生させる可能性があります。これらのコマンドは、必要なときにだけ使用してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== CA 鍵 ====&lt;br /&gt;
&lt;br /&gt;
CA 鍵を使うには、インストールのコマンドは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 # grub-install --target=x86_64-efi --efi-directory=&#039;&#039;esp&#039;&#039; --bootloader-id=GRUB --modules=&amp;quot;tpm&amp;quot; --disable-shim-lock&lt;br /&gt;
&lt;br /&gt;
==== Shim-lock ====&lt;br /&gt;
&lt;br /&gt;
{{Note|このセクションに進む前に、[[セキュアブート#shim]] に書かれてある指示の通りにし、{{pkg|sbsigntools}} をセットアップして鍵を受け取る準備を整えておく必要があります。}}&lt;br /&gt;
&lt;br /&gt;
Shim-lock を使用する場合、GRUB をセキュアブートモードでブートさせるには、[[vmlinuz]] と [[initramfs]] のイメージが含まれているファイルシステムを読むために必要なモジュール全てが GRUB のバイナリに含まれていなければなりません。&lt;br /&gt;
&lt;br /&gt;
GRUB バージョン {{ic|2.06.r261.g2f4430cc0}} から、セキュアブートモードで {{ic|insmod}} を使ってモジュールをロードすることは許可されなくなりました (任意のコードをサイドロードできてしまう可能性があるからです)。GRUB モジュールが EFI バイナリ内に組み込まれていない場合、GRUB はそれらのモジュールをサイドロード/{{ic|insmod}} しようと試み、その結果、以下のようなメッセージにより GRUB の起動が失敗します:&lt;br /&gt;
&lt;br /&gt;
 error: prohibited by secure boot policy&lt;br /&gt;
&lt;br /&gt;
[https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/build-efi-images?h=debian/2.06-2ubuntu12 Ubuntu の公式ビルドスクリプト]によると、Ubuntu では以下の GRUB モジュールが署名済み GRUB EFI バイナリ {{ic|grubx64.efi}} に組み込まれています:&lt;br /&gt;
&lt;br /&gt;
* [https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/build-efi-images?h=debian/2.06-2ubuntu12#n87 &amp;quot;基本&amp;quot; モジュール]。CD や簡単にパーティショニングされたディスクからブートするために必要: {{ic|all_video}}、{{ic|boot}}、{{ic|btrfs}}、{{ic|cat}}、{{ic|chain}}、{{ic|configfile}}、{{ic|echo}}、{{ic|efifwsetup}}、{{ic|efinet}}、{{ic|ext2}}、{{ic|fat}}、{{ic|font}}、{{ic|gettext}}、{{ic|gfxmenu}}、{{ic|gfxterm}}、{{ic|gfxterm_background}}、{{ic|gzio}}、{{ic|halt}}、{{ic|help}}、{{ic|hfsplus}}、{{ic|iso9660}}、{{ic|jpeg}}、{{ic|keystatus}}、{{ic|loadenv}}、{{ic|loopback}}、{{ic|linux}}、{{ic|ls}}、{{ic|lsefi}}、{{ic|lsefimmap}}、{{ic|lsefisystab}}、{{ic|lssal}}、{{ic|memdisk}}、{{ic|minicmd}}、{{ic|normal}}、{{ic|ntfs}}、{{ic|part_apple}}、{{ic|part_msdos}}、{{ic|part_gpt}}、{{ic|password_pbkdf2}}、{{ic|png}}、{{ic|probe}}、{{ic|reboot}}、{{ic|regexp}}、{{ic|search}}、{{ic|search_fs_uuid}}、{{ic|search_fs_file}}、{{ic|search_label}}、{{ic|sleep}}、{{ic|smbios}}、{{ic|squash4}}、{{ic|test}}、{{ic|true}}、{{ic|video}}、{{ic|xfs}}、{{ic|zfs}}、{{ic|zfscrypt}}、{{ic|zfsinfo}}&lt;br /&gt;
* x84_64-efi アーキテクチャ用の [https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/build-efi-images?h=debian/2.06-2ubuntu12#n147 &amp;quot;プラットフォーム固有&amp;quot; のモジュール]。例えば:&lt;br /&gt;
** {{ic|play}}: ブート中に音を鳴らす&lt;br /&gt;
** {{ic|cpuid}}: ブート時に CPU の機能を確認する&lt;br /&gt;
** {{ic|tpm}}: Measured Boot / [[TPM|Trusted Platform Modules]] をサポートする&lt;br /&gt;
* [https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/build-efi-images?h=debian/2.06-2ubuntu12#n159 &amp;quot;高度な&amp;quot; モジュール]。以下が含まれます:&lt;br /&gt;
** {{ic|cryptodisk}}: [[dm-crypt|plain モードで暗号化された]]ディスクからブートする&lt;br /&gt;
** {{ic|gcry_&#039;&#039;アルゴリズム&#039;&#039;}}: 特定のハッシュアルゴリズムと暗号化アルゴリズムをサポートする&lt;br /&gt;
** {{ic|luks}}: [[LUKS]] で暗号化されたディスクからブートする&lt;br /&gt;
** {{ic|lvm}}: [[LVM]] 論理ボリュームディスクからブートする&lt;br /&gt;
** {{ic|mdraid09}}、{{ic|mdraid1x}}、{{ic|raid5rec}}、{{ic|raid6rec}}: [[RAID]] 仮想ディスクからブートする&lt;br /&gt;
&lt;br /&gt;
GRUB モジュールのリストはシェル変数の形にしなければなりません (ここでは {{ic|GRUB_MODULES}} と表記しています)。[https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/build-efi-images 最新の Ubuntu スクリプト]をベースとして使い、あなたのシステムでは不要なモジュールを取り除くという方法を取ることもできます。モジュールを減らすと、ブートプロセスが比較的速くなり、ESP のスペースをいくらか節約できます。&lt;br /&gt;
&lt;br /&gt;
また、セキュリティを高めるために、EFI バイナリに[https://github.com/rhboot/shim/blob/main/SBAT.md Secure Boot Advanced Targeting (SBAT)] ファイル/セクションを含める必要があります (GRUB が UEFI shim ローダから起動される場合)。SBAT ファイル/セクションには、GRUB バイナリに関するメタデータ (バージョン、メンテナ、開発者、上流の URL) が含まれており、特定の GRUB バージョンに脆弱性がある場合、shim がそのバージョンの GRUB のロードをブロックすることが容易になります [https://eclypsium.com/2020/07/29/theres-a-hole-in-the-boot/#additional][https://wiki.ubuntu.com/SecurityTeam/KnowledgeBase/GRUB2SecureBootBypass2021] (shim の [https://github.com/rhboot/shim/blob/main/SBAT.md UEFI shim bootloader secure boot life-cycle improvements] というドキュメントで説明されています)。&lt;br /&gt;
&lt;br /&gt;
SBAT セクションが {{ic|grubx64.efi}} に無いと、shim は {{ic|grubx64.efi}} の起動に失敗します。&lt;br /&gt;
&lt;br /&gt;
GRUB がインストールされている場合、シンプルな SBAT &#039;&#039;.csv&#039;&#039; ファイルが {{ic|/usr/share/grub/sbat.csv}} で提供されています。&lt;br /&gt;
&lt;br /&gt;
その {{ic|/usr/share/grub/sbat.csv}} ファイルと必要な {{ic|GRUB_MODULES}} を使って GRUB を再インストールし、GRUB バイナリを署名してください:&lt;br /&gt;
&lt;br /&gt;
 # grub-install --target=x86_64-efi --efi-directory=&#039;&#039;esp&#039;&#039; --modules=&amp;quot;${GRUB_MODULES}&amp;quot; --sbat /usr/share/grub/sbat.csv&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/GRUB/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/GRUB/grubx64.efi&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/GRUB/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
再起動し、&#039;&#039;MokManager&#039;&#039; で鍵を選択すれば、セキュアブートが機能するはずです。&lt;br /&gt;
&lt;br /&gt;
==== セキュアブートを使用する ====&lt;br /&gt;
&lt;br /&gt;
インストール後は、[[セキュアブート#セキュアブートを実現する]] を見て、セキュアブートを有効化する手順を確認してください。&lt;br /&gt;
&lt;br /&gt;
CA 鍵の方法を取っている場合、鍵の管理や登録、ファイルの署名は {{pkg|sbctl}} で自動化できます。詳細は [[セキュアブート#sbctl でより簡単に行う]] を見てください。&lt;br /&gt;
&lt;br /&gt;
== BIOS システム ==&lt;br /&gt;
&lt;br /&gt;
=== GUID Partition Table (GPT) 特有の手順 ===&lt;br /&gt;
&lt;br /&gt;
BIOS/[[GPT]] の構成では、[https://www.gnu.org/software/grub/manual/grub/html_node/BIOS-installation.html#BIOS-installation BIOS ブートパーティション]が必要です。GRUB は {{ic|core.img}} をこのパーティションに埋め込みます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* この方法を試す前に、すべてのシステムでこのパーティショニング方式がサポートされているわけではないということを心に留めておいてください。詳細は [[パーティショニング#GUID Partition Table]] を見てください。&lt;br /&gt;
* BIOS ブートパーティションは BIOS/GPT のセットアップでのみ GRUB が必要とします。BIOS/MBR セットアップでは、GRUB は MBR の後にある隙間を {{ic|core.img}} のために使用します。しかし、GPT では最初のパーティションの前に未使用の領域があることは保証されていません。&lt;br /&gt;
* [[UEFI]] システムでは、ブートセクタが組み込まれないので、BIOS ブートパーティションは必要ありません。しかし、UEFI システムでは依然として [[EFI システムパーティション]]が必要です。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ディスク上にパーティションタイプ GUID {{ic|21686148-6449-6E6F-744E-656564454649}} の、ファイルシステムの無い 1 メビバイト (&#039;&#039;fdisk&#039;&#039; や &#039;&#039;gdisk&#039;&#039; で {{ic|1=+1M}}) のパーティションを作成してください。&lt;br /&gt;
&lt;br /&gt;
* [[fdisk]] では、パーティションタイプ {{ic|BIOS boot}} を選択してください。&lt;br /&gt;
* [[gdisk]] では、パーティションタイプコード {{ic|ef02}} を選択してください。&lt;br /&gt;
* [[parted]] では、そのパーティションで {{ic|bios_grub}} フラグをセット/アクティブ化してください。&lt;br /&gt;
&lt;br /&gt;
このパーティションはどのような順番で配置しても良いですが、ディスクの先頭 2 TiB 以内になければなりません。このパーティションは GRUB のインストール前に作成する必要があります。パーティションの準備が完了したら、以下の指示に従ってブートローダーをインストールします。&lt;br /&gt;
&lt;br /&gt;
GPT のアライメント仕様から外れますが、最初のパーティションの前にあるスペースは BIOS ブートパーティションとしても使用できます。このパーティションは定期的にアクセスされるものではないのでパフォーマンスの問題は無視できますが、一部のディスクユーティリティは警告を発します。&#039;&#039;fdisk&#039;&#039; や &#039;&#039;gdisk&#039;&#039; では、セクター 34 から 2047 までの区間の新しいパーティションを作成して、先のパーティションタイプを設定してください。見える状態のパーティションが先頭から始まるようにするには、このパーティションを最後に追加することを検討してください。&lt;br /&gt;
&lt;br /&gt;
=== Master Boot Record (MBR) 特有の手順 ===&lt;br /&gt;
&lt;br /&gt;
通常、MBR でパーティションされた環境において [[MBR]] の後の隙間 (512 バイトの MBR 領域の後ろで最初のパーティションの前) は 31 KiB になっていて、このパーティションテーブルでは DOS 互換のシリンダーアライメントは問題になりません。しかしながら GRUB の {{ic|core.img}} 用に十分な領域を確保するために 1 から 2 MiB ほど MBR の後の領域をとることを推奨します ({{bug|24103}})。この領域を獲得したり他の 512 バイトでないセクターの問題を起こさないために ({{ic|core.img}} の埋め込みとは関係ありません) 1 MiB [[パーティショニング#パーティションアライメント|パーティションアライメント]]をサポートしているパーティションツールを使うのが得策です。&lt;br /&gt;
&lt;br /&gt;
=== インストール ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|grub}} パッケージを[[インストール]]してください ({{AUR|grub-legacy}} がインストールされている場合は置き換えられます。) 次に以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # grub-install --target=i386-pc &#039;&#039;/dev/sdX&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|i386-pc}} は実際のアーキテクチャに関わらず使用されます。{{ic|&#039;&#039;/dev/sdX&#039;&#039;}} は GRUB がインストールされる &#039;&#039;&#039;ディスク&#039;&#039;&#039; (&#039;&#039;&#039;パーティションではありません&#039;&#039;&#039;) です。例えば、{{ic|/dev/sda}}、{{ic|/dev/nvme0n1}}、{{ic|/dev/mmcblk0}} です。ブロックデバイスの命名方法については [[デバイスファイル#ブロックデバイスの名前]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
次に、[[#メイン設定ファイルの生成|メイン設定ファイルを生成]]する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot}} に [[LVM]] を使用している場合、GRUB を複数の物理ディスク上にインストールすることができます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|USB メモリなどに GRUB をインストールする他の方法については [[GRUB/ヒントとテクニック#代替インストール方法]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|grub-install}} コマンドの詳細については、{{man|8|grub-install}} および [https://www.gnu.org/software/grub/manual/grub/html_node/BIOS-installation.html#BIOS-installation GRUB Manual] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
インストールされたシステムでは、GRUB は起動の度に設定ファイル {{ic|/boot/grub/grub.cfg}} をロードします。ツールを使う場合は、[[#grub.cfg の生成]] を、手動で作成する場合は [[#grub.cfg のカスタマイズ]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== grub.cfg の生成 ===&lt;br /&gt;
&lt;br /&gt;
このセクションでは {{ic|/etc/default/grub}} 設定ファイルの編集についてだけ扱っています。他のオプションは [[GRUB/ヒントとテクニック]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|/etc/grub.d/}} 下のファイルや {{ic|/etc/default/grub}} に変更を加えた後は必ず[[#メイン設定ファイルの生成|メイン設定ファイルの再生成]]を行なって下さい。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|GRUB の新しいバージョンで設定ファイルの構文が変更された場合、ブートローダーをアップデート/再インストールしてください ([[#UEFI システム]] や [[#BIOS システム]] を見てください)。設定が一致しないと、システムが起動できなくなる可能性があります。例えば、新しい設定では既存の GRUB バイナリが認識しない関数が使用されているかもしれず、想定外の動作を引き起こす可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
==== メイン設定ファイルの生成 ====&lt;br /&gt;
&lt;br /&gt;
インストールした後は、メインの設定ファイル {{ic|/boot/grub/grub.cfg}} を生成する必要があります。生成プロセスは、{{ic|/etc/default/grub}} 内の様々なオプションや {{ic|/etc/grub.d/}} 下のスクリプトによって制御されます。{{ic|/etc/default/grub}} におけるオプションのリストと、それぞれのオプションの簡潔な説明は、GNU の[https://www.gnu.org/software/grub/manual/grub/html_node/Simple-configuration.html ドキュメント]を参照してください。&lt;br /&gt;
&lt;br /&gt;
追加の設定をしていない場合、設定ファイル自動生成スクリプトは、ブートさせるシステムのルートファイルシステムを判定し、その情報を設定ファイルに保存します。これを成功させるには、システムを起動させているか、またはシステムに chroot していることが重要です。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* デフォルトのファイルパスは {{ic|/boot/grub/grub.cfg}} です、{{ic|/boot/grub/i386-pc/grub.cfg}} ではありません。&lt;br /&gt;
* [[chroot]] や [[systemd-nspawn]] コンテナで &#039;&#039;grub-mkconfig&#039;&#039; を実行しようとした場合、次のようなエラーによりうまく行かないことがあります: {{ic|grub-probe: error: failed to get canonical path of &#039;&#039;/dev/sdaX&#039;&#039;}}。この場合、[https://bbs.archlinux.org/viewtopic.php?pid=1225067#p1225067 このフォーラムの投稿]で記述されているように [[arch-chroot]] を使ってみて下さい。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;grub-mkconfig&#039;&#039; ツールを使って {{ic|/boot/grub/grub.cfg}} を生成してください:&lt;br /&gt;
&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
デフォルトで、生成スクリプトは Arch Linux の[[カーネル]]のメニューエントリを自動的に設定に追加します。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* [[カーネル]]をインストール/アンインストールした後は、上記の &#039;&#039;grub-mkconfig&#039;&#039; コマンドを再度実行する必要があります。&lt;br /&gt;
* 複数の GRUB エントリを管理するためのヒントとして、例えば {{Pkg|linux}} と {{Pkg|linux-lts}} の両方を使用している場合、[[GRUB/ヒントとテクニック#複数のエントリ]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
他のオペレーティングシステムのエントリを自動的に追加する方法は [[#他の OS の検出]] を見てください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/grub.d/40_custom}} を編集して {{ic|/boot/grub/grub.cfg}} を再生成することで、追加のカスタムメニューエントリを追加することができます。または、{{ic|/boot/grub/custom.cfg}} を作成して、そこにカスタムのメニューエントリを追加することもできます。{{ic|/boot/grub/custom.cfg}} を編集した後に &#039;&#039;grub-mkconfig&#039;&#039; を再度実行する必要はありません。{{ic|/etc/grub.d/41_custom}} は必要な {{ic|source}} 文を設定ファイルに追加するからです。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/grub.d/40_custom}} は {{ic|/etc/grub.d/&#039;&#039;nn&#039;&#039;_custom}} を作成する際のテンプレートとして使うことができます。{{ic|&#039;&#039;nn&#039;&#039;}} の部分は優先順位で、スクリプトを実行する順番を決定します。スクリプトを実行する順番は GRUB ブートメニューエントリの配置を決定します。必要なスクリプトを確実に実行させるために、{{ic|&#039;&#039;nn&#039;&#039;}} は {{ic|06}} よりも大きくする必要があります。}}&lt;br /&gt;
&lt;br /&gt;
カスタムのメニューエントリの例は [[#ブートメニューエントリの例]] を見てください。&lt;br /&gt;
&lt;br /&gt;
==== 他の OS の検出 ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;grub-mkconfig&#039;&#039; で、インストールされている他のシステムを検索して自動的にメニューに追加するには、 {{Pkg|os-prober}} パッケージを [[インストール]] して、他のシステムが起動するパーティションを[[マウント]]してください。その後、&#039;&#039;grub-mkconfig&#039;&#039; を再実行します。もし、{{ic|Warning: os-prober will not be executed to detect other bootable partitions}} と出力されたら、{{ic|/etc/default/grub}} を編集して次の行を追加/アンコメントしてください:&lt;br /&gt;
&lt;br /&gt;
 GRUB_DISABLE_OS_PROBER=false&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 正確なマウントポイントは重要ではありません。&#039;&#039;os-prober&#039;&#039; は {{ic|mtab}} を読み込んで、起動可能なエントリを検索すべき場所を特定します。&lt;br /&gt;
* 他のオペレーティングシステムをエントリに含めるために、&#039;&#039;grub-mkconfig&#039;&#039; を実行するたびに対象のパーティションをマウントすることを忘れないでください。&lt;br /&gt;
* &#039;&#039;os-prober&#039;&#039; は、chroot 内で実行すると正しく動作しないかもしれません。そのような場合は、再起動してシステムに入り、再び試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|最後に選択したブートエントリを GRUB に記憶させたい場合もあるでしょう、[[GRUB/ヒントとテクニック#以前のエントリを思い出させる]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
===== Windows =====&lt;br /&gt;
&lt;br /&gt;
UEFI モードでインストールされた Windows の場合、Windows Boot Manager ({{ic|bootmgfw.efi}}) を含んでいる [[EFI システムパーティション]]がマウントされていることを確認してください。root として {{ic|os-prober}} を実行すると、Windows のエントリを検出・生成します。&lt;br /&gt;
&lt;br /&gt;
BIOS モードでインストールされた Windows の場合、Windows &#039;&#039;システムパーティション&#039;&#039; をマウントしてください (そのパーティションの[[永続的なブロックデバイスの命名#by-label|ファイルシステムラベル]]は {{ic|System Reserved}} ({{ic|システムで予約済み}}) か {{ic|SYSTEM}} であるはずです)。root として {{ic|os-prober}} を実行すると、Windows のエントリを検出・生成します。&lt;br /&gt;
&lt;br /&gt;
{{Note|BIOS モードでインストールされた Windows の場合:&lt;br /&gt;
* NTFS パーティションはデフォルトの Linux ドライバでマウントすると、必ずしも検出されないかもしれません。GRUB が検出しない場合、[[NTFS-3G]] をインストールして再マウントしてみてください。&lt;br /&gt;
{{Out of date| Windows 7 以降、{{ic|bootmgr}} は[[Wikipedia:System partition and boot partition#Microsoft definition|システムパーティション]]内にあり、このパーティションは暗号化されていません。}}&lt;br /&gt;
* 暗号化された Windows パーティションは、マウントする前に暗号化を解除する必要があるかもしれません。BitLocker では、[[cryptsetup]] や {{AUR|dislocker}} で実行できます。これで {{Pkg|os-prober}} が正しいエントリを追加できるはずです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 追加引数 ====&lt;br /&gt;
&lt;br /&gt;
カスタムの追加引数を Linux イメージに渡すために、{{ic|/etc/default/grub}} で {{ic|GRUB_CMDLINE_LINUX}} と {{ic|GRUB_CMDLINE_LINUX_DEFAULT}} 変数を設定することができます。これら2つは互いに追加され、標準のブートエントリを作成する際にカーネルに渡されます。&#039;&#039;recovery&#039;&#039; ブートエントリについては、{{ic|GRUB_CMDLINE_LINUX}} だけが生成時に使われます。&lt;br /&gt;
&lt;br /&gt;
両方を使う必要はありませんが、上手く使えば便利です。例えば、{{ic|1=GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=&#039;&#039;uuid-of-swap-partition&#039;&#039; quiet&amp;quot;}} ({{ic|&#039;&#039;uuid-of-swap-partition&#039;&#039;}} は [[ハイバネート]]後に復帰できるようにするためのスワップパーティションの [[UUID]])。この例の設定では、(ハイバネートからの) 復帰をせず、メニューエントリからの起動中にカーネルメッセージを非表示にする {{ic|quiet}} も無いリカバリブートエントリを生成します。しかし、他の (標準の) メニューエントリはこれらのオプションを持ちます。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;grub-mkconfig&#039;&#039; はルートファイルシステムの [[UUID]] を検出して、設定にそれを反映します。これを無効化するには、{{ic|1=GRUB_DISABLE_LINUX_UUID=true}} をアンコメントしてください。&lt;br /&gt;
&lt;br /&gt;
GRUB リカバリエントリを生成するには、{{ic|/etc/default/grub}} 内の {{ic|GRUB_DISABLE_RECOVERY}} が {{ic|true}} に設定されていない必要があります。&lt;br /&gt;
&lt;br /&gt;
詳細は [[カーネルパラメータ]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== トップレベルのメニューエントリを設定する ====&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;grub-mkconfig&#039;&#039; は、含まれているカーネルを {{ic|sort -V}} を使ってソートし、それらの中の最初のカーネルをトップレベルのエントリとして使用します。すなわち、例えば {{ic|/boot/vmlinuz-linux-lts}} は {{ic|/boot/vmlinuz-linux}} より前に来るので、{{Pkg|linux-lts}} と {{Pkg|linux}} の両方がインストールされている場合、LTS カーネルがトップレベルのメニューエントリとなります。これは、望ましくない場合があるでしょう。この挙動は、{{ic|/etc/default/grub}} 内の {{ic|1=GRUB_TOP_LEVEL=&#039;&#039;path_to_kernel&#039;&#039;&amp;quot;}} を指定することでオーバーライドすることができます。例えば、標準のカーネルをトップレベルのメニューエントリにするには、{{ic|1=GRUB_TOP_LEVEL=&amp;quot;/boot/vmlinuz-linux&amp;quot;}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== LVM ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|GRUB はシンプロビジョニングされた論理ボリュームをサポートしていません。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot}} や {{ic|/}} に [[LVM]] を使用している場合、{{ic|lvm}} モジュールをプリロードするようにしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/default/grub|2=&lt;br /&gt;
GRUB_PRELOAD_MODULES=&amp;quot;... lvm&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== RAID ====&lt;br /&gt;
&lt;br /&gt;
GRUB は [[RAID]] ボリュームの便利な管理手段を提供します。ボリュームをネイティブに管理できるようにするために、GRUB モジュール {{ic|mdraid09}} か {{ic|mdraid1x}} をロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/default/grub|2=&lt;br /&gt;
GRUB_PRELOAD_MODULES=&amp;quot;... mdraid09 mdraid1x&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
例えば、{{ic|/dev/md0}} は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 set root=(md/0)&lt;br /&gt;
&lt;br /&gt;
パーティショニングされた RAID ボリューム (例: {{ic|/dev/md0p1}}) は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 set root=(md/0,1)&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot}} パーティションに RAID1 を使用している場合 (あるいは、{{ic|/boot}} が RAID1 ルートパーティション上に存在する場合) に GRUB をインストールするには、BIOS システム上では、両方のドライブ上で &#039;&#039;grub-install&#039;&#039; を実行してください。例:&lt;br /&gt;
&lt;br /&gt;
 # grub-install --target=i386-pc --debug /dev/sda&lt;br /&gt;
 # grub-install --target=i386-pc --debug /dev/sdb&lt;br /&gt;
&lt;br /&gt;
ここでは、{{ic|/boot}} が存在する RAID1 アレイが、{{ic|/dev/sda}} と {{ic|/dev/sdb}} に存在するとしています。&lt;br /&gt;
&lt;br /&gt;
{{Note|GRUB は [[Btrfs]] RAID 0/1/10 からの起動をサポートしていますが、RAID 5/6 はサポートしていません。RAID 5/6 に対しては [[mdadm]] を使用することができます (mdadm は GRUB によってサポートされています)。&lt;br /&gt;
&lt;br /&gt;
==== 暗号化された /boot ====&lt;br /&gt;
&lt;br /&gt;
GRUB には暗号化された {{ic|/boot}} を起動するための特別なサポートがあります。これは、[[LUKS]] ブロックデバイスをアンロックして、GRUB の設定を読み込み、[[initramfs]] と [[カーネル]] をそのブロックデバイスからロードすることにより行われます。このオプションは[[dm-crypt/特記事項#暗号化されていない boot パーティションのセキュア化|暗号化されていないブートパーティション]]の問題を解決することを試みます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/boot}} を別のパーティションに保存する必要は&#039;&#039;&#039;ありません&#039;&#039;&#039;。システムのルート {{ic|/}} ディレクトリツリー下に保存することもできます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|GRUB 2.12rc1 の LUKS2 に対するサポートは限られています。詳細は [[#LUKS2]] セクションを見てください。}}&lt;br /&gt;
&lt;br /&gt;
この機能を有効化するには、{{ic|/boot}} が存在するパーティションを通常通り [[LUKS]] を使って暗号化してください。そして、以下のオプションを {{ic|/etc/default/grub}} に追加してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/default/grub|output=&lt;br /&gt;
GRUB_ENABLE_CRYPTODISK=y&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
このオプションは grub-install により使用され、grub の {{ic|core.img}} を生成します。&lt;br /&gt;
&lt;br /&gt;
このオプションを追加した後やパーティションを暗号化した後に [[#インストール|GRUB を(再)インストール]]することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
これだけだと、パスフレーズを2回入力させられることになります。1回目は起動の初期段階で GRUB が {{ic|/boot}} マウントポイントをアンロックするためのもので、2回目は iniramfs により実装されている root ファイルシステムそれ自体をアンロックするためのものです。[[dm-crypt/デバイスの暗号化#キーファイルを initramfs に埋め込む|キーファイル]]を使えば、これを防げます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* [[#メイン設定ファイルの生成|メインの設定ファイルを生成]]したいときは、{{ic|/boot}} がマウントされていることを確認してください。&lt;br /&gt;
* {{ic|/boot}} マウントポイントが関与するシステムアップデートを行うために、アップデートする前に、暗号化された {{ic|/boot}} がアンロックされていて、かつ、マウントされていることを確認してください。{{ic|/boot}} パーティションが別にある場合、[[crypttab]] を[[dm-crypt/デバイスの暗号化#キーファイルを initramfs に埋め込む|キーファイル]]と一緒に使うことでこれを自動化できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 特殊なキーマップを使用している場合、デフォルトの GRUB 環境にはそのようなキーマップが存在しません。このことは、[[LUKS]] ブロックデバイスをアンロックするためにどのようにしてパスフレーズを入力するかに関連しています。[[GRUB/ヒントとテクニック#初期ブートにおけるコアイメージの手動設定]] を参照してください。&lt;br /&gt;
* パスワードの入力画面が表示されない問題が発生した場合 (cryptouuid や cryptodisk、&amp;quot;device not found&amp;quot; に関係するエラー)、{{ic|1=--modules=&amp;quot;part_gpt part_msdos&amp;quot;}} を {{ic|grub-install}} コマンドの最後に付け加えて GRUB を再インストールしてみてください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=[https://bbs.archlinux.org/viewtopic.php?id=234607 pacman フック] を使用すれば、{{ic|/boot}} 内のファイルにアクセスする必要のあるアップグレード時に {{ic|/boot}} を自動マウントできます。}}&lt;br /&gt;
&lt;br /&gt;
===== LUKS2 =====&lt;br /&gt;
{{Out of date|1=Grub 2.14rc1はArgon2iとArgon2id PBKDFsをサポートします。  [https://cgit.git.savannah.gnu.org/cgit/grub.git/commit/?id=6052fc2cf684dffa507a9d81f9f8b4cbe170e6b6 アップストリームのコミットを参照。]|2=:en:Talk:GRUB#grub_2:2.14rc1_added_support_for_LUKS2_+_argon2_encryption.}}&lt;br /&gt;
&lt;br /&gt;
[[#インストール]] 章で説明されているように、{{ic|grub-install}} を使用して LUKS サポートありでブータブルな GRUB イメージを作成してください。ただし、いくつかの注意点があります:&lt;br /&gt;
&lt;br /&gt;
* LUKS2 の初期サポートが GRUB 2.06 で追加されましたが、いくつかの制限があります。これらの制限は、GRUB 2.12rc1 で部分的にのみ対処されています。[https://savannah.gnu.org/bugs/?55093 GRUB bug #55093] を参照してください。&lt;br /&gt;
* GRUB 2.12rc1 から、{{ic|grub-install}} で LUKS2 のロックを解除するためのコアイメージを作成できるようになりました。しかし、PBKDF2 のみがサポートされており、Argon2 はサポートされていません。&lt;br /&gt;
* Argon2id (&#039;&#039;cryptsetup&#039;&#039; デフォルト) と Argon2i PBKDF はサポートされていません ([https://savannah.gnu.org/bugs/?59409 GRUB bug #59409])。PBKDF2 のみのサポートです。&lt;br /&gt;
&lt;br /&gt;
:{{Tip|LUKS2 と Argon のサポートパッチが施された {{AUR|grub-improved-luks2-git}} を使用できます。このパッケージの Argon サポートには UEFI システムが必要であることに注意してください。[https://aur.archlinux.org/packages/grub-improved-luks2-git#comment-911119]}}&lt;br /&gt;
&lt;br /&gt;
{{Note|GRUB 2.12rc1 より前では、カスタムの GRUB 設定ファイルを使って {{ic|grub-mkimage}} コマンドで EFI バイナリを手動で作成する必要がありました。(例えば、{{ic|/boot/grub/grub-pre.cfg}} に {{ic|cryptomount}}、{{ic|insmod normal}}、そして {{ic|normal}} への呼び出しを追加する必要がありました。) しかし、これはもはや必要なくなり、{{ic|grub-install}} だけで十分です。ただし、2.06 からアップグレードした後に少なくとも一回は {{ic|grub-mkconfig -o /boot/grub/grub.cfg}} を実行する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
起動中に無効なパスフレーズを入力して GRUB のレスキューシェルに入った場合、{{ic|cryptomount -a}} を実行してすべての (できれば1つだけ) 暗号化されたパーティションをマウントしてみてください。または、{{ic|cryptomount -u $crypto_uuid}} を使用して特定のパーティションをマウントしてください。その後、通常通り {{ic|insmod normal}} と {{ic|normal}} で進めてください。&lt;br /&gt;
&lt;br /&gt;
正しいパスフレーズを入力したが {{ic|Invalid passphrase}} というエラーにより即座に戻される場合、正しい暗号化モジュールを指定していることを確認してください。{{ic|cryptsetup luksDump &#039;&#039;/dev/nvme0n1p2&#039;&#039;}} を使って、ハッシュ関数 (SHA-256, SHA-512) とインストールされているモジュール ({{ic|gcry_sha256}}, {{ic|gcry_sha512}}) が一致するか、PBKDF アルゴリズムが pbkdf2 であるかを確認してください。{{ic|cryptsetup luksConvertKey --hash &#039;&#039;sha256&#039;&#039; --pbkdf pbkdf2 &#039;&#039;/dev/nvme0n1p2&#039;&#039;}} を使えば、ハッシュと PBDKDF アルゴリズムを今あるキーに対して変更することができます。通常の状況では、パスフレーズが処理されるのに数秒掛かるはずです。&lt;br /&gt;
&lt;br /&gt;
=== grub.cfg のカスタマイズ ===&lt;br /&gt;
&lt;br /&gt;
このセクションでは &#039;&#039;grub-mkconfig&#039;&#039; に頼らずに {{ic|/boot/grub/grub.cfg}} 内にある GRUB のブートエントリーを手動で作成する方法について言及します。&lt;br /&gt;
&lt;br /&gt;
基本的な GRUB の設定ファイルでは以下のオプションが使用されます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|(hd&#039;&#039;X&#039;&#039;,&#039;&#039;Y&#039;&#039;)}} はディスク &#039;&#039;X&#039;&#039; 上に存在するパーティション &#039;&#039;Y&#039;&#039; を表します。パーティション番号は 1 から始まり、ディスク番号は 0 から始まります。&lt;br /&gt;
* {{ic|1=set default=&#039;&#039;N&#039;&#039;}} は、ユーザーが操作せずにタイムアウトした後に選択されるデフォルトのブートエントリを表します。&lt;br /&gt;
* {{ic|1=set timeout=&#039;&#039;M&#039;&#039;}} は、ユーザーの選択が無かった場合に &#039;&#039;M&#039;&#039; 秒の間待ってデフォルトのブートエントリが起動されることを表します。&lt;br /&gt;
* {{ic|&amp;lt;nowiki&amp;gt;menuentry &amp;quot;title&amp;quot; {entry options}&amp;lt;/nowiki&amp;gt;}} は {{ic|title}} というタイトルのブートエントリを表します。&lt;br /&gt;
* {{ic|1=set root=(hd&#039;&#039;X&#039;&#039;,&#039;&#039;Y&#039;&#039;)}} はカーネルと GRUB モジュールが格納されているブートパーティションを表します。(boot は分離されたパーティションである必要はなく、単に &amp;quot;root&amp;quot; パーティション ({{ic|/}}) 下にあるディレクトリを指定しても構いません)&lt;br /&gt;
&lt;br /&gt;
==== LoaderDevicePartUUID ====&lt;br /&gt;
&lt;br /&gt;
{{man|8|systemd-gpt-auto-generator}} が [[systemd#GPT パーティションの自動マウント|GPT パーティションの自動マウント]]をするために必要な {{ic|LoaderDevicePartUUID}} UEFI 変数を GRUB で設定するには、{{ic|grub.cfg}} で {{ic|bli}} モジュールをロードしてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
if [ &amp;quot;$grub_platform&amp;quot; = &amp;quot;efi&amp;quot; ]; then&lt;br /&gt;
  insmod bli&lt;br /&gt;
fi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== ブートメニューエントリの例 ====&lt;br /&gt;
&lt;br /&gt;
{{Tip|以下のブートエントリは &#039;&#039;grub-mkconfig&#039;&#039; によって生成された {{ic|/boot/grub/grub.cfg}} でも使用可能です。以下を {{ic|/etc/grub.d/40_custom}} に追加して[[#メイン設定ファイルの生成|メインの設定ファイルを再生成]]するか、あるいは以下を直接 {{ic|/boot/grub/custom.cfg}} に追加してください。}}&lt;br /&gt;
&lt;br /&gt;
複数の GRUB エントリーを管理するヒントとして、例えば {{Pkg|linux}} と {{Pkg|linux-lts}} カーネルを同時使用している場合は [[GRUB/ヒントとテクニック#複数のエントリ]] を見てください。&lt;br /&gt;
&lt;br /&gt;
[[Archiso]] と [https://archboot.com Archboot] のブートメニューエントリについては [[マルチブート USB ドライブ#ブートエントリ]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== GRUB コマンド =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;Shutdown&amp;quot; メニューエントリ ======&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
menuentry &amp;quot;System shutdown&amp;quot; {&lt;br /&gt;
	echo &amp;quot;System shutting down...&amp;quot;&lt;br /&gt;
	halt&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;Restart&amp;quot; メニューエントリ ======&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
menuentry &amp;quot;System restart&amp;quot; {&lt;br /&gt;
	echo &amp;quot;System rebooting...&amp;quot;&lt;br /&gt;
	reboot&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;UEFI Firmware Settings&amp;quot; メニューエントリ ======&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
if [ ${grub_platform} == &amp;quot;efi&amp;quot; ]; then&lt;br /&gt;
	menuentry &#039;UEFI Firmware Settings&#039; --id &#039;uefi-firmware&#039; {&lt;br /&gt;
		fwsetup&lt;br /&gt;
	}&lt;br /&gt;
fi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリ =====&lt;br /&gt;
&lt;br /&gt;
UEFI モードで起動している場合、GRUB は他の EFI バイナリをチェインロードできます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=GRUB が UEFI モードで起動している時にだけメニューエントリを表示するには、メニューエントリを {{ic|if}} 文で囲ってください:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
if [ ${grub_platform} == &amp;quot;efi&amp;quot; ]; then&lt;br /&gt;
	&#039;&#039;UEFI のときだけ表示するメニューエントリをここへ&#039;&#039;&lt;br /&gt;
fi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====== UEFI シェル ======&lt;br /&gt;
&lt;br /&gt;
[[EFI システムパーティション]]直下に [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]] を置いてメニューエントリに追加すれば、UEFI シェルを起動できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
menuentry &amp;quot;UEFI Shell&amp;quot; {&lt;br /&gt;
	insmod fat&lt;br /&gt;
	insmod chain&lt;br /&gt;
	search --no-floppy --set=root --file /shellx64.efi&lt;br /&gt;
	chainloader /shellx64.efi&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====== gdisk ======&lt;br /&gt;
&lt;br /&gt;
[[gdisk#gdisk EFI アプリケーション|gdisk EFI アプリケーション]]をダウンロードして {{ic|gdisk_x64.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/tools/}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
menuentry &amp;quot;gdisk&amp;quot; {&lt;br /&gt;
	insmod fat&lt;br /&gt;
	insmod chain&lt;br /&gt;
	search --no-floppy --set=root --file /EFI/tools/gdisk_x64.efi&lt;br /&gt;
	chainloader /EFI/tools/gdisk_x64.efi&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====== ユニファイドカーネルイメージをチェインロード ======&lt;br /&gt;
&lt;br /&gt;
[[セキュアブート]]に従って生成したか他の方法によって生成した [[Unified カーネルイメージ]]を持っているならば、それをブートメニューに追加できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
menuentry &amp;quot;Arch Linux&amp;quot; {&lt;br /&gt;
	insmod fat&lt;br /&gt;
	insmod chain&lt;br /&gt;
	search --no-floppy --set=root --fs-uuid &#039;&#039;FILESYSTEM_UUID&#039;&#039;&lt;br /&gt;
	chainloader /EFI/Linux/arch-linux.efi&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== デュアルブート =====&lt;br /&gt;
&lt;br /&gt;
====== GNU/Linux ======&lt;br /&gt;
&lt;br /&gt;
もう一つのディストリビューションが {{ic|sda2}} パーティションにあると仮定します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
menuentry &amp;quot;Other Linux&amp;quot; {&lt;br /&gt;
	set root=(hd0,2)&lt;br /&gt;
	linux /boot/vmlinuz (必要であれば追加のオプションをここへ)&lt;br /&gt;
	initrd /boot/initrd.img (カーネルが必要とする/使用するイメージはここへ)&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
代わりに UUID やファイルシステムのラベルで GRUB に正しいパーティションを探させるには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
menuentry &amp;quot;Other Linux&amp;quot; {&lt;br /&gt;
        # UUID が 763A-9CB6 だとすると&lt;br /&gt;
	search --no-floppy --set=root --fs-uuid 763A-9CB6&lt;br /&gt;
&lt;br /&gt;
        # OTHER_LINUX というラベルで探す (パーティションラベルが曖昧でないことを確認してください)&lt;br /&gt;
        #search --no-floppy --set=root --label OTHER_LINUX&lt;br /&gt;
&lt;br /&gt;
	linux /boot/vmlinuz (必要であれば追加のオプションをここへ。例えば、root=UUID=763A-9CB6)&lt;br /&gt;
	initrd /boot/initrd.img (カーネルが必要とする/使用するイメージはここへ)&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
もう一つのディストリビューションが、インストール済みの GRUB と {{ic|grub.cfg}}、カーネル、initramfs のある有効な {{ic|/boot}} フォルダーをすでに持っているならば、GRUB にその {{ic|grub.cfg}} ファイルを起動中にその場で読み込ませることができます。例えば、{{ic|hd0}} と4番目の GPT パーティションの場合:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
menuentry &amp;quot;configfile hd0,gpt4&amp;quot;  {&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        insmod ext2&lt;br /&gt;
        set root=&#039;hd0,gpt4&#039;&lt;br /&gt;
        configfile /boot/grub/grub.cfg&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
このエントリを選ぶと GRUB は他のボリュームからその {{ic|grub.cfg}} を読み込み、メニューを表示させます。{{ic|configfile}} ファイル内のコマンドによって環境変数が変更されても、{{ic|configfile}} から返ると環境変数の変更はすべて破棄されます。始めの GRUB メニューに戻る場合は {{ic|Esc}} を押してください。&lt;br /&gt;
&lt;br /&gt;
====== UEFI/GPT モードでインストールされた Windows ======&lt;br /&gt;
&lt;br /&gt;
このモードではメニューエントリが選択されると Windows ブートローダーの場所を発見し、GRUB のあとにブートローダーをチェインロードします。ここでするべきことは主に Windows の [[EFI システムパーティション]]を見つけて、そのパーティションから Windows のブートローダーを実行することです。&lt;br /&gt;
&lt;br /&gt;
{{Note|このメニューエントリは、UEFI ブートモードで実行中であり、かつ Windows のビット数が UEFI のビット数と一致する場合にのみ機能します。BIOS モードでインストールされた GRUB では機能しません。さらなる情報については [[Windows と Arch のデュアルブート#Windows の UEFI と BIOS の制限]]と [[Windows と Arch のデュアルブート#ブートローダーの UEFI と BIOS の制限]] をご覧ください。}}&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
if [ &amp;quot;${grub_platform}&amp;quot; == &amp;quot;efi&amp;quot; ]; then&lt;br /&gt;
	menuentry &amp;quot;Microsoft Windows Vista/7/8/8.1 UEFI/GPT&amp;quot; {&lt;br /&gt;
		insmod part_gpt&lt;br /&gt;
		insmod fat&lt;br /&gt;
		insmod chain&lt;br /&gt;
		search --no-floppy --fs-uuid --set=root $hints_string $fs_uuid&lt;br /&gt;
		chainloader /EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
	}&lt;br /&gt;
fi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|$hints_string}} と {{ic|$fs_uuid}} は以下の2つのコマンドで得られます。&lt;br /&gt;
&lt;br /&gt;
{{ic|$fs_uuid}} コマンドは EFI システムパーティションの UUID を割り出します。&lt;br /&gt;
&lt;br /&gt;
{{hc|1=# grub-probe --target=fs_uuid &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi|2=&lt;br /&gt;
1ce5-7f28&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
代わりに、{{ic|lsblk --fs}} を実行して、EFI システムパーティションの UUID をそこから読み込むこともできます。&lt;br /&gt;
&lt;br /&gt;
{{ic|$hints_string}} コマンドは EFI システムパーティションの場所を割り出します。以下の例ではハードドライブ0にあります:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=# grub-probe --target=hints_string &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi|2=&lt;br /&gt;
 --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以上の2つのコマンドでは Windows が使用する ESP が {{ic|&#039;&#039;esp&#039;&#039;}} にマウントされていると仮定しています。Windows である以上、Windows の EFI ファイルへのパスが異なる場合があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
====== BIOS/MBR モードでインストールされた Windows ======&lt;br /&gt;
&lt;br /&gt;
{{Note|GRUB は {{ic|bootmgr}} ディレクトリの直接ブートをサポートしています。Windows を BIOS/MBR で起動するためにパーティションブートセクターを [https://www.gnu.org/software/grub/manual/grub.html#Chain_002dloading チェインロード]する必要はもはやありません。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{ic|/bootmgr}} が存在する場所は &#039;&#039;&#039;システムパーティション&#039;&#039;&#039; であり、&amp;quot;本当&amp;quot;の Windows パーティション (通常、{{ic|C:}}) ではありません。システムパーティションの[[永続的なブロックデバイスの命名#by-label|ファイルシステムラベル]]は {{ic|System Reserved}} ({{ic|システムで予約済み}}) か {{ic|SYSTEM}} であり、サイズは約100~549 MiB 程度です。さらなる情報については [[Wikipedia:System partition and boot partition]] をご覧ください。}}&lt;br /&gt;
&lt;br /&gt;
このセクションを通して Windows のパーティションは {{ic|/dev/sda1}} にあると仮定します。パーティションが異なる場合は {{ic|hd0,msdos1}} という記述をすべて変更してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のメニューエントリは BIOS ブートモードでのみ機能します。UEFI モードでインストールされた GRUB では機能しません。[[Windows と Arch のデュアルブート#Windows の UEFI と BIOS の制限]] と [[Windows と Arch のデュアルブート#ブートローダーの UEFI と BIOS の制限]] をご覧ください。}}&lt;br /&gt;
&lt;br /&gt;
両方の例で {{ic|&#039;&#039;XXXX-XXXX&#039;&#039;}} はファイルシステムの UUID を表しています。UUID は {{ic|lsblk --fs}} コマンドを使って得られます。実際の UUID に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
Windows Vista/7/8/8.1/10 では:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
if [ &amp;quot;${grub_platform}&amp;quot; == &amp;quot;pc&amp;quot; ]; then&lt;br /&gt;
	menuentry &amp;quot;Microsoft Windows Vista/7/8/8.1/10 BIOS/MBR&amp;quot; {&lt;br /&gt;
		insmod part_msdos&lt;br /&gt;
		insmod ntfs&lt;br /&gt;
		insmod ntldr&lt;br /&gt;
		search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 &#039;&#039;XXXX-XXXX&#039;&#039;&lt;br /&gt;
		ntldr /bootmgr&lt;br /&gt;
	}&lt;br /&gt;
fi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Windows XP では:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
if [ &amp;quot;${grub_platform}&amp;quot; == &amp;quot;pc&amp;quot; ]; then&lt;br /&gt;
	menuentry &amp;quot;Microsoft Windows XP&amp;quot; {&lt;br /&gt;
		insmod part_msdos&lt;br /&gt;
		insmod ntfs&lt;br /&gt;
		insmod ntldr&lt;br /&gt;
		search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 &#039;&#039;XXXX-XXXX&#039;&#039;&lt;br /&gt;
		ntldr /ntldr&lt;br /&gt;
	}&lt;br /&gt;
fi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|GRUB をインストールすると Windows 8 が汚染される場合があります。この場合、{{ic|\boot\bcd}} (エラーコード {{ic|0xc000000f}})のエラーにより Windows が起動できなくなります。これを直すには Windows 回復コンソール(インストールディスク上にある {{ic|cmd.exe}})を開いて、以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 X:\&amp;gt; bootrec.exe /fixboot&lt;br /&gt;
 X:\&amp;gt; bootrec.exe /RebuildBcd&lt;br /&gt;
&lt;br /&gt;
{{ic|bootrec.exe /Fixmbr}} を&#039;&#039;&#039;実行しない&#039;&#039;&#039;でください。GRUB が吹き飛びます。&lt;br /&gt;
あるいは、トラブルシューティングメニューにあるスタートアップ修復機能を使用できます。これは GRUB を吹き飛ばしませんし、ほとんどのエラーを修復します。&lt;br /&gt;
また、対象のハードドライブとブート可能ドライブの両方&#039;&#039;&#039;だけ&#039;&#039;&#039;を接続しておくほうが良いでしょう。通常、他のデバイスが接続されていると Windows はブート情報の修復に失敗します。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== ラベルを使う =====&lt;br /&gt;
&lt;br /&gt;
{{ic|search}} コマンドに対して {{ic|--label}} オプションを使えば、ファイルシステムに付けられた人間が読みやすい文字列であるラベルを使うことができます。まずはじめに、[[永続的なブロックデバイスの命名#by-label|ファイルシステムにラベルがあることを確認]]してください。&lt;br /&gt;
&lt;br /&gt;
そして、ラベルを使ってエントリを追加してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 menuentry &amp;quot;Arch Linux, session texte&amp;quot; {&lt;br /&gt;
   search --label --set=root archroot&lt;br /&gt;
   linux /boot/vmlinuz-linux root=/dev/disk/by-label/archroot ro&lt;br /&gt;
   initrd /boot/initramfs-linux.img&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== コマンドシェルを使う ==&lt;br /&gt;
&lt;br /&gt;
GRUB のモジュールを全て保存するには MBR は小さすぎるので、メニューと基本的なコマンドだけが MBR に入っています。GRUB の機能のほとんどは {{ic|/boot/grub}} 内のモジュールとして存在し、必要に応じて挿入されます。エラー状態になると (例: パーティションレイアウトが変更された場合)、GRUB が起動に失敗する場合があります。このとき、コマンドシェルが表示されます。&lt;br /&gt;
&lt;br /&gt;
GRUB は複数のシェル/プロンプトを提供しています。メニューの読込に問題があってもブートローダがディスクを見つけられるときは、おそらく &amp;quot;normal&amp;quot; シェルに落とされるでしょう:&lt;br /&gt;
&lt;br /&gt;
 grub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
さらに深刻な問題 (例: GRUB が必要なファイルを見つけられないなど) があるときは、代わりに &amp;quot;rescue&amp;quot; シェルに落とされるでしょう:&lt;br /&gt;
&lt;br /&gt;
 grub rescue&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rescue シェルは通常のシェルの制限されたサブセットで、使える機能が非常に少なくなっています。rescue シェルが出てきた時は、まず &amp;quot;normal&amp;quot; モジュールの挿入を試して、&amp;quot;normal&amp;quot; シェルを起動してみて下さい:&lt;br /&gt;
&lt;br /&gt;
 grub rescue&amp;gt; set prefix=(hdX,Y)/boot/grub&lt;br /&gt;
 grub rescue&amp;gt; insmod (hdX,Y)/boot/grub/i386-pc/normal.mod&lt;br /&gt;
 rescue:grub&amp;gt; normal&lt;br /&gt;
&lt;br /&gt;
=== ページャのサポート ===&lt;br /&gt;
&lt;br /&gt;
GRUB はページャをサポートしており長い出力をするコマンド ({{ic|help}} コマンドなど) を読むことができます。これは通常のシェルモードでしか動作せずレスキューモードでは使えません。ページャを有効にするには、GRUB コマンドシェルで次を入力して下さい:&lt;br /&gt;
&lt;br /&gt;
 sh:grub&amp;gt; set pager=1&lt;br /&gt;
&lt;br /&gt;
=== コマンドシェル環境を使ってオペレーティングシステムを起動する ===&lt;br /&gt;
&lt;br /&gt;
 grub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GRUB のコマンドシェル環境を使ってオペレーティングシステムを起動することが可能です。&lt;br /&gt;
通常は&#039;&#039;&#039;チェインロード&#039;&#039;&#039;を使ってドライブやパーティションから Windows / Linux を起動するということが考えられます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;チェインロード&#039;&#039;は現在のブートローダから別のブートローダをロードすることを意味します。&lt;br /&gt;
&lt;br /&gt;
他のブートローダーは、パーティショニングされたディスク (MBR) の先頭や、パーティションレスディスク (VBR) のパーティションの先頭に組み込んだり、あるいは UEFI の場合は EFI バイナリとして組み込むことができます。&lt;br /&gt;
&lt;br /&gt;
==== パーティションの VBR をチェインロード ====&lt;br /&gt;
&lt;br /&gt;
 set root=(hdX,Y)&lt;br /&gt;
 chainloader +1&lt;br /&gt;
 boot&lt;br /&gt;
&lt;br /&gt;
X=0,1,2...&lt;br /&gt;
Y=1,2,3...&lt;br /&gt;
&lt;br /&gt;
例えば最初のハードディスクの最初のパーティションに保存された Windows をチェインロードするには:&lt;br /&gt;
&lt;br /&gt;
 set root=(hd0,1)&lt;br /&gt;
 chainloader +1&lt;br /&gt;
 boot&lt;br /&gt;
&lt;br /&gt;
同じようにパーティションにインストールされた GRUB をチェインロードすることもできます。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの MBR やパーティションレスディスクの VBR をチェインロード ====&lt;br /&gt;
&lt;br /&gt;
 set root=hdX&lt;br /&gt;
 chainloader +1&lt;br /&gt;
 boot&lt;br /&gt;
&lt;br /&gt;
==== UEFI モードでインストールされた Windows/Linux のチェインロード ====&lt;br /&gt;
&lt;br /&gt;
 insmod fat&lt;br /&gt;
 set root=(hd0,gpt4)&lt;br /&gt;
 chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
 boot&lt;br /&gt;
&lt;br /&gt;
{{ic|insmod fat}} は、EFI システムパーティション上の Windows ブートローダーにアクセするために、FAT ファイルシステムモジュールをロードするために使用されます。&lt;br /&gt;
{{ic|(hd0,gpt4)}} (すなわち {{ic|/dev/sda4}}) は、この例における EFI システムパーティションです。&lt;br /&gt;
{{ic|chainloader}} 行のエントリは、チェインロードすべき &#039;&#039;.efi&#039;&#039; ファイルへのパスを指定しています。&lt;br /&gt;
&lt;br /&gt;
==== 通常のロード ====&lt;br /&gt;
&lt;br /&gt;
[[#rescue コンソールを使う]] の例を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== rescue コンソールを使う ===&lt;br /&gt;
&lt;br /&gt;
まず [[#コマンドシェルを使う]] を見て下さい。標準シェルを有効にできない場合、ライブ CD や他のレスキューディスクを使って起動し、設定のエラーを直して GRUB を再インストールという方法があります。ただし、そのようなブートディスクはいつも使えるというわけではありません (もしくは必要ありません); レスキューコンソールは驚くほど堅牢です。&lt;br /&gt;
&lt;br /&gt;
GRUB rescue で利用できるコマンドには {{ic|insmod}}、{{ic|ls}}、{{ic|set}}、{{ic|unset}} があります。この例では {{ic|set}} と {{ic|insmod}} を使います。{{ic|set}} は変数を変更し {{ic|insmod}} は新しいモジュールを挿入して機能を追加します。&lt;br /&gt;
&lt;br /&gt;
始める前に、ユーザーは自分の {{ic|/boot}} パーティションの位置を知っていなければなりません (分割パーティションなのか、root 下のサブディレクトリなのか):&lt;br /&gt;
&lt;br /&gt;
 grub rescue&amp;gt; set prefix=(hd&#039;&#039;X&#039;&#039;,&#039;&#039;Y&#039;&#039;)/boot/grub&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;X&#039;&#039;}} は物理ドライブ番号、{{ic|&#039;&#039;Y&#039;&#039;}} はパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|boot パーティションを分割している場合、パスから {{ic|/boot}} を省いて下さい (つまり、{{ic|1=set prefix=(hd&#039;&#039;X&#039;&#039;,&#039;&#039;Y&#039;&#039;)/grub}} と入力する)。}}&lt;br /&gt;
&lt;br /&gt;
コンソールの機能を拡張するために、{{ic|linux}} モジュールを挿入します:&lt;br /&gt;
&lt;br /&gt;
 grub rescue&amp;gt; insmod i386-pc/linux.mod&lt;br /&gt;
&lt;br /&gt;
もしくは、単純に:&lt;br /&gt;
&lt;br /&gt;
 grub rescue&amp;gt; insmod linux&lt;br /&gt;
&lt;br /&gt;
これで、より親しみのあるであろう {{ic|linux}} と {{ic|initrd}} のコマンドが使えます。&lt;br /&gt;
&lt;br /&gt;
例えば、Arch Linux を起動する場合:&lt;br /&gt;
&lt;br /&gt;
 set root=(hd0,5)&lt;br /&gt;
 linux /boot/vmlinuz-linux root=/dev/sda5&lt;br /&gt;
 initrd /boot/initramfs-linux.img&lt;br /&gt;
 boot&lt;br /&gt;
&lt;br /&gt;
boot パーティションを分割している (例えば、UEFI を使用している場合など) なら、行を適宜変更する必要があります:&lt;br /&gt;
&lt;br /&gt;
{{Note|boot は別のパーティションであり、ルートパーティションの一部ではないので、上の prefix 変数と同じような形式で boot パーティションを手動で指定する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
 set root=(hd0,5)&lt;br /&gt;
 linux (hd&#039;&#039;X&#039;&#039;,&#039;&#039;Y&#039;&#039;)/vmlinuz-linux root=/dev/sda6&lt;br /&gt;
 initrd (hd&#039;&#039;X&#039;&#039;,&#039;&#039;Y&#039;&#039;)/initramfs-linux.img&lt;br /&gt;
 boot&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|linux}} コマンドの実行中に {{ic|error: premature end of file /YOUR_KERNEL_NAME}} と表示される場合は、代わりに {{ic|linux16}} を使ってみて下さい。}}&lt;br /&gt;
&lt;br /&gt;
Arch Linux 環境のブートに成功したら、必要に応じて {{ic|grub.cfg}} を修正し GRUB を再インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
GRUB を再インストールして問題を完全に修正するには、必要応じて {{ic|/dev/sda}} を変更してください。詳しくは [[#インストール]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
== GRUB を消去 ==&lt;br /&gt;
&lt;br /&gt;
=== UEFI システム ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;grub&#039;&#039; を削除する前に、他のブートローダがインストールされていて、GRUB の後を引き継ぐように設定されていることを確認してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ efibootmgr|&lt;br /&gt;
BootOrder: 0003,0001,0000,0002&lt;br /&gt;
Boot0000* Windows Boot Manager  HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)&lt;br /&gt;
Boot0001* GRUB  HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\GRUB\grubx64.efi)&lt;br /&gt;
Boot0002* Linux-Firmware-Updater        HD(2,GPT,5dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\arch\fwupdx64.efi)&lt;br /&gt;
Boot0003* Linux Boot Manager    HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\systemd\systemd-bootx64.efi)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BootOrder}} で &#039;&#039;grub&#039;&#039; が最初のエントリになっている場合、[[systemd-boot]] などの他のブートローダをインストールして最初のエントリにしてください。その後、&#039;&#039;bootnum&#039;&#039; を使って &#039;&#039;grub&#039;&#039; を削除することができます。&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --delete-bootnum -b 1&lt;br /&gt;
&lt;br /&gt;
また、{{ic|&#039;&#039;esp&#039;&#039;/EFI/grub}} と {{ic|/boot/grub}} ディレクトリも削除してください。&lt;br /&gt;
&lt;br /&gt;
=== BIOS システム ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;grub&#039;&#039; を他の BIOS ブートローダに置き換えるには、単に新しいブートローダをインストールしてください (そうすることで、[[パーティショニング#Master Boot Record (bootstrap code)|MBR ブートコード]]が上書きされます)。&lt;br /&gt;
&lt;br /&gt;
{{ic|grub-install}} は {{ic|/boot/grub}} ディレクトリを作成するので、これは手動で削除する必要があります。しかし、&#039;&#039;grub&#039;&#039; をまたインストールするかもしれない場合は、このディレクトリを残しておいたほうが良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
UEFI/GPT に移行した後は、[[dd#ブートローダーの削除|dd を使って MBR ブートコードを削除する]]ことができます。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== サポートのないファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
GRUB が root のファイルシステムをサポートしていない場合、代替の {{ic|/boot}} パーティションをサポートのあるファイルシステムで作成する必要があります。​開発バージョンの GRUB である {{aur|grub-git}} が該当するファイルシステムをネイティブサポートしている場合があります。&lt;br /&gt;
&lt;br /&gt;
サポートされないファイルシステムで GRUB を使用した場合、ドライブの [[UUID]] を抽出できないため、GRUB は古典的で非永続的な {{ic|/dev/&#039;&#039;sdXx&#039;&#039;}} 名を使います。この場合、{{ic|/boot/grub/grub.cfg}} を手動で編集し、{{ic|1=root=/dev/&#039;&#039;sdXx&#039;&#039;}} を {{ic|1=root=UUID=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039;}} のように置き換える必要があるかもしれません。{{ic|blkid}} コマンドを使えばデバイスの UUID を得られます。[[永続的なブロックデバイスの命名]] を見てください。&lt;br /&gt;
&lt;br /&gt;
GRUB はバージョン 2.0.4 より [[F2FS]] をサポートしていますが、{{ic|extra_attr}} フラグを有効にして作成された F2FS パーティションからブートファイルを正しく読み込むことができません。&lt;br /&gt;
&lt;br /&gt;
=== デバッグメッセージを有効にする ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この変更は[[#メイン設定ファイルの生成|メインの設定ファイルを生成]]すると上書きされます。}}&lt;br /&gt;
&lt;br /&gt;
以下を {{ic|grub.cfg}} に追加してください:&lt;br /&gt;
&lt;br /&gt;
 set pager=1&lt;br /&gt;
 set debug=all&lt;br /&gt;
&lt;br /&gt;
=== msdos-style エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
 grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding will not be possible!&lt;br /&gt;
 grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.&lt;br /&gt;
             However, blocklists are UNRELIABLE and its use is discouraged.&lt;br /&gt;
 grub-setup: error: If you really want blocklists, use --force.&lt;br /&gt;
&lt;br /&gt;
このエラーは VMware コンテナに GRUB をインストールしようとすると起こることがあります。詳しくは [https://bbs.archlinux.org/viewtopic.php?pid=581760#p581760 ここ] を読んで下さい。最初のパーティションが MBR (ブロック 63) のすぐ後ろから始まっていて、最初のパーティションの前に通常の 1 MiB のスペース (2048 ブロック) がない場合に起こります。[[#Master Boot Record (MBR) 特有の手順]] を読んで下さい。&lt;br /&gt;
&lt;br /&gt;
=== UEFI ===&lt;br /&gt;
&lt;br /&gt;
==== よくあるインストール時のエラー ====&lt;br /&gt;
&lt;br /&gt;
* 一部の UEFI デバイスで起こりうるエラーは、{{ic|Could not prepare Boot variable: Read-only file system}} です。{{ic|/sys/firmware/efi/efivars}} を読み書き可能な状態で再マウントする必要があります。{{bc|# mount -o remount,rw,nosuid,nodev,noexec --types efivarfs efivarfs /sys/firmware/efi/efivars}} [[ブートローダー]]のインストールに関しては [[Gentoo:Handbook:AMD64/Installation/Bootloader#Install|Gentoo Wiki]] を見てください。&lt;br /&gt;
* &#039;&#039;sysfs&#039;&#039; か &#039;&#039;procfs&#039;&#039; がある状態で &#039;&#039;grub-install&#039;&#039; を実行すると問題が発生し、{{ic|modprobe efivarfs}} を実行しなければならないと言われる場合、[[Unified Extensible Firmware Interface#efivarfs のマウント|efivarfs をマウント]]して上記のコマンドを実行してみてください。&lt;br /&gt;
* {{ic|--target}} と {{ic|--directory}} オプションのどちらかがないと、{{ic|grub-install}} はどこにファームウェアをインストールすればいいのか決められません。そのような場合 {{ic|grub-install}} は {{ic|source_dir does not exist. Please specify --target or --directory}} というメッセージを表示します。&lt;br /&gt;
* grub-install の実行後に {{ic|error: &#039;&#039;esp&#039;&#039; doesn&#039;t look like an EFI partition}} と表示される場合、おそらくパーティションが [[FAT32]] でフォーマットされていません。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアブートマネージャーに GRUB エントリを作成する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|grub-install}} は自動的にブートマネージャーにメニューエントリを追加しようと試みます。もし GRUB がそれを行わない場合、[[UEFI#efibootmgr]] を見て、{{ic|efibootmgr}} を使ってメニューエントリを作成する指示を読んでください。しかし、[[UEFI#ISO から UEFI ブータブル USB を作成する]] にあるように、よくある原因は CD/USB を UEFI モードで起動していないというものです。&lt;br /&gt;
&lt;br /&gt;
GRUB エントリをファームウェアブートマネージャに作成する例として、{{ic|efibootmgr -c}} を考えてみましょう。これは、{{ic|/dev/sda1}} が EFI システムパーティションであり、{{ic|/boot/efi}} にマウントされていると仮定します。これは {{ic|efibootmgr}} のデフォルトの挙動です。このツールは、(&amp;quot;Linux&amp;quot; という名前の) 新しいブートオプションを作成し、それをブート順序リストの1番目に配置します。オプションを渡すことでデフォルトの挙動を変更できます。デフォルトの OS ローダーは {{ic|\EFI\arch\grub.efi}} です。&lt;br /&gt;
&lt;br /&gt;
==== レスキューシェルが起動する ====&lt;br /&gt;
&lt;br /&gt;
GRUB はロードされたが、エラーが表示されずにレスキューシェルに落とされる場合、以下の2つの理由のうち1つが原因である可能性があります:&lt;br /&gt;
&lt;br /&gt;
* {{ic|grub.cfg}} が存在しないか、場所を間違えている。{{ic|--boot-directory}} を使って GRUB UEFI をインストールして、{{ic|grub.cfg}} が存在しない場合に起こります。&lt;br /&gt;
* ブートパーティションが変更された ({{ic|grubx64.efi}} ファイルにハードコードされています)。&lt;br /&gt;
&lt;br /&gt;
==== GRUB UEFI がロードされない ====&lt;br /&gt;
&lt;br /&gt;
有効な UEFI の例:&lt;br /&gt;
&lt;br /&gt;
{{hc|# efibootmgr -u|&lt;br /&gt;
BootCurrent: 0000&lt;br /&gt;
Timeout: 3 seconds&lt;br /&gt;
BootOrder: 0000,0001,0002&lt;br /&gt;
Boot0000* GRUB HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\EFI\GRUB\grubx64.efi)&lt;br /&gt;
Boot0001* Shell HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\shellx64.efi)&lt;br /&gt;
Boot0002* Festplatte BIOS(2,0,00)P0: SAMSUNG HD204UI&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
画面が数秒間真っ暗になって、その後、次のブートオプションが試行される場合、[https://bbs.archlinux.org/viewtopic.php?pid=981560#p981560 この投稿]によると、GRUB をルートパーティションに移動することで直るかもしれません。ブートオプションは削除して後でまた作成する必要があります。GRUB のエントリは次のようにしてください:&lt;br /&gt;
&lt;br /&gt;
 Boot0000* GRUB HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\grubx64.efi)&lt;br /&gt;
&lt;br /&gt;
==== デフォルト/フォールバックのブートパス ====&lt;br /&gt;
&lt;br /&gt;
一部の UEFI ファーウェアではブート可能なファイルが既知の場所に存在している必要があり、それ以外の場所では UEFI NVRAM ブートエントリに表示されません。この場合、{{ic|grub-install}} が、GRUB を起動するエントリが {{ic|efibootmgr}} によって追加されたと報告するでしょうが、VisualBIOS のブート順序セレクターには表示されません。解決策は GRUB をデフォルト/フォールバックのブートパスにインストールすることです:&lt;br /&gt;
&lt;br /&gt;
 # grub-install --target=x86_64-efi --efi-directory=&#039;&#039;esp&#039;&#039; &#039;&#039;&#039;--removable&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あるいは、すでにインストールされた GRUB の EFI 実行ファイルをデフォルト/フォールバックのパスに移動することができます:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/grub &#039;&#039;esp&#039;&#039;/EFI/BOOT&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
=== Invalid signature ===&lt;br /&gt;
&lt;br /&gt;
(例えば、パーティションを再設定したり、追加のハードドライブを追加したりしたあとで) Windows を起動しようとして &amp;quot;invalid signature&amp;quot; エラーが発生する場合、GRUB のデバイス設定を移動 (削除) し、GRUB に再設定させてください:&lt;br /&gt;
&lt;br /&gt;
 # mv /boot/grub/device.map /boot/grub/device.map-old&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
これで {{ic|grub-mkconfig}} は Windows を含む全てのブートオプションを記述したはずです。これで動作したら、{{ic|/boot/grub/device.map-old}} は削除してください。&lt;br /&gt;
&lt;br /&gt;
=== 起動中にフリーズする ===&lt;br /&gt;
&lt;br /&gt;
GRUB がカーネルと初期 RAM ディスクをロードした後に、エラーメッセージが表示されずにフリーズする場合、{{ic|add_efi_memmap}} カーネルパラメータを削除してみてください。&lt;br /&gt;
&lt;br /&gt;
=== 他の OS から Arch が見つからない ===&lt;br /&gt;
&lt;br /&gt;
他のディストリビューションで {{ic|os-prober}} を使って Arch Linux を自動的に検索できないという報告が複数確認されています。この問題が発生する場合、{{ic|/etc/lsb-release}} をおくことで検知が改善されると報告されています。このファイルと更新ツールは[[公式リポジトリ]]にある {{Pkg|lsb-release}} パッケージから利用可能です。&lt;br /&gt;
&lt;br /&gt;
=== chroot でインストールした時に警告が表示される ===&lt;br /&gt;
&lt;br /&gt;
(システムのインストール中などに) chroot 環境で LVM システム上に GRUB をインストールする際に、以下のような警告が発生する場合があります:&lt;br /&gt;
&lt;br /&gt;
 /run/lvm/lvmetad.socket: connect failed: No such file or directory&lt;br /&gt;
&lt;br /&gt;
または&lt;br /&gt;
&lt;br /&gt;
 WARNING: failed to connect to lvmetad: No such file or directory. Falling back to internal scanning.&lt;br /&gt;
&lt;br /&gt;
これは、{{ic|/run}} が chroot 内で利用可能でないから起こります。すべてが正しく行われていれば、これらの警告のせいでシステムが起動できなくなることはありません。インストールを継続することができます。&lt;br /&gt;
&lt;br /&gt;
=== GRUB のロードが遅い ===&lt;br /&gt;
&lt;br /&gt;
ディスク容量が残りわずかの場合 GRUB がロードされるのにかなり時間がかかることがあります。起動が遅い場合 {{ic|/boot}} や {{ic|/}} に十分な空き容量があるか確認してください。&lt;br /&gt;
&lt;br /&gt;
=== error: unknown filesystem ===&lt;br /&gt;
&lt;br /&gt;
GRUB が {{ic|error: unknown filesystem}} と出力して起動しない理由はいくつか考えられます。[[UUID]] が正しいこと、全てのファイルシステムが問題なく、GRUB によってサポートされていることが確認できる場合、[[#GUID Partition Table (GPT) 特有の手順|BIOS Boot Partition]] がドライブの最初の 2TB の中にない可能性があります [https://bbs.archlinux.org/viewtopic.php?id=195948]。適当なパーティショニングツールを使ってパーティションが最初の 2TB 以内にあるようにして、GRUB を再インストール・再設定してください。&lt;br /&gt;
&lt;br /&gt;
また、このエラーは [[ext4]] ファイルシステムがいくつかの機能をサポートしていないことが原因かもしれません:&lt;br /&gt;
* {{ic|large_dir}} - サポートされません。&lt;br /&gt;
* {{ic|metadata_csum_seed}} - GRUB 2.11 でサポートされます ([https://git.savannah.gnu.org/cgit/grub.git/commit/?id=7fd5feff97c4b1f446f8fcf6d37aca0c64e7c763 コミット]).&lt;br /&gt;
&lt;br /&gt;
{{Warning| {{ic|/boot}} ファイルシステム上で[[ファイルシステム]]の新しい機能を有効化する前に、GRUB がそれらをサポートしていることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
=== grub-reboot で再設定されない ===&lt;br /&gt;
&lt;br /&gt;
GRUB は Btrfs のルートパーティションに書き込むを行うことができません [https://bbs.archlinux.org/viewtopic.php?id=166131]。grub-reboot を使って他のエントリを起動した場合、ディスク上の環境を更新することができなくなります。(ディストリビューションを切り替えるなどの場合に) 他のエントリから grub-reboot を実行するか他のファイルシステムを使ってください。{{ic|grub-editenv create}} を実行して {{ic|/etc/default/grub}} に {{ic|GRUB_DEFAULT&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;0}} を設定することでエントリをリセットできます (設定後は {{ic|grub-mkconfig -o /boot/grub/grub.cfg}} を行ってください)。&lt;br /&gt;
&lt;br /&gt;
=== 古い Btrfs のせいでインストールができない ===&lt;br /&gt;
&lt;br /&gt;
パーティションテーブルを作成しないで Btrfs を使ってドライブをフォーマットしている場合 (例: {{ic|/dev/sdx}})、後からパーティションテーブルを書き込むと、Btrfs のフォーマットが一部残留します。ほとんどのユーティリティや OS は残留した Btrfs を認識できないため、GRUB は (たとえ --force が付けられていても) インストールを拒否します:&lt;br /&gt;
&lt;br /&gt;
 # grub-install: warning: Attempting to install GRUB to a disk with multiple partition labels. This is not supported yet..&lt;br /&gt;
 # grub-install: error: filesystem `btrfs&#039; does not support blocklists.&lt;br /&gt;
&lt;br /&gt;
ドライブを完全に消去してもいいですが、{{ic|wipefs -o 0x10040 /dev/sdx}} を使えばデータを残して Btrfs のスーパーブロックだけを消去することができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows 8/10 が認識されない ===&lt;br /&gt;
&lt;br /&gt;
Windows 8/10 の &amp;quot;高速スタートアップ&amp;quot;、&amp;quot;ハイブリッドブート&amp;quot;、&amp;quot;Hiberboot&amp;quot; と呼ばれる設定を有効にしていると Windows のパーティションをマウントすることができなくなる可能性があります。そのため {{ic|grub-mkconfig}} が Windows を認識することができなくなります。Windows で高速スタートアップを無効化することで GRUB のメニューに追加することができるようになるはずです。&lt;br /&gt;
&lt;br /&gt;
=== grub-rescue プロンプトと暗号化済み /boot ===&lt;br /&gt;
&lt;br /&gt;
[[#暗号化された /boot|暗号化済みの /boot]] を使用している場合に間違ったパスワードを入力してしまうと  grub-rescue プロンプトに入ります。&lt;br /&gt;
&lt;br /&gt;
この grub-rescue プロンプトではできることが限られています。以下のコマンドを使ってブートを完了させます:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
grub rescue&amp;gt; cryptomount &amp;lt;partition&amp;gt;&lt;br /&gt;
grub rescue&amp;gt; insmod normal&lt;br /&gt;
grub rescue&amp;gt; normal&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
より良い説明は[https://blog.stigok.com/2017/12/29/decrypt-and-mount-luks-disk-from-grub-rescue-mode.html このブログ投稿]{{Dead link|2023|04|23|status=404}}をご覧ください。&lt;br /&gt;
&lt;br /&gt;
=== GRUB をインストールしたが起動時にメニューが表示されない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/default/grub}} を見て {{ic|GRUB_TIMEOUT}} が {{ic|0}} に設定されていないかチェックしてください。{{ic|0}} に設定されていた場合、正の数に設定し直してください。この値はデフォルトの GRUB エントリが起動されるまでの秒数を表しています。{{ic|GRUB_TIMEOUT_STYLE}} が {{ic|hidden}} に設定されていないかもチェックしてください。{{ic|hidden}} に設定されていた場合、{{ic|menu}} に設定し直してください。これでメニューがデフォルトで表示されるようになります。以上が終わったら、[[#メイン設定ファイルの生成|メインの設定ファイルを再生成]]して、再起動してメニューが表示されるか確かめてください。&lt;br /&gt;
&lt;br /&gt;
これでうまく行かない場合、グラフィカルターミナルとの互換性の問題があるのかもしれません。{{ic|/etc/default/grub}} で {{ic|GRUB_TERMINAL_OUTPUT}} を {{ic|console}} に設定し、GRUB のグラフィカルターミナルを無効化してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [[Wikipedia:ja:GNU GRUB]]&lt;br /&gt;
* [https://www.gnu.org/software/grub/manual/grub.html 公式 GRUB マニュアル]&lt;br /&gt;
* [https://help.ubuntu.com/community/Grub2 Ubuntu wiki の GRUB ページ]&lt;br /&gt;
* [https://help.ubuntu.com/community/UEFIBooting UEFI システム用にコンパイルする手順を説明している GRUB wiki ページ]&lt;br /&gt;
* [[Wikipedia:BIOS Boot partition]]&lt;br /&gt;
* [https://web.archive.org/web/20160424042444/http://members.iinet.net/~herman546/p20/GRUB2%20Configuration%20File%20Commands.html#Editing_etcgrub.d05_debian_theme How to configure GRUB]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|GRUB|2024-08-26|812848}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=GRUB&amp;diff=41687</id>
		<title>GRUB</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=GRUB&amp;diff=41687"/>
		<updated>2026-08-09T07:57:03Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* Shim-lock */ モジュール名が日本語に翻訳されていたのを修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートローダー]]&lt;br /&gt;
[[Category:GNU]]&lt;br /&gt;
[[de:GRUB]]&lt;br /&gt;
[[en:GRUB]]&lt;br /&gt;
[[es:GRUB]]&lt;br /&gt;
[[pl:GRUB]]&lt;br /&gt;
[[pt:GRUB]]&lt;br /&gt;
[[ru:GRUB]]&lt;br /&gt;
[[zh-hans:GRUB]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Master Boot Record}}&lt;br /&gt;
{{Related|GUID Partition Table}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|GRUB Legacy}}&lt;br /&gt;
{{Related|GRUB/EFI サンプル}}&lt;br /&gt;
{{Related|GRUB/ヒントとテクニック}}&lt;br /&gt;
{{Related|マルチブート USB ドライブ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[https://www.gnu.org/software/grub/ GRUB] (GRand Unified Bootloader) は[[ブートローダー]]です。現在の GRUB は &#039;&#039;&#039;GRUB 2&#039;&#039;&#039; とも呼ばれています。元の GRUB ([[GRUB Legacy]]) はバージョン 0.9x に対応しています。このページでは GRUB 2 についてのみ説明します。&lt;br /&gt;
&lt;br /&gt;
{{Note|この記事全体で、{{ic|&#039;&#039;esp&#039;&#039;}} は [[EFI システムパーティション]] (別名 ESP) のマウントポイントを表します。}}&lt;br /&gt;
&lt;br /&gt;
== サポートされているファイルシステム ==&lt;br /&gt;
&lt;br /&gt;
GRUB には[https://www.gnu.org/software/grub/manual/grub/html_node/Features.html#Features 複数のファイルシステム] (特に重要なものとしては [[FAT32]]、[[ext4]]、[[Btrfs]]、[[XFS]]) に対する独自のサポートがあります。注意事項に関しては [[#サポートのないファイルシステム]] 章を見てください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ファイルシステムには、GRUB がまだ対応していない新しい機能が導入されることがあります。その場合、GRUB と互換性の無い機能を無効化しない限り、そのファイルシステムを {{ic|/boot}} に対して使用するべきではありません。この問題は、[[パーティショニング#/boot|/boot パーティション]]を別に分けて、[[FAT32]] などの広くサポートされているファイルシステムを使用することで、回避することができます。}}&lt;br /&gt;
&lt;br /&gt;
== UEFI システム ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 次のページを読んで理解しておくことをおすすめします: [[Unified Extensible Firmware Interface]]、[[パーティショニング#GUID Partition Table]]、[[Arch ブートプロセス#UEFI_2]]。&lt;br /&gt;
* UEFI を使うようにインストールする場合、Arch のインストールメディアを UEFI モードで起動することが重要です。さもないと、&#039;&#039;efibootmgr&#039;&#039; が GRUB の UEFI ブートエントリを追加できません。[[#デフォルト/フォールバックのブートパス|フォールバックブートパス]]へのインストールは NVRAM を使用しないため、BIOS モードでも可能です。&lt;br /&gt;
* UEFI を使用してディスクから起動するには EFI システムパーティションが必要です。[[EFI システムパーティション#既存のパーティションの確認]] に従って、すでに EFI システムパーティションが存在するかどうかを確認してください。存在しない場合は作成する必要があります。&lt;br /&gt;
* この記事全体で、{{ic|insmod}} を使って追加の GRUB2 モジュールを挿入可能であると仮定しています。[[#Shim-lock]] で議論されているように、これはセキュアブートが有効化されている UEFI システムには当てはまりません。セキュアブートシステム上で標準の GRUB EFI ファイル {{ic|grubx64.efi}} に含まれていない追加の GRUB モジュールを使用したい場合は、{{ic|grub-mkstandalone}} を使って追加の GRUB モジュールを含めた GRUB EFI {{ic|grubx64.efi}} を再生成しなければなりません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== インストール ===&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* UEFI の実装はマザーボード製造者ごとに異なっています。以下で説明されている手順は広い範囲の UEFI システムで動作するように意図されています。しかし、この方法を適用しているにも関わらず問題が発生する場合は、あなたのハードウェア固有のケースにおける詳細な情報を (可能であれば解決策も) 共有することが推奨されます。そのようなケースのために [[GRUB/EFI サンプル]] の記事が提供されています。&lt;br /&gt;
* このセクションでは、あなたが x64 (64 ビット) UEFI のシステムに対して GRUB をインストールしようとしていると仮定します。IA32 (32 ビット) UEFI の場合は (32 ビット CPU と混同しないでください)、適切な場所で {{ic|x86_64-efi}} を {{ic|i386-efi}} に置き換えてください。[[Unified Extensible Firmware Interface#UEFI ファームウェアのビット数を調べる]] の手順を見て、UEFI のビット数を調べてください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、{{Pkg|grub}} と {{Pkg|efibootmgr}} を[[インストール]]してください。&#039;&#039;GRUB&#039;&#039; はブートローダである一方、&#039;&#039;efibootmgr&#039;&#039; はブートエントリを NVRAM に書き込むために GRUB のインストールスクリプトによって使用されます。&lt;br /&gt;
&lt;br /&gt;
そして、以下の手順に従って GRUB をディスクにインストールしてください:&lt;br /&gt;
&lt;br /&gt;
# [[EFI システムパーティション#パーティションのマウント|EFI システムパーティションをマウント]]してください。そして、このセクションの後の部分で出てくる {{ic|&#039;&#039;esp&#039;&#039;}} という記述をそのマウントポイントに置き換えてください。&lt;br /&gt;
# ブートローダの識別子を選んでください、ここでは仮に {{ic|GRUB}} としましょう。{{ic|&#039;&#039;esp&#039;&#039;/EFI/}} にあなたが選んだものと同じ名前のディレクトリが作成され、そこに EFI バイナリが格納されます。その名前が UEFI ブートメニューの GRUB ブートエントリの名前になります。&lt;br /&gt;
# 以下のコマンドを実行して、GRUB EFI アプリケーション {{ic|grubx64.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/GRUB/}} に、モジュールを {{ic|/boot/grub/x86_64-efi/}} にインストールしてください。&lt;br /&gt;
::{{Note|&lt;br /&gt;
::* GRUB をブートローダとしてインストールするシステム内でパッケージをインストールし、{{ic|grub-install}} を実行してください。つまり、ライブインストール環境から起動している場合、{{ic|grub-install}} は (インストール先の) chroot 環境の中で実行する必要があるということです。何らかの理由で、インストールされたシステムの外で {{ic|grub-install}} を実行する必要がある場合、マウントした {{ic|/boot}} ディレクトリへのパスを {{ic|1=--boot-directory=}} オプションに渡してください。例: {{ic|1=--boot-directory=/mnt/boot}}&lt;br /&gt;
::* 一部のマザーボードは、空白を含む {{ic|bootloader-id}} を扱うことができません。}}&lt;br /&gt;
::{{bc|1=# grub-install --target=x86_64-efi --efi-directory=&#039;&#039;esp&#039;&#039; --bootloader-id=GRUB}}&lt;br /&gt;
&lt;br /&gt;
上記のインストール作業が完了した後、メインの GRUB ディレクトリが {{ic|/boot/grub/}} に作成されています。別の場所を指定する方法については [[GRUB/ヒントとテクニック#代替インストール方法]] を見てください。{{ic|grub-install}} は[[#ファームウェアブートマネージャーに GRUB エントリを作成する|ファームウェアのブートマネージャにもエントリを作成]]しようとすることに注意してください。その名前は上記の例では {{ic|GRUB}} となります。しかし、ブートエントリが埋まっていると、これは失敗します。この場合は [[efibootmgr]] を使って必要ないエントリを削除してください。&lt;br /&gt;
&lt;br /&gt;
設定を確定したあとに[[#メイン設定ファイルの生成|メインの設定ファイルを生成]]することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--removable}} オプションを使うと、GRUB は {{ic|&#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTX64.EFI}} にインストールされます ({{ic|i386-efi}} ターゲットの場合は {{ic|&#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTIA32.EFI}})。その結果、EFI 変数がリセットされた場合やドライブを他のコンピュータに移した場合でもそのドライブから起動することができるようになります。通常は BIOS を使用する方法と同じようにドライブを選択することで使うことができます。Windows とデュアルブートする場合、Windows は通常そこに EFI 実行ファイルを配置するので注意してください。とはいえ、そのファイルは Windows の UEFI ブートエントリを再生成するためだけに使用されます。[[Mac]] 上に GRUB をインストールする場合、このオプションを使用する必要があります。一部のデスクトップマザーボード (特に MSI のマザーボード) はここに保存されている EFI 実行ファイルしか見ないので、このオプションが必須になります。&lt;br /&gt;
UEFI アップデートを実行すると、既存の UEFI ブートエントリが削除されるかもしれません。なので、&amp;quot;removable&amp;quot; なブートエントリを有効化しておくと、それをフォールバックとして利用できます。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|--efi-directory}} と {{ic|--bootloader-id}} は GRUB UEFI 専用です。{{ic|--efi-directory}} は、非推奨となった {{ic|--root-directory}} を置き換えます。&lt;br /&gt;
* {{ic|grub-install}} コマンドに &#039;&#039;device_path&#039;&#039; オプション (例えば {{ic|/dev/sda}}) が無いことに気付いたかもしれません。実際、&#039;&#039;device_path&#039;&#039; は GRUB EFI インストールスクリプトによって無視されます。UEFI ブートローダーは MBR ブートコードもパーティションブートセクタも全く使用しないのです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
問題が発生した場合は [[#UEFI|UEFI のトラブルシューティング]] を見て下さい。加えて [[GRUB/ヒントとテクニック#UEFI の詳細情報]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートサポート ===&lt;br /&gt;
&lt;br /&gt;
GRUB は、CA 鍵か shim のいずれかを使用するセキュアブートを完全にサポートしています。しかし、インストールのコマンドは、どちらを使用するかによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* [[セキュアブート]]を不適切に設定すると、システムが起動不能になる可能性があります。セキュアブートを有効化した後に何らかの理由により起動できなくなった場合、ファームウェアでセキュアブートを無効化し、システムを再起動する必要があります。&lt;br /&gt;
* ブートローダで不必要なモジュールをロードすると、セキュリティリスクを発生させる可能性があります。これらのコマンドは、必要なときにだけ使用してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== CA 鍵 ====&lt;br /&gt;
&lt;br /&gt;
CA 鍵を使うには、インストールのコマンドは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 # grub-install --target=x86_64-efi --efi-directory=&#039;&#039;esp&#039;&#039; --bootloader-id=GRUB --modules=&amp;quot;tpm&amp;quot; --disable-shim-lock&lt;br /&gt;
&lt;br /&gt;
==== Shim-lock ====&lt;br /&gt;
&lt;br /&gt;
{{Note|このセクションに進む前に、[[セキュアブート#shim]] に書かれてある指示の通りにし、{{pkg|sbsigntools}} をセットアップして鍵を受け取る準備を整えておく必要があります。}}&lt;br /&gt;
&lt;br /&gt;
Shim-lock を使用する場合、GRUB をセキュアブートモードでブートさせるには、[[vmlinuz]] と [[initramfs]] のイメージが含まれているファイルシステムを読むために必要なモジュール全てが GRUB のバイナリに含まれていなければなりません。&lt;br /&gt;
&lt;br /&gt;
GRUB バージョン {{ic|2.06.r261.g2f4430cc0}} から、セキュアブートモードで {{ic|insmod}} を使ってモジュールをロードすることは許可されなくなりました (任意のコードをサイドロードできてしまう可能性があるからです)。GRUB モジュールが EFI バイナリ内に組み込まれていない場合、GRUB はそれらのモジュールをサイドロード/{{ic|insmod}} しようと試み、その結果、以下のようなメッセージにより GRUB の起動が失敗します:&lt;br /&gt;
&lt;br /&gt;
 error: prohibited by secure boot policy&lt;br /&gt;
&lt;br /&gt;
[https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/build-efi-images?h=debian/2.06-2ubuntu12 Ubuntu の公式ビルドスクリプト]によると、Ubuntu では以下の GRUB モジュールが署名済み GRUB EFI バイナリ {{ic|grubx64.efi}} に組み込まれています:&lt;br /&gt;
&lt;br /&gt;
* [https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/build-efi-images?h=debian/2.06-2ubuntu12#n87 &amp;quot;基本&amp;quot; モジュール]。CD や簡単にパーティショニングされたディスクからブートするために必要: {{ic|all_video}}、{{ic|boot}}、{{ic|btrfs}}、{{ic|cat}}、{{ic|chain}}、{{ic|configfile}}、{{ic|echo}}、{{ic|efifwsetup}}、{{ic|efinet}}、{{ic|ext2}}、{{ic|fat}}、{{ic|font}}、{{ic|gettext}}、{{ic|gfxmenu}}、{{ic|gfxterm}}、{{ic|gfxterm_background}}、{{ic|gzio}}、{{ic|halt}}、{{ic|help}}、{{ic|hfsplus}}、{{ic|iso9660}}、{{ic|jpeg}}、{{ic|keystatus}}、{{ic|loadenv}}、{{ic|loopback}}、{{ic|linux}}、{{ic|ls}}、{{ic|lsefi}}、{{ic|lsefimmap}}、{{ic|lsefisystab}}、{{ic|lssal}}、{{ic|memdisk}}、{{ic|minicmd}}、{{ic|normal}}、{{ic|ntfs}}、{{ic|part_apple}}、{{ic|part_msdos}}、{{ic|part_gpt}}、{{ic|password_pbkdf2}}、{{ic|png}}、{{ic|probe}}、{{ic|reboot}}、{{ic|regexp}}、{{ic|search}}、{{ic|search_fs_uuid}}、{{ic|search_fs_file}}、{{ic|search_label}}、{{ic|sleep}}、{{ic|smbios}}、{{ic|squash4}}、{{ic|test}}、{{ic|true}}、{{ic|video}}、{{ic|xfs}}、{{ic|zfs}}、{{ic|zfscrypt}}、{{ic|zfsinfo}}&lt;br /&gt;
* x84_64-efi アーキテクチャ用の [https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/build-efi-images?h=debian/2.06-2ubuntu12#n147 &amp;quot;プラットフォーム固有&amp;quot; のモジュール]。例えば:&lt;br /&gt;
** {{ic|play}}: ブート中に音を鳴らす&lt;br /&gt;
** {{ic|cpuid}}: ブート時に CPU の機能を確認する&lt;br /&gt;
** {{ic|tpm}}: Measured Boot / [[TPM|Trusted Platform Modules]] をサポートする&lt;br /&gt;
* [https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/build-efi-images?h=debian/2.06-2ubuntu12#n159 &amp;quot;高度な&amp;quot; モジュール]。以下が含まれます:&lt;br /&gt;
** {{ic|cryptodisk}}: [[dm-crypt|plain モードで暗号化された]]ディスクからブートする&lt;br /&gt;
** {{ic|gcry_algorithm}}: 特定のハッシュアルゴリズムと暗号化アルゴリズムをサポートする&lt;br /&gt;
** {{ic|luks}}: [[LUKS]] で暗号化されたディスクからブートする&lt;br /&gt;
** {{ic|lvm}}: [[LVM]] 論理ボリュームディスクからブートする&lt;br /&gt;
** {{ic|mdraid09}}、{{ic|mdraid1x}}、{{ic|raid5rec}}、{{ic|raid6rec}}: [[RAID]] 仮想ディスクからブートする&lt;br /&gt;
&lt;br /&gt;
GRUB モジュールのリストはシェル変数の形にしなければなりません (ここでは {{ic|GRUB_MODULES}} と表記しています)。[https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/build-efi-images 最新の Ubuntu スクリプト]をベースとして使い、あなたのシステムでは不要なモジュールを取り除くという方法を取ることもできます。モジュールを減らすと、ブートプロセスが比較的速くなり、ESP のスペースをいくらか節約できます。&lt;br /&gt;
&lt;br /&gt;
また、セキュリティを高めるために、EFI バイナリに[https://github.com/rhboot/shim/blob/main/SBAT.md Secure Boot Advanced Targeting (SBAT)] ファイル/セクションを含める必要があります (GRUB が UEFI shim ローダから起動される場合)。SBAT ファイル/セクションには、GRUB バイナリに関するメタデータ (バージョン、メンテナ、開発者、上流の URL) が含まれており、特定の GRUB バージョンに脆弱性がある場合、shim がそのバージョンの GRUB のロードをブロックすることが容易になります [https://eclypsium.com/2020/07/29/theres-a-hole-in-the-boot/#additional][https://wiki.ubuntu.com/SecurityTeam/KnowledgeBase/GRUB2SecureBootBypass2021] (shim の [https://github.com/rhboot/shim/blob/main/SBAT.md UEFI shim bootloader secure boot life-cycle improvements] というドキュメントで説明されています)。&lt;br /&gt;
&lt;br /&gt;
SBAT セクションが {{ic|grubx64.efi}} に無いと、shim は {{ic|grubx64.efi}} の起動に失敗します。&lt;br /&gt;
&lt;br /&gt;
GRUB がインストールされている場合、シンプルな SBAT &#039;&#039;.csv&#039;&#039; ファイルが {{ic|/usr/share/grub/sbat.csv}} で提供されています。&lt;br /&gt;
&lt;br /&gt;
その {{ic|/usr/share/grub/sbat.csv}} ファイルと必要な {{ic|GRUB_MODULES}} を使って GRUB を再インストールし、GRUB バイナリを署名してください:&lt;br /&gt;
&lt;br /&gt;
 # grub-install --target=x86_64-efi --efi-directory=&#039;&#039;esp&#039;&#039; --modules=&amp;quot;${GRUB_MODULES}&amp;quot; --sbat /usr/share/grub/sbat.csv&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/GRUB/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/GRUB/grubx64.efi&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/GRUB/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
再起動し、&#039;&#039;MokManager&#039;&#039; で鍵を選択すれば、セキュアブートが機能するはずです。&lt;br /&gt;
&lt;br /&gt;
==== セキュアブートを使用する ====&lt;br /&gt;
&lt;br /&gt;
インストール後は、[[セキュアブート#セキュアブートを実現する]] を見て、セキュアブートを有効化する手順を確認してください。&lt;br /&gt;
&lt;br /&gt;
CA 鍵の方法を取っている場合、鍵の管理や登録、ファイルの署名は {{pkg|sbctl}} で自動化できます。詳細は [[セキュアブート#sbctl でより簡単に行う]] を見てください。&lt;br /&gt;
&lt;br /&gt;
== BIOS システム ==&lt;br /&gt;
&lt;br /&gt;
=== GUID Partition Table (GPT) 特有の手順 ===&lt;br /&gt;
&lt;br /&gt;
BIOS/[[GPT]] の構成では、[https://www.gnu.org/software/grub/manual/grub/html_node/BIOS-installation.html#BIOS-installation BIOS ブートパーティション]が必要です。GRUB は {{ic|core.img}} をこのパーティションに埋め込みます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* この方法を試す前に、すべてのシステムでこのパーティショニング方式がサポートされているわけではないということを心に留めておいてください。詳細は [[パーティショニング#GUID Partition Table]] を見てください。&lt;br /&gt;
* BIOS ブートパーティションは BIOS/GPT のセットアップでのみ GRUB が必要とします。BIOS/MBR セットアップでは、GRUB は MBR の後にある隙間を {{ic|core.img}} のために使用します。しかし、GPT では最初のパーティションの前に未使用の領域があることは保証されていません。&lt;br /&gt;
* [[UEFI]] システムでは、ブートセクタが組み込まれないので、BIOS ブートパーティションは必要ありません。しかし、UEFI システムでは依然として [[EFI システムパーティション]]が必要です。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ディスク上にパーティションタイプ GUID {{ic|21686148-6449-6E6F-744E-656564454649}} の、ファイルシステムの無い 1 メビバイト (&#039;&#039;fdisk&#039;&#039; や &#039;&#039;gdisk&#039;&#039; で {{ic|1=+1M}}) のパーティションを作成してください。&lt;br /&gt;
&lt;br /&gt;
* [[fdisk]] では、パーティションタイプ {{ic|BIOS boot}} を選択してください。&lt;br /&gt;
* [[gdisk]] では、パーティションタイプコード {{ic|ef02}} を選択してください。&lt;br /&gt;
* [[parted]] では、そのパーティションで {{ic|bios_grub}} フラグをセット/アクティブ化してください。&lt;br /&gt;
&lt;br /&gt;
このパーティションはどのような順番で配置しても良いですが、ディスクの先頭 2 TiB 以内になければなりません。このパーティションは GRUB のインストール前に作成する必要があります。パーティションの準備が完了したら、以下の指示に従ってブートローダーをインストールします。&lt;br /&gt;
&lt;br /&gt;
GPT のアライメント仕様から外れますが、最初のパーティションの前にあるスペースは BIOS ブートパーティションとしても使用できます。このパーティションは定期的にアクセスされるものではないのでパフォーマンスの問題は無視できますが、一部のディスクユーティリティは警告を発します。&#039;&#039;fdisk&#039;&#039; や &#039;&#039;gdisk&#039;&#039; では、セクター 34 から 2047 までの区間の新しいパーティションを作成して、先のパーティションタイプを設定してください。見える状態のパーティションが先頭から始まるようにするには、このパーティションを最後に追加することを検討してください。&lt;br /&gt;
&lt;br /&gt;
=== Master Boot Record (MBR) 特有の手順 ===&lt;br /&gt;
&lt;br /&gt;
通常、MBR でパーティションされた環境において [[MBR]] の後の隙間 (512 バイトの MBR 領域の後ろで最初のパーティションの前) は 31 KiB になっていて、このパーティションテーブルでは DOS 互換のシリンダーアライメントは問題になりません。しかしながら GRUB の {{ic|core.img}} 用に十分な領域を確保するために 1 から 2 MiB ほど MBR の後の領域をとることを推奨します ({{bug|24103}})。この領域を獲得したり他の 512 バイトでないセクターの問題を起こさないために ({{ic|core.img}} の埋め込みとは関係ありません) 1 MiB [[パーティショニング#パーティションアライメント|パーティションアライメント]]をサポートしているパーティションツールを使うのが得策です。&lt;br /&gt;
&lt;br /&gt;
=== インストール ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|grub}} パッケージを[[インストール]]してください ({{AUR|grub-legacy}} がインストールされている場合は置き換えられます。) 次に以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # grub-install --target=i386-pc &#039;&#039;/dev/sdX&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|i386-pc}} は実際のアーキテクチャに関わらず使用されます。{{ic|&#039;&#039;/dev/sdX&#039;&#039;}} は GRUB がインストールされる &#039;&#039;&#039;ディスク&#039;&#039;&#039; (&#039;&#039;&#039;パーティションではありません&#039;&#039;&#039;) です。例えば、{{ic|/dev/sda}}、{{ic|/dev/nvme0n1}}、{{ic|/dev/mmcblk0}} です。ブロックデバイスの命名方法については [[デバイスファイル#ブロックデバイスの名前]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
次に、[[#メイン設定ファイルの生成|メイン設定ファイルを生成]]する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot}} に [[LVM]] を使用している場合、GRUB を複数の物理ディスク上にインストールすることができます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|USB メモリなどに GRUB をインストールする他の方法については [[GRUB/ヒントとテクニック#代替インストール方法]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|grub-install}} コマンドの詳細については、{{man|8|grub-install}} および [https://www.gnu.org/software/grub/manual/grub/html_node/BIOS-installation.html#BIOS-installation GRUB Manual] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
インストールされたシステムでは、GRUB は起動の度に設定ファイル {{ic|/boot/grub/grub.cfg}} をロードします。ツールを使う場合は、[[#grub.cfg の生成]] を、手動で作成する場合は [[#grub.cfg のカスタマイズ]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== grub.cfg の生成 ===&lt;br /&gt;
&lt;br /&gt;
このセクションでは {{ic|/etc/default/grub}} 設定ファイルの編集についてだけ扱っています。他のオプションは [[GRUB/ヒントとテクニック]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|/etc/grub.d/}} 下のファイルや {{ic|/etc/default/grub}} に変更を加えた後は必ず[[#メイン設定ファイルの生成|メイン設定ファイルの再生成]]を行なって下さい。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|GRUB の新しいバージョンで設定ファイルの構文が変更された場合、ブートローダーをアップデート/再インストールしてください ([[#UEFI システム]] や [[#BIOS システム]] を見てください)。設定が一致しないと、システムが起動できなくなる可能性があります。例えば、新しい設定では既存の GRUB バイナリが認識しない関数が使用されているかもしれず、想定外の動作を引き起こす可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
==== メイン設定ファイルの生成 ====&lt;br /&gt;
&lt;br /&gt;
インストールした後は、メインの設定ファイル {{ic|/boot/grub/grub.cfg}} を生成する必要があります。生成プロセスは、{{ic|/etc/default/grub}} 内の様々なオプションや {{ic|/etc/grub.d/}} 下のスクリプトによって制御されます。{{ic|/etc/default/grub}} におけるオプションのリストと、それぞれのオプションの簡潔な説明は、GNU の[https://www.gnu.org/software/grub/manual/grub/html_node/Simple-configuration.html ドキュメント]を参照してください。&lt;br /&gt;
&lt;br /&gt;
追加の設定をしていない場合、設定ファイル自動生成スクリプトは、ブートさせるシステムのルートファイルシステムを判定し、その情報を設定ファイルに保存します。これを成功させるには、システムを起動させているか、またはシステムに chroot していることが重要です。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* デフォルトのファイルパスは {{ic|/boot/grub/grub.cfg}} です、{{ic|/boot/grub/i386-pc/grub.cfg}} ではありません。&lt;br /&gt;
* [[chroot]] や [[systemd-nspawn]] コンテナで &#039;&#039;grub-mkconfig&#039;&#039; を実行しようとした場合、次のようなエラーによりうまく行かないことがあります: {{ic|grub-probe: error: failed to get canonical path of &#039;&#039;/dev/sdaX&#039;&#039;}}。この場合、[https://bbs.archlinux.org/viewtopic.php?pid=1225067#p1225067 このフォーラムの投稿]で記述されているように [[arch-chroot]] を使ってみて下さい。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;grub-mkconfig&#039;&#039; ツールを使って {{ic|/boot/grub/grub.cfg}} を生成してください:&lt;br /&gt;
&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
デフォルトで、生成スクリプトは Arch Linux の[[カーネル]]のメニューエントリを自動的に設定に追加します。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* [[カーネル]]をインストール/アンインストールした後は、上記の &#039;&#039;grub-mkconfig&#039;&#039; コマンドを再度実行する必要があります。&lt;br /&gt;
* 複数の GRUB エントリを管理するためのヒントとして、例えば {{Pkg|linux}} と {{Pkg|linux-lts}} の両方を使用している場合、[[GRUB/ヒントとテクニック#複数のエントリ]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
他のオペレーティングシステムのエントリを自動的に追加する方法は [[#他の OS の検出]] を見てください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/grub.d/40_custom}} を編集して {{ic|/boot/grub/grub.cfg}} を再生成することで、追加のカスタムメニューエントリを追加することができます。または、{{ic|/boot/grub/custom.cfg}} を作成して、そこにカスタムのメニューエントリを追加することもできます。{{ic|/boot/grub/custom.cfg}} を編集した後に &#039;&#039;grub-mkconfig&#039;&#039; を再度実行する必要はありません。{{ic|/etc/grub.d/41_custom}} は必要な {{ic|source}} 文を設定ファイルに追加するからです。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/grub.d/40_custom}} は {{ic|/etc/grub.d/&#039;&#039;nn&#039;&#039;_custom}} を作成する際のテンプレートとして使うことができます。{{ic|&#039;&#039;nn&#039;&#039;}} の部分は優先順位で、スクリプトを実行する順番を決定します。スクリプトを実行する順番は GRUB ブートメニューエントリの配置を決定します。必要なスクリプトを確実に実行させるために、{{ic|&#039;&#039;nn&#039;&#039;}} は {{ic|06}} よりも大きくする必要があります。}}&lt;br /&gt;
&lt;br /&gt;
カスタムのメニューエントリの例は [[#ブートメニューエントリの例]] を見てください。&lt;br /&gt;
&lt;br /&gt;
==== 他の OS の検出 ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;grub-mkconfig&#039;&#039; で、インストールされている他のシステムを検索して自動的にメニューに追加するには、 {{Pkg|os-prober}} パッケージを [[インストール]] して、他のシステムが起動するパーティションを[[マウント]]してください。その後、&#039;&#039;grub-mkconfig&#039;&#039; を再実行します。もし、{{ic|Warning: os-prober will not be executed to detect other bootable partitions}} と出力されたら、{{ic|/etc/default/grub}} を編集して次の行を追加/アンコメントしてください:&lt;br /&gt;
&lt;br /&gt;
 GRUB_DISABLE_OS_PROBER=false&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 正確なマウントポイントは重要ではありません。&#039;&#039;os-prober&#039;&#039; は {{ic|mtab}} を読み込んで、起動可能なエントリを検索すべき場所を特定します。&lt;br /&gt;
* 他のオペレーティングシステムをエントリに含めるために、&#039;&#039;grub-mkconfig&#039;&#039; を実行するたびに対象のパーティションをマウントすることを忘れないでください。&lt;br /&gt;
* &#039;&#039;os-prober&#039;&#039; は、chroot 内で実行すると正しく動作しないかもしれません。そのような場合は、再起動してシステムに入り、再び試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|最後に選択したブートエントリを GRUB に記憶させたい場合もあるでしょう、[[GRUB/ヒントとテクニック#以前のエントリを思い出させる]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
===== Windows =====&lt;br /&gt;
&lt;br /&gt;
UEFI モードでインストールされた Windows の場合、Windows Boot Manager ({{ic|bootmgfw.efi}}) を含んでいる [[EFI システムパーティション]]がマウントされていることを確認してください。root として {{ic|os-prober}} を実行すると、Windows のエントリを検出・生成します。&lt;br /&gt;
&lt;br /&gt;
BIOS モードでインストールされた Windows の場合、Windows &#039;&#039;システムパーティション&#039;&#039; をマウントしてください (そのパーティションの[[永続的なブロックデバイスの命名#by-label|ファイルシステムラベル]]は {{ic|System Reserved}} ({{ic|システムで予約済み}}) か {{ic|SYSTEM}} であるはずです)。root として {{ic|os-prober}} を実行すると、Windows のエントリを検出・生成します。&lt;br /&gt;
&lt;br /&gt;
{{Note|BIOS モードでインストールされた Windows の場合:&lt;br /&gt;
* NTFS パーティションはデフォルトの Linux ドライバでマウントすると、必ずしも検出されないかもしれません。GRUB が検出しない場合、[[NTFS-3G]] をインストールして再マウントしてみてください。&lt;br /&gt;
{{Out of date| Windows 7 以降、{{ic|bootmgr}} は[[Wikipedia:System partition and boot partition#Microsoft definition|システムパーティション]]内にあり、このパーティションは暗号化されていません。}}&lt;br /&gt;
* 暗号化された Windows パーティションは、マウントする前に暗号化を解除する必要があるかもしれません。BitLocker では、[[cryptsetup]] や {{AUR|dislocker}} で実行できます。これで {{Pkg|os-prober}} が正しいエントリを追加できるはずです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 追加引数 ====&lt;br /&gt;
&lt;br /&gt;
カスタムの追加引数を Linux イメージに渡すために、{{ic|/etc/default/grub}} で {{ic|GRUB_CMDLINE_LINUX}} と {{ic|GRUB_CMDLINE_LINUX_DEFAULT}} 変数を設定することができます。これら2つは互いに追加され、標準のブートエントリを作成する際にカーネルに渡されます。&#039;&#039;recovery&#039;&#039; ブートエントリについては、{{ic|GRUB_CMDLINE_LINUX}} だけが生成時に使われます。&lt;br /&gt;
&lt;br /&gt;
両方を使う必要はありませんが、上手く使えば便利です。例えば、{{ic|1=GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;resume=UUID=&#039;&#039;uuid-of-swap-partition&#039;&#039; quiet&amp;quot;}} ({{ic|&#039;&#039;uuid-of-swap-partition&#039;&#039;}} は [[ハイバネート]]後に復帰できるようにするためのスワップパーティションの [[UUID]])。この例の設定では、(ハイバネートからの) 復帰をせず、メニューエントリからの起動中にカーネルメッセージを非表示にする {{ic|quiet}} も無いリカバリブートエントリを生成します。しかし、他の (標準の) メニューエントリはこれらのオプションを持ちます。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;grub-mkconfig&#039;&#039; はルートファイルシステムの [[UUID]] を検出して、設定にそれを反映します。これを無効化するには、{{ic|1=GRUB_DISABLE_LINUX_UUID=true}} をアンコメントしてください。&lt;br /&gt;
&lt;br /&gt;
GRUB リカバリエントリを生成するには、{{ic|/etc/default/grub}} 内の {{ic|GRUB_DISABLE_RECOVERY}} が {{ic|true}} に設定されていない必要があります。&lt;br /&gt;
&lt;br /&gt;
詳細は [[カーネルパラメータ]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== トップレベルのメニューエントリを設定する ====&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;grub-mkconfig&#039;&#039; は、含まれているカーネルを {{ic|sort -V}} を使ってソートし、それらの中の最初のカーネルをトップレベルのエントリとして使用します。すなわち、例えば {{ic|/boot/vmlinuz-linux-lts}} は {{ic|/boot/vmlinuz-linux}} より前に来るので、{{Pkg|linux-lts}} と {{Pkg|linux}} の両方がインストールされている場合、LTS カーネルがトップレベルのメニューエントリとなります。これは、望ましくない場合があるでしょう。この挙動は、{{ic|/etc/default/grub}} 内の {{ic|1=GRUB_TOP_LEVEL=&#039;&#039;path_to_kernel&#039;&#039;&amp;quot;}} を指定することでオーバーライドすることができます。例えば、標準のカーネルをトップレベルのメニューエントリにするには、{{ic|1=GRUB_TOP_LEVEL=&amp;quot;/boot/vmlinuz-linux&amp;quot;}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== LVM ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|GRUB はシンプロビジョニングされた論理ボリュームをサポートしていません。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot}} や {{ic|/}} に [[LVM]] を使用している場合、{{ic|lvm}} モジュールをプリロードするようにしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/default/grub|2=&lt;br /&gt;
GRUB_PRELOAD_MODULES=&amp;quot;... lvm&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== RAID ====&lt;br /&gt;
&lt;br /&gt;
GRUB は [[RAID]] ボリュームの便利な管理手段を提供します。ボリュームをネイティブに管理できるようにするために、GRUB モジュール {{ic|mdraid09}} か {{ic|mdraid1x}} をロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/default/grub|2=&lt;br /&gt;
GRUB_PRELOAD_MODULES=&amp;quot;... mdraid09 mdraid1x&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
例えば、{{ic|/dev/md0}} は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 set root=(md/0)&lt;br /&gt;
&lt;br /&gt;
パーティショニングされた RAID ボリューム (例: {{ic|/dev/md0p1}}) は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 set root=(md/0,1)&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot}} パーティションに RAID1 を使用している場合 (あるいは、{{ic|/boot}} が RAID1 ルートパーティション上に存在する場合) に GRUB をインストールするには、BIOS システム上では、両方のドライブ上で &#039;&#039;grub-install&#039;&#039; を実行してください。例:&lt;br /&gt;
&lt;br /&gt;
 # grub-install --target=i386-pc --debug /dev/sda&lt;br /&gt;
 # grub-install --target=i386-pc --debug /dev/sdb&lt;br /&gt;
&lt;br /&gt;
ここでは、{{ic|/boot}} が存在する RAID1 アレイが、{{ic|/dev/sda}} と {{ic|/dev/sdb}} に存在するとしています。&lt;br /&gt;
&lt;br /&gt;
{{Note|GRUB は [[Btrfs]] RAID 0/1/10 からの起動をサポートしていますが、RAID 5/6 はサポートしていません。RAID 5/6 に対しては [[mdadm]] を使用することができます (mdadm は GRUB によってサポートされています)。&lt;br /&gt;
&lt;br /&gt;
==== 暗号化された /boot ====&lt;br /&gt;
&lt;br /&gt;
GRUB には暗号化された {{ic|/boot}} を起動するための特別なサポートがあります。これは、[[LUKS]] ブロックデバイスをアンロックして、GRUB の設定を読み込み、[[initramfs]] と [[カーネル]] をそのブロックデバイスからロードすることにより行われます。このオプションは[[dm-crypt/特記事項#暗号化されていない boot パーティションのセキュア化|暗号化されていないブートパーティション]]の問題を解決することを試みます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/boot}} を別のパーティションに保存する必要は&#039;&#039;&#039;ありません&#039;&#039;&#039;。システムのルート {{ic|/}} ディレクトリツリー下に保存することもできます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|GRUB 2.12rc1 の LUKS2 に対するサポートは限られています。詳細は [[#LUKS2]] セクションを見てください。}}&lt;br /&gt;
&lt;br /&gt;
この機能を有効化するには、{{ic|/boot}} が存在するパーティションを通常通り [[LUKS]] を使って暗号化してください。そして、以下のオプションを {{ic|/etc/default/grub}} に追加してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/default/grub|output=&lt;br /&gt;
GRUB_ENABLE_CRYPTODISK=y&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
このオプションは grub-install により使用され、grub の {{ic|core.img}} を生成します。&lt;br /&gt;
&lt;br /&gt;
このオプションを追加した後やパーティションを暗号化した後に [[#インストール|GRUB を(再)インストール]]することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
これだけだと、パスフレーズを2回入力させられることになります。1回目は起動の初期段階で GRUB が {{ic|/boot}} マウントポイントをアンロックするためのもので、2回目は iniramfs により実装されている root ファイルシステムそれ自体をアンロックするためのものです。[[dm-crypt/デバイスの暗号化#キーファイルを initramfs に埋め込む|キーファイル]]を使えば、これを防げます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* [[#メイン設定ファイルの生成|メインの設定ファイルを生成]]したいときは、{{ic|/boot}} がマウントされていることを確認してください。&lt;br /&gt;
* {{ic|/boot}} マウントポイントが関与するシステムアップデートを行うために、アップデートする前に、暗号化された {{ic|/boot}} がアンロックされていて、かつ、マウントされていることを確認してください。{{ic|/boot}} パーティションが別にある場合、[[crypttab]] を[[dm-crypt/デバイスの暗号化#キーファイルを initramfs に埋め込む|キーファイル]]と一緒に使うことでこれを自動化できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 特殊なキーマップを使用している場合、デフォルトの GRUB 環境にはそのようなキーマップが存在しません。このことは、[[LUKS]] ブロックデバイスをアンロックするためにどのようにしてパスフレーズを入力するかに関連しています。[[GRUB/ヒントとテクニック#初期ブートにおけるコアイメージの手動設定]] を参照してください。&lt;br /&gt;
* パスワードの入力画面が表示されない問題が発生した場合 (cryptouuid や cryptodisk、&amp;quot;device not found&amp;quot; に関係するエラー)、{{ic|1=--modules=&amp;quot;part_gpt part_msdos&amp;quot;}} を {{ic|grub-install}} コマンドの最後に付け加えて GRUB を再インストールしてみてください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=[https://bbs.archlinux.org/viewtopic.php?id=234607 pacman フック] を使用すれば、{{ic|/boot}} 内のファイルにアクセスする必要のあるアップグレード時に {{ic|/boot}} を自動マウントできます。}}&lt;br /&gt;
&lt;br /&gt;
===== LUKS2 =====&lt;br /&gt;
{{Out of date|1=Grub 2.14rc1はArgon2iとArgon2id PBKDFsをサポートします。  [https://cgit.git.savannah.gnu.org/cgit/grub.git/commit/?id=6052fc2cf684dffa507a9d81f9f8b4cbe170e6b6 アップストリームのコミットを参照。]|2=:en:Talk:GRUB#grub_2:2.14rc1_added_support_for_LUKS2_+_argon2_encryption.}}&lt;br /&gt;
&lt;br /&gt;
[[#インストール]] 章で説明されているように、{{ic|grub-install}} を使用して LUKS サポートありでブータブルな GRUB イメージを作成してください。ただし、いくつかの注意点があります:&lt;br /&gt;
&lt;br /&gt;
* LUKS2 の初期サポートが GRUB 2.06 で追加されましたが、いくつかの制限があります。これらの制限は、GRUB 2.12rc1 で部分的にのみ対処されています。[https://savannah.gnu.org/bugs/?55093 GRUB bug #55093] を参照してください。&lt;br /&gt;
* GRUB 2.12rc1 から、{{ic|grub-install}} で LUKS2 のロックを解除するためのコアイメージを作成できるようになりました。しかし、PBKDF2 のみがサポートされており、Argon2 はサポートされていません。&lt;br /&gt;
* Argon2id (&#039;&#039;cryptsetup&#039;&#039; デフォルト) と Argon2i PBKDF はサポートされていません ([https://savannah.gnu.org/bugs/?59409 GRUB bug #59409])。PBKDF2 のみのサポートです。&lt;br /&gt;
&lt;br /&gt;
:{{Tip|LUKS2 と Argon のサポートパッチが施された {{AUR|grub-improved-luks2-git}} を使用できます。このパッケージの Argon サポートには UEFI システムが必要であることに注意してください。[https://aur.archlinux.org/packages/grub-improved-luks2-git#comment-911119]}}&lt;br /&gt;
&lt;br /&gt;
{{Note|GRUB 2.12rc1 より前では、カスタムの GRUB 設定ファイルを使って {{ic|grub-mkimage}} コマンドで EFI バイナリを手動で作成する必要がありました。(例えば、{{ic|/boot/grub/grub-pre.cfg}} に {{ic|cryptomount}}、{{ic|insmod normal}}、そして {{ic|normal}} への呼び出しを追加する必要がありました。) しかし、これはもはや必要なくなり、{{ic|grub-install}} だけで十分です。ただし、2.06 からアップグレードした後に少なくとも一回は {{ic|grub-mkconfig -o /boot/grub/grub.cfg}} を実行する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
起動中に無効なパスフレーズを入力して GRUB のレスキューシェルに入った場合、{{ic|cryptomount -a}} を実行してすべての (できれば1つだけ) 暗号化されたパーティションをマウントしてみてください。または、{{ic|cryptomount -u $crypto_uuid}} を使用して特定のパーティションをマウントしてください。その後、通常通り {{ic|insmod normal}} と {{ic|normal}} で進めてください。&lt;br /&gt;
&lt;br /&gt;
正しいパスフレーズを入力したが {{ic|Invalid passphrase}} というエラーにより即座に戻される場合、正しい暗号化モジュールを指定していることを確認してください。{{ic|cryptsetup luksDump &#039;&#039;/dev/nvme0n1p2&#039;&#039;}} を使って、ハッシュ関数 (SHA-256, SHA-512) とインストールされているモジュール ({{ic|gcry_sha256}}, {{ic|gcry_sha512}}) が一致するか、PBKDF アルゴリズムが pbkdf2 であるかを確認してください。{{ic|cryptsetup luksConvertKey --hash &#039;&#039;sha256&#039;&#039; --pbkdf pbkdf2 &#039;&#039;/dev/nvme0n1p2&#039;&#039;}} を使えば、ハッシュと PBDKDF アルゴリズムを今あるキーに対して変更することができます。通常の状況では、パスフレーズが処理されるのに数秒掛かるはずです。&lt;br /&gt;
&lt;br /&gt;
=== grub.cfg のカスタマイズ ===&lt;br /&gt;
&lt;br /&gt;
このセクションでは &#039;&#039;grub-mkconfig&#039;&#039; に頼らずに {{ic|/boot/grub/grub.cfg}} 内にある GRUB のブートエントリーを手動で作成する方法について言及します。&lt;br /&gt;
&lt;br /&gt;
基本的な GRUB の設定ファイルでは以下のオプションが使用されます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|(hd&#039;&#039;X&#039;&#039;,&#039;&#039;Y&#039;&#039;)}} はディスク &#039;&#039;X&#039;&#039; 上に存在するパーティション &#039;&#039;Y&#039;&#039; を表します。パーティション番号は 1 から始まり、ディスク番号は 0 から始まります。&lt;br /&gt;
* {{ic|1=set default=&#039;&#039;N&#039;&#039;}} は、ユーザーが操作せずにタイムアウトした後に選択されるデフォルトのブートエントリを表します。&lt;br /&gt;
* {{ic|1=set timeout=&#039;&#039;M&#039;&#039;}} は、ユーザーの選択が無かった場合に &#039;&#039;M&#039;&#039; 秒の間待ってデフォルトのブートエントリが起動されることを表します。&lt;br /&gt;
* {{ic|&amp;lt;nowiki&amp;gt;menuentry &amp;quot;title&amp;quot; {entry options}&amp;lt;/nowiki&amp;gt;}} は {{ic|title}} というタイトルのブートエントリを表します。&lt;br /&gt;
* {{ic|1=set root=(hd&#039;&#039;X&#039;&#039;,&#039;&#039;Y&#039;&#039;)}} はカーネルと GRUB モジュールが格納されているブートパーティションを表します。(boot は分離されたパーティションである必要はなく、単に &amp;quot;root&amp;quot; パーティション ({{ic|/}}) 下にあるディレクトリを指定しても構いません)&lt;br /&gt;
&lt;br /&gt;
==== LoaderDevicePartUUID ====&lt;br /&gt;
&lt;br /&gt;
{{man|8|systemd-gpt-auto-generator}} が [[systemd#GPT パーティションの自動マウント|GPT パーティションの自動マウント]]をするために必要な {{ic|LoaderDevicePartUUID}} UEFI 変数を GRUB で設定するには、{{ic|grub.cfg}} で {{ic|bli}} モジュールをロードしてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
if [ &amp;quot;$grub_platform&amp;quot; = &amp;quot;efi&amp;quot; ]; then&lt;br /&gt;
  insmod bli&lt;br /&gt;
fi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== ブートメニューエントリの例 ====&lt;br /&gt;
&lt;br /&gt;
{{Tip|以下のブートエントリは &#039;&#039;grub-mkconfig&#039;&#039; によって生成された {{ic|/boot/grub/grub.cfg}} でも使用可能です。以下を {{ic|/etc/grub.d/40_custom}} に追加して[[#メイン設定ファイルの生成|メインの設定ファイルを再生成]]するか、あるいは以下を直接 {{ic|/boot/grub/custom.cfg}} に追加してください。}}&lt;br /&gt;
&lt;br /&gt;
複数の GRUB エントリーを管理するヒントとして、例えば {{Pkg|linux}} と {{Pkg|linux-lts}} カーネルを同時使用している場合は [[GRUB/ヒントとテクニック#複数のエントリ]] を見てください。&lt;br /&gt;
&lt;br /&gt;
[[Archiso]] と [https://archboot.com Archboot] のブートメニューエントリについては [[マルチブート USB ドライブ#ブートエントリ]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== GRUB コマンド =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;Shutdown&amp;quot; メニューエントリ ======&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
menuentry &amp;quot;System shutdown&amp;quot; {&lt;br /&gt;
	echo &amp;quot;System shutting down...&amp;quot;&lt;br /&gt;
	halt&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;Restart&amp;quot; メニューエントリ ======&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
menuentry &amp;quot;System restart&amp;quot; {&lt;br /&gt;
	echo &amp;quot;System rebooting...&amp;quot;&lt;br /&gt;
	reboot&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;UEFI Firmware Settings&amp;quot; メニューエントリ ======&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
if [ ${grub_platform} == &amp;quot;efi&amp;quot; ]; then&lt;br /&gt;
	menuentry &#039;UEFI Firmware Settings&#039; --id &#039;uefi-firmware&#039; {&lt;br /&gt;
		fwsetup&lt;br /&gt;
	}&lt;br /&gt;
fi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリ =====&lt;br /&gt;
&lt;br /&gt;
UEFI モードで起動している場合、GRUB は他の EFI バイナリをチェインロードできます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=GRUB が UEFI モードで起動している時にだけメニューエントリを表示するには、メニューエントリを {{ic|if}} 文で囲ってください:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
if [ ${grub_platform} == &amp;quot;efi&amp;quot; ]; then&lt;br /&gt;
	&#039;&#039;UEFI のときだけ表示するメニューエントリをここへ&#039;&#039;&lt;br /&gt;
fi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====== UEFI シェル ======&lt;br /&gt;
&lt;br /&gt;
[[EFI システムパーティション]]直下に [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]] を置いてメニューエントリに追加すれば、UEFI シェルを起動できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
menuentry &amp;quot;UEFI Shell&amp;quot; {&lt;br /&gt;
	insmod fat&lt;br /&gt;
	insmod chain&lt;br /&gt;
	search --no-floppy --set=root --file /shellx64.efi&lt;br /&gt;
	chainloader /shellx64.efi&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====== gdisk ======&lt;br /&gt;
&lt;br /&gt;
[[gdisk#gdisk EFI アプリケーション|gdisk EFI アプリケーション]]をダウンロードして {{ic|gdisk_x64.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/tools/}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
menuentry &amp;quot;gdisk&amp;quot; {&lt;br /&gt;
	insmod fat&lt;br /&gt;
	insmod chain&lt;br /&gt;
	search --no-floppy --set=root --file /EFI/tools/gdisk_x64.efi&lt;br /&gt;
	chainloader /EFI/tools/gdisk_x64.efi&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====== ユニファイドカーネルイメージをチェインロード ======&lt;br /&gt;
&lt;br /&gt;
[[セキュアブート]]に従って生成したか他の方法によって生成した [[Unified カーネルイメージ]]を持っているならば、それをブートメニューに追加できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
menuentry &amp;quot;Arch Linux&amp;quot; {&lt;br /&gt;
	insmod fat&lt;br /&gt;
	insmod chain&lt;br /&gt;
	search --no-floppy --set=root --fs-uuid &#039;&#039;FILESYSTEM_UUID&#039;&#039;&lt;br /&gt;
	chainloader /EFI/Linux/arch-linux.efi&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== デュアルブート =====&lt;br /&gt;
&lt;br /&gt;
====== GNU/Linux ======&lt;br /&gt;
&lt;br /&gt;
もう一つのディストリビューションが {{ic|sda2}} パーティションにあると仮定します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
menuentry &amp;quot;Other Linux&amp;quot; {&lt;br /&gt;
	set root=(hd0,2)&lt;br /&gt;
	linux /boot/vmlinuz (必要であれば追加のオプションをここへ)&lt;br /&gt;
	initrd /boot/initrd.img (カーネルが必要とする/使用するイメージはここへ)&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
代わりに UUID やファイルシステムのラベルで GRUB に正しいパーティションを探させるには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
menuentry &amp;quot;Other Linux&amp;quot; {&lt;br /&gt;
        # UUID が 763A-9CB6 だとすると&lt;br /&gt;
	search --no-floppy --set=root --fs-uuid 763A-9CB6&lt;br /&gt;
&lt;br /&gt;
        # OTHER_LINUX というラベルで探す (パーティションラベルが曖昧でないことを確認してください)&lt;br /&gt;
        #search --no-floppy --set=root --label OTHER_LINUX&lt;br /&gt;
&lt;br /&gt;
	linux /boot/vmlinuz (必要であれば追加のオプションをここへ。例えば、root=UUID=763A-9CB6)&lt;br /&gt;
	initrd /boot/initrd.img (カーネルが必要とする/使用するイメージはここへ)&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
もう一つのディストリビューションが、インストール済みの GRUB と {{ic|grub.cfg}}、カーネル、initramfs のある有効な {{ic|/boot}} フォルダーをすでに持っているならば、GRUB にその {{ic|grub.cfg}} ファイルを起動中にその場で読み込ませることができます。例えば、{{ic|hd0}} と4番目の GPT パーティションの場合:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
menuentry &amp;quot;configfile hd0,gpt4&amp;quot;  {&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        insmod ext2&lt;br /&gt;
        set root=&#039;hd0,gpt4&#039;&lt;br /&gt;
        configfile /boot/grub/grub.cfg&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
このエントリを選ぶと GRUB は他のボリュームからその {{ic|grub.cfg}} を読み込み、メニューを表示させます。{{ic|configfile}} ファイル内のコマンドによって環境変数が変更されても、{{ic|configfile}} から返ると環境変数の変更はすべて破棄されます。始めの GRUB メニューに戻る場合は {{ic|Esc}} を押してください。&lt;br /&gt;
&lt;br /&gt;
====== UEFI/GPT モードでインストールされた Windows ======&lt;br /&gt;
&lt;br /&gt;
このモードではメニューエントリが選択されると Windows ブートローダーの場所を発見し、GRUB のあとにブートローダーをチェインロードします。ここでするべきことは主に Windows の [[EFI システムパーティション]]を見つけて、そのパーティションから Windows のブートローダーを実行することです。&lt;br /&gt;
&lt;br /&gt;
{{Note|このメニューエントリは、UEFI ブートモードで実行中であり、かつ Windows のビット数が UEFI のビット数と一致する場合にのみ機能します。BIOS モードでインストールされた GRUB では機能しません。さらなる情報については [[Windows と Arch のデュアルブート#Windows の UEFI と BIOS の制限]]と [[Windows と Arch のデュアルブート#ブートローダーの UEFI と BIOS の制限]] をご覧ください。}}&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
if [ &amp;quot;${grub_platform}&amp;quot; == &amp;quot;efi&amp;quot; ]; then&lt;br /&gt;
	menuentry &amp;quot;Microsoft Windows Vista/7/8/8.1 UEFI/GPT&amp;quot; {&lt;br /&gt;
		insmod part_gpt&lt;br /&gt;
		insmod fat&lt;br /&gt;
		insmod chain&lt;br /&gt;
		search --no-floppy --fs-uuid --set=root $hints_string $fs_uuid&lt;br /&gt;
		chainloader /EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
	}&lt;br /&gt;
fi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|$hints_string}} と {{ic|$fs_uuid}} は以下の2つのコマンドで得られます。&lt;br /&gt;
&lt;br /&gt;
{{ic|$fs_uuid}} コマンドは EFI システムパーティションの UUID を割り出します。&lt;br /&gt;
&lt;br /&gt;
{{hc|1=# grub-probe --target=fs_uuid &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi|2=&lt;br /&gt;
1ce5-7f28&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
代わりに、{{ic|lsblk --fs}} を実行して、EFI システムパーティションの UUID をそこから読み込むこともできます。&lt;br /&gt;
&lt;br /&gt;
{{ic|$hints_string}} コマンドは EFI システムパーティションの場所を割り出します。以下の例ではハードドライブ0にあります:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=# grub-probe --target=hints_string &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi|2=&lt;br /&gt;
 --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以上の2つのコマンドでは Windows が使用する ESP が {{ic|&#039;&#039;esp&#039;&#039;}} にマウントされていると仮定しています。Windows である以上、Windows の EFI ファイルへのパスが異なる場合があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
====== BIOS/MBR モードでインストールされた Windows ======&lt;br /&gt;
&lt;br /&gt;
{{Note|GRUB は {{ic|bootmgr}} ディレクトリの直接ブートをサポートしています。Windows を BIOS/MBR で起動するためにパーティションブートセクターを [https://www.gnu.org/software/grub/manual/grub.html#Chain_002dloading チェインロード]する必要はもはやありません。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{ic|/bootmgr}} が存在する場所は &#039;&#039;&#039;システムパーティション&#039;&#039;&#039; であり、&amp;quot;本当&amp;quot;の Windows パーティション (通常、{{ic|C:}}) ではありません。システムパーティションの[[永続的なブロックデバイスの命名#by-label|ファイルシステムラベル]]は {{ic|System Reserved}} ({{ic|システムで予約済み}}) か {{ic|SYSTEM}} であり、サイズは約100~549 MiB 程度です。さらなる情報については [[Wikipedia:System partition and boot partition]] をご覧ください。}}&lt;br /&gt;
&lt;br /&gt;
このセクションを通して Windows のパーティションは {{ic|/dev/sda1}} にあると仮定します。パーティションが異なる場合は {{ic|hd0,msdos1}} という記述をすべて変更してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のメニューエントリは BIOS ブートモードでのみ機能します。UEFI モードでインストールされた GRUB では機能しません。[[Windows と Arch のデュアルブート#Windows の UEFI と BIOS の制限]] と [[Windows と Arch のデュアルブート#ブートローダーの UEFI と BIOS の制限]] をご覧ください。}}&lt;br /&gt;
&lt;br /&gt;
両方の例で {{ic|&#039;&#039;XXXX-XXXX&#039;&#039;}} はファイルシステムの UUID を表しています。UUID は {{ic|lsblk --fs}} コマンドを使って得られます。実際の UUID に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
Windows Vista/7/8/8.1/10 では:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
if [ &amp;quot;${grub_platform}&amp;quot; == &amp;quot;pc&amp;quot; ]; then&lt;br /&gt;
	menuentry &amp;quot;Microsoft Windows Vista/7/8/8.1/10 BIOS/MBR&amp;quot; {&lt;br /&gt;
		insmod part_msdos&lt;br /&gt;
		insmod ntfs&lt;br /&gt;
		insmod ntldr&lt;br /&gt;
		search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 &#039;&#039;XXXX-XXXX&#039;&#039;&lt;br /&gt;
		ntldr /bootmgr&lt;br /&gt;
	}&lt;br /&gt;
fi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Windows XP では:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
if [ &amp;quot;${grub_platform}&amp;quot; == &amp;quot;pc&amp;quot; ]; then&lt;br /&gt;
	menuentry &amp;quot;Microsoft Windows XP&amp;quot; {&lt;br /&gt;
		insmod part_msdos&lt;br /&gt;
		insmod ntfs&lt;br /&gt;
		insmod ntldr&lt;br /&gt;
		search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 &#039;&#039;XXXX-XXXX&#039;&#039;&lt;br /&gt;
		ntldr /ntldr&lt;br /&gt;
	}&lt;br /&gt;
fi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|GRUB をインストールすると Windows 8 が汚染される場合があります。この場合、{{ic|\boot\bcd}} (エラーコード {{ic|0xc000000f}})のエラーにより Windows が起動できなくなります。これを直すには Windows 回復コンソール(インストールディスク上にある {{ic|cmd.exe}})を開いて、以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 X:\&amp;gt; bootrec.exe /fixboot&lt;br /&gt;
 X:\&amp;gt; bootrec.exe /RebuildBcd&lt;br /&gt;
&lt;br /&gt;
{{ic|bootrec.exe /Fixmbr}} を&#039;&#039;&#039;実行しない&#039;&#039;&#039;でください。GRUB が吹き飛びます。&lt;br /&gt;
あるいは、トラブルシューティングメニューにあるスタートアップ修復機能を使用できます。これは GRUB を吹き飛ばしませんし、ほとんどのエラーを修復します。&lt;br /&gt;
また、対象のハードドライブとブート可能ドライブの両方&#039;&#039;&#039;だけ&#039;&#039;&#039;を接続しておくほうが良いでしょう。通常、他のデバイスが接続されていると Windows はブート情報の修復に失敗します。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== ラベルを使う =====&lt;br /&gt;
&lt;br /&gt;
{{ic|search}} コマンドに対して {{ic|--label}} オプションを使えば、ファイルシステムに付けられた人間が読みやすい文字列であるラベルを使うことができます。まずはじめに、[[永続的なブロックデバイスの命名#by-label|ファイルシステムにラベルがあることを確認]]してください。&lt;br /&gt;
&lt;br /&gt;
そして、ラベルを使ってエントリを追加してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 menuentry &amp;quot;Arch Linux, session texte&amp;quot; {&lt;br /&gt;
   search --label --set=root archroot&lt;br /&gt;
   linux /boot/vmlinuz-linux root=/dev/disk/by-label/archroot ro&lt;br /&gt;
   initrd /boot/initramfs-linux.img&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== コマンドシェルを使う ==&lt;br /&gt;
&lt;br /&gt;
GRUB のモジュールを全て保存するには MBR は小さすぎるので、メニューと基本的なコマンドだけが MBR に入っています。GRUB の機能のほとんどは {{ic|/boot/grub}} 内のモジュールとして存在し、必要に応じて挿入されます。エラー状態になると (例: パーティションレイアウトが変更された場合)、GRUB が起動に失敗する場合があります。このとき、コマンドシェルが表示されます。&lt;br /&gt;
&lt;br /&gt;
GRUB は複数のシェル/プロンプトを提供しています。メニューの読込に問題があってもブートローダがディスクを見つけられるときは、おそらく &amp;quot;normal&amp;quot; シェルに落とされるでしょう:&lt;br /&gt;
&lt;br /&gt;
 grub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
さらに深刻な問題 (例: GRUB が必要なファイルを見つけられないなど) があるときは、代わりに &amp;quot;rescue&amp;quot; シェルに落とされるでしょう:&lt;br /&gt;
&lt;br /&gt;
 grub rescue&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rescue シェルは通常のシェルの制限されたサブセットで、使える機能が非常に少なくなっています。rescue シェルが出てきた時は、まず &amp;quot;normal&amp;quot; モジュールの挿入を試して、&amp;quot;normal&amp;quot; シェルを起動してみて下さい:&lt;br /&gt;
&lt;br /&gt;
 grub rescue&amp;gt; set prefix=(hdX,Y)/boot/grub&lt;br /&gt;
 grub rescue&amp;gt; insmod (hdX,Y)/boot/grub/i386-pc/normal.mod&lt;br /&gt;
 rescue:grub&amp;gt; normal&lt;br /&gt;
&lt;br /&gt;
=== ページャのサポート ===&lt;br /&gt;
&lt;br /&gt;
GRUB はページャをサポートしており長い出力をするコマンド ({{ic|help}} コマンドなど) を読むことができます。これは通常のシェルモードでしか動作せずレスキューモードでは使えません。ページャを有効にするには、GRUB コマンドシェルで次を入力して下さい:&lt;br /&gt;
&lt;br /&gt;
 sh:grub&amp;gt; set pager=1&lt;br /&gt;
&lt;br /&gt;
=== コマンドシェル環境を使ってオペレーティングシステムを起動する ===&lt;br /&gt;
&lt;br /&gt;
 grub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GRUB のコマンドシェル環境を使ってオペレーティングシステムを起動することが可能です。&lt;br /&gt;
通常は&#039;&#039;&#039;チェインロード&#039;&#039;&#039;を使ってドライブやパーティションから Windows / Linux を起動するということが考えられます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;チェインロード&#039;&#039;は現在のブートローダから別のブートローダをロードすることを意味します。&lt;br /&gt;
&lt;br /&gt;
他のブートローダーは、パーティショニングされたディスク (MBR) の先頭や、パーティションレスディスク (VBR) のパーティションの先頭に組み込んだり、あるいは UEFI の場合は EFI バイナリとして組み込むことができます。&lt;br /&gt;
&lt;br /&gt;
==== パーティションの VBR をチェインロード ====&lt;br /&gt;
&lt;br /&gt;
 set root=(hdX,Y)&lt;br /&gt;
 chainloader +1&lt;br /&gt;
 boot&lt;br /&gt;
&lt;br /&gt;
X=0,1,2...&lt;br /&gt;
Y=1,2,3...&lt;br /&gt;
&lt;br /&gt;
例えば最初のハードディスクの最初のパーティションに保存された Windows をチェインロードするには:&lt;br /&gt;
&lt;br /&gt;
 set root=(hd0,1)&lt;br /&gt;
 chainloader +1&lt;br /&gt;
 boot&lt;br /&gt;
&lt;br /&gt;
同じようにパーティションにインストールされた GRUB をチェインロードすることもできます。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの MBR やパーティションレスディスクの VBR をチェインロード ====&lt;br /&gt;
&lt;br /&gt;
 set root=hdX&lt;br /&gt;
 chainloader +1&lt;br /&gt;
 boot&lt;br /&gt;
&lt;br /&gt;
==== UEFI モードでインストールされた Windows/Linux のチェインロード ====&lt;br /&gt;
&lt;br /&gt;
 insmod fat&lt;br /&gt;
 set root=(hd0,gpt4)&lt;br /&gt;
 chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
 boot&lt;br /&gt;
&lt;br /&gt;
{{ic|insmod fat}} は、EFI システムパーティション上の Windows ブートローダーにアクセするために、FAT ファイルシステムモジュールをロードするために使用されます。&lt;br /&gt;
{{ic|(hd0,gpt4)}} (すなわち {{ic|/dev/sda4}}) は、この例における EFI システムパーティションです。&lt;br /&gt;
{{ic|chainloader}} 行のエントリは、チェインロードすべき &#039;&#039;.efi&#039;&#039; ファイルへのパスを指定しています。&lt;br /&gt;
&lt;br /&gt;
==== 通常のロード ====&lt;br /&gt;
&lt;br /&gt;
[[#rescue コンソールを使う]] の例を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== rescue コンソールを使う ===&lt;br /&gt;
&lt;br /&gt;
まず [[#コマンドシェルを使う]] を見て下さい。標準シェルを有効にできない場合、ライブ CD や他のレスキューディスクを使って起動し、設定のエラーを直して GRUB を再インストールという方法があります。ただし、そのようなブートディスクはいつも使えるというわけではありません (もしくは必要ありません); レスキューコンソールは驚くほど堅牢です。&lt;br /&gt;
&lt;br /&gt;
GRUB rescue で利用できるコマンドには {{ic|insmod}}、{{ic|ls}}、{{ic|set}}、{{ic|unset}} があります。この例では {{ic|set}} と {{ic|insmod}} を使います。{{ic|set}} は変数を変更し {{ic|insmod}} は新しいモジュールを挿入して機能を追加します。&lt;br /&gt;
&lt;br /&gt;
始める前に、ユーザーは自分の {{ic|/boot}} パーティションの位置を知っていなければなりません (分割パーティションなのか、root 下のサブディレクトリなのか):&lt;br /&gt;
&lt;br /&gt;
 grub rescue&amp;gt; set prefix=(hd&#039;&#039;X&#039;&#039;,&#039;&#039;Y&#039;&#039;)/boot/grub&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;X&#039;&#039;}} は物理ドライブ番号、{{ic|&#039;&#039;Y&#039;&#039;}} はパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|boot パーティションを分割している場合、パスから {{ic|/boot}} を省いて下さい (つまり、{{ic|1=set prefix=(hd&#039;&#039;X&#039;&#039;,&#039;&#039;Y&#039;&#039;)/grub}} と入力する)。}}&lt;br /&gt;
&lt;br /&gt;
コンソールの機能を拡張するために、{{ic|linux}} モジュールを挿入します:&lt;br /&gt;
&lt;br /&gt;
 grub rescue&amp;gt; insmod i386-pc/linux.mod&lt;br /&gt;
&lt;br /&gt;
もしくは、単純に:&lt;br /&gt;
&lt;br /&gt;
 grub rescue&amp;gt; insmod linux&lt;br /&gt;
&lt;br /&gt;
これで、より親しみのあるであろう {{ic|linux}} と {{ic|initrd}} のコマンドが使えます。&lt;br /&gt;
&lt;br /&gt;
例えば、Arch Linux を起動する場合:&lt;br /&gt;
&lt;br /&gt;
 set root=(hd0,5)&lt;br /&gt;
 linux /boot/vmlinuz-linux root=/dev/sda5&lt;br /&gt;
 initrd /boot/initramfs-linux.img&lt;br /&gt;
 boot&lt;br /&gt;
&lt;br /&gt;
boot パーティションを分割している (例えば、UEFI を使用している場合など) なら、行を適宜変更する必要があります:&lt;br /&gt;
&lt;br /&gt;
{{Note|boot は別のパーティションであり、ルートパーティションの一部ではないので、上の prefix 変数と同じような形式で boot パーティションを手動で指定する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
 set root=(hd0,5)&lt;br /&gt;
 linux (hd&#039;&#039;X&#039;&#039;,&#039;&#039;Y&#039;&#039;)/vmlinuz-linux root=/dev/sda6&lt;br /&gt;
 initrd (hd&#039;&#039;X&#039;&#039;,&#039;&#039;Y&#039;&#039;)/initramfs-linux.img&lt;br /&gt;
 boot&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|linux}} コマンドの実行中に {{ic|error: premature end of file /YOUR_KERNEL_NAME}} と表示される場合は、代わりに {{ic|linux16}} を使ってみて下さい。}}&lt;br /&gt;
&lt;br /&gt;
Arch Linux 環境のブートに成功したら、必要に応じて {{ic|grub.cfg}} を修正し GRUB を再インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
GRUB を再インストールして問題を完全に修正するには、必要応じて {{ic|/dev/sda}} を変更してください。詳しくは [[#インストール]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
== GRUB を消去 ==&lt;br /&gt;
&lt;br /&gt;
=== UEFI システム ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;grub&#039;&#039; を削除する前に、他のブートローダがインストールされていて、GRUB の後を引き継ぐように設定されていることを確認してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ efibootmgr|&lt;br /&gt;
BootOrder: 0003,0001,0000,0002&lt;br /&gt;
Boot0000* Windows Boot Manager  HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)&lt;br /&gt;
Boot0001* GRUB  HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\GRUB\grubx64.efi)&lt;br /&gt;
Boot0002* Linux-Firmware-Updater        HD(2,GPT,5dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\arch\fwupdx64.efi)&lt;br /&gt;
Boot0003* Linux Boot Manager    HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\systemd\systemd-bootx64.efi)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BootOrder}} で &#039;&#039;grub&#039;&#039; が最初のエントリになっている場合、[[systemd-boot]] などの他のブートローダをインストールして最初のエントリにしてください。その後、&#039;&#039;bootnum&#039;&#039; を使って &#039;&#039;grub&#039;&#039; を削除することができます。&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --delete-bootnum -b 1&lt;br /&gt;
&lt;br /&gt;
また、{{ic|&#039;&#039;esp&#039;&#039;/EFI/grub}} と {{ic|/boot/grub}} ディレクトリも削除してください。&lt;br /&gt;
&lt;br /&gt;
=== BIOS システム ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;grub&#039;&#039; を他の BIOS ブートローダに置き換えるには、単に新しいブートローダをインストールしてください (そうすることで、[[パーティショニング#Master Boot Record (bootstrap code)|MBR ブートコード]]が上書きされます)。&lt;br /&gt;
&lt;br /&gt;
{{ic|grub-install}} は {{ic|/boot/grub}} ディレクトリを作成するので、これは手動で削除する必要があります。しかし、&#039;&#039;grub&#039;&#039; をまたインストールするかもしれない場合は、このディレクトリを残しておいたほうが良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
UEFI/GPT に移行した後は、[[dd#ブートローダーの削除|dd を使って MBR ブートコードを削除する]]ことができます。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== サポートのないファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
GRUB が root のファイルシステムをサポートしていない場合、代替の {{ic|/boot}} パーティションをサポートのあるファイルシステムで作成する必要があります。​開発バージョンの GRUB である {{aur|grub-git}} が該当するファイルシステムをネイティブサポートしている場合があります。&lt;br /&gt;
&lt;br /&gt;
サポートされないファイルシステムで GRUB を使用した場合、ドライブの [[UUID]] を抽出できないため、GRUB は古典的で非永続的な {{ic|/dev/&#039;&#039;sdXx&#039;&#039;}} 名を使います。この場合、{{ic|/boot/grub/grub.cfg}} を手動で編集し、{{ic|1=root=/dev/&#039;&#039;sdXx&#039;&#039;}} を {{ic|1=root=UUID=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039;}} のように置き換える必要があるかもしれません。{{ic|blkid}} コマンドを使えばデバイスの UUID を得られます。[[永続的なブロックデバイスの命名]] を見てください。&lt;br /&gt;
&lt;br /&gt;
GRUB はバージョン 2.0.4 より [[F2FS]] をサポートしていますが、{{ic|extra_attr}} フラグを有効にして作成された F2FS パーティションからブートファイルを正しく読み込むことができません。&lt;br /&gt;
&lt;br /&gt;
=== デバッグメッセージを有効にする ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この変更は[[#メイン設定ファイルの生成|メインの設定ファイルを生成]]すると上書きされます。}}&lt;br /&gt;
&lt;br /&gt;
以下を {{ic|grub.cfg}} に追加してください:&lt;br /&gt;
&lt;br /&gt;
 set pager=1&lt;br /&gt;
 set debug=all&lt;br /&gt;
&lt;br /&gt;
=== msdos-style エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
 grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding will not be possible!&lt;br /&gt;
 grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.&lt;br /&gt;
             However, blocklists are UNRELIABLE and its use is discouraged.&lt;br /&gt;
 grub-setup: error: If you really want blocklists, use --force.&lt;br /&gt;
&lt;br /&gt;
このエラーは VMware コンテナに GRUB をインストールしようとすると起こることがあります。詳しくは [https://bbs.archlinux.org/viewtopic.php?pid=581760#p581760 ここ] を読んで下さい。最初のパーティションが MBR (ブロック 63) のすぐ後ろから始まっていて、最初のパーティションの前に通常の 1 MiB のスペース (2048 ブロック) がない場合に起こります。[[#Master Boot Record (MBR) 特有の手順]] を読んで下さい。&lt;br /&gt;
&lt;br /&gt;
=== UEFI ===&lt;br /&gt;
&lt;br /&gt;
==== よくあるインストール時のエラー ====&lt;br /&gt;
&lt;br /&gt;
* 一部の UEFI デバイスで起こりうるエラーは、{{ic|Could not prepare Boot variable: Read-only file system}} です。{{ic|/sys/firmware/efi/efivars}} を読み書き可能な状態で再マウントする必要があります。{{bc|# mount -o remount,rw,nosuid,nodev,noexec --types efivarfs efivarfs /sys/firmware/efi/efivars}} [[ブートローダー]]のインストールに関しては [[Gentoo:Handbook:AMD64/Installation/Bootloader#Install|Gentoo Wiki]] を見てください。&lt;br /&gt;
* &#039;&#039;sysfs&#039;&#039; か &#039;&#039;procfs&#039;&#039; がある状態で &#039;&#039;grub-install&#039;&#039; を実行すると問題が発生し、{{ic|modprobe efivarfs}} を実行しなければならないと言われる場合、[[Unified Extensible Firmware Interface#efivarfs のマウント|efivarfs をマウント]]して上記のコマンドを実行してみてください。&lt;br /&gt;
* {{ic|--target}} と {{ic|--directory}} オプションのどちらかがないと、{{ic|grub-install}} はどこにファームウェアをインストールすればいいのか決められません。そのような場合 {{ic|grub-install}} は {{ic|source_dir does not exist. Please specify --target or --directory}} というメッセージを表示します。&lt;br /&gt;
* grub-install の実行後に {{ic|error: &#039;&#039;esp&#039;&#039; doesn&#039;t look like an EFI partition}} と表示される場合、おそらくパーティションが [[FAT32]] でフォーマットされていません。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアブートマネージャーに GRUB エントリを作成する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|grub-install}} は自動的にブートマネージャーにメニューエントリを追加しようと試みます。もし GRUB がそれを行わない場合、[[UEFI#efibootmgr]] を見て、{{ic|efibootmgr}} を使ってメニューエントリを作成する指示を読んでください。しかし、[[UEFI#ISO から UEFI ブータブル USB を作成する]] にあるように、よくある原因は CD/USB を UEFI モードで起動していないというものです。&lt;br /&gt;
&lt;br /&gt;
GRUB エントリをファームウェアブートマネージャに作成する例として、{{ic|efibootmgr -c}} を考えてみましょう。これは、{{ic|/dev/sda1}} が EFI システムパーティションであり、{{ic|/boot/efi}} にマウントされていると仮定します。これは {{ic|efibootmgr}} のデフォルトの挙動です。このツールは、(&amp;quot;Linux&amp;quot; という名前の) 新しいブートオプションを作成し、それをブート順序リストの1番目に配置します。オプションを渡すことでデフォルトの挙動を変更できます。デフォルトの OS ローダーは {{ic|\EFI\arch\grub.efi}} です。&lt;br /&gt;
&lt;br /&gt;
==== レスキューシェルが起動する ====&lt;br /&gt;
&lt;br /&gt;
GRUB はロードされたが、エラーが表示されずにレスキューシェルに落とされる場合、以下の2つの理由のうち1つが原因である可能性があります:&lt;br /&gt;
&lt;br /&gt;
* {{ic|grub.cfg}} が存在しないか、場所を間違えている。{{ic|--boot-directory}} を使って GRUB UEFI をインストールして、{{ic|grub.cfg}} が存在しない場合に起こります。&lt;br /&gt;
* ブートパーティションが変更された ({{ic|grubx64.efi}} ファイルにハードコードされています)。&lt;br /&gt;
&lt;br /&gt;
==== GRUB UEFI がロードされない ====&lt;br /&gt;
&lt;br /&gt;
有効な UEFI の例:&lt;br /&gt;
&lt;br /&gt;
{{hc|# efibootmgr -u|&lt;br /&gt;
BootCurrent: 0000&lt;br /&gt;
Timeout: 3 seconds&lt;br /&gt;
BootOrder: 0000,0001,0002&lt;br /&gt;
Boot0000* GRUB HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\EFI\GRUB\grubx64.efi)&lt;br /&gt;
Boot0001* Shell HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\shellx64.efi)&lt;br /&gt;
Boot0002* Festplatte BIOS(2,0,00)P0: SAMSUNG HD204UI&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
画面が数秒間真っ暗になって、その後、次のブートオプションが試行される場合、[https://bbs.archlinux.org/viewtopic.php?pid=981560#p981560 この投稿]によると、GRUB をルートパーティションに移動することで直るかもしれません。ブートオプションは削除して後でまた作成する必要があります。GRUB のエントリは次のようにしてください:&lt;br /&gt;
&lt;br /&gt;
 Boot0000* GRUB HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\grubx64.efi)&lt;br /&gt;
&lt;br /&gt;
==== デフォルト/フォールバックのブートパス ====&lt;br /&gt;
&lt;br /&gt;
一部の UEFI ファーウェアではブート可能なファイルが既知の場所に存在している必要があり、それ以外の場所では UEFI NVRAM ブートエントリに表示されません。この場合、{{ic|grub-install}} が、GRUB を起動するエントリが {{ic|efibootmgr}} によって追加されたと報告するでしょうが、VisualBIOS のブート順序セレクターには表示されません。解決策は GRUB をデフォルト/フォールバックのブートパスにインストールすることです:&lt;br /&gt;
&lt;br /&gt;
 # grub-install --target=x86_64-efi --efi-directory=&#039;&#039;esp&#039;&#039; &#039;&#039;&#039;--removable&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あるいは、すでにインストールされた GRUB の EFI 実行ファイルをデフォルト/フォールバックのパスに移動することができます:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/grub &#039;&#039;esp&#039;&#039;/EFI/BOOT&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
=== Invalid signature ===&lt;br /&gt;
&lt;br /&gt;
(例えば、パーティションを再設定したり、追加のハードドライブを追加したりしたあとで) Windows を起動しようとして &amp;quot;invalid signature&amp;quot; エラーが発生する場合、GRUB のデバイス設定を移動 (削除) し、GRUB に再設定させてください:&lt;br /&gt;
&lt;br /&gt;
 # mv /boot/grub/device.map /boot/grub/device.map-old&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
これで {{ic|grub-mkconfig}} は Windows を含む全てのブートオプションを記述したはずです。これで動作したら、{{ic|/boot/grub/device.map-old}} は削除してください。&lt;br /&gt;
&lt;br /&gt;
=== 起動中にフリーズする ===&lt;br /&gt;
&lt;br /&gt;
GRUB がカーネルと初期 RAM ディスクをロードした後に、エラーメッセージが表示されずにフリーズする場合、{{ic|add_efi_memmap}} カーネルパラメータを削除してみてください。&lt;br /&gt;
&lt;br /&gt;
=== 他の OS から Arch が見つからない ===&lt;br /&gt;
&lt;br /&gt;
他のディストリビューションで {{ic|os-prober}} を使って Arch Linux を自動的に検索できないという報告が複数確認されています。この問題が発生する場合、{{ic|/etc/lsb-release}} をおくことで検知が改善されると報告されています。このファイルと更新ツールは[[公式リポジトリ]]にある {{Pkg|lsb-release}} パッケージから利用可能です。&lt;br /&gt;
&lt;br /&gt;
=== chroot でインストールした時に警告が表示される ===&lt;br /&gt;
&lt;br /&gt;
(システムのインストール中などに) chroot 環境で LVM システム上に GRUB をインストールする際に、以下のような警告が発生する場合があります:&lt;br /&gt;
&lt;br /&gt;
 /run/lvm/lvmetad.socket: connect failed: No such file or directory&lt;br /&gt;
&lt;br /&gt;
または&lt;br /&gt;
&lt;br /&gt;
 WARNING: failed to connect to lvmetad: No such file or directory. Falling back to internal scanning.&lt;br /&gt;
&lt;br /&gt;
これは、{{ic|/run}} が chroot 内で利用可能でないから起こります。すべてが正しく行われていれば、これらの警告のせいでシステムが起動できなくなることはありません。インストールを継続することができます。&lt;br /&gt;
&lt;br /&gt;
=== GRUB のロードが遅い ===&lt;br /&gt;
&lt;br /&gt;
ディスク容量が残りわずかの場合 GRUB がロードされるのにかなり時間がかかることがあります。起動が遅い場合 {{ic|/boot}} や {{ic|/}} に十分な空き容量があるか確認してください。&lt;br /&gt;
&lt;br /&gt;
=== error: unknown filesystem ===&lt;br /&gt;
&lt;br /&gt;
GRUB が {{ic|error: unknown filesystem}} と出力して起動しない理由はいくつか考えられます。[[UUID]] が正しいこと、全てのファイルシステムが問題なく、GRUB によってサポートされていることが確認できる場合、[[#GUID Partition Table (GPT) 特有の手順|BIOS Boot Partition]] がドライブの最初の 2TB の中にない可能性があります [https://bbs.archlinux.org/viewtopic.php?id=195948]。適当なパーティショニングツールを使ってパーティションが最初の 2TB 以内にあるようにして、GRUB を再インストール・再設定してください。&lt;br /&gt;
&lt;br /&gt;
また、このエラーは [[ext4]] ファイルシステムがいくつかの機能をサポートしていないことが原因かもしれません:&lt;br /&gt;
* {{ic|large_dir}} - サポートされません。&lt;br /&gt;
* {{ic|metadata_csum_seed}} - GRUB 2.11 でサポートされます ([https://git.savannah.gnu.org/cgit/grub.git/commit/?id=7fd5feff97c4b1f446f8fcf6d37aca0c64e7c763 コミット]).&lt;br /&gt;
&lt;br /&gt;
{{Warning| {{ic|/boot}} ファイルシステム上で[[ファイルシステム]]の新しい機能を有効化する前に、GRUB がそれらをサポートしていることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
=== grub-reboot で再設定されない ===&lt;br /&gt;
&lt;br /&gt;
GRUB は Btrfs のルートパーティションに書き込むを行うことができません [https://bbs.archlinux.org/viewtopic.php?id=166131]。grub-reboot を使って他のエントリを起動した場合、ディスク上の環境を更新することができなくなります。(ディストリビューションを切り替えるなどの場合に) 他のエントリから grub-reboot を実行するか他のファイルシステムを使ってください。{{ic|grub-editenv create}} を実行して {{ic|/etc/default/grub}} に {{ic|GRUB_DEFAULT&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;0}} を設定することでエントリをリセットできます (設定後は {{ic|grub-mkconfig -o /boot/grub/grub.cfg}} を行ってください)。&lt;br /&gt;
&lt;br /&gt;
=== 古い Btrfs のせいでインストールができない ===&lt;br /&gt;
&lt;br /&gt;
パーティションテーブルを作成しないで Btrfs を使ってドライブをフォーマットしている場合 (例: {{ic|/dev/sdx}})、後からパーティションテーブルを書き込むと、Btrfs のフォーマットが一部残留します。ほとんどのユーティリティや OS は残留した Btrfs を認識できないため、GRUB は (たとえ --force が付けられていても) インストールを拒否します:&lt;br /&gt;
&lt;br /&gt;
 # grub-install: warning: Attempting to install GRUB to a disk with multiple partition labels. This is not supported yet..&lt;br /&gt;
 # grub-install: error: filesystem `btrfs&#039; does not support blocklists.&lt;br /&gt;
&lt;br /&gt;
ドライブを完全に消去してもいいですが、{{ic|wipefs -o 0x10040 /dev/sdx}} を使えばデータを残して Btrfs のスーパーブロックだけを消去することができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows 8/10 が認識されない ===&lt;br /&gt;
&lt;br /&gt;
Windows 8/10 の &amp;quot;高速スタートアップ&amp;quot;、&amp;quot;ハイブリッドブート&amp;quot;、&amp;quot;Hiberboot&amp;quot; と呼ばれる設定を有効にしていると Windows のパーティションをマウントすることができなくなる可能性があります。そのため {{ic|grub-mkconfig}} が Windows を認識することができなくなります。Windows で高速スタートアップを無効化することで GRUB のメニューに追加することができるようになるはずです。&lt;br /&gt;
&lt;br /&gt;
=== grub-rescue プロンプトと暗号化済み /boot ===&lt;br /&gt;
&lt;br /&gt;
[[#暗号化された /boot|暗号化済みの /boot]] を使用している場合に間違ったパスワードを入力してしまうと  grub-rescue プロンプトに入ります。&lt;br /&gt;
&lt;br /&gt;
この grub-rescue プロンプトではできることが限られています。以下のコマンドを使ってブートを完了させます:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
grub rescue&amp;gt; cryptomount &amp;lt;partition&amp;gt;&lt;br /&gt;
grub rescue&amp;gt; insmod normal&lt;br /&gt;
grub rescue&amp;gt; normal&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
より良い説明は[https://blog.stigok.com/2017/12/29/decrypt-and-mount-luks-disk-from-grub-rescue-mode.html このブログ投稿]{{Dead link|2023|04|23|status=404}}をご覧ください。&lt;br /&gt;
&lt;br /&gt;
=== GRUB をインストールしたが起動時にメニューが表示されない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/default/grub}} を見て {{ic|GRUB_TIMEOUT}} が {{ic|0}} に設定されていないかチェックしてください。{{ic|0}} に設定されていた場合、正の数に設定し直してください。この値はデフォルトの GRUB エントリが起動されるまでの秒数を表しています。{{ic|GRUB_TIMEOUT_STYLE}} が {{ic|hidden}} に設定されていないかもチェックしてください。{{ic|hidden}} に設定されていた場合、{{ic|menu}} に設定し直してください。これでメニューがデフォルトで表示されるようになります。以上が終わったら、[[#メイン設定ファイルの生成|メインの設定ファイルを再生成]]して、再起動してメニューが表示されるか確かめてください。&lt;br /&gt;
&lt;br /&gt;
これでうまく行かない場合、グラフィカルターミナルとの互換性の問題があるのかもしれません。{{ic|/etc/default/grub}} で {{ic|GRUB_TERMINAL_OUTPUT}} を {{ic|console}} に設定し、GRUB のグラフィカルターミナルを無効化してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [[Wikipedia:ja:GNU GRUB]]&lt;br /&gt;
* [https://www.gnu.org/software/grub/manual/grub.html 公式 GRUB マニュアル]&lt;br /&gt;
* [https://help.ubuntu.com/community/Grub2 Ubuntu wiki の GRUB ページ]&lt;br /&gt;
* [https://help.ubuntu.com/community/UEFIBooting UEFI システム用にコンパイルする手順を説明している GRUB wiki ページ]&lt;br /&gt;
* [[Wikipedia:BIOS Boot partition]]&lt;br /&gt;
* [https://web.archive.org/web/20160424042444/http://members.iinet.net/~herman546/p20/GRUB2%20Configuration%20File%20Commands.html#Editing_etcgrub.d05_debian_theme How to configure GRUB]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|GRUB|2024-08-26|812848}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41508</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41508"/>
		<updated>2026-05-07T06:03:41Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* 公式の ISO をカスタムの鍵で署名する */ shellia32.efi が配布されなくなったので該当部分を削除&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[hu:Unified Extensible Firmware Interface (Magyar)/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ([https://gitlab.archlinux.org/archlinux/archiso/-/issues/69 archlinux/archiso#69])。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://archboot.com/ Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== OpROM 署名を特定する ====&lt;br /&gt;
&lt;br /&gt;
署名された OpROM があるかどうかを確認するには、次の手順に従います。&lt;br /&gt;
&lt;br /&gt;
OpROM を搭載したすべてのデバイスを一覧表示します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ find /sys/devices/ -name rom|&lt;br /&gt;
/sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
 ...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これは、署名付き EFI ROM を搭載した Intel DC SSD の例です。デバイスごとに以下の手順を繰り返してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lspci -s 81:00.0|&lt;br /&gt;
81:00.0 Non-Volatile memory controller: Intel Corporation PCIe Data Center SSD (rev 01)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ROM をダンプします:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
 # cat /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom &amp;gt; ~/intel_ssd.rom&lt;br /&gt;
 # echo 0 &amp;gt; /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
&lt;br /&gt;
TianoCore の [https://github.com/tianocore/edk2.git EDK II ツール] 取得してコンパイルします:&lt;br /&gt;
&lt;br /&gt;
 $ make -C BaseTools&lt;br /&gt;
&lt;br /&gt;
ROM ファイルを解析します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ./BaseTools/Source/C/bin/EfiRom -d ~/intel_ssd.rom|&lt;br /&gt;
Image 1 -- Offset 0x0&lt;br /&gt;
  ROM header contents&lt;br /&gt;
    Signature              0xAA55&lt;br /&gt;
    PCIR offset            0x001C&lt;br /&gt;
    Signature               PCIR&lt;br /&gt;
    Vendor ID               0x8086&lt;br /&gt;
    Device ID               0x0953&lt;br /&gt;
    Length                  0x001C&lt;br /&gt;
    Revision                0x0003&lt;br /&gt;
    DeviceListOffset        0x00&lt;br /&gt;
    Class Code              0x000000&lt;br /&gt;
    Image size              0x6A00&lt;br /&gt;
    Code revision:          0x0000&lt;br /&gt;
    MaxRuntimeImageLength   0x00&lt;br /&gt;
    ConfigUtilityCodeHeaderOffset 0x00&lt;br /&gt;
    DMTFCLPEntryPointOffset 0x00&lt;br /&gt;
    Indicator               0x80   (last image)&lt;br /&gt;
    Code type               0x03   (EFI image)&lt;br /&gt;
  EFI ROM header contents&lt;br /&gt;
    EFI Signature          0x0EF1&lt;br /&gt;
    Compression Type       0x0001 (compressed)&lt;br /&gt;
    Machine type           0x8664 (X64)&lt;br /&gt;
    Subsystem              0x000B (EFI boot service driver)&lt;br /&gt;
    EFI image offset       0x0038 (@0x38)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これはこの OpROM に、オフセット 0x0 のイメージ 1 の、オフセット 0x0038 に圧縮された  EFI イメージがあることを示します。&lt;br /&gt;
&lt;br /&gt;
EFI セクションを取得します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=intel_ssd.rom ibs=1 skip=$(( 0x00 + 0x38 )) of=intel_ssd.rom.efi.compressed&lt;br /&gt;
&lt;br /&gt;
バイナリイメージを解凍します:&lt;br /&gt;
&lt;br /&gt;
 $ ./BaseTools/Source/C/bin/TianoCompress -d --uefi -v ~/intel_ssd.rom.efi.compressed -o ~/intel_ssd.rom.efi&lt;br /&gt;
&lt;br /&gt;
{{hc|$ file ../intel_ssd.rom.efi|&lt;br /&gt;
../intel_ssd.rom.efi: PE32+ executable for EFI (boot service driver), x86-64, 6 sections&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} で署名を調べると、Microsoft の DB 証明書で署名されていることがわかります:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ sbverify --list ~/intel_ssd.rom.efi|2=&lt;br /&gt;
signature 1&lt;br /&gt;
image signature issuers:&lt;br /&gt;
 - /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
image signature certificates:&lt;br /&gt;
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/OU=MOPR/CN=Microsoft Windows UEFI Driver Publisher&lt;br /&gt;
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation Third Party Marketplace Root&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|デバイスの文鎮化を回避するために、署名された ROM を搭載したグラフィックカードを使用している場合は、独自のキーを登録した後、セキュア ブート DB に必要な発行者が保持されていることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== GRUB で sbctl を使う =====&lt;br /&gt;
&lt;br /&gt;
[[GRUB#セキュアブートサポート]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。あるいは、以下のようにすることもできます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed -E &#039;s{{!}}^.* (/.+) is not signed${{!}}sbctl sign -s &amp;quot;\1&amp;quot;{{!}}e&#039;&lt;br /&gt;
&lt;br /&gt;
これはファイルパスに依存せず、「✗」文字は必要ありません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
key=&#039;&#039;/path/to/&#039;&#039;db.key&lt;br /&gt;
cert=&#039;&#039;/path/to/&#039;&#039;db.crt&lt;br /&gt;
&lt;br /&gt;
if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
    sbsign &amp;quot;$kernel&amp;quot; --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot;&lt;br /&gt;
fi}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
key=&#039;&#039;/path/to/&#039;&#039;MOK.key&lt;br /&gt;
cert=&#039;&#039;/path/to/&#039;&#039;MOK.crt&lt;br /&gt;
&lt;br /&gt;
if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
    sbsign &amp;quot;$kernel&amp;quot; --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot;&lt;br /&gt;
fi}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{Expansion|shim を含めるように ISO を再パックするための手順を追加してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。以下の手順に従うか、自動化された代替手段として  {{AUR|gsai-git}} を使用してください。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-cpx /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	/EFI/BOOT/BOOTx64.EFI \&lt;br /&gt;
	/EFI/BOOT/BOOTIA32.EFI \&lt;br /&gt;
	/shellx64.efi ./&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次のようにすると、簡単に解析できるダイジェストのリストが出力されます:&lt;br /&gt;
&lt;br /&gt;
 # tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -o &#039;Digest: &amp;quot;[a-f0-9]\{64\}&amp;quot;&#039; | sed &#039;s/Digest: &amp;quot;//;s/&amp;quot;$//&#039;&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、{{AUR|digest-to-efi-sig-list}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
ダイジェストが多数ある場合、[https://gist.github.com/Strykar/5d57145962bb1bcc00ef52f380697e55 このような Bash スクリプト] を使用することもできます。&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + ArchLinux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2026-03-12|862815}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%83%A6%E3%83%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%89%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8&amp;diff=41389</id>
		<title>ユニファイドカーネルイメージ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%83%A6%E3%83%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%89%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8&amp;diff=41389"/>
		<updated>2026-03-12T03:01:00Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* mkinitcpio */ スクリプトを簡略化&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートローダー]]&lt;br /&gt;
[[en:Unified kernel image]]&lt;br /&gt;
[[pt:Unified kernel image]]&lt;br /&gt;
[https://uapi-group.org/specifications/specs/unified_kernel_image ユニファイドカーネルイメージ] (UKI) は、単一の実行可能ファイルであり、[[UEFI]] ファームウェアから直接起動するか、ほとんどまたは全く設定を必要とせずにブートローダーによって自動的に取得されます。これは {{man|7|systemd-stub}} のような UEFI ブートスタブプログラム、Linux [[Arch ブートプロセス#カーネル|カーネルイメージ]]、[[Arch ブートプロセス#initramfs|initrd]]、および [https://uapi-group.org/specifications/specs/unified_kernel_image/#uki-components その他のリソース] を単一の UEFI PE ファイルに組み合わせたものです。&lt;br /&gt;
&lt;br /&gt;
このファイルは、したがってこれらのすべての要素を[[Unified Extensible Firmware Interface/セキュアブート# EFI バイナリに署名する|署名]]して [[Secure Boot]] で使用することが容易になります。&lt;br /&gt;
&lt;br /&gt;
{{Note|記事全体で {{ic|&#039;&#039;esp&#039;&#039;}} は [[EFI システムパーティション]] のマウントポイントを表します。}}&lt;br /&gt;
&lt;br /&gt;
== ユニファイドカーネルイメージの準備 ==&lt;br /&gt;
&lt;br /&gt;
UKI (Unified Kernel Image) イメージを生成し、適切な場所 (&amp;quot;esp/Linux&amp;quot; ディレクトリ) にインストールする方法はいくつかあります。現在、この機能を実行するためのツールがいくつか競合しているので、ニーズと好みに応じて以下のいずれかを選択してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 以下のいずれかのサブセクションを実行するだけで済みます。&lt;br /&gt;
* UKI を [[Unified Extensible Firmware Interface#Default boot path for removable drives|フォールバックブートパス]] {{ic|&#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI}} (または 32 ビット IA32 UEFI の場合は {{ic|BOOTIA32.EFI}}) に配置することも可能です。フォールバックブートパスを使用すると、NVRAM に UEFI ブートエントリを明示的に作成する必要がなくなります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== mkinitcpio ===&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio]] は、{{Pkg|systemd-ukify}} がインストールされていない限り、UKI (Unified Kernel Image) を自身で組み立てます。{{Pkg|systemd-ukify}} がインストールされている場合は、{{ic|--no-ukify}} オプションで明示的に無効にしない限り、UKI の作成は &amp;quot;ukify&amp;quot; にオフロードされます。&lt;br /&gt;
&lt;br /&gt;
==== カーネルコマンドライン ====&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio]] は、{{ic|/etc/cmdline.d}} ディレクトリ内のコマンドライン ファイルからの[[カーネルパラメータ]]の読み取りをサポートします。Mkinitcpio は、このディレクトリ内の {{ic|.conf}} 拡張子を持つすべてのファイルの内容を連結し、それらを使用してカーネルコマンドラインを生成します。コマンドラインファイル内の &#039;&#039;#&#039;&#039; 文字で始まる行はコメントとして扱われ、mkinitcpio によって無視されます。マイクロコードと initramfs を指す &#039;&#039;エントリを削除&#039;&#039; するように注意してください。&lt;br /&gt;
&lt;br /&gt;
例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/cmdline.d/root.conf|2=&lt;br /&gt;
root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ルート ファイルシステムがデフォルト以外の Btrfs サブボリューム上にある場合は、必ず必要なマウントフラグを {{ic|rootflags}} に設定してください。[[Btrfs#サブボリュームをルートとしてマウントする]] を参照してください。&lt;br /&gt;
* たとえば、システムのサブボリューム ID が {{ic|256}} の場合 (サブボリューム ID は、{{ic|btrfs subvolume list &#039;&#039;btrfs_mountpoint&#039;&#039;}} を使用して確認できます。または、{{ic|/etc/fstab}}) でフラグを見ることができます、カーネルコマンドラインに {{ic|1=rootflags=subvolid=256}} を追加する必要があります。&lt;br /&gt;
* {{ic|rootflags}} は起動時にのみ使用されるため、{{ic|/etc/fstab}} 内のすべてのフラグをコピーする必要はありません。Systemd は fstab を読み取り、再マウントし、ブート後にそこにリストされているフラグを自動的に適用します。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/cmdline.d/security.conf|2=&lt;br /&gt;
# enable apparmor&lt;br /&gt;
lsm=landlock,lockdown,yama,integrity,apparmor,bpf audit=1 audit_backlog_limit=256&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
あるいは、{{ic|/etc/kernel/cmdline}} を使用してカーネルコマンドラインを設定することもできます。&lt;br /&gt;
&lt;br /&gt;
例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/kernel/cmdline|2=&lt;br /&gt;
root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet bgrt_disable&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* root パーティションが [[systemd#GPT パーティションの自動マウント|systemd によって自動マウントされる]] 場合、{{ic|1=root=}} パラメータは省略できます。&lt;br /&gt;
* {{ic|bgrt_disable}} パラメータは、ACPI テーブルのロード後に OEM ロゴを表示しないように Linux に指示します。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== .preset ファイル ====&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|/etc/mkinitcpio.d/linux.preset}}、または使用しているプリセットを、[[EFI システムパーティション]] の適切なマウントポイントを指定して、以下のように変更します:&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=PRESETS=}} の各項目について、{{ic|1=&#039;&#039;PRESET&#039;&#039;_uki=}} パラメータのコメントを解除する (つまり {{ic|#}} を削除する)、&lt;br /&gt;
* 冗長な {{ic|initramfs-*.img}} ファイルを保存しないように、{{ic|1=&#039;&#039;PRESET&#039;&#039;_image=}} をコメントアウトする、&lt;br /&gt;
* オプションとして、スプラッシュイメージを追加したい各 {{ic|1=&#039;&#039;PRESET&#039;&#039;_options=}} 行に {{ic|--splash}} パラメータを追加またはコメント解除します。&lt;br /&gt;
&lt;br /&gt;
以下は {{Pkg|linux}} カーネルと Arch スプラッシュスクリーンの {{ic|linux.preset}} の例です。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.d/linux.preset|2= &lt;br /&gt;
# mkinitcpio preset file for the &#039;linux&#039; package&lt;br /&gt;
&lt;br /&gt;
#ALL_config=&amp;quot;/etc/mkinitcpio.conf&amp;quot;&lt;br /&gt;
ALL_kver=&amp;quot;/boot/vmlinuz-linux&amp;quot;&lt;br /&gt;
&lt;br /&gt;
PRESETS=(&#039;default&#039; &#039;fallback&#039;)&lt;br /&gt;
&lt;br /&gt;
#default_config=&amp;quot;/etc/mkinitcpio.conf&amp;quot;&lt;br /&gt;
#default_image=&amp;quot;/boot/initramfs-linux.img&amp;quot;&lt;br /&gt;
default_uki=&amp;quot;&#039;&#039;esp&#039;&#039;/EFI/Linux/arch-linux.efi&amp;quot;&lt;br /&gt;
default_options=&amp;quot;--splash=/usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#fallback_config=&amp;quot;/etc/mkinitcpio.conf&amp;quot;&lt;br /&gt;
#fallback_image=&amp;quot;/boot/initramfs-linux-fallback.img&amp;quot;&lt;br /&gt;
fallback_uki=&amp;quot;&#039;&#039;esp&#039;&#039;/EFI/Linux/arch-linux-fallback.efi&amp;quot;&lt;br /&gt;
fallback_options=&amp;quot;-S autodetect&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 統一されたカーネルイメージからブートしたいだけであれば、[[EFI システムパーティション#典型的なマウントポイント|ESP のマウント]]を {{ic|/efi}} にして、[[ESP]] パーティションに存在する必要があるものだけをマウントすることができます。&lt;br /&gt;
* {{ic|--cmdline /etc/kernel/&#039;&#039;fallback_cmdline&#039;&#039;}} を {{ic|fallback_options}} に追加することで、フォールバックイメージに上記とは異なる [[Unified カーネルイメージ#カーネルコマンドライン|cmdline]] を使用することができます (例えば {{ic|quiet}} を無くす。)&lt;br /&gt;
* カーネルコマンドラインの埋め込みを省略するには、{{ic|--no-cmdline}} を {{ic|1=&#039;&#039;PRESET&#039;&#039;_options=}} に追加してください。カーネルパラメーターはブートローダー経由で渡す必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|&#039;&#039;PRESET&#039;&#039;_uki}} オプションは以前は {{ic|&#039;&#039;PRESET&#039;&#039;_efi_image}} として知られていました。[https://gitlab.archlinux.org/archlinux/mkinitcpio/mkinitcpio/-/issues/134 2022 年 11 月変更], 古いオプションは非推奨ですが、今のところ動作しています。&lt;br /&gt;
* [[Unified Extensible Firmware Interface# UEFI ファームウェアのビット数|IA32 UEFI]] では、{{ic|--uefistub /usr/lib/systemd/boot/efi/linuxia32.efi.stub}} を {{ic|1=&#039;&#039;PRESET&#039;&#039;_options=}} に追加してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== pacman フック ====&lt;br /&gt;
&lt;br /&gt;
systemd-stub ({{pkg|systemd}} の一部)、microcode ({{pkg|intel-ucode}} と {{pkg|amd-ucode}} の両方)、および {{pkg|linux}} カーネルの更新は、自動的に UKI (Unified Kernel Image) の再構築をトリガーします。ただし、{{ic|/etc/pacman.d/hooks/}} ディレクトリにある他の [[pacman フック]] (例えば、[[NVIDIA#pacman hook|NVIDIA ドライバー]] のものなど) を確認することをお勧めします。&lt;br /&gt;
&lt;br /&gt;
==== UKI の構築 ====&lt;br /&gt;
&lt;br /&gt;
最後に、UKI のディレクトリが存在することを確認し、[[mkinitcpio#イメージ作成とアクティベーション|initramfs を再生成]] します。たとえば、&#039;&#039;linux&#039;&#039; プリセットの場合は次のようになります。&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Linux&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
必要に応じて、残っている {{ic|initramfs-*.img}} を {{ic|/boot}} または {{ic|/efi}} から削除します。&lt;br /&gt;
&lt;br /&gt;
=== kernel-install ===&lt;br /&gt;
&lt;br /&gt;
確実に kernel-install が [[Kernel-install#自動で|正しく設定されている]] ことを確認してください。&lt;br /&gt;
&lt;br /&gt;
UKI を生成するには、{{Pkg|systemd-ukify}} をインストールし、{{ic|kernel-install}} の layout を {{ic|uki}} に設定します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/kernel/install.conf|&lt;br /&gt;
2=layout=uki}}&lt;br /&gt;
&lt;br /&gt;
{{Note|[[mkinitcpio]] が initrd を作成し、その後 [[#ukify]] が UKI を生成します。}}&lt;br /&gt;
&lt;br /&gt;
[[#ukify]] の設定は、[[kernel-install]] で使用するために、{{ic|/etc/kernel/uki.conf}} で行う必要があります。例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/kernel/uki.conf|&lt;br /&gt;
2=[UKI]&lt;br /&gt;
Splash=/usr/share/systemd/bootctl/splash-arch.bmp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/usr/lib/kernel/uki.conf}} から {{ic|/etc/kernel/uki.conf}} にテンプレートをコピーし、セクションタイトルと役立つ行をコメントアウトすることもできます。このファイルにカーネルコマンドラインを設定しないでください。無視されます。[[Kernel-install#カーネルコマンドライン]] を使用してください。}}&lt;br /&gt;
&lt;br /&gt;
あるいは、mkinitcpio が UKI を生成するように、それをデフォルトの {{ic|uki_generator}} として設定します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/kernel/install.conf|&lt;br /&gt;
2=layout=uki&lt;br /&gt;
uki_generator=mkinitcpio}}&lt;br /&gt;
&lt;br /&gt;
この場合、{{Pkg|systemd-ukify}} は不要です。別の {{ic|initrd_generator}} を設定することもできます。{{Man|8|kernel-install}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
変更を有効にするには、使用しているカーネルパッケージを再インストールしてください。&lt;br /&gt;
&lt;br /&gt;
=== dracut ===&lt;br /&gt;
&lt;br /&gt;
こちらを参照して下さい [[dracut#ユニファイドカーネルイメージ]] と [[dracut#カーネルのアップグレード時に新しい initramfs を生成]]&lt;br /&gt;
&lt;br /&gt;
=== ukify ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|systemd-ukify}} パッケージを [[インストール]] します。&#039;&#039;ukify&#039;&#039; は単独で initramfs を生成できないため、必要な場合は、[[dracut]]、[[mkinitcpio]]、または [[booster]] を使用して生成する必要があります。&lt;br /&gt;
&lt;br /&gt;
最小限の動作例は次のようになります。&lt;br /&gt;
&lt;br /&gt;
 # ukify build --linux=&#039;&#039;/boot/vmlinuz-linux&#039;&#039; \&lt;br /&gt;
               --initrd=&#039;&#039;/boot/initramfs-linux.img&#039;&#039; \&lt;br /&gt;
               --cmdline=&amp;quot;&#039;&#039;quiet rw&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Note|[[マイクロコード#早期ロード|外部マイクロコード initramfs イメージ]] を使用する場合 ({{ic|/boot/amd-ucode.img}} または {{ic|/boot/intel-ucode.img}}) を使用する必要があります。常にメインの initramfs イメージの前に &#039;&#039;最初に&#039;&#039; 配置します (例: {{ic|/boot/initramfs-linux.img}})}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 出来上がった EFI 実行ファイルを EFI システムパーティションにコピーするのをスキップするには、{{ic|1=--output=&#039;&#039;esp&#039;&#039;/EFI/Linux/&#039;&#039;filename&#039;&#039;.efi}} コマンドラインオプションを &#039;&#039;ukify&#039;&#039; に使用します。&lt;br /&gt;
* {{ic|--cmdline}} オプションを指定する場合、{{ic|1=--cmdline=@&#039;&#039;/path/to/cmdline&#039;&#039;}} のように {{ic|/etc/kernel/cmdline}} ファイル名の前に {{ic|@}} シンボルを追加することで、カーネルパラメータを読み込むファイル名を指定できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、{{man|1|ukify}}を参照してください。&lt;br /&gt;
&lt;br /&gt;
intel ucode および /efi マウント ESP を使用した通常のカーネルイメージの systemd サービスを使用した自動 UKI 構築の例:&lt;br /&gt;
&lt;br /&gt;
{{Note|カーネル、マイクロコード、または initramfs が変更されたときに UKI が自動的に更新されるようにするには、例えば [[kernel-install]] や [[mkinitcpio]] と共に ukify を使用するだけです。詳細については、上記のセクション [[#kernel-install]] および [[#mkinitcpio]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
=== 手動で ===&lt;br /&gt;
&lt;br /&gt;
使用するカーネルコマンドラインをファイルに記述し、{{man|1|objcopy}} を使用してバンドルファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
[[マイクロコード]] の場合は、まず次のようにマイクロコードファイルと initrd を連結します。&lt;br /&gt;
&lt;br /&gt;
 $ cat &#039;&#039;esp&#039;&#039;/&#039;&#039;cpu_manufacturer&#039;&#039;-ucode.img &#039;&#039;esp&#039;&#039;/initramfs-linux.img &amp;gt; /tmp/combined_initrd.img&lt;br /&gt;
&lt;br /&gt;
統合カーネルイメージを構築するときは、{{ic|/tmp/combined_initrd.img}} を initrd として渡します。このファイルは後で削除できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|[[Unified Extensible Firmware Interface#UEFI ファームウェアのビット数|IA32 UEFI]] では、以下のコマンドの {{ic|/usr/lib/systemd/boot/efi/linuxx64.efi.stub}} を {{ic|/usr/lib/systemd/boot/efi/linuxia32.efi.stub}} に置き換えてください。}}&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
$ align=&amp;quot;$(objdump -p /usr/lib/systemd/boot/efi/linuxx64.efi.stub {{!}} awk &#039;{ if ($1 == &amp;quot;SectionAlignment&amp;quot;){print $2} }&#039;)&amp;quot;&lt;br /&gt;
$ align=$((16#$align))&lt;br /&gt;
$ osrel_offs=&amp;quot;$(objdump -h &amp;quot;/usr/lib/systemd/boot/efi/linuxx64.efi.stub&amp;quot; {{!}} awk &#039;NF==7 {size=strtonum(&amp;quot;0x&amp;quot;$3); offset=strtonum(&amp;quot;0x&amp;quot;$4)} END {print size + offset}&#039;)&amp;quot;&lt;br /&gt;
$ osrel_offs=$((osrel_offs + &amp;quot;$align&amp;quot; - osrel_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
$ cmdline_offs=$((osrel_offs + $(stat -Lc%s &amp;quot;/usr/lib/os-release&amp;quot;)))&lt;br /&gt;
$ cmdline_offs=$((cmdline_offs + &amp;quot;$align&amp;quot; - cmdline_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
$ splash_offs=$((cmdline_offs + $(stat -Lc%s &amp;quot;/etc/kernel/cmdline&amp;quot;)))&lt;br /&gt;
$ splash_offs=$((splash_offs + &amp;quot;$align&amp;quot; - splash_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
$ initrd_offs=$((splash_offs + $(stat -Lc%s &amp;quot;/usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;)))&lt;br /&gt;
$ initrd_offs=$((initrd_offs + &amp;quot;$align&amp;quot; - initrd_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
$ linux_offs=$((initrd_offs + $(stat -Lc%s &amp;quot;&#039;&#039;initrd-file&#039;&#039;&amp;quot;)))&lt;br /&gt;
$ linux_offs=$((linux_offs + &amp;quot;$align&amp;quot; - linux_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
$ objcopy \&lt;br /&gt;
    --add-section .osrel=&amp;quot;/usr/lib/os-release&amp;quot; --change-section-vma .osrel=$(printf 0x%x $osrel_offs) \&lt;br /&gt;
    --add-section .cmdline=&amp;quot;/etc/kernel/cmdline&amp;quot; \&lt;br /&gt;
    --change-section-vma .cmdline=$(printf 0x%x $cmdline_offs) \&lt;br /&gt;
    --add-section .splash=&amp;quot;/usr/share/systemd/bootctl/splash-arch.bmp&amp;quot; \&lt;br /&gt;
    --change-section-vma .splash=$(printf 0x%x $splash_offs) \&lt;br /&gt;
    --add-section .initrd=&amp;quot;&#039;&#039;initrd-file&#039;&#039;&amp;quot; \&lt;br /&gt;
    --change-section-vma .initrd=$(printf 0x%x $initrd_offs) \&lt;br /&gt;
    --add-section .linux=&amp;quot;&#039;&#039;vmlinuz-file&#039;&#039;&amp;quot; \&lt;br /&gt;
    --change-section-vma .linux=$(printf 0x%x $linux_offs) \&lt;br /&gt;
    &amp;quot;/usr/lib/systemd/boot/efi/linuxx64.efi.stub&amp;quot; &amp;quot;&#039;&#039;linux&#039;&#039;.efi&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
注意すべき点がいくつかあります:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/systemd/systemd/commit/0fa2cac4f0cdefaf1addd7f1fe0fd8113db9360b#commitcomment-76747223] で推奨されているように、オフセットは動的に計算されるので、セクションが重なることはありません。&lt;br /&gt;
* セクションは、PE スタブの {{ic|SectionAlignment}} フィールドが示す値 (通常は 0x1000) にアラインメントされます。&lt;br /&gt;
* カーネルイメージは、[https://github.com/systemd/systemd/commit/0fa2cac4f0cdefaf1addd7f1fe0fd8113db9360b#commitcomment-84868898] で述べられているように、インプレース解凍で後続のセクションが上書きされるのを防ぐために、最後のセクションにある必要があります。&lt;br /&gt;
&lt;br /&gt;
イメージを作成したら、それを EFI システムパーティションにコピーします。&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;linux&#039;&#039;.efi &#039;&#039;esp&#039;&#039;/EFI/Linux/&lt;br /&gt;
&lt;br /&gt;
== セキュアブート 用の UKI への署名 ==&lt;br /&gt;
&lt;br /&gt;
=== sbctl ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbctl}} は、更新されたバイナリに署名するための [[kernel-install]] スクリプト、[[mkinitcpio]] ポストフック、および pacman フックを提供します。&lt;br /&gt;
&lt;br /&gt;
=== mkinitcpio ===&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使用することで、生成された Unified Kernel Image に [[セキュアブート]] 用の署名を付けることができます。以下のファイルを作成し、[[ヘルプ:読み方#実行可能属性の付与|実行可能]]にしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/uki-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
uki=&amp;quot;$3&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$uki&amp;quot; ]] || exit 0&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
key=&#039;&#039;/path/to/&#039;&#039;db.key&lt;br /&gt;
cert=&#039;&#039;/path/to/&#039;&#039;db.crt&lt;br /&gt;
&lt;br /&gt;
if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$uki&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
    sbsign &amp;quot;$uki&amp;quot; --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$uki&amp;quot;&lt;br /&gt;
fi}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} を、イメージの署名に使用するキーペアのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== ukify ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールし、{{ic|/etc/kernel/uki.conf}} で {{ic|--secureboot-private-key}} と {{ic|--secureboot-certificate}} を指定します。&lt;br /&gt;
&lt;br /&gt;
== 起動方法 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|[[セキュアブート]] がアクティブな場合、{{ic|.cmdline}} が埋め込まれた統合カーネルイメージは、(ブートエントリを使用するか対話的に) 渡されたすべてのコマンドラインオプションを無視します。セキュアブートがアクティブでない場合、コマンドライン経由で渡されたオプションは、埋め込まれた {{ic|.cmdline}} をオーバーライドします。}}&lt;br /&gt;
&lt;br /&gt;
=== Limine ===&lt;br /&gt;
&lt;br /&gt;
[[Limine]] は Unified Kernel Image (UKI) を自動的に検出しません。ただし、{{ic|limine.conf}} を手動で構成して UKI をロードできます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;例 1: デフォルトの EFI システムパーティションから UKI を起動する&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UKI ファイルが {{ic|&#039;&#039;esp&#039;&#039;/EFI/Linux/}} に保存されている場合は、次の設定を {{ic|limine.conf}} に追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|limine.conf|2=&lt;br /&gt;
 /Arch Linux&lt;br /&gt;
  protocol: efi_chainload&lt;br /&gt;
  image_path: boot():/EFI/Linux/arch-linux.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;例 2: 別の EFI パーティションから UKI を起動する&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UKI ファイルが別のディスク上の別の EFI パーティションにある場合は、{{ic|uuid(&#039;&#039;partition UUID&#039;&#039;)}} を使用します。&lt;br /&gt;
&lt;br /&gt;
{{Note|パーティション UUID はファイルシステム UUID &#039;&#039;&#039;ではありません&#039;&#039;&#039;。{{ic|PARTUUID}} としてパーティション UUID を見つけるには、次を使用します。&lt;br /&gt;
 $ lsblk -o NAME,FSTYPE,PARTUUID,PARTTYPENAME,MOUNTPOINT,SIZE,LABEL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|limine.conf|2=&lt;br /&gt;
 /Arch Linux&lt;br /&gt;
  protocol: efi_chainload&lt;br /&gt;
  image_path: uuid(&#039;&#039;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&#039;&#039;):/EFI/Linux/arch-linux.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
サポートされているパスと設定オプションの詳細については、[https://github.com/limine-bootloader/limine/blob/v8.x/CONFIG.md#Paths Limine Paths ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== systemd-boot ===&lt;br /&gt;
&lt;br /&gt;
[[systemd-boot#Unified kernel images|systemd-boot]] は {{ic|&#039;&#039;esp&#039;&#039;/EFI/Linux/}} 内でユニファイドカーネルイメージを検索しますので、それ以上の設定は必要ありません。{{man|7|sd-boot|FILES}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== rEFInd ===&lt;br /&gt;
&lt;br /&gt;
[[rEFInd]] は、EFI システム パーティション上のユニファイドカーネルイメージを自動検出し、それらをロードできます。{{ic|refind.conf}} で手動で指定することもできます。デフォルトでは次の場所にあります。&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/EFI/refind/refind.conf|2=&lt;br /&gt;
menuentry Linux {&lt;br /&gt;
    loader &#039;&#039;esp&#039;&#039;/EFI/Linux/archlinux-linux.efi&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
イメージが ESP のルートにある場合、rEFInd は次のようにその名前のみを必要とします: {{ic|loader archlinux-linux.efi}} この方法で起動すると、{{ic|&#039;&#039;esp&#039;&#039;/EFI/refind_linux.conf}} からのカーネルパラメータは渡されません。&lt;br /&gt;
&lt;br /&gt;
=== GRUB ===&lt;br /&gt;
&lt;br /&gt;
rEFInd と同様に、[[GRUB]] は [[GRUB#ユニファイドカーネルイメージをチェインロード]] で説明されているように EFI UKI をチェーンロードできます。&lt;br /&gt;
&lt;br /&gt;
=== UEFI から直接起動 ===&lt;br /&gt;
&lt;br /&gt;
[[efibootmgr]] を使って &#039;&#039;.efi&#039;&#039; ファイルに UEFI ブートエントリを作成することができます。&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --create --disk /dev/sd&#039;&#039;X&#039;&#039; --part &#039;&#039;partition_number&#039;&#039; --label &amp;quot;Arch Linux&amp;quot; --loader &#039;\EFI\Linux\arch-linux.efi&#039; --unicode&lt;br /&gt;
&lt;br /&gt;
オプションの説明は {{man|8|efibootmgr}} をご覧ください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=7UhwK3g99_0 All Systems Go! talk on UKIs]&lt;br /&gt;
* [https://uapi-group.org/specifications/specs/unified_kernel_image/ Unified kernel image specification]&lt;br /&gt;
* [https://linderud.dev/blog/mkinitcpio-v31-and-uefi-stubs/ mkinitcpio v31 and UEFI stubs]&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41388</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41388"/>
		<updated>2026-03-12T02:53:22Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* インストールメディアを起動する */ リンク修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[hu:Unified Extensible Firmware Interface (Magyar)/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ([https://gitlab.archlinux.org/archlinux/archiso/-/issues/69 archlinux/archiso#69])。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://archboot.com/ Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== OpROM 署名を特定する ====&lt;br /&gt;
&lt;br /&gt;
署名された OpROM があるかどうかを確認するには、次の手順に従います。&lt;br /&gt;
&lt;br /&gt;
OpROM を搭載したすべてのデバイスを一覧表示します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ find /sys/devices/ -name rom|&lt;br /&gt;
/sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
 ...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これは、署名付き EFI ROM を搭載した Intel DC SSD の例です。デバイスごとに以下の手順を繰り返してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lspci -s 81:00.0|&lt;br /&gt;
81:00.0 Non-Volatile memory controller: Intel Corporation PCIe Data Center SSD (rev 01)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ROM をダンプします:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
 # cat /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom &amp;gt; ~/intel_ssd.rom&lt;br /&gt;
 # echo 0 &amp;gt; /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
&lt;br /&gt;
TianoCore の [https://github.com/tianocore/edk2.git EDK II ツール] 取得してコンパイルします:&lt;br /&gt;
&lt;br /&gt;
 $ make -C BaseTools&lt;br /&gt;
&lt;br /&gt;
ROM ファイルを解析します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ./BaseTools/Source/C/bin/EfiRom -d ~/intel_ssd.rom|&lt;br /&gt;
Image 1 -- Offset 0x0&lt;br /&gt;
  ROM header contents&lt;br /&gt;
    Signature              0xAA55&lt;br /&gt;
    PCIR offset            0x001C&lt;br /&gt;
    Signature               PCIR&lt;br /&gt;
    Vendor ID               0x8086&lt;br /&gt;
    Device ID               0x0953&lt;br /&gt;
    Length                  0x001C&lt;br /&gt;
    Revision                0x0003&lt;br /&gt;
    DeviceListOffset        0x00&lt;br /&gt;
    Class Code              0x000000&lt;br /&gt;
    Image size              0x6A00&lt;br /&gt;
    Code revision:          0x0000&lt;br /&gt;
    MaxRuntimeImageLength   0x00&lt;br /&gt;
    ConfigUtilityCodeHeaderOffset 0x00&lt;br /&gt;
    DMTFCLPEntryPointOffset 0x00&lt;br /&gt;
    Indicator               0x80   (last image)&lt;br /&gt;
    Code type               0x03   (EFI image)&lt;br /&gt;
  EFI ROM header contents&lt;br /&gt;
    EFI Signature          0x0EF1&lt;br /&gt;
    Compression Type       0x0001 (compressed)&lt;br /&gt;
    Machine type           0x8664 (X64)&lt;br /&gt;
    Subsystem              0x000B (EFI boot service driver)&lt;br /&gt;
    EFI image offset       0x0038 (@0x38)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これはこの OpROM に、オフセット 0x0 のイメージ 1 の、オフセット 0x0038 に圧縮された  EFI イメージがあることを示します。&lt;br /&gt;
&lt;br /&gt;
EFI セクションを取得します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=intel_ssd.rom ibs=1 skip=$(( 0x00 + 0x38 )) of=intel_ssd.rom.efi.compressed&lt;br /&gt;
&lt;br /&gt;
バイナリイメージを解凍します:&lt;br /&gt;
&lt;br /&gt;
 $ ./BaseTools/Source/C/bin/TianoCompress -d --uefi -v ~/intel_ssd.rom.efi.compressed -o ~/intel_ssd.rom.efi&lt;br /&gt;
&lt;br /&gt;
{{hc|$ file ../intel_ssd.rom.efi|&lt;br /&gt;
../intel_ssd.rom.efi: PE32+ executable for EFI (boot service driver), x86-64, 6 sections&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} で署名を調べると、Microsoft の DB 証明書で署名されていることがわかります:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ sbverify --list ~/intel_ssd.rom.efi|2=&lt;br /&gt;
signature 1&lt;br /&gt;
image signature issuers:&lt;br /&gt;
 - /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
image signature certificates:&lt;br /&gt;
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/OU=MOPR/CN=Microsoft Windows UEFI Driver Publisher&lt;br /&gt;
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation Third Party Marketplace Root&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|デバイスの文鎮化を回避するために、署名された ROM を搭載したグラフィックカードを使用している場合は、独自のキーを登録した後、セキュア ブート DB に必要な発行者が保持されていることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== GRUB で sbctl を使う =====&lt;br /&gt;
&lt;br /&gt;
[[GRUB#セキュアブートサポート]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。あるいは、以下のようにすることもできます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed -E &#039;s{{!}}^.* (/.+) is not signed${{!}}sbctl sign -s &amp;quot;\1&amp;quot;{{!}}e&#039;&lt;br /&gt;
&lt;br /&gt;
これはファイルパスに依存せず、「✗」文字は必要ありません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
key=&#039;&#039;/path/to/&#039;&#039;db.key&lt;br /&gt;
cert=&#039;&#039;/path/to/&#039;&#039;db.crt&lt;br /&gt;
&lt;br /&gt;
if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
    sbsign &amp;quot;$kernel&amp;quot; --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot;&lt;br /&gt;
fi}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
key=&#039;&#039;/path/to/&#039;&#039;MOK.key&lt;br /&gt;
cert=&#039;&#039;/path/to/&#039;&#039;MOK.crt&lt;br /&gt;
&lt;br /&gt;
if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
    sbsign &amp;quot;$kernel&amp;quot; --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot;&lt;br /&gt;
fi}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{Expansion|shim を含めるように ISO を再パックするための手順を追加してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。以下の手順に従うか、自動化された代替手段として  {{AUR|gsai-git}} を使用してください。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次のようにすると、簡単に解析できるダイジェストのリストが出力されます:&lt;br /&gt;
&lt;br /&gt;
 # tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -o &#039;Digest: &amp;quot;[a-f0-9]\{64\}&amp;quot;&#039; | sed &#039;s/Digest: &amp;quot;//;s/&amp;quot;$//&#039;&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、{{AUR|digest-to-efi-sig-list}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
ダイジェストが多数ある場合、[https://gist.github.com/Strykar/5d57145962bb1bcc00ef52f380697e55 このような Bash スクリプト] を使用することもできます。&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + ArchLinux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2026-03-12|862815}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41386</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41386"/>
		<updated>2026-03-12T02:04:33Z</updated>

		<summary type="html">&lt;p&gt;ELC: TranslationStatus&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[hu:Unified Extensible Firmware Interface (Magyar)/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ([https://gitlab.archlinux.org/archlinux/archiso/-/issues/69 archlinux/archiso#69])。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== OpROM 署名を特定する ====&lt;br /&gt;
&lt;br /&gt;
署名された OpROM があるかどうかを確認するには、次の手順に従います。&lt;br /&gt;
&lt;br /&gt;
OpROM を搭載したすべてのデバイスを一覧表示します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ find /sys/devices/ -name rom|&lt;br /&gt;
/sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
 ...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これは、署名付き EFI ROM を搭載した Intel DC SSD の例です。デバイスごとに以下の手順を繰り返してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lspci -s 81:00.0|&lt;br /&gt;
81:00.0 Non-Volatile memory controller: Intel Corporation PCIe Data Center SSD (rev 01)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ROM をダンプします:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
 # cat /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom &amp;gt; ~/intel_ssd.rom&lt;br /&gt;
 # echo 0 &amp;gt; /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
&lt;br /&gt;
TianoCore の [https://github.com/tianocore/edk2.git EDK II ツール] 取得してコンパイルします:&lt;br /&gt;
&lt;br /&gt;
 $ make -C BaseTools&lt;br /&gt;
&lt;br /&gt;
ROM ファイルを解析します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ./BaseTools/Source/C/bin/EfiRom -d ~/intel_ssd.rom|&lt;br /&gt;
Image 1 -- Offset 0x0&lt;br /&gt;
  ROM header contents&lt;br /&gt;
    Signature              0xAA55&lt;br /&gt;
    PCIR offset            0x001C&lt;br /&gt;
    Signature               PCIR&lt;br /&gt;
    Vendor ID               0x8086&lt;br /&gt;
    Device ID               0x0953&lt;br /&gt;
    Length                  0x001C&lt;br /&gt;
    Revision                0x0003&lt;br /&gt;
    DeviceListOffset        0x00&lt;br /&gt;
    Class Code              0x000000&lt;br /&gt;
    Image size              0x6A00&lt;br /&gt;
    Code revision:          0x0000&lt;br /&gt;
    MaxRuntimeImageLength   0x00&lt;br /&gt;
    ConfigUtilityCodeHeaderOffset 0x00&lt;br /&gt;
    DMTFCLPEntryPointOffset 0x00&lt;br /&gt;
    Indicator               0x80   (last image)&lt;br /&gt;
    Code type               0x03   (EFI image)&lt;br /&gt;
  EFI ROM header contents&lt;br /&gt;
    EFI Signature          0x0EF1&lt;br /&gt;
    Compression Type       0x0001 (compressed)&lt;br /&gt;
    Machine type           0x8664 (X64)&lt;br /&gt;
    Subsystem              0x000B (EFI boot service driver)&lt;br /&gt;
    EFI image offset       0x0038 (@0x38)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これはこの OpROM に、オフセット 0x0 のイメージ 1 の、オフセット 0x0038 に圧縮された  EFI イメージがあることを示します。&lt;br /&gt;
&lt;br /&gt;
EFI セクションを取得します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=intel_ssd.rom ibs=1 skip=$(( 0x00 + 0x38 )) of=intel_ssd.rom.efi.compressed&lt;br /&gt;
&lt;br /&gt;
バイナリイメージを解凍します:&lt;br /&gt;
&lt;br /&gt;
 $ ./BaseTools/Source/C/bin/TianoCompress -d --uefi -v ~/intel_ssd.rom.efi.compressed -o ~/intel_ssd.rom.efi&lt;br /&gt;
&lt;br /&gt;
{{hc|$ file ../intel_ssd.rom.efi|&lt;br /&gt;
../intel_ssd.rom.efi: PE32+ executable for EFI (boot service driver), x86-64, 6 sections&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} で署名を調べると、Microsoft の DB 証明書で署名されていることがわかります:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ sbverify --list ~/intel_ssd.rom.efi|2=&lt;br /&gt;
signature 1&lt;br /&gt;
image signature issuers:&lt;br /&gt;
 - /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
image signature certificates:&lt;br /&gt;
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/OU=MOPR/CN=Microsoft Windows UEFI Driver Publisher&lt;br /&gt;
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation Third Party Marketplace Root&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|デバイスの文鎮化を回避するために、署名された ROM を搭載したグラフィックカードを使用している場合は、独自のキーを登録した後、セキュア ブート DB に必要な発行者が保持されていることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== GRUB で sbctl を使う =====&lt;br /&gt;
&lt;br /&gt;
[[GRUB#セキュアブートサポート]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。あるいは、以下のようにすることもできます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed -E &#039;s{{!}}^.* (/.+) is not signed${{!}}sbctl sign -s &amp;quot;\1&amp;quot;{{!}}e&#039;&lt;br /&gt;
&lt;br /&gt;
これはファイルパスに依存せず、「✗」文字は必要ありません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
key=&#039;&#039;/path/to/&#039;&#039;db.key&lt;br /&gt;
cert=&#039;&#039;/path/to/&#039;&#039;db.crt&lt;br /&gt;
&lt;br /&gt;
if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
    sbsign &amp;quot;$kernel&amp;quot; --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot;&lt;br /&gt;
fi}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
key=&#039;&#039;/path/to/&#039;&#039;MOK.key&lt;br /&gt;
cert=&#039;&#039;/path/to/&#039;&#039;MOK.crt&lt;br /&gt;
&lt;br /&gt;
if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
    sbsign &amp;quot;$kernel&amp;quot; --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot;&lt;br /&gt;
fi}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{Expansion|shim を含めるように ISO を再パックするための手順を追加してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。以下の手順に従うか、自動化された代替手段として  {{AUR|gsai-git}} を使用してください。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次のようにすると、簡単に解析できるダイジェストのリストが出力されます:&lt;br /&gt;
&lt;br /&gt;
 # tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -o &#039;Digest: &amp;quot;[a-f0-9]\{64\}&amp;quot;&#039; | sed &#039;s/Digest: &amp;quot;//;s/&amp;quot;$//&#039;&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、{{AUR|digest-to-efi-sig-list}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
ダイジェストが多数ある場合、[https://gist.github.com/Strykar/5d57145962bb1bcc00ef52f380697e55 このような Bash スクリプト] を使用することもできます。&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + ArchLinux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2026-03-12|862815}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41385</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41385"/>
		<updated>2026-03-12T02:00:47Z</updated>

		<summary type="html">&lt;p&gt;ELC: 重複リンク削除&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[hu:Unified Extensible Firmware Interface (Magyar)/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ([https://gitlab.archlinux.org/archlinux/archiso/-/issues/69 archlinux/archiso#69])。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== OpROM 署名を特定する ====&lt;br /&gt;
&lt;br /&gt;
署名された OpROM があるかどうかを確認するには、次の手順に従います。&lt;br /&gt;
&lt;br /&gt;
OpROM を搭載したすべてのデバイスを一覧表示します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ find /sys/devices/ -name rom|&lt;br /&gt;
/sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
 ...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これは、署名付き EFI ROM を搭載した Intel DC SSD の例です。デバイスごとに以下の手順を繰り返してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lspci -s 81:00.0|&lt;br /&gt;
81:00.0 Non-Volatile memory controller: Intel Corporation PCIe Data Center SSD (rev 01)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ROM をダンプします:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
 # cat /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom &amp;gt; ~/intel_ssd.rom&lt;br /&gt;
 # echo 0 &amp;gt; /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
&lt;br /&gt;
TianoCore の [https://github.com/tianocore/edk2.git EDK II ツール] 取得してコンパイルします:&lt;br /&gt;
&lt;br /&gt;
 $ make -C BaseTools&lt;br /&gt;
&lt;br /&gt;
ROM ファイルを解析します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ./BaseTools/Source/C/bin/EfiRom -d ~/intel_ssd.rom|&lt;br /&gt;
Image 1 -- Offset 0x0&lt;br /&gt;
  ROM header contents&lt;br /&gt;
    Signature              0xAA55&lt;br /&gt;
    PCIR offset            0x001C&lt;br /&gt;
    Signature               PCIR&lt;br /&gt;
    Vendor ID               0x8086&lt;br /&gt;
    Device ID               0x0953&lt;br /&gt;
    Length                  0x001C&lt;br /&gt;
    Revision                0x0003&lt;br /&gt;
    DeviceListOffset        0x00&lt;br /&gt;
    Class Code              0x000000&lt;br /&gt;
    Image size              0x6A00&lt;br /&gt;
    Code revision:          0x0000&lt;br /&gt;
    MaxRuntimeImageLength   0x00&lt;br /&gt;
    ConfigUtilityCodeHeaderOffset 0x00&lt;br /&gt;
    DMTFCLPEntryPointOffset 0x00&lt;br /&gt;
    Indicator               0x80   (last image)&lt;br /&gt;
    Code type               0x03   (EFI image)&lt;br /&gt;
  EFI ROM header contents&lt;br /&gt;
    EFI Signature          0x0EF1&lt;br /&gt;
    Compression Type       0x0001 (compressed)&lt;br /&gt;
    Machine type           0x8664 (X64)&lt;br /&gt;
    Subsystem              0x000B (EFI boot service driver)&lt;br /&gt;
    EFI image offset       0x0038 (@0x38)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これはこの OpROM に、オフセット 0x0 のイメージ 1 の、オフセット 0x0038 に圧縮された  EFI イメージがあることを示します。&lt;br /&gt;
&lt;br /&gt;
EFI セクションを取得します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=intel_ssd.rom ibs=1 skip=$(( 0x00 + 0x38 )) of=intel_ssd.rom.efi.compressed&lt;br /&gt;
&lt;br /&gt;
バイナリイメージを解凍します:&lt;br /&gt;
&lt;br /&gt;
 $ ./BaseTools/Source/C/bin/TianoCompress -d --uefi -v ~/intel_ssd.rom.efi.compressed -o ~/intel_ssd.rom.efi&lt;br /&gt;
&lt;br /&gt;
{{hc|$ file ../intel_ssd.rom.efi|&lt;br /&gt;
../intel_ssd.rom.efi: PE32+ executable for EFI (boot service driver), x86-64, 6 sections&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} で署名を調べると、Microsoft の DB 証明書で署名されていることがわかります:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ sbverify --list ~/intel_ssd.rom.efi|2=&lt;br /&gt;
signature 1&lt;br /&gt;
image signature issuers:&lt;br /&gt;
 - /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
image signature certificates:&lt;br /&gt;
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/OU=MOPR/CN=Microsoft Windows UEFI Driver Publisher&lt;br /&gt;
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation Third Party Marketplace Root&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|デバイスの文鎮化を回避するために、署名された ROM を搭載したグラフィックカードを使用している場合は、独自のキーを登録した後、セキュア ブート DB に必要な発行者が保持されていることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== GRUB で sbctl を使う =====&lt;br /&gt;
&lt;br /&gt;
[[GRUB#セキュアブートサポート]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。あるいは、以下のようにすることもできます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed -E &#039;s{{!}}^.* (/.+) is not signed${{!}}sbctl sign -s &amp;quot;\1&amp;quot;{{!}}e&#039;&lt;br /&gt;
&lt;br /&gt;
これはファイルパスに依存せず、「✗」文字は必要ありません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
key=&#039;&#039;/path/to/&#039;&#039;db.key&lt;br /&gt;
cert=&#039;&#039;/path/to/&#039;&#039;db.crt&lt;br /&gt;
&lt;br /&gt;
if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
    sbsign &amp;quot;$kernel&amp;quot; --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot;&lt;br /&gt;
fi}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
key=&#039;&#039;/path/to/&#039;&#039;MOK.key&lt;br /&gt;
cert=&#039;&#039;/path/to/&#039;&#039;MOK.crt&lt;br /&gt;
&lt;br /&gt;
if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
    sbsign &amp;quot;$kernel&amp;quot; --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot;&lt;br /&gt;
fi}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{Expansion|shim を含めるように ISO を再パックするための手順を追加してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。以下の手順に従うか、自動化された代替手段として  {{AUR|gsai-git}} を使用してください。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次のようにすると、簡単に解析できるダイジェストのリストが出力されます:&lt;br /&gt;
&lt;br /&gt;
 # tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -o &#039;Digest: &amp;quot;[a-f0-9]\{64\}&amp;quot;&#039; | sed &#039;s/Digest: &amp;quot;//;s/&amp;quot;$//&#039;&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、{{AUR|digest-to-efi-sig-list}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
ダイジェストが多数ある場合、[https://gist.github.com/Strykar/5d57145962bb1bcc00ef52f380697e55 このような Bash スクリプト] を使用することもできます。&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + ArchLinux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2025-10-29|850808}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41384</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41384"/>
		<updated>2026-03-12T01:50:03Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* shim で鍵を使う */ kernel-sbsign スクリプトを簡略化&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[hu:Unified Extensible Firmware Interface (Magyar)/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ([https://gitlab.archlinux.org/archlinux/archiso/-/issues/69 archlinux/archiso#69])。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== OpROM 署名を特定する ====&lt;br /&gt;
&lt;br /&gt;
署名された OpROM があるかどうかを確認するには、次の手順に従います。&lt;br /&gt;
&lt;br /&gt;
OpROM を搭載したすべてのデバイスを一覧表示します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ find /sys/devices/ -name rom|&lt;br /&gt;
/sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
 ...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これは、署名付き EFI ROM を搭載した Intel DC SSD の例です。デバイスごとに以下の手順を繰り返してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lspci -s 81:00.0|&lt;br /&gt;
81:00.0 Non-Volatile memory controller: Intel Corporation PCIe Data Center SSD (rev 01)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ROM をダンプします:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
 # cat /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom &amp;gt; ~/intel_ssd.rom&lt;br /&gt;
 # echo 0 &amp;gt; /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
&lt;br /&gt;
TianoCore の [https://github.com/tianocore/edk2.git EDK II ツール] 取得してコンパイルします:&lt;br /&gt;
&lt;br /&gt;
 $ make -C BaseTools&lt;br /&gt;
&lt;br /&gt;
ROM ファイルを解析します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ./BaseTools/Source/C/bin/EfiRom -d ~/intel_ssd.rom|&lt;br /&gt;
Image 1 -- Offset 0x0&lt;br /&gt;
  ROM header contents&lt;br /&gt;
    Signature              0xAA55&lt;br /&gt;
    PCIR offset            0x001C&lt;br /&gt;
    Signature               PCIR&lt;br /&gt;
    Vendor ID               0x8086&lt;br /&gt;
    Device ID               0x0953&lt;br /&gt;
    Length                  0x001C&lt;br /&gt;
    Revision                0x0003&lt;br /&gt;
    DeviceListOffset        0x00&lt;br /&gt;
    Class Code              0x000000&lt;br /&gt;
    Image size              0x6A00&lt;br /&gt;
    Code revision:          0x0000&lt;br /&gt;
    MaxRuntimeImageLength   0x00&lt;br /&gt;
    ConfigUtilityCodeHeaderOffset 0x00&lt;br /&gt;
    DMTFCLPEntryPointOffset 0x00&lt;br /&gt;
    Indicator               0x80   (last image)&lt;br /&gt;
    Code type               0x03   (EFI image)&lt;br /&gt;
  EFI ROM header contents&lt;br /&gt;
    EFI Signature          0x0EF1&lt;br /&gt;
    Compression Type       0x0001 (compressed)&lt;br /&gt;
    Machine type           0x8664 (X64)&lt;br /&gt;
    Subsystem              0x000B (EFI boot service driver)&lt;br /&gt;
    EFI image offset       0x0038 (@0x38)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これはこの OpROM に、オフセット 0x0 のイメージ 1 の、オフセット 0x0038 に圧縮された  EFI イメージがあることを示します。&lt;br /&gt;
&lt;br /&gt;
EFI セクションを取得します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=intel_ssd.rom ibs=1 skip=$(( 0x00 + 0x38 )) of=intel_ssd.rom.efi.compressed&lt;br /&gt;
&lt;br /&gt;
バイナリイメージを解凍します:&lt;br /&gt;
&lt;br /&gt;
 $ ./BaseTools/Source/C/bin/TianoCompress -d --uefi -v ~/intel_ssd.rom.efi.compressed -o ~/intel_ssd.rom.efi&lt;br /&gt;
&lt;br /&gt;
{{hc|$ file ../intel_ssd.rom.efi|&lt;br /&gt;
../intel_ssd.rom.efi: PE32+ executable for EFI (boot service driver), x86-64, 6 sections&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} で署名を調べると、Microsoft の DB 証明書で署名されていることがわかります:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ sbverify --list ~/intel_ssd.rom.efi|2=&lt;br /&gt;
signature 1&lt;br /&gt;
image signature issuers:&lt;br /&gt;
 - /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
image signature certificates:&lt;br /&gt;
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/OU=MOPR/CN=Microsoft Windows UEFI Driver Publisher&lt;br /&gt;
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation Third Party Marketplace Root&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|デバイスの文鎮化を回避するために、署名された ROM を搭載したグラフィックカードを使用している場合は、独自のキーを登録した後、セキュア ブート DB に必要な発行者が保持されていることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== GRUB で sbctl を使う =====&lt;br /&gt;
&lt;br /&gt;
[[GRUB#セキュアブートサポート]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。あるいは、以下のようにすることもできます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed -E &#039;s{{!}}^.* (/.+) is not signed${{!}}sbctl sign -s &amp;quot;\1&amp;quot;{{!}}e&#039;&lt;br /&gt;
&lt;br /&gt;
これはファイルパスに依存せず、「✗」文字は必要ありません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
key=&#039;&#039;/path/to/&#039;&#039;db.key&lt;br /&gt;
cert=&#039;&#039;/path/to/&#039;&#039;db.crt&lt;br /&gt;
&lt;br /&gt;
if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
    sbsign &amp;quot;$kernel&amp;quot; --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot;&lt;br /&gt;
fi}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
key=&#039;&#039;/path/to/&#039;&#039;MOK.key&lt;br /&gt;
cert=&#039;&#039;/path/to/&#039;&#039;MOK.crt&lt;br /&gt;
&lt;br /&gt;
if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
    sbsign &amp;quot;$kernel&amp;quot; --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot;&lt;br /&gt;
fi}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{Expansion|shim を含めるように ISO を再パックするための手順を追加してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。以下の手順に従うか、自動化された代替手段として  {{AUR|gsai-git}} を使用してください。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次のようにすると、簡単に解析できるダイジェストのリストが出力されます:&lt;br /&gt;
&lt;br /&gt;
 # tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -o &#039;Digest: &amp;quot;[a-f0-9]\{64\}&amp;quot;&#039; | sed &#039;s/Digest: &amp;quot;//;s/&amp;quot;$//&#039;&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、{{AUR|digest-to-efi-sig-list}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
ダイジェストが多数ある場合、[https://gist.github.com/Strykar/5d57145962bb1bcc00ef52f380697e55 このような Bash スクリプト] を使用することもできます。&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + ArchLinux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2025-10-29|850808}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41383</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41383"/>
		<updated>2026-03-12T01:48:01Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* mkinitcpio のポストフックでカーネルに署名する */ kernel-sbsign スクリプトを簡略化&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[hu:Unified Extensible Firmware Interface (Magyar)/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ([https://gitlab.archlinux.org/archlinux/archiso/-/issues/69 archlinux/archiso#69])。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== OpROM 署名を特定する ====&lt;br /&gt;
&lt;br /&gt;
署名された OpROM があるかどうかを確認するには、次の手順に従います。&lt;br /&gt;
&lt;br /&gt;
OpROM を搭載したすべてのデバイスを一覧表示します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ find /sys/devices/ -name rom|&lt;br /&gt;
/sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
 ...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これは、署名付き EFI ROM を搭載した Intel DC SSD の例です。デバイスごとに以下の手順を繰り返してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lspci -s 81:00.0|&lt;br /&gt;
81:00.0 Non-Volatile memory controller: Intel Corporation PCIe Data Center SSD (rev 01)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ROM をダンプします:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
 # cat /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom &amp;gt; ~/intel_ssd.rom&lt;br /&gt;
 # echo 0 &amp;gt; /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
&lt;br /&gt;
TianoCore の [https://github.com/tianocore/edk2.git EDK II ツール] 取得してコンパイルします:&lt;br /&gt;
&lt;br /&gt;
 $ make -C BaseTools&lt;br /&gt;
&lt;br /&gt;
ROM ファイルを解析します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ./BaseTools/Source/C/bin/EfiRom -d ~/intel_ssd.rom|&lt;br /&gt;
Image 1 -- Offset 0x0&lt;br /&gt;
  ROM header contents&lt;br /&gt;
    Signature              0xAA55&lt;br /&gt;
    PCIR offset            0x001C&lt;br /&gt;
    Signature               PCIR&lt;br /&gt;
    Vendor ID               0x8086&lt;br /&gt;
    Device ID               0x0953&lt;br /&gt;
    Length                  0x001C&lt;br /&gt;
    Revision                0x0003&lt;br /&gt;
    DeviceListOffset        0x00&lt;br /&gt;
    Class Code              0x000000&lt;br /&gt;
    Image size              0x6A00&lt;br /&gt;
    Code revision:          0x0000&lt;br /&gt;
    MaxRuntimeImageLength   0x00&lt;br /&gt;
    ConfigUtilityCodeHeaderOffset 0x00&lt;br /&gt;
    DMTFCLPEntryPointOffset 0x00&lt;br /&gt;
    Indicator               0x80   (last image)&lt;br /&gt;
    Code type               0x03   (EFI image)&lt;br /&gt;
  EFI ROM header contents&lt;br /&gt;
    EFI Signature          0x0EF1&lt;br /&gt;
    Compression Type       0x0001 (compressed)&lt;br /&gt;
    Machine type           0x8664 (X64)&lt;br /&gt;
    Subsystem              0x000B (EFI boot service driver)&lt;br /&gt;
    EFI image offset       0x0038 (@0x38)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これはこの OpROM に、オフセット 0x0 のイメージ 1 の、オフセット 0x0038 に圧縮された  EFI イメージがあることを示します。&lt;br /&gt;
&lt;br /&gt;
EFI セクションを取得します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=intel_ssd.rom ibs=1 skip=$(( 0x00 + 0x38 )) of=intel_ssd.rom.efi.compressed&lt;br /&gt;
&lt;br /&gt;
バイナリイメージを解凍します:&lt;br /&gt;
&lt;br /&gt;
 $ ./BaseTools/Source/C/bin/TianoCompress -d --uefi -v ~/intel_ssd.rom.efi.compressed -o ~/intel_ssd.rom.efi&lt;br /&gt;
&lt;br /&gt;
{{hc|$ file ../intel_ssd.rom.efi|&lt;br /&gt;
../intel_ssd.rom.efi: PE32+ executable for EFI (boot service driver), x86-64, 6 sections&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} で署名を調べると、Microsoft の DB 証明書で署名されていることがわかります:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ sbverify --list ~/intel_ssd.rom.efi|2=&lt;br /&gt;
signature 1&lt;br /&gt;
image signature issuers:&lt;br /&gt;
 - /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
image signature certificates:&lt;br /&gt;
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/OU=MOPR/CN=Microsoft Windows UEFI Driver Publisher&lt;br /&gt;
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation Third Party Marketplace Root&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|デバイスの文鎮化を回避するために、署名された ROM を搭載したグラフィックカードを使用している場合は、独自のキーを登録した後、セキュア ブート DB に必要な発行者が保持されていることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== GRUB で sbctl を使う =====&lt;br /&gt;
&lt;br /&gt;
[[GRUB#セキュアブートサポート]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。あるいは、以下のようにすることもできます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed -E &#039;s{{!}}^.* (/.+) is not signed${{!}}sbctl sign -s &amp;quot;\1&amp;quot;{{!}}e&#039;&lt;br /&gt;
&lt;br /&gt;
これはファイルパスに依存せず、「✗」文字は必要ありません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
key=&#039;&#039;/path/to/&#039;&#039;db.key&lt;br /&gt;
cert=&#039;&#039;/path/to/&#039;&#039;db.crt&lt;br /&gt;
&lt;br /&gt;
if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
    sbsign &amp;quot;$kernel&amp;quot; --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot;&lt;br /&gt;
fi}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{Expansion|shim を含めるように ISO を再パックするための手順を追加してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。以下の手順に従うか、自動化された代替手段として  {{AUR|gsai-git}} を使用してください。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次のようにすると、簡単に解析できるダイジェストのリストが出力されます:&lt;br /&gt;
&lt;br /&gt;
 # tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -o &#039;Digest: &amp;quot;[a-f0-9]\{64\}&amp;quot;&#039; | sed &#039;s/Digest: &amp;quot;//;s/&amp;quot;$//&#039;&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、{{AUR|digest-to-efi-sig-list}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
ダイジェストが多数ある場合、[https://gist.github.com/Strykar/5d57145962bb1bcc00ef52f380697e55 このような Bash スクリプト] を使用することもできます。&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + ArchLinux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2025-10-29|850808}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41382</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41382"/>
		<updated>2026-03-12T01:13:55Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* 公式の ISO をカスタムの鍵で署名する */ AURからgsaiを追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[hu:Unified Extensible Firmware Interface (Magyar)/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ([https://gitlab.archlinux.org/archlinux/archiso/-/issues/69 archlinux/archiso#69])。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== OpROM 署名を特定する ====&lt;br /&gt;
&lt;br /&gt;
署名された OpROM があるかどうかを確認するには、次の手順に従います。&lt;br /&gt;
&lt;br /&gt;
OpROM を搭載したすべてのデバイスを一覧表示します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ find /sys/devices/ -name rom|&lt;br /&gt;
/sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
 ...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これは、署名付き EFI ROM を搭載した Intel DC SSD の例です。デバイスごとに以下の手順を繰り返してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lspci -s 81:00.0|&lt;br /&gt;
81:00.0 Non-Volatile memory controller: Intel Corporation PCIe Data Center SSD (rev 01)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ROM をダンプします:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
 # cat /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom &amp;gt; ~/intel_ssd.rom&lt;br /&gt;
 # echo 0 &amp;gt; /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
&lt;br /&gt;
TianoCore の [https://github.com/tianocore/edk2.git EDK II ツール] 取得してコンパイルします:&lt;br /&gt;
&lt;br /&gt;
 $ make -C BaseTools&lt;br /&gt;
&lt;br /&gt;
ROM ファイルを解析します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ./BaseTools/Source/C/bin/EfiRom -d ~/intel_ssd.rom|&lt;br /&gt;
Image 1 -- Offset 0x0&lt;br /&gt;
  ROM header contents&lt;br /&gt;
    Signature              0xAA55&lt;br /&gt;
    PCIR offset            0x001C&lt;br /&gt;
    Signature               PCIR&lt;br /&gt;
    Vendor ID               0x8086&lt;br /&gt;
    Device ID               0x0953&lt;br /&gt;
    Length                  0x001C&lt;br /&gt;
    Revision                0x0003&lt;br /&gt;
    DeviceListOffset        0x00&lt;br /&gt;
    Class Code              0x000000&lt;br /&gt;
    Image size              0x6A00&lt;br /&gt;
    Code revision:          0x0000&lt;br /&gt;
    MaxRuntimeImageLength   0x00&lt;br /&gt;
    ConfigUtilityCodeHeaderOffset 0x00&lt;br /&gt;
    DMTFCLPEntryPointOffset 0x00&lt;br /&gt;
    Indicator               0x80   (last image)&lt;br /&gt;
    Code type               0x03   (EFI image)&lt;br /&gt;
  EFI ROM header contents&lt;br /&gt;
    EFI Signature          0x0EF1&lt;br /&gt;
    Compression Type       0x0001 (compressed)&lt;br /&gt;
    Machine type           0x8664 (X64)&lt;br /&gt;
    Subsystem              0x000B (EFI boot service driver)&lt;br /&gt;
    EFI image offset       0x0038 (@0x38)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これはこの OpROM に、オフセット 0x0 のイメージ 1 の、オフセット 0x0038 に圧縮された  EFI イメージがあることを示します。&lt;br /&gt;
&lt;br /&gt;
EFI セクションを取得します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=intel_ssd.rom ibs=1 skip=$(( 0x00 + 0x38 )) of=intel_ssd.rom.efi.compressed&lt;br /&gt;
&lt;br /&gt;
バイナリイメージを解凍します:&lt;br /&gt;
&lt;br /&gt;
 $ ./BaseTools/Source/C/bin/TianoCompress -d --uefi -v ~/intel_ssd.rom.efi.compressed -o ~/intel_ssd.rom.efi&lt;br /&gt;
&lt;br /&gt;
{{hc|$ file ../intel_ssd.rom.efi|&lt;br /&gt;
../intel_ssd.rom.efi: PE32+ executable for EFI (boot service driver), x86-64, 6 sections&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} で署名を調べると、Microsoft の DB 証明書で署名されていることがわかります:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ sbverify --list ~/intel_ssd.rom.efi|2=&lt;br /&gt;
signature 1&lt;br /&gt;
image signature issuers:&lt;br /&gt;
 - /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
image signature certificates:&lt;br /&gt;
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/OU=MOPR/CN=Microsoft Windows UEFI Driver Publisher&lt;br /&gt;
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation Third Party Marketplace Root&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|デバイスの文鎮化を回避するために、署名された ROM を搭載したグラフィックカードを使用している場合は、独自のキーを登録した後、セキュア ブート DB に必要な発行者が保持されていることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== GRUB で sbctl を使う =====&lt;br /&gt;
&lt;br /&gt;
[[GRUB#セキュアブートサポート]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。あるいは、以下のようにすることもできます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed -E &#039;s{{!}}^.* (/.+) is not signed${{!}}sbctl sign -s &amp;quot;\1&amp;quot;{{!}}e&#039;&lt;br /&gt;
&lt;br /&gt;
これはファイルパスに依存せず、「✗」文字は必要ありません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{Expansion|shim を含めるように ISO を再パックするための手順を追加してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。以下の手順に従うか、自動化された代替手段として  {{AUR|gsai-git}} を使用してください。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次のようにすると、簡単に解析できるダイジェストのリストが出力されます:&lt;br /&gt;
&lt;br /&gt;
 # tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -o &#039;Digest: &amp;quot;[a-f0-9]\{64\}&amp;quot;&#039; | sed &#039;s/Digest: &amp;quot;//;s/&amp;quot;$//&#039;&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、{{AUR|digest-to-efi-sig-list}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
ダイジェストが多数ある場合、[https://gist.github.com/Strykar/5d57145962bb1bcc00ef52f380697e55 このような Bash スクリプト] を使用することもできます。&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + ArchLinux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2025-10-29|850808}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41381</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41381"/>
		<updated>2026-03-12T01:03:22Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* OpROM 署名を特定する */ 追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[hu:Unified Extensible Firmware Interface (Magyar)/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ([https://gitlab.archlinux.org/archlinux/archiso/-/issues/69 archlinux/archiso#69])。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== OpROM 署名を特定する ====&lt;br /&gt;
&lt;br /&gt;
署名された OpROM があるかどうかを確認するには、次の手順に従います。&lt;br /&gt;
&lt;br /&gt;
OpROM を搭載したすべてのデバイスを一覧表示します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ find /sys/devices/ -name rom|&lt;br /&gt;
/sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
 ...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これは、署名付き EFI ROM を搭載した Intel DC SSD の例です。デバイスごとに以下の手順を繰り返してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lspci -s 81:00.0|&lt;br /&gt;
81:00.0 Non-Volatile memory controller: Intel Corporation PCIe Data Center SSD (rev 01)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ROM をダンプします:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
 # cat /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom &amp;gt; ~/intel_ssd.rom&lt;br /&gt;
 # echo 0 &amp;gt; /sys/devices/pci0000:80/0000:80:01.0/0000:81:00.0/rom&lt;br /&gt;
&lt;br /&gt;
TianoCore の [https://github.com/tianocore/edk2.git EDK II ツール] 取得してコンパイルします:&lt;br /&gt;
&lt;br /&gt;
 $ make -C BaseTools&lt;br /&gt;
&lt;br /&gt;
ROM ファイルを解析します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ./BaseTools/Source/C/bin/EfiRom -d ~/intel_ssd.rom|&lt;br /&gt;
Image 1 -- Offset 0x0&lt;br /&gt;
  ROM header contents&lt;br /&gt;
    Signature              0xAA55&lt;br /&gt;
    PCIR offset            0x001C&lt;br /&gt;
    Signature               PCIR&lt;br /&gt;
    Vendor ID               0x8086&lt;br /&gt;
    Device ID               0x0953&lt;br /&gt;
    Length                  0x001C&lt;br /&gt;
    Revision                0x0003&lt;br /&gt;
    DeviceListOffset        0x00&lt;br /&gt;
    Class Code              0x000000&lt;br /&gt;
    Image size              0x6A00&lt;br /&gt;
    Code revision:          0x0000&lt;br /&gt;
    MaxRuntimeImageLength   0x00&lt;br /&gt;
    ConfigUtilityCodeHeaderOffset 0x00&lt;br /&gt;
    DMTFCLPEntryPointOffset 0x00&lt;br /&gt;
    Indicator               0x80   (last image)&lt;br /&gt;
    Code type               0x03   (EFI image)&lt;br /&gt;
  EFI ROM header contents&lt;br /&gt;
    EFI Signature          0x0EF1&lt;br /&gt;
    Compression Type       0x0001 (compressed)&lt;br /&gt;
    Machine type           0x8664 (X64)&lt;br /&gt;
    Subsystem              0x000B (EFI boot service driver)&lt;br /&gt;
    EFI image offset       0x0038 (@0x38)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これはこの OpROM に、オフセット 0x0 のイメージ 1 の、オフセット 0x0038 に圧縮された  EFI イメージがあることを示します。&lt;br /&gt;
&lt;br /&gt;
EFI セクションを取得します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=intel_ssd.rom ibs=1 skip=$(( 0x00 + 0x38 )) of=intel_ssd.rom.efi.compressed&lt;br /&gt;
&lt;br /&gt;
バイナリイメージを解凍します:&lt;br /&gt;
&lt;br /&gt;
 $ ./BaseTools/Source/C/bin/TianoCompress -d --uefi -v ~/intel_ssd.rom.efi.compressed -o ~/intel_ssd.rom.efi&lt;br /&gt;
&lt;br /&gt;
{{hc|$ file ../intel_ssd.rom.efi|&lt;br /&gt;
../intel_ssd.rom.efi: PE32+ executable for EFI (boot service driver), x86-64, 6 sections&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} で署名を調べると、Microsoft の DB 証明書で署名されていることがわかります:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ sbverify --list ~/intel_ssd.rom.efi|2=&lt;br /&gt;
signature 1&lt;br /&gt;
image signature issuers:&lt;br /&gt;
 - /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
image signature certificates:&lt;br /&gt;
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/OU=MOPR/CN=Microsoft Windows UEFI Driver Publisher&lt;br /&gt;
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011&lt;br /&gt;
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation Third Party Marketplace Root&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|デバイスの文鎮化を回避するために、署名された ROM を搭載したグラフィックカードを使用している場合は、独自のキーを登録した後、セキュア ブート DB に必要な発行者が保持されていることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== GRUB で sbctl を使う =====&lt;br /&gt;
&lt;br /&gt;
[[GRUB#セキュアブートサポート]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。あるいは、以下のようにすることもできます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed -E &#039;s{{!}}^.* (/.+) is not signed${{!}}sbctl sign -s &amp;quot;\1&amp;quot;{{!}}e&#039;&lt;br /&gt;
&lt;br /&gt;
これはファイルパスに依存せず、「✗」文字は必要ありません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{Expansion|shim を含めるように ISO を再パックするための手順を追加してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次のようにすると、簡単に解析できるダイジェストのリストが出力されます:&lt;br /&gt;
&lt;br /&gt;
 # tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -o &#039;Digest: &amp;quot;[a-f0-9]\{64\}&amp;quot;&#039; | sed &#039;s/Digest: &amp;quot;//;s/&amp;quot;$//&#039;&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、{{AUR|digest-to-efi-sig-list}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
ダイジェストが多数ある場合、[https://gist.github.com/Strykar/5d57145962bb1bcc00ef52f380697e55 このような Bash スクリプト] を使用することもできます。&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + ArchLinux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2025-10-29|850808}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41380</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41380"/>
		<updated>2026-03-12T00:44:34Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* GRUB で sbctl を使う */ 追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[hu:Unified Extensible Firmware Interface (Magyar)/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ([https://gitlab.archlinux.org/archlinux/archiso/-/issues/69 archlinux/archiso#69])。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== GRUB で sbctl を使う =====&lt;br /&gt;
&lt;br /&gt;
[[GRUB#セキュアブートサポート]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。あるいは、以下のようにすることもできます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed -E &#039;s{{!}}^.* (/.+) is not signed${{!}}sbctl sign -s &amp;quot;\1&amp;quot;{{!}}e&#039;&lt;br /&gt;
&lt;br /&gt;
これはファイルパスに依存せず、「✗」文字は必要ありません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{Expansion|shim を含めるように ISO を再パックするための手順を追加してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次のようにすると、簡単に解析できるダイジェストのリストが出力されます:&lt;br /&gt;
&lt;br /&gt;
 # tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -o &#039;Digest: &amp;quot;[a-f0-9]\{64\}&amp;quot;&#039; | sed &#039;s/Digest: &amp;quot;//;s/&amp;quot;$//&#039;&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、{{AUR|digest-to-efi-sig-list}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
ダイジェストが多数ある場合、[https://gist.github.com/Strykar/5d57145962bb1bcc00ef52f380697e55 このような Bash スクリプト] を使用することもできます。&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + ArchLinux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2025-10-29|850808}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41068</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41068"/>
		<updated>2025-10-29T12:47:08Z</updated>

		<summary type="html">&lt;p&gt;ELC: ハンガリー語ページへのリンク&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[hu:Unified Extensible Firmware Interface (Magyar)/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ([https://gitlab.archlinux.org/archlinux/archiso/-/issues/69 archlinux/archiso#69])。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。あるいは、以下のようにすることもできます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed -E &#039;s{{!}}^.* (/.+) is not signed${{!}}sbctl sign -s &amp;quot;\1&amp;quot;{{!}}e&#039;&lt;br /&gt;
&lt;br /&gt;
これはファイルパスに依存せず、「✗」文字は必要ありません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{Expansion|shim を含めるように ISO を再パックするための手順を追加してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次のようにすると、簡単に解析できるダイジェストのリストが出力されます:&lt;br /&gt;
&lt;br /&gt;
 # tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -o &#039;Digest: &amp;quot;[a-f0-9]\{64\}&amp;quot;&#039; | sed &#039;s/Digest: &amp;quot;//;s/&amp;quot;$//&#039;&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、{{AUR|digest-to-efi-sig-list}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
ダイジェストが多数ある場合、[https://gist.github.com/Strykar/5d57145962bb1bcc00ef52f380697e55 このような Bash スクリプト] を使用することもできます。&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + ArchLinux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2025-10-29|850808}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41067</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41067"/>
		<updated>2025-10-29T08:51:23Z</updated>

		<summary type="html">&lt;p&gt;ELC: TranslationStatus&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ([https://gitlab.archlinux.org/archlinux/archiso/-/issues/69 archlinux/archiso#69])。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。あるいは、以下のようにすることもできます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed -E &#039;s{{!}}^.* (/.+) is not signed${{!}}sbctl sign -s &amp;quot;\1&amp;quot;{{!}}e&#039;&lt;br /&gt;
&lt;br /&gt;
これはファイルパスに依存せず、「✗」文字は必要ありません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{Expansion|shim を含めるように ISO を再パックするための手順を追加してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次のようにすると、簡単に解析できるダイジェストのリストが出力されます:&lt;br /&gt;
&lt;br /&gt;
 # tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -o &#039;Digest: &amp;quot;[a-f0-9]\{64\}&amp;quot;&#039; | sed &#039;s/Digest: &amp;quot;//;s/&amp;quot;$//&#039;&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、{{AUR|digest-to-efi-sig-list}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
ダイジェストが多数ある場合、[https://gist.github.com/Strykar/5d57145962bb1bcc00ef52f380697e55 このような Bash スクリプト] を使用することもできます。&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + ArchLinux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2025-10-29|850808}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41066</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41066"/>
		<updated>2025-10-29T08:43:13Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* ISO の再パック */ Expansion（英語ページより）&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ([https://gitlab.archlinux.org/archlinux/archiso/-/issues/69 archlinux/archiso#69])。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。あるいは、以下のようにすることもできます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed -E &#039;s{{!}}^.* (/.+) is not signed${{!}}sbctl sign -s &amp;quot;\1&amp;quot;{{!}}e&#039;&lt;br /&gt;
&lt;br /&gt;
これはファイルパスに依存せず、「✗」文字は必要ありません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{Expansion|shim を含めるように ISO を再パックするための手順を追加してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次のようにすると、簡単に解析できるダイジェストのリストが出力されます:&lt;br /&gt;
&lt;br /&gt;
 # tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -o &#039;Digest: &amp;quot;[a-f0-9]\{64\}&amp;quot;&#039; | sed &#039;s/Digest: &amp;quot;//;s/&amp;quot;$//&#039;&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、{{AUR|digest-to-efi-sig-list}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
ダイジェストが多数ある場合、[https://gist.github.com/Strykar/5d57145962bb1bcc00ef52f380697e55 このような Bash スクリプト] を使用することもできます。&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + ArchLinux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41065</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41065"/>
		<updated>2025-10-29T08:38:55Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* 署名 */ 追加の一括署名コマンド（英語ページより）&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ([https://gitlab.archlinux.org/archlinux/archiso/-/issues/69 archlinux/archiso#69])。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。あるいは、以下のようにすることもできます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed -E &#039;s{{!}}^.* (/.+) is not signed${{!}}sbctl sign -s &amp;quot;\1&amp;quot;{{!}}e&#039;&lt;br /&gt;
&lt;br /&gt;
これはファイルパスに依存せず、「✗」文字は必要ありません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次のようにすると、簡単に解析できるダイジェストのリストが出力されます:&lt;br /&gt;
&lt;br /&gt;
 # tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -o &#039;Digest: &amp;quot;[a-f0-9]\{64\}&amp;quot;&#039; | sed &#039;s/Digest: &amp;quot;//;s/&amp;quot;$//&#039;&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、{{AUR|digest-to-efi-sig-list}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
ダイジェストが多数ある場合、[https://gist.github.com/Strykar/5d57145962bb1bcc00ef52f380697e55 このような Bash スクリプト] を使用することもできます。&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + ArchLinux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41064</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41064"/>
		<updated>2025-10-29T08:35:20Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* インストールメディアを起動する */ リンク変更（英語ページより）&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ([https://gitlab.archlinux.org/archlinux/archiso/-/issues/69 archlinux/archiso#69])。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次のようにすると、簡単に解析できるダイジェストのリストが出力されます:&lt;br /&gt;
&lt;br /&gt;
 # tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -o &#039;Digest: &amp;quot;[a-f0-9]\{64\}&amp;quot;&#039; | sed &#039;s/Digest: &amp;quot;//;s/&amp;quot;$//&#039;&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、{{AUR|digest-to-efi-sig-list}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
ダイジェストが多数ある場合、[https://gist.github.com/Strykar/5d57145962bb1bcc00ef52f380697e55 このような Bash スクリプト] を使用することもできます。&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + ArchLinux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41063</id>
		<title>FFmpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41063"/>
		<updated>2025-10-29T07:40:52Z</updated>

		<summary type="html">&lt;p&gt;ELC: TranslationStatus&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:オーディオ]]&lt;br /&gt;
[[Category:ビデオ]]&lt;br /&gt;
[[en:FFmpeg]]&lt;br /&gt;
[[zh-hans:FFmpeg]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Flac を Mp3 に変換#FFmpeg を使う}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
プロジェクトの[https://www.ffmpeg.org/ ホームページ] より:&lt;br /&gt;
:FFmpeg は、音声と動画を記録、変換、そしてストリーミングするための完全でクロスプラットフォームなソリューションです。先進的な音声・動画コーデックライブラリである libavcodec が含まれています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;libav&#039;&#039; や &#039;&#039;avconv&#039;&#039; など FFmpeg のフォークも存在しています。FFmpeg の現在の状態やプロジェクトの違いについては [https://blog.pkh.me/p/13-the-ffmpeg-libav-situation.html The FFmpeg/Libav situation] を読んでください。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|ffmpeg}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
開発版は {{AUR|ffmpeg-git}} パッケージでインストールできます。可能な限り多くのオプション機能を有効化してビルドする {{AUR|ffmpeg-full}} も存在します。&lt;br /&gt;
&lt;br /&gt;
== エンコードの例 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* パラメータを正しい順序で指定することが重要です (例: input、video、filters、audio、output)。順序を間違うと、パラメータがスキップされたり、FFmpeg が実行されなかったりする場合があります。&lt;br /&gt;
* FFmpeg は、使用できる CPU スレッド数を自動的に選択するはずです。しかし、パラメータ {{ic|-threads &#039;&#039;number&#039;&#039;}} を使って、使用できるスレッド数を強制したほうが良い場合もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki#Encoding FFmpeg のエンコード wiki] と {{man|1|ffmpeg|EXAMPLES}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== スクリーンキャプチャ ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#x11grab x11grab] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の仮想デバイスが含まれており、ユーザのディスプレイ全体と音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
スクリーンショットを撮って {{ic|screen.png}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -i $DISPLAY -vframes 1 screen.png&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} はキャプチャする領域のサイズを指定します。&lt;br /&gt;
&lt;br /&gt;
ロスレスエンコードで音声なしのスクリーンキャストを撮って {{ic|screen.mkv}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -c:v ffvhuff screen.mkv&lt;br /&gt;
&lt;br /&gt;
ここでは、Huffyuv コーデックが使用されます。このコーデックは高速ですが、ファイルサイズが大きくなります。&lt;br /&gt;
&lt;br /&gt;
ロッシーエンコードで音声ありのスクリーンキャストを撮って {{ic|screen.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac screen.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
動画ストリームをファイルとして保存する必要はないが、画面共有のために仮想ウェブカメラとして使う場合、[[v4l2loopback#FFmpeg を使って X11 をキャストする]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Desktop#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウェブカメラの録画 ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#video4linux2_002c-v4l2 video4linux2] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の入力デバイスが含まれています。これらにより、ウェブカメラと音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドは、ウェブカメラから音声無しで動画を録画し {{ic|webcam.mp4}} に保存します。ウェブカメラが {{ic|/dev/video0}} として正しく認識されていると仮定します:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -c:v libx264 -preset ultrafast webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} は、ウェブカメラからの許可されるイメージサイズの最大値を指定します。&lt;br /&gt;
&lt;br /&gt;
上記のコマンドは無音動画を出力します。音声ありでウェブカメラから動画を録画し {{ic|webcam.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Webcam#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== VOB から他のコンテナに ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:VOB|VOB]] ファイルを一つのストリームに連結して MPEG-2 にするには:&lt;br /&gt;
&lt;br /&gt;
 $ cat f0.VOB f1.VOB f2.VOB | ffmpeg -i - out.mp2&lt;br /&gt;
&lt;br /&gt;
=== x264 ===&lt;br /&gt;
&lt;br /&gt;
==== ロスレス ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットは最速のエンコードをするので素早い録画をしたいときに有用です (スクリーンキャストなど):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset ultrafast -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットの反対は &#039;&#039;veryslow&#039;&#039; で、&#039;&#039;ultrafast&#039;&#039; よりもエンコードが遅いかわりに出力するファイルのサイズが小さくなります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset veryslow -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
どちらでも出力のクオリティは同じです。&lt;br /&gt;
&lt;br /&gt;
{{Tip|あなたの使っているコンピュータがリアルタイムで {{ic|-preset superfast}} を処理できる場合、{{ic|-preset ultrafast}} ではなく {{ic|-preset superfast}} を使用してください。Ultrafast は superfast よりも圧縮率が&#039;&#039;かなり&#039;&#039;落ちます。}}&lt;br /&gt;
&lt;br /&gt;
==== Constant rate factor ====&lt;br /&gt;
&lt;br /&gt;
出力する品質を指定したいときに使います。一般的に使われているのは最高の {{ic|-crf}} 値で、これでも許容範囲内の画質になります。値が低いほど画質は高くなります。0はロスレス、18は見た目がロスレス、そして23がデフォルトの値です。賢明な値は18から28の範囲になります。一番遅い {{ic|-preset}} を使うなら辛抱する必要があります。詳しくは [https://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuide x264 Encoding Guide] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039; -c:v libx264 -tune film -preset slow -crf 22 -x264opts fast_pskip=0 -c:a libmp3lame -aq 4 &#039;&#039;output&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{ic|-tune}} オプションを使うことで[https://forum.doom9.org/showthread.php?t=149394 エンコードされるメディアの中身とタイプにあった設定にすることができます]。&lt;br /&gt;
&lt;br /&gt;
==== ツーパス (超高品質) ====&lt;br /&gt;
&lt;br /&gt;
マルチパスの始めは動画の統計が記録されるため、音声が無効化されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -an -vcodec libx264 -pass 1 -preset veryslow \&lt;br /&gt;
 -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 -f rawvideo -y /dev/null&lt;br /&gt;
&lt;br /&gt;
コンテナの形式は出力ファイルの拡張子 ({{ic|.mkv}}) から自動的に検出して変換されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -acodec aac -b:a 256k -ar 96000 -vcodec libx264 \&lt;br /&gt;
 -pass 2 -preset veryslow -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
==== 動画の手ブレ補正 ====&lt;br /&gt;
&lt;br /&gt;
vbid.stab プラグインを使ってツーパスで手ブレ補正 (ビデオ安定化) を行います。&lt;br /&gt;
&lt;br /&gt;
===== ファーストパス =====&lt;br /&gt;
&lt;br /&gt;
ファーストパスでは補正パラメータを記録してファイルに書き出します、または視覚分析のテスト動画を作成します。&lt;br /&gt;
&lt;br /&gt;
* 補正パラメータを記録してファイルだけに書き出す: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf -f null -}}&lt;br /&gt;
* 補正パラメータをファイルに書きだして、視覚分析用のテストビデオ &amp;quot;output-stab&amp;quot; を作成: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf output-stab}}&lt;br /&gt;
&lt;br /&gt;
===== セカンドパス =====&lt;br /&gt;
&lt;br /&gt;
セカンドパスではファーストパスで作成した補正パラメータを解析して、それを使って &amp;quot;output-stab_final&amp;quot; を生成します。セカンドパスで他のフィルターを適用することもでき、変換を繰り返す必要をなくして画質を最大限保つことができます。下のコマンドでは以下のオプションを使っています:&lt;br /&gt;
&lt;br /&gt;
* {{ic|unsharp}}: vid.stab の作者によって推奨されています。下の例ではデフォルトの 5:5:1.0:5:5:1.0 を使っています。&lt;br /&gt;
* {{ic|1=fade=t=in:st=0:d=4}}: 4秒間のフェードインをファイルの冒頭に挟みます。&lt;br /&gt;
* {{ic|1=fade=t=out:st=60:d=4}}: 動画の60秒目から4秒間のフェードアウトを挟みます。&lt;br /&gt;
* {{ic|-c:a pcm_s16le}}: XAVC-S コーデックは pcm_s16be で記録されロスレスの pcm_s16le に変換されます。&lt;br /&gt;
&lt;br /&gt;
 $  ffmpeg -i input -vf vidstabtransform=smoothing=30:interpol=bicubic:input=transforms.trf,unsharp,fade=t=in:st=0:d=4,fade=t=out:st=60:d=4 -c:v libx264 -tune film -preset veryslow -crf 8 -x264opts fast_pskip=0 -c:a pcm_s16le output-stab_final&lt;br /&gt;
&lt;br /&gt;
=== x265 ===&lt;br /&gt;
&lt;br /&gt;
以下の例は、パラメータを指定せずに libx265 を呼び出した場合のデフォルトを示します (Constant Rate Factor  エンコード):&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -i input -c:v libx265 -crf 28 -preset medium -c:a libvorbis output.mp4&lt;br /&gt;
&lt;br /&gt;
詳細は FFmpeg の [https://trac.ffmpeg.org/wiki/Encode/H.265 H.265/HEVC Video Encoding Guide] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== シングルパス MPEG-2 (ニアロスレス) ===&lt;br /&gt;
&lt;br /&gt;
DVD 標準のパラメータに FFmpeg を自動的に設定することができます。約 30 FPS の DVD [[Wikipedia:ja:MPEG-2|MPEG-2]] にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target ntsc-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
約 24 FPS の DVD MPEG-2 にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target film-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
=== 字幕 ===&lt;br /&gt;
&lt;br /&gt;
==== 抽出 ====&lt;br /&gt;
&lt;br /&gt;
MPEG-2 や Matroska などのコンテナファイルに埋め込まれた字幕を抽出して、SRT や SSA、WebVTT などの字幕形式に変換することができます。[https://trac.ffmpeg.org/wiki/ExtractSubtitles]&lt;br /&gt;
&lt;br /&gt;
* ファイルに字幕ストリームが含まれているか確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffprobe -hide_banner foo.mkv|&lt;br /&gt;
...&lt;br /&gt;
Stream #0:0(und): Video: h264 (High), yuv420p, 1920x800 [SAR 1:1 DAR 12:5], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)&lt;br /&gt;
  Metadata:&lt;br /&gt;
  CREATION_TIME   : 2012-06-05 05:04:15&lt;br /&gt;
  LANGUAGE        : und&lt;br /&gt;
Stream #0:1(und): Audio: aac, 44100 Hz, stereo, fltp (default)&lt;br /&gt;
 Metadata:&lt;br /&gt;
 CREATION_TIME   : 2012-06-05 05:10:34&lt;br /&gt;
 LANGUAGE        : und&lt;br /&gt;
 HANDLER_NAME    : GPAC ISO Audio Handler&lt;br /&gt;
&#039;&#039;&#039;Stream #0:2: Subtitle: ssa (default)&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mkv}} には SSA の字幕が埋め込まれており、別のファイルに抽出することが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv foo.ssa&lt;br /&gt;
&lt;br /&gt;
字幕を望ましい形式 (例として [[Wikipedia:ja:SubRip|SubRip]]) に保存するには {{ic|-c:s srt}} を追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -c:s srt foo.srt&lt;br /&gt;
&lt;br /&gt;
複数の字幕が存在する場合、{{ic|-map &#039;&#039;key&#039;&#039;:&#039;&#039;stream&#039;&#039;}} パラメータを使用して抽出するストリームを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -map 0:2 foo.ssa&lt;br /&gt;
&lt;br /&gt;
==== ハードサブ ====&lt;br /&gt;
&lt;br /&gt;
(FFmpeg wiki の記事の [https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo HowToBurnSubtitlesIntoVideo] に基づく説明)&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Hardsub|ハードサブ]]は動画に字幕を焼きこむことになります。ハードサブは無効化できず、言語の切り替えやフォントサイズのカスタマイズもできないため、推奨されない場合もあります。不明な場合は、ハードサブではなくソフトサブを使用してください。&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mpg}} に {{ic|foo.ssa}} の字幕を重ねるには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mpg -vf subtitles=foo.ssa out.mpg&lt;br /&gt;
&lt;br /&gt;
=== ボリュームゲイン ===&lt;br /&gt;
&lt;br /&gt;
ボリュームゲインは &#039;&#039;ffmpeg&#039;&#039; のフィルタ機能で変更できます。まず、{{ic|-af}} または {{ic|-filter:a}} を使って音声ストリームを選択し、次に、&#039;&#039;volume&#039;&#039; フィルタの後にそのストリームに対するゲインを指定してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;volume=1.5&#039;&#039;&#039; ouput.flac&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|1=volume=1.5}} によって 150% のボリュームゲインとなります。1.5 から 0.5 にすると、ボリュームが半分になります。ボリュームフィルタにはデシベル単位を渡すこともできます。{{ic|1=volume=3dB}} とすると、ボリュームが 3dB 増え、{{ic|1=volume=-3dB}} とすると 3dB 減ります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイルのボリュームゲインを倍にすることは、ボリュームを倍にすることと同じではありません。実験して正しいボリュームを見つける必要があります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;volumedetect&#039;&#039; フィルタを使用することで、ファイルの現在の平均ボリュームとピークボリュームを調べることができます: {{ic|ffmpeg -i input.flac -af volumedetect -f null -}}。そして、目標のレベルと現在のレベルとの差を &#039;&#039;volume&#039;&#039; フィルタに渡すことで、望みのレベルにすることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ボリュームノーマライゼーション ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loudnorm&#039;&#039; フィルタによるノーマライゼーションにより、平均ボリュームとピークボリュームを特定の値にすることができます。&#039;&#039;fmpeg&#039;&#039; のデフォルトの平均ラウドネス、ピークラウドネス、そしてレンジラウドネスの目標値 (それぞれ、-24 LUFS、-2 dBTP、7 LU) を使って、ファイルの知覚ラウドネスを正規化するには、以下のコマンドを使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;loudnorm&#039;&#039;&#039; output.flac&lt;br /&gt;
&lt;br /&gt;
別のラウドネスプロファイルを得るには、&#039;&#039;loudnorm&#039;&#039; フィルタのパラメータ {{ic|i}}、{{ic|tp}}、そして {{ic|lra}} を使って、それぞれ &#039;&#039;i&#039;&#039;ntegrated、&#039;&#039;t&#039;&#039;rue &#039;&#039;p&#039;&#039;eak、&#039;&#039;l&#039;&#039;oudness &#039;&#039;ra&#039;&#039;nge を指定してください。例えば、デフォルトよりも高い知覚ラウドネスにするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af loudnorm=i=-16:tp=-1.5:lra=11:print_format=summary output.flac&lt;br /&gt;
&lt;br /&gt;
この例では、オーディオファイルの入力ラウドネスと出力ラウドネスを表示するために {{ic|1=print_format=summary}} も追加しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|このフィルタはツーパスモードもサポートしています。最初の実行から測定されたラウドネス値を抽出し、その値を使って2回めの実行で線形ノーマライゼーションを行います。詳細は [https://ffmpeg.org/ffmpeg-filters.html#loudnorm ffmpeg loudnorm ドキュメント]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|ファイルの現在のラウドネスを調べるには、{{ic|1=ffmpeg -i input.flac -af loudnorm=print_format=summary -f null -}} を使ってください。}}&lt;br /&gt;
&lt;br /&gt;
=== 音声を抽出する ===&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg output.ext|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: ac3, 48000 Hz, stereo, s16, 384 kb/s&lt;br /&gt;
    Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s&lt;br /&gt;
    Stream #0.3: Audio: dts, 48000 Hz, 5.1 768 kb/s&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
多重化されている一番目の ({{ic|-map 0:1}}) [[Wikipedia:ja:ドルビーデジタル|AC-3]] でエンコードされた音声ストリームをファイルに抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;video&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
三番目の ({{ic|-map 0:3}}) [[Wikipedia:ja:デジタル・シアター・システムズ|DTS]] 音声ストリームをビットレートが 192 kb/s で[[Wikipedia:ja:サンプリングレート|サンプリングレート]]が 96000 Hz の [[Wikipedia:ja:AAC|AAC]] ファイルに変換する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:3 -acodec aac -b:a 192k -ar 96000 -vn &#039;&#039;output&#039;&#039;.aac&lt;br /&gt;
&lt;br /&gt;
{{ic|-vn}} は動画ストリームの処理を無効にします。&lt;br /&gt;
&lt;br /&gt;
時間を指定して音声ストリームを抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -ss 00:01:25 -t 00:00:05 -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;output&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
{{ic|-ss}} で開始時間を、{{ic|-t}} で長さを指定します。&lt;br /&gt;
&lt;br /&gt;
=== 音声を除去する ===&lt;br /&gt;
&lt;br /&gt;
# 一番目の動画ストリーム ({{ic|-map 0:0}}) と二番目の AC-3 音声ストリーム ({{ic|-map 0:2}}) をコピーします。&lt;br /&gt;
# AC-3 音声ストリームをビットレートが 128 kb/s でサンプリングレートが 48000 Hz の2チャンネルの MP3 に変換します。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:0 -map 0:2 -vcodec copy -acodec libmp3lame \&lt;br /&gt;
 -b:a 128k -ar 48000 -ac 2 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mkv|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|無駄な音声ストリームを削除することで余ったビットを画質の向上に割り当てることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ファイルを分割する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|copy}} コーデックを使うことでエンコーディングを変更せずにファイルの操作を行うことができます。例えば、次のコマンドであらゆるメディアファイルを簡単に2つに分けることが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -t 00:05:30 -c copy part1.ext -ss 00:05:30 -c copy part2.ext&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアビデオアクセラレーション ===&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/HWAccelIntro ハードウェアアクセラレーション API] を使用することで、エンコード/デコードのパフォーマンスを向上させることができます。しかし、特定の種類のコーデックしか使えませんし、場合によっては、ソフトウェアエンコードを使ったときと同じ結果が得られるとは限りません。&lt;br /&gt;
&lt;br /&gt;
==== VA-API ====&lt;br /&gt;
&lt;br /&gt;
Intel CPU ({{Pkg|intel-media-driver}} か {{Pkg|libva-intel-driver}} が必要) を使っている場合や、特定の AMD GPU でオープンソースの [[AMDGPU]] ドライバー ({{Pkg|mesa}} が必要) を使っている場合、[[VA-API]] を使用してエンコードとデコードができます。&lt;br /&gt;
&lt;br /&gt;
利用可能なパラメータとサポートされているプラットフォームに関する情報は、[https://trac.ffmpeg.org/wiki/Hardware/VAAPI FFmpeg のドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
サポートされている H.264 コーデックを使用してエンコードする例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -threads 1 -i file.ext -vaapi_device /dev/dri/renderD128 -vcodec h264_vaapi -vf format=&#039;nv12|vaapi,hwupload&#039; output.mp4&lt;br /&gt;
&lt;br /&gt;
{{Note|通常、VA-API は、(FFmpeg パッケージの依存関係である) {{Pkg|libva}} に含まれるヘッダとライブラリが検出されれば、ビルド時に {{Pkg|ffmpeg}} の自動検出機能によって有効化されます。}}&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を以下に挙げます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf &#039;format=nv12,hwupload&#039; -c:v hevc_vaapi -f mp4 -rc_mode 1 -qp 25 output.mp4&lt;br /&gt;
&lt;br /&gt;
hevc_vaapi を使用する場合、-qp を 25 (視覚的に等価) からそれ以上 (28 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。h264_vaapi を使用する場合、18 (視覚的に等価) からそれ以上 (20 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。また、hevc_vaapi は h264_vaapi よりも 50% 高速にエンコードできるようです。&lt;br /&gt;
&lt;br /&gt;
==== NVIDIA NVENC/NVDEC ====&lt;br /&gt;
&lt;br /&gt;
プロプライエタリな [[NVIDIA]] ドライバを使用していて、{{Pkg|nvidia-utils}} パッケージがインストールされている場合、[[Wikipedia:Nvidia NVENC|NVENC]] と [[Wikipedia:Nvidia NVDEC|NVDEC]] をエンコード/デコードに使用できます。サポートされている GPU は [[Wikipedia:GeForce 600 series|600 シリーズ]]からです。詳細は [[ハードウェアビデオアクセラレーション#NVIDIA]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
テクニックが[https://web.archive.org/web/20190808223352/https://gist.github.com/Brainiarc7/8b471ff91319483cdb725f615908286e こちらの古い gist] に載っています。NVENC は [[CUDA]] と似ているため、ターミナルセッションからでも動作します。ハードウェア NVENC は Intel の VA-API エンコーダよりも数倍高速です。&lt;br /&gt;
&lt;br /&gt;
利用可能なオプションを表示するには以下のコマンドを実行してください ({{ic|hevc_nvenc}} も使えます):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -help encoder=h264_nvenc&lt;br /&gt;
&lt;br /&gt;
使用例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i source.ext -c:v h264_nvenc -rc constqp -qp 28 output.mkv&lt;br /&gt;
&lt;br /&gt;
==== Intel QuickSync (QSV) ====&lt;br /&gt;
&lt;br /&gt;
{{Merge|ハードウェアビデオアクセラレーション#Intel Video Processing Library (Intel VPL)|This is not specific to ffmpeg}}&lt;br /&gt;
&lt;br /&gt;
[https://www.intel.com/content/www/us/en/architecture-and-technology/quick-sync-video/quick-sync-video-general.html Intel® Quick Sync Video] は、[[Intel]] GPU のメディア処理機能を使用して高速なデコードとエンコードを行い、プロセッサが他のタスクを処理できるようにしてシステムの応答性を向上させます。&lt;br /&gt;
&lt;br /&gt;
これを使用するには、&#039;&#039;&#039;libmfx&#039;&#039;&#039; ランタイム実装がインストールされている必要があります。&#039;&#039;&#039;libmfx&#039;&#039;&#039; は、ハードウェアプラットフォームに基づいて実行時に実装をロードするディスパッチャライブラリです。&lt;br /&gt;
[[Wikipedia:ja:Broadwellマイクロアーキテクチャ|Broadwell]] から [[Wikipedia:ja:Rocket Lakeマイクロプロセッサ|Rocket Lake]] までの GPU で実行する場合、このライブラリは {{Pkg|intel-media-sdk}} をランタイム実装としてロードします。&lt;br /&gt;
[[Wikipedia:ja:Tiger Lakeマイクロアーキテクチャ|Tiger Lake]] 及びそれ以降の GPU においては、&#039;&#039;&#039;libmfx&#039;&#039;&#039; は {{Pkg|vpl-gpu-rt}} をロードします。[https://github.com/intel/vpl-gpu-rt#system-requirements vpl-gpu-rt system-requirements]も参照してください。&lt;br /&gt;
単一の Intel GPU を搭載しているシステムでは、ランタイム実装を変更したり選択したりできません。対応する実装は、ハードウェアに応じてインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
上記のランタイムをインストールしないと、以下のようなエラーが発生します:&lt;br /&gt;
&lt;br /&gt;
 [AVHWDeviceContext @ 0x558283838c80] Error initializing an MFX session: -3.&lt;br /&gt;
 Device creation failed: -1313558101.&lt;br /&gt;
&lt;br /&gt;
QuickSync の使用方法は [https://trac.ffmpeg.org/wiki/Hardware/QuickSync FFmpeg Wiki] で説明されています。&#039;&#039;libmfx&#039;&#039; を直接使わずに &#039;&#039;iHD&#039;&#039; ドライバか &#039;&#039;i965&#039;&#039; ドライバで [[VA-API]] [https://trac.ffmpeg.org/wiki/Hardware/VAAPI] を使用することが推奨されます。エンコード例は FFmpeg Wiki の &#039;&#039;Hybrid transcode&#039;&#039; セクションを、ドライバに関する指示は [[ハードウェアビデオアクセラレーション#VA-API の設定]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== AMD AMF ====&lt;br /&gt;
&lt;br /&gt;
AMD は、[[AMDGPU PRO]] プロプライエタリパッケージを使用して AMD Video Coding Engine (GPU エンコード) によって Linux で H264 のみのビデオエンコードを行うためのサポートを追加し、ffmpeg は AMF ビデオエンコードのサポートを追加しました。なので、h264_amf ビデオエンコーダを使ってエンコードするには、{{AUR|amf-amdgpu-pro}} が必要です。[[AMDGPU PRO]] パッケージによって提供されている ICD ファイルを環境変数でリンクする必要がある場合があります。そうしないと、ffmpeg はオープンな AMDGPU の ICD ファイルを使用してしまい、このビデオエンコーダを使用できません。エンコードを行うコマンドの例は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mkv -c:v h264_amf -rc 1 -b:v 8M h264_amf_8M.mp4&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を挙げましょう:&lt;br /&gt;
&lt;br /&gt;
 $ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mp4 -c:v h264_amf -f mp4 -rc 0 -qp_b 22 -qp_i 22 -qp_p 22 -quality 2 output.mp4&lt;br /&gt;
&lt;br /&gt;
3つの -qp_(b|i|p) を調整してください。18 にすると視覚的に等価で、22 から非常に小さな視覚的な損失が発生し始めます。&lt;br /&gt;
&lt;br /&gt;
=== アニメーション GIF ===&lt;br /&gt;
&lt;br /&gt;
一般に、アニメーション GIF は、画像品質が悪く、ファイルサイズが比較的大きく、音声サポートもないので、動画フォーマットとして素晴らしい選択肢とは言えません。しかし、ウェブでは依然として頻繁に使用されています。以下のコマンドを使うことで、動画をアニメーション GIF に変換することができます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.mp4 -vf &amp;quot;fps=10,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse&amp;quot; -loop -1 output.gif&lt;br /&gt;
&lt;br /&gt;
パレットフィルタを使って高品質な GIF を生成する方法については、https://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html を見てください。&lt;br /&gt;
&lt;br /&gt;
== プリセットファイル ==&lt;br /&gt;
&lt;br /&gt;
デフォルトの[https://ffmpeg.org/ffmpeg.html#Preset-files プリセットファイル]で {{ic|~/.ffmpeg}} を作成する:&lt;br /&gt;
&lt;br /&gt;
 $ cp -iR /usr/share/ffmpeg ~/.ffmpeg&lt;br /&gt;
&lt;br /&gt;
新しいファイルを作成したりデフォルトのプリセットファイルを編集する:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.ffmpeg/libavcodec-vhq.ffpreset|2=&lt;br /&gt;
vtag=DX50&lt;br /&gt;
mbd=2&lt;br /&gt;
trellis=2&lt;br /&gt;
flags=+cbp+mv0&lt;br /&gt;
pre_dia_size=4&lt;br /&gt;
dia_size=4&lt;br /&gt;
precmp=4&lt;br /&gt;
cmp=4&lt;br /&gt;
subcmp=4&lt;br /&gt;
preme=2&lt;br /&gt;
qns=2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== プリセットファイルを使う ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vcodec}} の宣言の後に {{ic|-vpre}} オプションを加えて下さい。&lt;br /&gt;
&lt;br /&gt;
==== libavcodec-vhq.ffpreset ====&lt;br /&gt;
&lt;br /&gt;
* {{ic|libavcodec}} &#039;&#039;&#039;=&#039;&#039;&#039; vcodec/acodec の名前&lt;br /&gt;
* {{ic|vhq}} &#039;&#039;&#039;=&#039;&#039;&#039; 使用するプリセットの名前&lt;br /&gt;
* {{ic|ffpreset}} &#039;&#039;&#039;=&#039;&#039;&#039; FFmpeg プリセットの拡張子&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 出力を簡略化 ===&lt;br /&gt;
&lt;br /&gt;
以下のオプションを組み合わせて使うことで、出力の詳細さを好きなレベルまで減らすことができます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|-hide_banner}}: 著作権表示、ビルドオプション、そしてライブラリのバージョンが表示されなくなります&lt;br /&gt;
* {{ic|-loglevel}}: ログレベルを調整します (微調整オプションが利用できます)。例: {{ic|-loglevel warning}}&lt;br /&gt;
* {{ic|-nostats}}: エンコードの進捗/統計が表示されなくなります&lt;br /&gt;
&lt;br /&gt;
=== 動画の再生時間を出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 file.ext&lt;br /&gt;
&lt;br /&gt;
=== ストリーム情報を JSON で出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -v quiet -print_format json -show_format -show_streams file.ext&lt;br /&gt;
&lt;br /&gt;
=== X フレームごとに動画のスクリーンショットを作成する ===&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -an -s 319x180 -vf fps=1/&#039;&#039;&#039;100&#039;&#039;&#039; -qscale:v 75 %03d.jpg&lt;br /&gt;
&lt;br /&gt;
=== メタデータの変更 ===&lt;br /&gt;
&lt;br /&gt;
メタデータは直接変更することはできません。メタデータをエクスポートして変更し、新しいファイルにマージする必要があります。&lt;br /&gt;
&lt;br /&gt;
既存の（グローバル）メタデータをテキストファイルに抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;song.mp3&#039; -f ffmetadata song_metadata.txt&lt;br /&gt;
&lt;br /&gt;
テキストファイルからメタデータを含む新しいファイルを作成する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;song.mp3&#039; -f ffmetadata -i new_metadata.txt -map_metadata 1 -id3v2_version 4 song_new.mp3&lt;br /&gt;
&lt;br /&gt;
{{ic|-map_metadata 1}} は、ffmpeg に 2 番目のファイル (インデックスは 0 から始まる) のメタデータを使用するように指示します。&lt;br /&gt;
&lt;br /&gt;
グローバル メタデータの他に、各ストリームは独自のメタデータを持つこともできます。たとえば、{{ic|-map_metadata:s:v 0:s:v}} および {{ic|-map_metadata:s:a 0:s:a}} を使用してエクスポートします。&lt;br /&gt;
&lt;br /&gt;
{{ic|ffprobe}} は({{Pkg|ffmpeg}} パッケージからも同様に) 、default、compact/csv、flat、ini、json、xml など、さらに多くのエクスポート形式を提供します。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://ffmpeg.org/ffmpeg.html FFmpeg documentation] - 公式ドキュメント&lt;br /&gt;
* [https://trac.ffmpeg.org/wiki FFmpeg Wiki] - 公式 wiki&lt;br /&gt;
* [http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-x264.html Encoding with the x264 codec] - MEncoder ドキュメント&lt;br /&gt;
* [https://avidemux.org/admWiki/doku.php?id=tutorial:h.264 H.264 encoding guide] - Avidemux wiki&lt;br /&gt;
* [http://howto-pages.org/ffmpeg/ Using FFmpeg] - Linux how to pages&lt;br /&gt;
* サポートしている音声・動画ストリームの[https://ffmpeg.org/general.html#Supported-File-Formats_002c-Codecs-or-Features リスト]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|FFmpeg|2025-10-29|848305}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41062</id>
		<title>FFmpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41062"/>
		<updated>2025-10-29T07:38:09Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* Intel QuickSync (QSV) */ 英語ページのアナウンス&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:オーディオ]]&lt;br /&gt;
[[Category:ビデオ]]&lt;br /&gt;
[[en:FFmpeg]]&lt;br /&gt;
[[zh-hans:FFmpeg]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Flac を Mp3 に変換#FFmpeg を使う}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
プロジェクトの[https://www.ffmpeg.org/ ホームページ] より:&lt;br /&gt;
:FFmpeg は、音声と動画を記録、変換、そしてストリーミングするための完全でクロスプラットフォームなソリューションです。先進的な音声・動画コーデックライブラリである libavcodec が含まれています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;libav&#039;&#039; や &#039;&#039;avconv&#039;&#039; など FFmpeg のフォークも存在しています。FFmpeg の現在の状態やプロジェクトの違いについては [https://blog.pkh.me/p/13-the-ffmpeg-libav-situation.html The FFmpeg/Libav situation] を読んでください。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|ffmpeg}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
開発版は {{AUR|ffmpeg-git}} パッケージでインストールできます。可能な限り多くのオプション機能を有効化してビルドする {{AUR|ffmpeg-full}} も存在します。&lt;br /&gt;
&lt;br /&gt;
== エンコードの例 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* パラメータを正しい順序で指定することが重要です (例: input、video、filters、audio、output)。順序を間違うと、パラメータがスキップされたり、FFmpeg が実行されなかったりする場合があります。&lt;br /&gt;
* FFmpeg は、使用できる CPU スレッド数を自動的に選択するはずです。しかし、パラメータ {{ic|-threads &#039;&#039;number&#039;&#039;}} を使って、使用できるスレッド数を強制したほうが良い場合もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki#Encoding FFmpeg のエンコード wiki] と {{man|1|ffmpeg|EXAMPLES}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== スクリーンキャプチャ ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#x11grab x11grab] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の仮想デバイスが含まれており、ユーザのディスプレイ全体と音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
スクリーンショットを撮って {{ic|screen.png}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -i $DISPLAY -vframes 1 screen.png&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} はキャプチャする領域のサイズを指定します。&lt;br /&gt;
&lt;br /&gt;
ロスレスエンコードで音声なしのスクリーンキャストを撮って {{ic|screen.mkv}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -c:v ffvhuff screen.mkv&lt;br /&gt;
&lt;br /&gt;
ここでは、Huffyuv コーデックが使用されます。このコーデックは高速ですが、ファイルサイズが大きくなります。&lt;br /&gt;
&lt;br /&gt;
ロッシーエンコードで音声ありのスクリーンキャストを撮って {{ic|screen.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac screen.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
動画ストリームをファイルとして保存する必要はないが、画面共有のために仮想ウェブカメラとして使う場合、[[v4l2loopback#FFmpeg を使って X11 をキャストする]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Desktop#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウェブカメラの録画 ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#video4linux2_002c-v4l2 video4linux2] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の入力デバイスが含まれています。これらにより、ウェブカメラと音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドは、ウェブカメラから音声無しで動画を録画し {{ic|webcam.mp4}} に保存します。ウェブカメラが {{ic|/dev/video0}} として正しく認識されていると仮定します:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -c:v libx264 -preset ultrafast webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} は、ウェブカメラからの許可されるイメージサイズの最大値を指定します。&lt;br /&gt;
&lt;br /&gt;
上記のコマンドは無音動画を出力します。音声ありでウェブカメラから動画を録画し {{ic|webcam.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Webcam#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== VOB から他のコンテナに ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:VOB|VOB]] ファイルを一つのストリームに連結して MPEG-2 にするには:&lt;br /&gt;
&lt;br /&gt;
 $ cat f0.VOB f1.VOB f2.VOB | ffmpeg -i - out.mp2&lt;br /&gt;
&lt;br /&gt;
=== x264 ===&lt;br /&gt;
&lt;br /&gt;
==== ロスレス ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットは最速のエンコードをするので素早い録画をしたいときに有用です (スクリーンキャストなど):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset ultrafast -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットの反対は &#039;&#039;veryslow&#039;&#039; で、&#039;&#039;ultrafast&#039;&#039; よりもエンコードが遅いかわりに出力するファイルのサイズが小さくなります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset veryslow -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
どちらでも出力のクオリティは同じです。&lt;br /&gt;
&lt;br /&gt;
{{Tip|あなたの使っているコンピュータがリアルタイムで {{ic|-preset superfast}} を処理できる場合、{{ic|-preset ultrafast}} ではなく {{ic|-preset superfast}} を使用してください。Ultrafast は superfast よりも圧縮率が&#039;&#039;かなり&#039;&#039;落ちます。}}&lt;br /&gt;
&lt;br /&gt;
==== Constant rate factor ====&lt;br /&gt;
&lt;br /&gt;
出力する品質を指定したいときに使います。一般的に使われているのは最高の {{ic|-crf}} 値で、これでも許容範囲内の画質になります。値が低いほど画質は高くなります。0はロスレス、18は見た目がロスレス、そして23がデフォルトの値です。賢明な値は18から28の範囲になります。一番遅い {{ic|-preset}} を使うなら辛抱する必要があります。詳しくは [https://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuide x264 Encoding Guide] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039; -c:v libx264 -tune film -preset slow -crf 22 -x264opts fast_pskip=0 -c:a libmp3lame -aq 4 &#039;&#039;output&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{ic|-tune}} オプションを使うことで[https://forum.doom9.org/showthread.php?t=149394 エンコードされるメディアの中身とタイプにあった設定にすることができます]。&lt;br /&gt;
&lt;br /&gt;
==== ツーパス (超高品質) ====&lt;br /&gt;
&lt;br /&gt;
マルチパスの始めは動画の統計が記録されるため、音声が無効化されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -an -vcodec libx264 -pass 1 -preset veryslow \&lt;br /&gt;
 -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 -f rawvideo -y /dev/null&lt;br /&gt;
&lt;br /&gt;
コンテナの形式は出力ファイルの拡張子 ({{ic|.mkv}}) から自動的に検出して変換されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -acodec aac -b:a 256k -ar 96000 -vcodec libx264 \&lt;br /&gt;
 -pass 2 -preset veryslow -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
==== 動画の手ブレ補正 ====&lt;br /&gt;
&lt;br /&gt;
vbid.stab プラグインを使ってツーパスで手ブレ補正 (ビデオ安定化) を行います。&lt;br /&gt;
&lt;br /&gt;
===== ファーストパス =====&lt;br /&gt;
&lt;br /&gt;
ファーストパスでは補正パラメータを記録してファイルに書き出します、または視覚分析のテスト動画を作成します。&lt;br /&gt;
&lt;br /&gt;
* 補正パラメータを記録してファイルだけに書き出す: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf -f null -}}&lt;br /&gt;
* 補正パラメータをファイルに書きだして、視覚分析用のテストビデオ &amp;quot;output-stab&amp;quot; を作成: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf output-stab}}&lt;br /&gt;
&lt;br /&gt;
===== セカンドパス =====&lt;br /&gt;
&lt;br /&gt;
セカンドパスではファーストパスで作成した補正パラメータを解析して、それを使って &amp;quot;output-stab_final&amp;quot; を生成します。セカンドパスで他のフィルターを適用することもでき、変換を繰り返す必要をなくして画質を最大限保つことができます。下のコマンドでは以下のオプションを使っています:&lt;br /&gt;
&lt;br /&gt;
* {{ic|unsharp}}: vid.stab の作者によって推奨されています。下の例ではデフォルトの 5:5:1.0:5:5:1.0 を使っています。&lt;br /&gt;
* {{ic|1=fade=t=in:st=0:d=4}}: 4秒間のフェードインをファイルの冒頭に挟みます。&lt;br /&gt;
* {{ic|1=fade=t=out:st=60:d=4}}: 動画の60秒目から4秒間のフェードアウトを挟みます。&lt;br /&gt;
* {{ic|-c:a pcm_s16le}}: XAVC-S コーデックは pcm_s16be で記録されロスレスの pcm_s16le に変換されます。&lt;br /&gt;
&lt;br /&gt;
 $  ffmpeg -i input -vf vidstabtransform=smoothing=30:interpol=bicubic:input=transforms.trf,unsharp,fade=t=in:st=0:d=4,fade=t=out:st=60:d=4 -c:v libx264 -tune film -preset veryslow -crf 8 -x264opts fast_pskip=0 -c:a pcm_s16le output-stab_final&lt;br /&gt;
&lt;br /&gt;
=== x265 ===&lt;br /&gt;
&lt;br /&gt;
以下の例は、パラメータを指定せずに libx265 を呼び出した場合のデフォルトを示します (Constant Rate Factor  エンコード):&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -i input -c:v libx265 -crf 28 -preset medium -c:a libvorbis output.mp4&lt;br /&gt;
&lt;br /&gt;
詳細は FFmpeg の [https://trac.ffmpeg.org/wiki/Encode/H.265 H.265/HEVC Video Encoding Guide] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== シングルパス MPEG-2 (ニアロスレス) ===&lt;br /&gt;
&lt;br /&gt;
DVD 標準のパラメータに FFmpeg を自動的に設定することができます。約 30 FPS の DVD [[Wikipedia:ja:MPEG-2|MPEG-2]] にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target ntsc-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
約 24 FPS の DVD MPEG-2 にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target film-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
=== 字幕 ===&lt;br /&gt;
&lt;br /&gt;
==== 抽出 ====&lt;br /&gt;
&lt;br /&gt;
MPEG-2 や Matroska などのコンテナファイルに埋め込まれた字幕を抽出して、SRT や SSA、WebVTT などの字幕形式に変換することができます。[https://trac.ffmpeg.org/wiki/ExtractSubtitles]&lt;br /&gt;
&lt;br /&gt;
* ファイルに字幕ストリームが含まれているか確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffprobe -hide_banner foo.mkv|&lt;br /&gt;
...&lt;br /&gt;
Stream #0:0(und): Video: h264 (High), yuv420p, 1920x800 [SAR 1:1 DAR 12:5], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)&lt;br /&gt;
  Metadata:&lt;br /&gt;
  CREATION_TIME   : 2012-06-05 05:04:15&lt;br /&gt;
  LANGUAGE        : und&lt;br /&gt;
Stream #0:1(und): Audio: aac, 44100 Hz, stereo, fltp (default)&lt;br /&gt;
 Metadata:&lt;br /&gt;
 CREATION_TIME   : 2012-06-05 05:10:34&lt;br /&gt;
 LANGUAGE        : und&lt;br /&gt;
 HANDLER_NAME    : GPAC ISO Audio Handler&lt;br /&gt;
&#039;&#039;&#039;Stream #0:2: Subtitle: ssa (default)&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mkv}} には SSA の字幕が埋め込まれており、別のファイルに抽出することが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv foo.ssa&lt;br /&gt;
&lt;br /&gt;
字幕を望ましい形式 (例として [[Wikipedia:ja:SubRip|SubRip]]) に保存するには {{ic|-c:s srt}} を追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -c:s srt foo.srt&lt;br /&gt;
&lt;br /&gt;
複数の字幕が存在する場合、{{ic|-map &#039;&#039;key&#039;&#039;:&#039;&#039;stream&#039;&#039;}} パラメータを使用して抽出するストリームを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -map 0:2 foo.ssa&lt;br /&gt;
&lt;br /&gt;
==== ハードサブ ====&lt;br /&gt;
&lt;br /&gt;
(FFmpeg wiki の記事の [https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo HowToBurnSubtitlesIntoVideo] に基づく説明)&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Hardsub|ハードサブ]]は動画に字幕を焼きこむことになります。ハードサブは無効化できず、言語の切り替えやフォントサイズのカスタマイズもできないため、推奨されない場合もあります。不明な場合は、ハードサブではなくソフトサブを使用してください。&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mpg}} に {{ic|foo.ssa}} の字幕を重ねるには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mpg -vf subtitles=foo.ssa out.mpg&lt;br /&gt;
&lt;br /&gt;
=== ボリュームゲイン ===&lt;br /&gt;
&lt;br /&gt;
ボリュームゲインは &#039;&#039;ffmpeg&#039;&#039; のフィルタ機能で変更できます。まず、{{ic|-af}} または {{ic|-filter:a}} を使って音声ストリームを選択し、次に、&#039;&#039;volume&#039;&#039; フィルタの後にそのストリームに対するゲインを指定してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;volume=1.5&#039;&#039;&#039; ouput.flac&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|1=volume=1.5}} によって 150% のボリュームゲインとなります。1.5 から 0.5 にすると、ボリュームが半分になります。ボリュームフィルタにはデシベル単位を渡すこともできます。{{ic|1=volume=3dB}} とすると、ボリュームが 3dB 増え、{{ic|1=volume=-3dB}} とすると 3dB 減ります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイルのボリュームゲインを倍にすることは、ボリュームを倍にすることと同じではありません。実験して正しいボリュームを見つける必要があります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;volumedetect&#039;&#039; フィルタを使用することで、ファイルの現在の平均ボリュームとピークボリュームを調べることができます: {{ic|ffmpeg -i input.flac -af volumedetect -f null -}}。そして、目標のレベルと現在のレベルとの差を &#039;&#039;volume&#039;&#039; フィルタに渡すことで、望みのレベルにすることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ボリュームノーマライゼーション ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loudnorm&#039;&#039; フィルタによるノーマライゼーションにより、平均ボリュームとピークボリュームを特定の値にすることができます。&#039;&#039;fmpeg&#039;&#039; のデフォルトの平均ラウドネス、ピークラウドネス、そしてレンジラウドネスの目標値 (それぞれ、-24 LUFS、-2 dBTP、7 LU) を使って、ファイルの知覚ラウドネスを正規化するには、以下のコマンドを使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;loudnorm&#039;&#039;&#039; output.flac&lt;br /&gt;
&lt;br /&gt;
別のラウドネスプロファイルを得るには、&#039;&#039;loudnorm&#039;&#039; フィルタのパラメータ {{ic|i}}、{{ic|tp}}、そして {{ic|lra}} を使って、それぞれ &#039;&#039;i&#039;&#039;ntegrated、&#039;&#039;t&#039;&#039;rue &#039;&#039;p&#039;&#039;eak、&#039;&#039;l&#039;&#039;oudness &#039;&#039;ra&#039;&#039;nge を指定してください。例えば、デフォルトよりも高い知覚ラウドネスにするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af loudnorm=i=-16:tp=-1.5:lra=11:print_format=summary output.flac&lt;br /&gt;
&lt;br /&gt;
この例では、オーディオファイルの入力ラウドネスと出力ラウドネスを表示するために {{ic|1=print_format=summary}} も追加しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|このフィルタはツーパスモードもサポートしています。最初の実行から測定されたラウドネス値を抽出し、その値を使って2回めの実行で線形ノーマライゼーションを行います。詳細は [https://ffmpeg.org/ffmpeg-filters.html#loudnorm ffmpeg loudnorm ドキュメント]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|ファイルの現在のラウドネスを調べるには、{{ic|1=ffmpeg -i input.flac -af loudnorm=print_format=summary -f null -}} を使ってください。}}&lt;br /&gt;
&lt;br /&gt;
=== 音声を抽出する ===&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg output.ext|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: ac3, 48000 Hz, stereo, s16, 384 kb/s&lt;br /&gt;
    Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s&lt;br /&gt;
    Stream #0.3: Audio: dts, 48000 Hz, 5.1 768 kb/s&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
多重化されている一番目の ({{ic|-map 0:1}}) [[Wikipedia:ja:ドルビーデジタル|AC-3]] でエンコードされた音声ストリームをファイルに抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;video&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
三番目の ({{ic|-map 0:3}}) [[Wikipedia:ja:デジタル・シアター・システムズ|DTS]] 音声ストリームをビットレートが 192 kb/s で[[Wikipedia:ja:サンプリングレート|サンプリングレート]]が 96000 Hz の [[Wikipedia:ja:AAC|AAC]] ファイルに変換する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:3 -acodec aac -b:a 192k -ar 96000 -vn &#039;&#039;output&#039;&#039;.aac&lt;br /&gt;
&lt;br /&gt;
{{ic|-vn}} は動画ストリームの処理を無効にします。&lt;br /&gt;
&lt;br /&gt;
時間を指定して音声ストリームを抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -ss 00:01:25 -t 00:00:05 -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;output&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
{{ic|-ss}} で開始時間を、{{ic|-t}} で長さを指定します。&lt;br /&gt;
&lt;br /&gt;
=== 音声を除去する ===&lt;br /&gt;
&lt;br /&gt;
# 一番目の動画ストリーム ({{ic|-map 0:0}}) と二番目の AC-3 音声ストリーム ({{ic|-map 0:2}}) をコピーします。&lt;br /&gt;
# AC-3 音声ストリームをビットレートが 128 kb/s でサンプリングレートが 48000 Hz の2チャンネルの MP3 に変換します。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:0 -map 0:2 -vcodec copy -acodec libmp3lame \&lt;br /&gt;
 -b:a 128k -ar 48000 -ac 2 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mkv|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|無駄な音声ストリームを削除することで余ったビットを画質の向上に割り当てることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ファイルを分割する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|copy}} コーデックを使うことでエンコーディングを変更せずにファイルの操作を行うことができます。例えば、次のコマンドであらゆるメディアファイルを簡単に2つに分けることが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -t 00:05:30 -c copy part1.ext -ss 00:05:30 -c copy part2.ext&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアビデオアクセラレーション ===&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/HWAccelIntro ハードウェアアクセラレーション API] を使用することで、エンコード/デコードのパフォーマンスを向上させることができます。しかし、特定の種類のコーデックしか使えませんし、場合によっては、ソフトウェアエンコードを使ったときと同じ結果が得られるとは限りません。&lt;br /&gt;
&lt;br /&gt;
==== VA-API ====&lt;br /&gt;
&lt;br /&gt;
Intel CPU ({{Pkg|intel-media-driver}} か {{Pkg|libva-intel-driver}} が必要) を使っている場合や、特定の AMD GPU でオープンソースの [[AMDGPU]] ドライバー ({{Pkg|mesa}} が必要) を使っている場合、[[VA-API]] を使用してエンコードとデコードができます。&lt;br /&gt;
&lt;br /&gt;
利用可能なパラメータとサポートされているプラットフォームに関する情報は、[https://trac.ffmpeg.org/wiki/Hardware/VAAPI FFmpeg のドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
サポートされている H.264 コーデックを使用してエンコードする例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -threads 1 -i file.ext -vaapi_device /dev/dri/renderD128 -vcodec h264_vaapi -vf format=&#039;nv12|vaapi,hwupload&#039; output.mp4&lt;br /&gt;
&lt;br /&gt;
{{Note|通常、VA-API は、(FFmpeg パッケージの依存関係である) {{Pkg|libva}} に含まれるヘッダとライブラリが検出されれば、ビルド時に {{Pkg|ffmpeg}} の自動検出機能によって有効化されます。}}&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を以下に挙げます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf &#039;format=nv12,hwupload&#039; -c:v hevc_vaapi -f mp4 -rc_mode 1 -qp 25 output.mp4&lt;br /&gt;
&lt;br /&gt;
hevc_vaapi を使用する場合、-qp を 25 (視覚的に等価) からそれ以上 (28 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。h264_vaapi を使用する場合、18 (視覚的に等価) からそれ以上 (20 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。また、hevc_vaapi は h264_vaapi よりも 50% 高速にエンコードできるようです。&lt;br /&gt;
&lt;br /&gt;
==== NVIDIA NVENC/NVDEC ====&lt;br /&gt;
&lt;br /&gt;
プロプライエタリな [[NVIDIA]] ドライバを使用していて、{{Pkg|nvidia-utils}} パッケージがインストールされている場合、[[Wikipedia:Nvidia NVENC|NVENC]] と [[Wikipedia:Nvidia NVDEC|NVDEC]] をエンコード/デコードに使用できます。サポートされている GPU は [[Wikipedia:GeForce 600 series|600 シリーズ]]からです。詳細は [[ハードウェアビデオアクセラレーション#NVIDIA]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
テクニックが[https://web.archive.org/web/20190808223352/https://gist.github.com/Brainiarc7/8b471ff91319483cdb725f615908286e こちらの古い gist] に載っています。NVENC は [[CUDA]] と似ているため、ターミナルセッションからでも動作します。ハードウェア NVENC は Intel の VA-API エンコーダよりも数倍高速です。&lt;br /&gt;
&lt;br /&gt;
利用可能なオプションを表示するには以下のコマンドを実行してください ({{ic|hevc_nvenc}} も使えます):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -help encoder=h264_nvenc&lt;br /&gt;
&lt;br /&gt;
使用例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i source.ext -c:v h264_nvenc -rc constqp -qp 28 output.mkv&lt;br /&gt;
&lt;br /&gt;
==== Intel QuickSync (QSV) ====&lt;br /&gt;
&lt;br /&gt;
{{Merge|ハードウェアビデオアクセラレーション#Intel Video Processing Library (Intel VPL)|This is not specific to ffmpeg}}&lt;br /&gt;
&lt;br /&gt;
[https://www.intel.com/content/www/us/en/architecture-and-technology/quick-sync-video/quick-sync-video-general.html Intel® Quick Sync Video] は、[[Intel]] GPU のメディア処理機能を使用して高速なデコードとエンコードを行い、プロセッサが他のタスクを処理できるようにしてシステムの応答性を向上させます。&lt;br /&gt;
&lt;br /&gt;
これを使用するには、&#039;&#039;&#039;libmfx&#039;&#039;&#039; ランタイム実装がインストールされている必要があります。&#039;&#039;&#039;libmfx&#039;&#039;&#039; は、ハードウェアプラットフォームに基づいて実行時に実装をロードするディスパッチャライブラリです。&lt;br /&gt;
[[Wikipedia:ja:Broadwellマイクロアーキテクチャ|Broadwell]] から [[Wikipedia:ja:Rocket Lakeマイクロプロセッサ|Rocket Lake]] までの GPU で実行する場合、このライブラリは {{Pkg|intel-media-sdk}} をランタイム実装としてロードします。&lt;br /&gt;
[[Wikipedia:ja:Tiger Lakeマイクロアーキテクチャ|Tiger Lake]] 及びそれ以降の GPU においては、&#039;&#039;&#039;libmfx&#039;&#039;&#039; は {{Pkg|vpl-gpu-rt}} をロードします。[https://github.com/intel/vpl-gpu-rt#system-requirements vpl-gpu-rt system-requirements]も参照してください。&lt;br /&gt;
単一の Intel GPU を搭載しているシステムでは、ランタイム実装を変更したり選択したりできません。対応する実装は、ハードウェアに応じてインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
上記のランタイムをインストールしないと、以下のようなエラーが発生します:&lt;br /&gt;
&lt;br /&gt;
 [AVHWDeviceContext @ 0x558283838c80] Error initializing an MFX session: -3.&lt;br /&gt;
 Device creation failed: -1313558101.&lt;br /&gt;
&lt;br /&gt;
QuickSync の使用方法は [https://trac.ffmpeg.org/wiki/Hardware/QuickSync FFmpeg Wiki] で説明されています。&#039;&#039;libmfx&#039;&#039; を直接使わずに &#039;&#039;iHD&#039;&#039; ドライバか &#039;&#039;i965&#039;&#039; ドライバで [[VA-API]] [https://trac.ffmpeg.org/wiki/Hardware/VAAPI] を使用することが推奨されます。エンコード例は FFmpeg Wiki の &#039;&#039;Hybrid transcode&#039;&#039; セクションを、ドライバに関する指示は [[ハードウェアビデオアクセラレーション#VA-API の設定]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== AMD AMF ====&lt;br /&gt;
&lt;br /&gt;
AMD は、[[AMDGPU PRO]] プロプライエタリパッケージを使用して AMD Video Coding Engine (GPU エンコード) によって Linux で H264 のみのビデオエンコードを行うためのサポートを追加し、ffmpeg は AMF ビデオエンコードのサポートを追加しました。なので、h264_amf ビデオエンコーダを使ってエンコードするには、{{AUR|amf-amdgpu-pro}} が必要です。[[AMDGPU PRO]] パッケージによって提供されている ICD ファイルを環境変数でリンクする必要がある場合があります。そうしないと、ffmpeg はオープンな AMDGPU の ICD ファイルを使用してしまい、このビデオエンコーダを使用できません。エンコードを行うコマンドの例は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mkv -c:v h264_amf -rc 1 -b:v 8M h264_amf_8M.mp4&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を挙げましょう:&lt;br /&gt;
&lt;br /&gt;
 $ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mp4 -c:v h264_amf -f mp4 -rc 0 -qp_b 22 -qp_i 22 -qp_p 22 -quality 2 output.mp4&lt;br /&gt;
&lt;br /&gt;
3つの -qp_(b|i|p) を調整してください。18 にすると視覚的に等価で、22 から非常に小さな視覚的な損失が発生し始めます。&lt;br /&gt;
&lt;br /&gt;
=== アニメーション GIF ===&lt;br /&gt;
&lt;br /&gt;
一般に、アニメーション GIF は、画像品質が悪く、ファイルサイズが比較的大きく、音声サポートもないので、動画フォーマットとして素晴らしい選択肢とは言えません。しかし、ウェブでは依然として頻繁に使用されています。以下のコマンドを使うことで、動画をアニメーション GIF に変換することができます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.mp4 -vf &amp;quot;fps=10,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse&amp;quot; -loop -1 output.gif&lt;br /&gt;
&lt;br /&gt;
パレットフィルタを使って高品質な GIF を生成する方法については、https://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html を見てください。&lt;br /&gt;
&lt;br /&gt;
== プリセットファイル ==&lt;br /&gt;
&lt;br /&gt;
デフォルトの[https://ffmpeg.org/ffmpeg.html#Preset-files プリセットファイル]で {{ic|~/.ffmpeg}} を作成する:&lt;br /&gt;
&lt;br /&gt;
 $ cp -iR /usr/share/ffmpeg ~/.ffmpeg&lt;br /&gt;
&lt;br /&gt;
新しいファイルを作成したりデフォルトのプリセットファイルを編集する:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.ffmpeg/libavcodec-vhq.ffpreset|2=&lt;br /&gt;
vtag=DX50&lt;br /&gt;
mbd=2&lt;br /&gt;
trellis=2&lt;br /&gt;
flags=+cbp+mv0&lt;br /&gt;
pre_dia_size=4&lt;br /&gt;
dia_size=4&lt;br /&gt;
precmp=4&lt;br /&gt;
cmp=4&lt;br /&gt;
subcmp=4&lt;br /&gt;
preme=2&lt;br /&gt;
qns=2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== プリセットファイルを使う ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vcodec}} の宣言の後に {{ic|-vpre}} オプションを加えて下さい。&lt;br /&gt;
&lt;br /&gt;
==== libavcodec-vhq.ffpreset ====&lt;br /&gt;
&lt;br /&gt;
* {{ic|libavcodec}} &#039;&#039;&#039;=&#039;&#039;&#039; vcodec/acodec の名前&lt;br /&gt;
* {{ic|vhq}} &#039;&#039;&#039;=&#039;&#039;&#039; 使用するプリセットの名前&lt;br /&gt;
* {{ic|ffpreset}} &#039;&#039;&#039;=&#039;&#039;&#039; FFmpeg プリセットの拡張子&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 出力を簡略化 ===&lt;br /&gt;
&lt;br /&gt;
以下のオプションを組み合わせて使うことで、出力の詳細さを好きなレベルまで減らすことができます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|-hide_banner}}: 著作権表示、ビルドオプション、そしてライブラリのバージョンが表示されなくなります&lt;br /&gt;
* {{ic|-loglevel}}: ログレベルを調整します (微調整オプションが利用できます)。例: {{ic|-loglevel warning}}&lt;br /&gt;
* {{ic|-nostats}}: エンコードの進捗/統計が表示されなくなります&lt;br /&gt;
&lt;br /&gt;
=== 動画の再生時間を出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 file.ext&lt;br /&gt;
&lt;br /&gt;
=== ストリーム情報を JSON で出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -v quiet -print_format json -show_format -show_streams file.ext&lt;br /&gt;
&lt;br /&gt;
=== X フレームごとに動画のスクリーンショットを作成する ===&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -an -s 319x180 -vf fps=1/&#039;&#039;&#039;100&#039;&#039;&#039; -qscale:v 75 %03d.jpg&lt;br /&gt;
&lt;br /&gt;
=== メタデータの変更 ===&lt;br /&gt;
&lt;br /&gt;
メタデータは直接変更することはできません。メタデータをエクスポートして変更し、新しいファイルにマージする必要があります。&lt;br /&gt;
&lt;br /&gt;
既存の（グローバル）メタデータをテキストファイルに抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;song.mp3&#039; -f ffmetadata song_metadata.txt&lt;br /&gt;
&lt;br /&gt;
テキストファイルからメタデータを含む新しいファイルを作成する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;song.mp3&#039; -f ffmetadata -i new_metadata.txt -map_metadata 1 -id3v2_version 4 song_new.mp3&lt;br /&gt;
&lt;br /&gt;
{{ic|-map_metadata 1}} は、ffmpeg に 2 番目のファイル (インデックスは 0 から始まる) のメタデータを使用するように指示します。&lt;br /&gt;
&lt;br /&gt;
グローバル メタデータの他に、各ストリームは独自のメタデータを持つこともできます。たとえば、{{ic|-map_metadata:s:v 0:s:v}} および {{ic|-map_metadata:s:a 0:s:a}} を使用してエクスポートします。&lt;br /&gt;
&lt;br /&gt;
{{ic|ffprobe}} は({{Pkg|ffmpeg}} パッケージからも同様に) 、default、compact/csv、flat、ini、json、xml など、さらに多くのエクスポート形式を提供します。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://ffmpeg.org/ffmpeg.html FFmpeg documentation] - 公式ドキュメント&lt;br /&gt;
* [https://trac.ffmpeg.org/wiki FFmpeg Wiki] - 公式 wiki&lt;br /&gt;
* [http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-x264.html Encoding with the x264 codec] - MEncoder ドキュメント&lt;br /&gt;
* [https://avidemux.org/admWiki/doku.php?id=tutorial:h.264 H.264 encoding guide] - Avidemux wiki&lt;br /&gt;
* [http://howto-pages.org/ffmpeg/ Using FFmpeg] - Linux how to pages&lt;br /&gt;
* サポートしている音声・動画ストリームの[https://ffmpeg.org/general.html#Supported-File-Formats_002c-Codecs-or-Features リスト]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|FFmpeg|2023-07-23|776189}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41061</id>
		<title>FFmpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41061"/>
		<updated>2025-10-29T07:33:15Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* ハードウェアビデオアクセラレーション */ リンク切れ削除&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:オーディオ]]&lt;br /&gt;
[[Category:ビデオ]]&lt;br /&gt;
[[en:FFmpeg]]&lt;br /&gt;
[[zh-hans:FFmpeg]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Flac を Mp3 に変換#FFmpeg を使う}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
プロジェクトの[https://www.ffmpeg.org/ ホームページ] より:&lt;br /&gt;
:FFmpeg は、音声と動画を記録、変換、そしてストリーミングするための完全でクロスプラットフォームなソリューションです。先進的な音声・動画コーデックライブラリである libavcodec が含まれています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;libav&#039;&#039; や &#039;&#039;avconv&#039;&#039; など FFmpeg のフォークも存在しています。FFmpeg の現在の状態やプロジェクトの違いについては [https://blog.pkh.me/p/13-the-ffmpeg-libav-situation.html The FFmpeg/Libav situation] を読んでください。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|ffmpeg}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
開発版は {{AUR|ffmpeg-git}} パッケージでインストールできます。可能な限り多くのオプション機能を有効化してビルドする {{AUR|ffmpeg-full}} も存在します。&lt;br /&gt;
&lt;br /&gt;
== エンコードの例 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* パラメータを正しい順序で指定することが重要です (例: input、video、filters、audio、output)。順序を間違うと、パラメータがスキップされたり、FFmpeg が実行されなかったりする場合があります。&lt;br /&gt;
* FFmpeg は、使用できる CPU スレッド数を自動的に選択するはずです。しかし、パラメータ {{ic|-threads &#039;&#039;number&#039;&#039;}} を使って、使用できるスレッド数を強制したほうが良い場合もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki#Encoding FFmpeg のエンコード wiki] と {{man|1|ffmpeg|EXAMPLES}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== スクリーンキャプチャ ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#x11grab x11grab] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の仮想デバイスが含まれており、ユーザのディスプレイ全体と音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
スクリーンショットを撮って {{ic|screen.png}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -i $DISPLAY -vframes 1 screen.png&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} はキャプチャする領域のサイズを指定します。&lt;br /&gt;
&lt;br /&gt;
ロスレスエンコードで音声なしのスクリーンキャストを撮って {{ic|screen.mkv}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -c:v ffvhuff screen.mkv&lt;br /&gt;
&lt;br /&gt;
ここでは、Huffyuv コーデックが使用されます。このコーデックは高速ですが、ファイルサイズが大きくなります。&lt;br /&gt;
&lt;br /&gt;
ロッシーエンコードで音声ありのスクリーンキャストを撮って {{ic|screen.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac screen.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
動画ストリームをファイルとして保存する必要はないが、画面共有のために仮想ウェブカメラとして使う場合、[[v4l2loopback#FFmpeg を使って X11 をキャストする]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Desktop#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウェブカメラの録画 ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#video4linux2_002c-v4l2 video4linux2] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の入力デバイスが含まれています。これらにより、ウェブカメラと音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドは、ウェブカメラから音声無しで動画を録画し {{ic|webcam.mp4}} に保存します。ウェブカメラが {{ic|/dev/video0}} として正しく認識されていると仮定します:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -c:v libx264 -preset ultrafast webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} は、ウェブカメラからの許可されるイメージサイズの最大値を指定します。&lt;br /&gt;
&lt;br /&gt;
上記のコマンドは無音動画を出力します。音声ありでウェブカメラから動画を録画し {{ic|webcam.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Webcam#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== VOB から他のコンテナに ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:VOB|VOB]] ファイルを一つのストリームに連結して MPEG-2 にするには:&lt;br /&gt;
&lt;br /&gt;
 $ cat f0.VOB f1.VOB f2.VOB | ffmpeg -i - out.mp2&lt;br /&gt;
&lt;br /&gt;
=== x264 ===&lt;br /&gt;
&lt;br /&gt;
==== ロスレス ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットは最速のエンコードをするので素早い録画をしたいときに有用です (スクリーンキャストなど):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset ultrafast -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットの反対は &#039;&#039;veryslow&#039;&#039; で、&#039;&#039;ultrafast&#039;&#039; よりもエンコードが遅いかわりに出力するファイルのサイズが小さくなります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset veryslow -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
どちらでも出力のクオリティは同じです。&lt;br /&gt;
&lt;br /&gt;
{{Tip|あなたの使っているコンピュータがリアルタイムで {{ic|-preset superfast}} を処理できる場合、{{ic|-preset ultrafast}} ではなく {{ic|-preset superfast}} を使用してください。Ultrafast は superfast よりも圧縮率が&#039;&#039;かなり&#039;&#039;落ちます。}}&lt;br /&gt;
&lt;br /&gt;
==== Constant rate factor ====&lt;br /&gt;
&lt;br /&gt;
出力する品質を指定したいときに使います。一般的に使われているのは最高の {{ic|-crf}} 値で、これでも許容範囲内の画質になります。値が低いほど画質は高くなります。0はロスレス、18は見た目がロスレス、そして23がデフォルトの値です。賢明な値は18から28の範囲になります。一番遅い {{ic|-preset}} を使うなら辛抱する必要があります。詳しくは [https://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuide x264 Encoding Guide] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039; -c:v libx264 -tune film -preset slow -crf 22 -x264opts fast_pskip=0 -c:a libmp3lame -aq 4 &#039;&#039;output&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{ic|-tune}} オプションを使うことで[https://forum.doom9.org/showthread.php?t=149394 エンコードされるメディアの中身とタイプにあった設定にすることができます]。&lt;br /&gt;
&lt;br /&gt;
==== ツーパス (超高品質) ====&lt;br /&gt;
&lt;br /&gt;
マルチパスの始めは動画の統計が記録されるため、音声が無効化されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -an -vcodec libx264 -pass 1 -preset veryslow \&lt;br /&gt;
 -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 -f rawvideo -y /dev/null&lt;br /&gt;
&lt;br /&gt;
コンテナの形式は出力ファイルの拡張子 ({{ic|.mkv}}) から自動的に検出して変換されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -acodec aac -b:a 256k -ar 96000 -vcodec libx264 \&lt;br /&gt;
 -pass 2 -preset veryslow -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
==== 動画の手ブレ補正 ====&lt;br /&gt;
&lt;br /&gt;
vbid.stab プラグインを使ってツーパスで手ブレ補正 (ビデオ安定化) を行います。&lt;br /&gt;
&lt;br /&gt;
===== ファーストパス =====&lt;br /&gt;
&lt;br /&gt;
ファーストパスでは補正パラメータを記録してファイルに書き出します、または視覚分析のテスト動画を作成します。&lt;br /&gt;
&lt;br /&gt;
* 補正パラメータを記録してファイルだけに書き出す: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf -f null -}}&lt;br /&gt;
* 補正パラメータをファイルに書きだして、視覚分析用のテストビデオ &amp;quot;output-stab&amp;quot; を作成: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf output-stab}}&lt;br /&gt;
&lt;br /&gt;
===== セカンドパス =====&lt;br /&gt;
&lt;br /&gt;
セカンドパスではファーストパスで作成した補正パラメータを解析して、それを使って &amp;quot;output-stab_final&amp;quot; を生成します。セカンドパスで他のフィルターを適用することもでき、変換を繰り返す必要をなくして画質を最大限保つことができます。下のコマンドでは以下のオプションを使っています:&lt;br /&gt;
&lt;br /&gt;
* {{ic|unsharp}}: vid.stab の作者によって推奨されています。下の例ではデフォルトの 5:5:1.0:5:5:1.0 を使っています。&lt;br /&gt;
* {{ic|1=fade=t=in:st=0:d=4}}: 4秒間のフェードインをファイルの冒頭に挟みます。&lt;br /&gt;
* {{ic|1=fade=t=out:st=60:d=4}}: 動画の60秒目から4秒間のフェードアウトを挟みます。&lt;br /&gt;
* {{ic|-c:a pcm_s16le}}: XAVC-S コーデックは pcm_s16be で記録されロスレスの pcm_s16le に変換されます。&lt;br /&gt;
&lt;br /&gt;
 $  ffmpeg -i input -vf vidstabtransform=smoothing=30:interpol=bicubic:input=transforms.trf,unsharp,fade=t=in:st=0:d=4,fade=t=out:st=60:d=4 -c:v libx264 -tune film -preset veryslow -crf 8 -x264opts fast_pskip=0 -c:a pcm_s16le output-stab_final&lt;br /&gt;
&lt;br /&gt;
=== x265 ===&lt;br /&gt;
&lt;br /&gt;
以下の例は、パラメータを指定せずに libx265 を呼び出した場合のデフォルトを示します (Constant Rate Factor  エンコード):&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -i input -c:v libx265 -crf 28 -preset medium -c:a libvorbis output.mp4&lt;br /&gt;
&lt;br /&gt;
詳細は FFmpeg の [https://trac.ffmpeg.org/wiki/Encode/H.265 H.265/HEVC Video Encoding Guide] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== シングルパス MPEG-2 (ニアロスレス) ===&lt;br /&gt;
&lt;br /&gt;
DVD 標準のパラメータに FFmpeg を自動的に設定することができます。約 30 FPS の DVD [[Wikipedia:ja:MPEG-2|MPEG-2]] にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target ntsc-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
約 24 FPS の DVD MPEG-2 にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target film-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
=== 字幕 ===&lt;br /&gt;
&lt;br /&gt;
==== 抽出 ====&lt;br /&gt;
&lt;br /&gt;
MPEG-2 や Matroska などのコンテナファイルに埋め込まれた字幕を抽出して、SRT や SSA、WebVTT などの字幕形式に変換することができます。[https://trac.ffmpeg.org/wiki/ExtractSubtitles]&lt;br /&gt;
&lt;br /&gt;
* ファイルに字幕ストリームが含まれているか確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffprobe -hide_banner foo.mkv|&lt;br /&gt;
...&lt;br /&gt;
Stream #0:0(und): Video: h264 (High), yuv420p, 1920x800 [SAR 1:1 DAR 12:5], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)&lt;br /&gt;
  Metadata:&lt;br /&gt;
  CREATION_TIME   : 2012-06-05 05:04:15&lt;br /&gt;
  LANGUAGE        : und&lt;br /&gt;
Stream #0:1(und): Audio: aac, 44100 Hz, stereo, fltp (default)&lt;br /&gt;
 Metadata:&lt;br /&gt;
 CREATION_TIME   : 2012-06-05 05:10:34&lt;br /&gt;
 LANGUAGE        : und&lt;br /&gt;
 HANDLER_NAME    : GPAC ISO Audio Handler&lt;br /&gt;
&#039;&#039;&#039;Stream #0:2: Subtitle: ssa (default)&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mkv}} には SSA の字幕が埋め込まれており、別のファイルに抽出することが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv foo.ssa&lt;br /&gt;
&lt;br /&gt;
字幕を望ましい形式 (例として [[Wikipedia:ja:SubRip|SubRip]]) に保存するには {{ic|-c:s srt}} を追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -c:s srt foo.srt&lt;br /&gt;
&lt;br /&gt;
複数の字幕が存在する場合、{{ic|-map &#039;&#039;key&#039;&#039;:&#039;&#039;stream&#039;&#039;}} パラメータを使用して抽出するストリームを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -map 0:2 foo.ssa&lt;br /&gt;
&lt;br /&gt;
==== ハードサブ ====&lt;br /&gt;
&lt;br /&gt;
(FFmpeg wiki の記事の [https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo HowToBurnSubtitlesIntoVideo] に基づく説明)&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Hardsub|ハードサブ]]は動画に字幕を焼きこむことになります。ハードサブは無効化できず、言語の切り替えやフォントサイズのカスタマイズもできないため、推奨されない場合もあります。不明な場合は、ハードサブではなくソフトサブを使用してください。&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mpg}} に {{ic|foo.ssa}} の字幕を重ねるには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mpg -vf subtitles=foo.ssa out.mpg&lt;br /&gt;
&lt;br /&gt;
=== ボリュームゲイン ===&lt;br /&gt;
&lt;br /&gt;
ボリュームゲインは &#039;&#039;ffmpeg&#039;&#039; のフィルタ機能で変更できます。まず、{{ic|-af}} または {{ic|-filter:a}} を使って音声ストリームを選択し、次に、&#039;&#039;volume&#039;&#039; フィルタの後にそのストリームに対するゲインを指定してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;volume=1.5&#039;&#039;&#039; ouput.flac&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|1=volume=1.5}} によって 150% のボリュームゲインとなります。1.5 から 0.5 にすると、ボリュームが半分になります。ボリュームフィルタにはデシベル単位を渡すこともできます。{{ic|1=volume=3dB}} とすると、ボリュームが 3dB 増え、{{ic|1=volume=-3dB}} とすると 3dB 減ります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイルのボリュームゲインを倍にすることは、ボリュームを倍にすることと同じではありません。実験して正しいボリュームを見つける必要があります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;volumedetect&#039;&#039; フィルタを使用することで、ファイルの現在の平均ボリュームとピークボリュームを調べることができます: {{ic|ffmpeg -i input.flac -af volumedetect -f null -}}。そして、目標のレベルと現在のレベルとの差を &#039;&#039;volume&#039;&#039; フィルタに渡すことで、望みのレベルにすることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ボリュームノーマライゼーション ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loudnorm&#039;&#039; フィルタによるノーマライゼーションにより、平均ボリュームとピークボリュームを特定の値にすることができます。&#039;&#039;fmpeg&#039;&#039; のデフォルトの平均ラウドネス、ピークラウドネス、そしてレンジラウドネスの目標値 (それぞれ、-24 LUFS、-2 dBTP、7 LU) を使って、ファイルの知覚ラウドネスを正規化するには、以下のコマンドを使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;loudnorm&#039;&#039;&#039; output.flac&lt;br /&gt;
&lt;br /&gt;
別のラウドネスプロファイルを得るには、&#039;&#039;loudnorm&#039;&#039; フィルタのパラメータ {{ic|i}}、{{ic|tp}}、そして {{ic|lra}} を使って、それぞれ &#039;&#039;i&#039;&#039;ntegrated、&#039;&#039;t&#039;&#039;rue &#039;&#039;p&#039;&#039;eak、&#039;&#039;l&#039;&#039;oudness &#039;&#039;ra&#039;&#039;nge を指定してください。例えば、デフォルトよりも高い知覚ラウドネスにするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af loudnorm=i=-16:tp=-1.5:lra=11:print_format=summary output.flac&lt;br /&gt;
&lt;br /&gt;
この例では、オーディオファイルの入力ラウドネスと出力ラウドネスを表示するために {{ic|1=print_format=summary}} も追加しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|このフィルタはツーパスモードもサポートしています。最初の実行から測定されたラウドネス値を抽出し、その値を使って2回めの実行で線形ノーマライゼーションを行います。詳細は [https://ffmpeg.org/ffmpeg-filters.html#loudnorm ffmpeg loudnorm ドキュメント]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|ファイルの現在のラウドネスを調べるには、{{ic|1=ffmpeg -i input.flac -af loudnorm=print_format=summary -f null -}} を使ってください。}}&lt;br /&gt;
&lt;br /&gt;
=== 音声を抽出する ===&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg output.ext|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: ac3, 48000 Hz, stereo, s16, 384 kb/s&lt;br /&gt;
    Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s&lt;br /&gt;
    Stream #0.3: Audio: dts, 48000 Hz, 5.1 768 kb/s&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
多重化されている一番目の ({{ic|-map 0:1}}) [[Wikipedia:ja:ドルビーデジタル|AC-3]] でエンコードされた音声ストリームをファイルに抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;video&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
三番目の ({{ic|-map 0:3}}) [[Wikipedia:ja:デジタル・シアター・システムズ|DTS]] 音声ストリームをビットレートが 192 kb/s で[[Wikipedia:ja:サンプリングレート|サンプリングレート]]が 96000 Hz の [[Wikipedia:ja:AAC|AAC]] ファイルに変換する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:3 -acodec aac -b:a 192k -ar 96000 -vn &#039;&#039;output&#039;&#039;.aac&lt;br /&gt;
&lt;br /&gt;
{{ic|-vn}} は動画ストリームの処理を無効にします。&lt;br /&gt;
&lt;br /&gt;
時間を指定して音声ストリームを抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -ss 00:01:25 -t 00:00:05 -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;output&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
{{ic|-ss}} で開始時間を、{{ic|-t}} で長さを指定します。&lt;br /&gt;
&lt;br /&gt;
=== 音声を除去する ===&lt;br /&gt;
&lt;br /&gt;
# 一番目の動画ストリーム ({{ic|-map 0:0}}) と二番目の AC-3 音声ストリーム ({{ic|-map 0:2}}) をコピーします。&lt;br /&gt;
# AC-3 音声ストリームをビットレートが 128 kb/s でサンプリングレートが 48000 Hz の2チャンネルの MP3 に変換します。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:0 -map 0:2 -vcodec copy -acodec libmp3lame \&lt;br /&gt;
 -b:a 128k -ar 48000 -ac 2 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mkv|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|無駄な音声ストリームを削除することで余ったビットを画質の向上に割り当てることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ファイルを分割する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|copy}} コーデックを使うことでエンコーディングを変更せずにファイルの操作を行うことができます。例えば、次のコマンドであらゆるメディアファイルを簡単に2つに分けることが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -t 00:05:30 -c copy part1.ext -ss 00:05:30 -c copy part2.ext&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアビデオアクセラレーション ===&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/HWAccelIntro ハードウェアアクセラレーション API] を使用することで、エンコード/デコードのパフォーマンスを向上させることができます。しかし、特定の種類のコーデックしか使えませんし、場合によっては、ソフトウェアエンコードを使ったときと同じ結果が得られるとは限りません。&lt;br /&gt;
&lt;br /&gt;
==== VA-API ====&lt;br /&gt;
&lt;br /&gt;
Intel CPU ({{Pkg|intel-media-driver}} か {{Pkg|libva-intel-driver}} が必要) を使っている場合や、特定の AMD GPU でオープンソースの [[AMDGPU]] ドライバー ({{Pkg|mesa}} が必要) を使っている場合、[[VA-API]] を使用してエンコードとデコードができます。&lt;br /&gt;
&lt;br /&gt;
利用可能なパラメータとサポートされているプラットフォームに関する情報は、[https://trac.ffmpeg.org/wiki/Hardware/VAAPI FFmpeg のドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
サポートされている H.264 コーデックを使用してエンコードする例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -threads 1 -i file.ext -vaapi_device /dev/dri/renderD128 -vcodec h264_vaapi -vf format=&#039;nv12|vaapi,hwupload&#039; output.mp4&lt;br /&gt;
&lt;br /&gt;
{{Note|通常、VA-API は、(FFmpeg パッケージの依存関係である) {{Pkg|libva}} に含まれるヘッダとライブラリが検出されれば、ビルド時に {{Pkg|ffmpeg}} の自動検出機能によって有効化されます。}}&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を以下に挙げます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf &#039;format=nv12,hwupload&#039; -c:v hevc_vaapi -f mp4 -rc_mode 1 -qp 25 output.mp4&lt;br /&gt;
&lt;br /&gt;
hevc_vaapi を使用する場合、-qp を 25 (視覚的に等価) からそれ以上 (28 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。h264_vaapi を使用する場合、18 (視覚的に等価) からそれ以上 (20 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。また、hevc_vaapi は h264_vaapi よりも 50% 高速にエンコードできるようです。&lt;br /&gt;
&lt;br /&gt;
==== NVIDIA NVENC/NVDEC ====&lt;br /&gt;
&lt;br /&gt;
プロプライエタリな [[NVIDIA]] ドライバを使用していて、{{Pkg|nvidia-utils}} パッケージがインストールされている場合、[[Wikipedia:Nvidia NVENC|NVENC]] と [[Wikipedia:Nvidia NVDEC|NVDEC]] をエンコード/デコードに使用できます。サポートされている GPU は [[Wikipedia:GeForce 600 series|600 シリーズ]]からです。詳細は [[ハードウェアビデオアクセラレーション#NVIDIA]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
テクニックが[https://web.archive.org/web/20190808223352/https://gist.github.com/Brainiarc7/8b471ff91319483cdb725f615908286e こちらの古い gist] に載っています。NVENC は [[CUDA]] と似ているため、ターミナルセッションからでも動作します。ハードウェア NVENC は Intel の VA-API エンコーダよりも数倍高速です。&lt;br /&gt;
&lt;br /&gt;
利用可能なオプションを表示するには以下のコマンドを実行してください ({{ic|hevc_nvenc}} も使えます):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -help encoder=h264_nvenc&lt;br /&gt;
&lt;br /&gt;
使用例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i source.ext -c:v h264_nvenc -rc constqp -qp 28 output.mkv&lt;br /&gt;
&lt;br /&gt;
==== Intel QuickSync (QSV) ====&lt;br /&gt;
&lt;br /&gt;
[https://www.intel.com/content/www/us/en/architecture-and-technology/quick-sync-video/quick-sync-video-general.html Intel® Quick Sync Video] は、[[Intel]] GPU のメディア処理機能を使用して高速なデコードとエンコードを行い、プロセッサが他のタスクを処理できるようにしてシステムの応答性を向上させます。&lt;br /&gt;
&lt;br /&gt;
これを使用するには、&#039;&#039;&#039;libmfx&#039;&#039;&#039; ランタイム実装がインストールされている必要があります。&#039;&#039;&#039;libmfx&#039;&#039;&#039; は、ハードウェアプラットフォームに基づいて実行時に実装をロードするディスパッチャライブラリです。&lt;br /&gt;
[[Wikipedia:ja:Broadwellマイクロアーキテクチャ|Broadwell]] から [[Wikipedia:ja:Rocket Lakeマイクロプロセッサ|Rocket Lake]] までの GPU で実行する場合、このライブラリは {{Pkg|intel-media-sdk}} をランタイム実装としてロードします。&lt;br /&gt;
[[Wikipedia:ja:Tiger Lakeマイクロアーキテクチャ|Tiger Lake]] 及びそれ以降の GPU においては、&#039;&#039;&#039;libmfx&#039;&#039;&#039; は {{Pkg|vpl-gpu-rt}} をロードします。[https://github.com/intel/vpl-gpu-rt#system-requirements vpl-gpu-rt system-requirements]も参照してください。&lt;br /&gt;
単一の Intel GPU を搭載しているシステムでは、ランタイム実装を変更したり選択したりできません。対応する実装は、ハードウェアに応じてインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
上記のランタイムをインストールしないと、以下のようなエラーが発生します:&lt;br /&gt;
&lt;br /&gt;
 [AVHWDeviceContext @ 0x558283838c80] Error initializing an MFX session: -3.&lt;br /&gt;
 Device creation failed: -1313558101.&lt;br /&gt;
&lt;br /&gt;
QuickSync の使用方法は [https://trac.ffmpeg.org/wiki/Hardware/QuickSync FFmpeg Wiki] で説明されています。&#039;&#039;libmfx&#039;&#039; を直接使わずに &#039;&#039;iHD&#039;&#039; ドライバか &#039;&#039;i965&#039;&#039; ドライバで [[VA-API]] [https://trac.ffmpeg.org/wiki/Hardware/VAAPI] を使用することが推奨されます。エンコード例は FFmpeg Wiki の &#039;&#039;Hybrid transcode&#039;&#039; セクションを、ドライバに関する指示は [[ハードウェアビデオアクセラレーション#VA-API の設定]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== AMD AMF ====&lt;br /&gt;
&lt;br /&gt;
AMD は、[[AMDGPU PRO]] プロプライエタリパッケージを使用して AMD Video Coding Engine (GPU エンコード) によって Linux で H264 のみのビデオエンコードを行うためのサポートを追加し、ffmpeg は AMF ビデオエンコードのサポートを追加しました。なので、h264_amf ビデオエンコーダを使ってエンコードするには、{{AUR|amf-amdgpu-pro}} が必要です。[[AMDGPU PRO]] パッケージによって提供されている ICD ファイルを環境変数でリンクする必要がある場合があります。そうしないと、ffmpeg はオープンな AMDGPU の ICD ファイルを使用してしまい、このビデオエンコーダを使用できません。エンコードを行うコマンドの例は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mkv -c:v h264_amf -rc 1 -b:v 8M h264_amf_8M.mp4&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を挙げましょう:&lt;br /&gt;
&lt;br /&gt;
 $ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mp4 -c:v h264_amf -f mp4 -rc 0 -qp_b 22 -qp_i 22 -qp_p 22 -quality 2 output.mp4&lt;br /&gt;
&lt;br /&gt;
3つの -qp_(b|i|p) を調整してください。18 にすると視覚的に等価で、22 から非常に小さな視覚的な損失が発生し始めます。&lt;br /&gt;
&lt;br /&gt;
=== アニメーション GIF ===&lt;br /&gt;
&lt;br /&gt;
一般に、アニメーション GIF は、画像品質が悪く、ファイルサイズが比較的大きく、音声サポートもないので、動画フォーマットとして素晴らしい選択肢とは言えません。しかし、ウェブでは依然として頻繁に使用されています。以下のコマンドを使うことで、動画をアニメーション GIF に変換することができます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.mp4 -vf &amp;quot;fps=10,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse&amp;quot; -loop -1 output.gif&lt;br /&gt;
&lt;br /&gt;
パレットフィルタを使って高品質な GIF を生成する方法については、https://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html を見てください。&lt;br /&gt;
&lt;br /&gt;
== プリセットファイル ==&lt;br /&gt;
&lt;br /&gt;
デフォルトの[https://ffmpeg.org/ffmpeg.html#Preset-files プリセットファイル]で {{ic|~/.ffmpeg}} を作成する:&lt;br /&gt;
&lt;br /&gt;
 $ cp -iR /usr/share/ffmpeg ~/.ffmpeg&lt;br /&gt;
&lt;br /&gt;
新しいファイルを作成したりデフォルトのプリセットファイルを編集する:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.ffmpeg/libavcodec-vhq.ffpreset|2=&lt;br /&gt;
vtag=DX50&lt;br /&gt;
mbd=2&lt;br /&gt;
trellis=2&lt;br /&gt;
flags=+cbp+mv0&lt;br /&gt;
pre_dia_size=4&lt;br /&gt;
dia_size=4&lt;br /&gt;
precmp=4&lt;br /&gt;
cmp=4&lt;br /&gt;
subcmp=4&lt;br /&gt;
preme=2&lt;br /&gt;
qns=2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== プリセットファイルを使う ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vcodec}} の宣言の後に {{ic|-vpre}} オプションを加えて下さい。&lt;br /&gt;
&lt;br /&gt;
==== libavcodec-vhq.ffpreset ====&lt;br /&gt;
&lt;br /&gt;
* {{ic|libavcodec}} &#039;&#039;&#039;=&#039;&#039;&#039; vcodec/acodec の名前&lt;br /&gt;
* {{ic|vhq}} &#039;&#039;&#039;=&#039;&#039;&#039; 使用するプリセットの名前&lt;br /&gt;
* {{ic|ffpreset}} &#039;&#039;&#039;=&#039;&#039;&#039; FFmpeg プリセットの拡張子&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 出力を簡略化 ===&lt;br /&gt;
&lt;br /&gt;
以下のオプションを組み合わせて使うことで、出力の詳細さを好きなレベルまで減らすことができます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|-hide_banner}}: 著作権表示、ビルドオプション、そしてライブラリのバージョンが表示されなくなります&lt;br /&gt;
* {{ic|-loglevel}}: ログレベルを調整します (微調整オプションが利用できます)。例: {{ic|-loglevel warning}}&lt;br /&gt;
* {{ic|-nostats}}: エンコードの進捗/統計が表示されなくなります&lt;br /&gt;
&lt;br /&gt;
=== 動画の再生時間を出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 file.ext&lt;br /&gt;
&lt;br /&gt;
=== ストリーム情報を JSON で出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -v quiet -print_format json -show_format -show_streams file.ext&lt;br /&gt;
&lt;br /&gt;
=== X フレームごとに動画のスクリーンショットを作成する ===&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -an -s 319x180 -vf fps=1/&#039;&#039;&#039;100&#039;&#039;&#039; -qscale:v 75 %03d.jpg&lt;br /&gt;
&lt;br /&gt;
=== メタデータの変更 ===&lt;br /&gt;
&lt;br /&gt;
メタデータは直接変更することはできません。メタデータをエクスポートして変更し、新しいファイルにマージする必要があります。&lt;br /&gt;
&lt;br /&gt;
既存の（グローバル）メタデータをテキストファイルに抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;song.mp3&#039; -f ffmetadata song_metadata.txt&lt;br /&gt;
&lt;br /&gt;
テキストファイルからメタデータを含む新しいファイルを作成する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;song.mp3&#039; -f ffmetadata -i new_metadata.txt -map_metadata 1 -id3v2_version 4 song_new.mp3&lt;br /&gt;
&lt;br /&gt;
{{ic|-map_metadata 1}} は、ffmpeg に 2 番目のファイル (インデックスは 0 から始まる) のメタデータを使用するように指示します。&lt;br /&gt;
&lt;br /&gt;
グローバル メタデータの他に、各ストリームは独自のメタデータを持つこともできます。たとえば、{{ic|-map_metadata:s:v 0:s:v}} および {{ic|-map_metadata:s:a 0:s:a}} を使用してエクスポートします。&lt;br /&gt;
&lt;br /&gt;
{{ic|ffprobe}} は({{Pkg|ffmpeg}} パッケージからも同様に) 、default、compact/csv、flat、ini、json、xml など、さらに多くのエクスポート形式を提供します。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://ffmpeg.org/ffmpeg.html FFmpeg documentation] - 公式ドキュメント&lt;br /&gt;
* [https://trac.ffmpeg.org/wiki FFmpeg Wiki] - 公式 wiki&lt;br /&gt;
* [http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-x264.html Encoding with the x264 codec] - MEncoder ドキュメント&lt;br /&gt;
* [https://avidemux.org/admWiki/doku.php?id=tutorial:h.264 H.264 encoding guide] - Avidemux wiki&lt;br /&gt;
* [http://howto-pages.org/ffmpeg/ Using FFmpeg] - Linux how to pages&lt;br /&gt;
* サポートしている音声・動画ストリームの[https://ffmpeg.org/general.html#Supported-File-Formats_002c-Codecs-or-Features リスト]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|FFmpeg|2023-07-23|776189}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41053</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41053"/>
		<updated>2025-10-26T12:26:55Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* 参照 */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次のようにすると、簡単に解析できるダイジェストのリストが出力されます:&lt;br /&gt;
&lt;br /&gt;
 # tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -o &#039;Digest: &amp;quot;[a-f0-9]\{64\}&amp;quot;&#039; | sed &#039;s/Digest: &amp;quot;//;s/&amp;quot;$//&#039;&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、{{AUR|digest-to-efi-sig-list}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
ダイジェストが多数ある場合、[https://gist.github.com/Strykar/5d57145962bb1bcc00ef52f380697e55 このような Bash スクリプト] を使用することもできます。&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + ArchLinux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41052</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41052"/>
		<updated>2025-10-26T12:25:43Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* オプション ROM のダイジェスト値を登録する */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次のようにすると、簡単に解析できるダイジェストのリストが出力されます:&lt;br /&gt;
&lt;br /&gt;
 # tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements | grep -o &#039;Digest: &amp;quot;[a-f0-9]\{64\}&amp;quot;&#039; | sed &#039;s/Digest: &amp;quot;//;s/&amp;quot;$//&#039;&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、{{AUR|digest-to-efi-sig-list}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
ダイジェストが多数ある場合、[https://gist.github.com/Strykar/5d57145962bb1bcc00ef52f380697e55 このような Bash スクリプト] を使用することもできます。&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41051</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41051"/>
		<updated>2025-10-26T12:22:32Z</updated>

		<summary type="html">&lt;p&gt;ELC: /*  公式の ISO で MOK と shim を使用する */ 英語ページより追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO で MOK と shim を使用する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー、カーネル、UEFI シェルを抽出し、署名してから、署名されたファイルと shim を使用して ISO を再パックすることで、Machine Owner Key (MOK) を備えた shim を使用したセキュアブートのサポートを公式 ISO に追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連ファイルとEl Toritoブートイメージを抽出します。shimが認識できるように、ブートローダーファイル名は {{ic|grubx64.efi}} にする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI grubx64.efi \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w grubx64.efi shellx64.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを MOK で署名します:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output grubx64.efi grubx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key MOK.key --cert MOK.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} などをインストールして、事前署名された shim EFI バイナリを取得します。shim と MokManager を現在のディレクトリに配置し、shim EFI バイナリのファイル名を {{ic|BOOTx64.EFI}} に変更します:&lt;br /&gt;
&lt;br /&gt;
 $ cp /usr/share/shim-signed/shimx64.efi BOOTx64.EFI&lt;br /&gt;
 $ cp /usr/share/shim-signed/mmx64.efi ./&lt;br /&gt;
&lt;br /&gt;
shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を {{ic|eltorito_img2_uefi.img}} にコピーします。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img MOK.cer shellx64.efi ::/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI grubx64.efi mmx64.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブート イメージを使用して ISO を再パックし、shim、MokManager、署名された EFI バイナリ、および DER 形式の MOK を ISO 9660 に追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ / shellx64.efi MOK.cer -- \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI grubx64.efi mmx64.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|archlinux-YYYY.MM.DD-x86_64-Secure_Boot.iso}} を起動します。MokManager が起動したら、&#039;&#039;Enroll key from disk&#039;&#039; &amp;gt; &#039;&#039;ARCHISO_EFI&#039;&#039; &amp;gt; &#039;&#039;MOK.cer&#039;&#039; を選択します。キーを登録した後、再起動すると、次回の起動時にライブ環境が正常に起動します。&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41050</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41050"/>
		<updated>2025-10-26T12:12:06Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* ブートローダを PreLoader に置き換える */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI loader.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41049</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41049"/>
		<updated>2025-10-26T12:09:30Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* 公式の ISO をカスタムの鍵で署名する */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
署名された EFI バイナリを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 8 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img vmlinuz-linux ::/arch/boot/x86_64/vmlinuz-linux&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名された EFI バイナリを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
{{Note|ISO の GRUB EFI バイナリ ({{ic|EFI/BOOT/BOOTx64.EFI}}) は {{ic|--disable-shim-lock}} でビルドされているため、shim で使用することはできません。これは GRUB の制限であり、GRUB に shim かカスタムの署名のどちらか一方との互換性を持たせることはできますが、同時に両方との互換性を持たせることはできません。}}&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-cpx /EFI/BOOT/BOOTx64.EFI ./&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ mv BOOTx64.EFI loader.efi&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41048</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41048"/>
		<updated>2025-10-26T12:05:26Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* 登録されたハッシュ/鍵を削除する */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# mokutil --delete-hash &#039;&#039;hash_to_remove_from_above_command&#039;&#039;|&lt;br /&gt;
Input password:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ブートローダーと UEFI シェルを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 1 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名されたブートローダーのファイル、UEFI シェル、カーネルを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
{{Note|ISO の GRUB EFI バイナリ ({{ic|EFI/BOOT/BOOTx64.EFI}}) は {{ic|--disable-shim-lock}} でビルドされているため、shim で使用することはできません。これは GRUB の制限であり、GRUB に shim かカスタムの署名のどちらか一方との互換性を持たせることはできますが、同時に両方との互換性を持たせることはできません。}}&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-cpx /EFI/BOOT/BOOTx64.EFI ./&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ mv BOOTx64.EFI loader.efi&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41047</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41047"/>
		<updated>2025-10-26T12:04:41Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* shim で鍵を使う */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio#ポストフック|mkinitcpio ポストフック]] で自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete-hash &amp;lt;削除するハッシュ&amp;gt;&lt;br /&gt;
 Input password:&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ブートローダーと UEFI シェルを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 1 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名されたブートローダーのファイル、UEFI シェル、カーネルを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
{{Note|ISO の GRUB EFI バイナリ ({{ic|EFI/BOOT/BOOTx64.EFI}}) は {{ic|--disable-shim-lock}} でビルドされているため、shim で使用することはできません。これは GRUB の制限であり、GRUB に shim かカスタムの署名のどちらか一方との互換性を持たせることはできますが、同時に両方との互換性を持たせることはできません。}}&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-cpx /EFI/BOOT/BOOTx64.EFI ./&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ mv BOOTx64.EFI loader.efi&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41046</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41046"/>
		<updated>2025-10-26T12:02:53Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* shim をセットアップする */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください。デフォルトでは、Shim は {{ic|grubx64.efi}} という名前のファイルをロードして実行しようとします。shim へのコマンド ライン引数として別の EFI バイナリへのファイル パスを渡すことによってデフォルトを上書きできますが、一部のファームウェアではコマンド ライン引数を持つ UEFI ブート エントリに問題があるため、デフォルトに頼る方が確実です:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio]] のポストフックで自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete-hash &amp;lt;削除するハッシュ&amp;gt;&lt;br /&gt;
 Input password:&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ブートローダーと UEFI シェルを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 1 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名されたブートローダーのファイル、UEFI シェル、カーネルを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
{{Note|ISO の GRUB EFI バイナリ ({{ic|EFI/BOOT/BOOTx64.EFI}}) は {{ic|--disable-shim-lock}} でビルドされているため、shim で使用することはできません。これは GRUB の制限であり、GRUB に shim かカスタムの署名のどちらか一方との互換性を持たせることはできますが、同時に両方との互換性を持たせることはできません。}}&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-cpx /EFI/BOOT/BOOTx64.EFI ./&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ mv BOOTx64.EFI loader.efi&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41045</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41045"/>
		<updated>2025-10-26T12:01:37Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* PreLoader */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio]] のポストフックで自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete-hash &amp;lt;削除するハッシュ&amp;gt;&lt;br /&gt;
 Input password:&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ブートローダーと UEFI シェルを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 1 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名されたブートローダーのファイル、UEFI シェル、カーネルを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
{{Note|ISO の GRUB EFI バイナリ ({{ic|EFI/BOOT/BOOTx64.EFI}}) は {{ic|--disable-shim-lock}} でビルドされているため、shim で使用することはできません。これは GRUB の制限であり、GRUB に shim かカスタムの署名のどちらか一方との互換性を持たせることはできますが、同時に両方との互換性を持たせることはできません。}}&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-cpx /EFI/BOOT/BOOTx64.EFI ./&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ mv BOOTx64.EFI loader.efi&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41044</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41044"/>
		<updated>2025-10-26T11:59:32Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Out of date|&#039;&#039;sbupdate&#039;&#039; [https://github.com/andreyv/sbupdat アップストリームリポジトリ]{{Dead link|2024|07|30|status=404}}は 2023 年 8 月時点でアーカイブされています。&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio]] のポストフックで自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete-hash &amp;lt;削除するハッシュ&amp;gt;&lt;br /&gt;
 Input password:&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ブートローダーと UEFI シェルを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 1 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名されたブートローダーのファイル、UEFI シェル、カーネルを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
{{Note|ISO の GRUB EFI バイナリ ({{ic|EFI/BOOT/BOOTx64.EFI}}) は {{ic|--disable-shim-lock}} でビルドされているため、shim で使用することはできません。これは GRUB の制限であり、GRUB に shim かカスタムの署名のどちらか一方との互換性を持たせることはできますが、同時に両方との互換性を持たせることはできません。}}&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-cpx /EFI/BOOT/BOOTx64.EFI ./&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ mv BOOTx64.EFI loader.efi&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41043</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41043"/>
		<updated>2025-10-26T11:58:14Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* mkinitcpio のポストフックでカーネルに署名する */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio]] のポストフックで自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete-hash &amp;lt;削除するハッシュ&amp;gt;&lt;br /&gt;
 Input password:&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ブートローダーと UEFI シェルを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 1 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名されたブートローダーのファイル、UEFI シェル、カーネルを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
{{Note|ISO の GRUB EFI バイナリ ({{ic|EFI/BOOT/BOOTx64.EFI}}) は {{ic|--disable-shim-lock}} でビルドされているため、shim で使用することはできません。これは GRUB の制限であり、GRUB に shim かカスタムの署名のどちらか一方との互換性を持たせることはできますが、同時に両方との互換性を持たせることはできません。}}&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-cpx /EFI/BOOT/BOOTx64.EFI ./&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ mv BOOTx64.EFI loader.efi&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41042</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41042"/>
		<updated>2025-10-26T11:57:20Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* KeyTool を使う */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Out of date|{{Pkg|efitools}} 1.9.2-6 では EFI バイナリは同梱されなくなりました。これは、[https://gitlab.archlinux.org/archlinux/packaging/packages/efitools/-/issues/3 archlinux/packaging/packages/efitools#3] のメンテナーに提起されました。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio]] のポストフックを使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio]] のポストフックで自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete-hash &amp;lt;削除するハッシュ&amp;gt;&lt;br /&gt;
 Input password:&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ブートローダーと UEFI シェルを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 1 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名されたブートローダーのファイル、UEFI シェル、カーネルを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
{{Note|ISO の GRUB EFI バイナリ ({{ic|EFI/BOOT/BOOTx64.EFI}}) は {{ic|--disable-shim-lock}} でビルドされているため、shim で使用することはできません。これは GRUB の制限であり、GRUB に shim かカスタムの署名のどちらか一方との互換性を持たせることはできますが、同時に両方との互換性を持たせることはできません。}}&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-cpx /EFI/BOOT/BOOTx64.EFI ./&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ mv BOOTx64.EFI loader.efi&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41041</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41041"/>
		<updated>2025-10-26T11:51:31Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* sbkeysync を使う */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
* これに失敗する場合は、ファームウェアがBIOS設定をロックしている可能性があります。DellまたはLenovoシステムでは、BIOSパスワードのリセットが必要になる場合があります。[https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-firmware-attributes-authentication sysfs firmware authentication documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
Lenovo システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/thinklmi/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dell システムの場合:&lt;br /&gt;
&lt;br /&gt;
 # cat &amp;gt; /sys/class/firmware-attributes/dell-wmi-sysman/authentication/Admin/current_password &lt;br /&gt;
 my-super-secret-password&lt;br /&gt;
 &#039;&#039;&#039;^D&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後、もう一度試してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio]] のポストフックを使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio]] のポストフックで自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete-hash &amp;lt;削除するハッシュ&amp;gt;&lt;br /&gt;
 Input password:&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ブートローダーと UEFI シェルを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 1 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名されたブートローダーのファイル、UEFI シェル、カーネルを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
{{Note|ISO の GRUB EFI バイナリ ({{ic|EFI/BOOT/BOOTx64.EFI}}) は {{ic|--disable-shim-lock}} でビルドされているため、shim で使用することはできません。これは GRUB の制限であり、GRUB に shim かカスタムの署名のどちらか一方との互換性を持たせることはできますが、同時に両方との互換性を持たせることはできません。}}&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-cpx /EFI/BOOT/BOOTx64.EFI ./&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ mv BOOTx64.EFI loader.efi&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41040</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41040"/>
		<updated>2025-10-26T11:49:53Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* 鍵の生成 */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -noenc -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio]] のポストフックを使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio]] のポストフックで自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete-hash &amp;lt;削除するハッシュ&amp;gt;&lt;br /&gt;
 Input password:&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ブートローダーと UEFI シェルを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 1 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名されたブートローダーのファイル、UEFI シェル、カーネルを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
{{Note|ISO の GRUB EFI バイナリ ({{ic|EFI/BOOT/BOOTx64.EFI}}) は {{ic|--disable-shim-lock}} でビルドされているため、shim で使用することはできません。これは GRUB の制限であり、GRUB に shim かカスタムの署名のどちらか一方との互換性を持たせることはできますが、同時に両方との互換性を持たせることはできません。}}&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-cpx /EFI/BOOT/BOOTx64.EFI ./&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ mv BOOTx64.EFI loader.efi&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41039</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41039"/>
		<updated>2025-10-26T11:46:45Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* キーを作成・登録する */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部のPC（例えばFrameworkノートPC）では、ファームウェアのアップグレードやOEM提供のブートアプリケーションの実行機能を維持したい場合は、OEMファームウェアの組み込み証明書も含めることをお勧めします。この場合、代わりに以下を実行してください: {{ic|sbctl enroll-keys -m -f}} }}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -nodes -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio]] のポストフックを使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio]] のポストフックで自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete-hash &amp;lt;削除するハッシュ&amp;gt;&lt;br /&gt;
 Input password:&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ブートローダーと UEFI シェルを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 1 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名されたブートローダーのファイル、UEFI シェル、カーネルを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
{{Note|ISO の GRUB EFI バイナリ ({{ic|EFI/BOOT/BOOTx64.EFI}}) は {{ic|--disable-shim-lock}} でビルドされているため、shim で使用することはできません。これは GRUB の制限であり、GRUB に shim かカスタムの署名のどちらか一方との互換性を持たせることはできますが、同時に両方との互換性を持たせることはできません。}}&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-cpx /EFI/BOOT/BOOTx64.EFI ./&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ mv BOOTx64.EFI loader.efi&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41038</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41038"/>
		<updated>2025-10-26T11:44:20Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* systemd でより簡単に行う */ 英語ページより追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
バージョン257以降では、[[systemd]]と[[systemd-boot]]を使ってセキュアブートを簡単に設定できます。{{Pkg|systemd-ukify}}をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法ではMicrosoftの証明書は含まれません。[[#オプション ROM のダイジェスト値を登録する]]および[[#他のオペレーティングシステムとデュアルブートする]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
まず、[[ユニファイドカーネルイメージ#ukify]] のように希望する構成を設定し（/usr/lib/kernel/uki.conf のテンプレートを使用できます）、次に署名キーを生成します:&lt;br /&gt;
&lt;br /&gt;
 # ukify genkey --config /etc/kernel/uki.conf&lt;br /&gt;
 Using config file: /etc/kernel/uki.conf&lt;br /&gt;
 Writing SecureBoot private key to /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
 Writing SecureBoot certificate to /etc/kernel/secure-boot-certificate.pem&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[kernel-install]] は自動的にこの構成を使用して [[ユニファイドカーネルイメージ]] に署名します。}}&lt;br /&gt;
&lt;br /&gt;
新しく作成したキーでブートローダーに署名します（自動化については、[[systemd-boot#セキュアブートのための署名]]を参照してください）:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/systemd/systemd-sbsign sign \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --output /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed \&lt;br /&gt;
 /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
次に、[[ESP]]に自動登録を設定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install --secure-boot-auto-enroll yes \&lt;br /&gt;
 --certificate /etc/kernel/secure-boot-certificate.pem \&lt;br /&gt;
 --private-key /etc/kernel/secure-boot-private-key.pem&lt;br /&gt;
&lt;br /&gt;
これにより、署名された [[systemd-boot]] ブートローダーが [[ESP]] にインストール (または更新) され、{{ic|/boot/loader/keys/auto/}} に {{ic|PK.auth}}、{{ic|KEK.auth}}、{{ic|db.auth}} の 3 つのファイルが作成されます。個別の Platform Key、Key Exchange Key は生成されませんが、代わりに署名キーが 3 つのレベルすべてに登録されます。&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|/boot/loader/loader.conf}} に {{ic|secure-boot-enroll force}} を設定し、再起動してファームウェアにキーを登録します。{{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -nodes -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio]] のポストフックを使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio]] のポストフックで自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete-hash &amp;lt;削除するハッシュ&amp;gt;&lt;br /&gt;
 Input password:&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ブートローダーと UEFI シェルを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 1 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名されたブートローダーのファイル、UEFI シェル、カーネルを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
{{Note|ISO の GRUB EFI バイナリ ({{ic|EFI/BOOT/BOOTx64.EFI}}) は {{ic|--disable-shim-lock}} でビルドされているため、shim で使用することはできません。これは GRUB の制限であり、GRUB に shim かカスタムの署名のどちらか一方との互換性を持たせることはできますが、同時に両方との互換性を持たせることはできません。}}&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-cpx /EFI/BOOT/BOOTx64.EFI ./&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ mv BOOTx64.EFI loader.efi&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41037</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41037"/>
		<updated>2025-10-26T11:37:56Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* 自分の鍵を使う */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書]]またはベンダー証明書を使って署名されているためです。これは、UEFI アプリケーションとファームウェアの署名に Lenovo CA 証明書を使用する多くの [https://forums.lenovo.com/t5/Other-Linux-Discussions/Reports-of-custom-secure-boot-keys-bricking-recent-X-P-and-T-series-laptops/m-p/5105571 Lenovo Thinkpad X、P、および T シリーズのノート PC] に当てはまります。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -nodes -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio]] のポストフックを使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio]] のポストフックで自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete-hash &amp;lt;削除するハッシュ&amp;gt;&lt;br /&gt;
 Input password:&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ブートローダーと UEFI シェルを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 1 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名されたブートローダーのファイル、UEFI シェル、カーネルを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
{{Note|ISO の GRUB EFI バイナリ ({{ic|EFI/BOOT/BOOTx64.EFI}}) は {{ic|--disable-shim-lock}} でビルドされているため、shim で使用することはできません。これは GRUB の制限であり、GRUB に shim かカスタムの署名のどちらか一方との互換性を持たせることはできますが、同時に両方との互換性を持たせることはできません。}}&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-cpx /EFI/BOOT/BOOTx64.EFI ./&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ mv BOOTx64.EFI loader.efi&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41036</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41036"/>
		<updated>2025-10-26T11:36:41Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* セキュアブートを実現する */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFI ブートスタブ]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれません。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書を使って署名されている]]ためです。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -nodes -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio]] のポストフックを使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio]] のポストフックで自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete-hash &amp;lt;削除するハッシュ&amp;gt;&lt;br /&gt;
 Input password:&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ブートローダーと UEFI シェルを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 1 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名されたブートローダーのファイル、UEFI シェル、カーネルを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
{{Note|ISO の GRUB EFI バイナリ ({{ic|EFI/BOOT/BOOTx64.EFI}}) は {{ic|--disable-shim-lock}} でビルドされているため、shim で使用することはできません。これは GRUB の制限であり、GRUB に shim かカスタムの署名のどちらか一方との互換性を持たせることはできますが、同時に両方との互換性を持たせることはできません。}}&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-cpx /EFI/BOOT/BOOTx64.EFI ./&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ mv BOOTx64.EFI loader.efi&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41035</id>
		<title>Unified Extensible Firmware Interface/セキュアブート</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&amp;diff=41035"/>
		<updated>2025-10-26T11:31:16Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* OS の起動後 */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートプロセス]]&lt;br /&gt;
[[en:Unified Extensible Firmware Interface/Secure Boot]]&lt;br /&gt;
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks&#039; Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートの状態を確認する ==&lt;br /&gt;
&lt;br /&gt;
=== OS の起動前 ===&lt;br /&gt;
&lt;br /&gt;
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。&lt;br /&gt;
&lt;br /&gt;
=== OS の起動後 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使用するシステム上では、{{man|1|bootctl}} でセキュアブートの状態を簡単に確認できます:&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bootctl|&lt;br /&gt;
System:&lt;br /&gt;
      Firmware: UEFI 2.80 (American Megatrends 5.26)&lt;br /&gt;
 Firmware Arch: x64&lt;br /&gt;
   Secure Boot: enabled (user)&lt;br /&gt;
  TPM2 Support: yes&lt;br /&gt;
  Measured UKI: yes&lt;br /&gt;
  Boot into FW: supported&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。&lt;br /&gt;
&lt;br /&gt;
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:&lt;br /&gt;
&lt;br /&gt;
 $ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c&lt;br /&gt;
&lt;br /&gt;
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:&lt;br /&gt;
&lt;br /&gt;
 6  0  0  0  1&lt;br /&gt;
&lt;br /&gt;
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# journalctl -kg &#039;secure boot&#039;|&lt;br /&gt;
kernel: Secure boot disabled&lt;br /&gt;
kernel: Secure boot could not be determined&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。&lt;br /&gt;
&lt;br /&gt;
== インストールメディアを起動する ==&lt;br /&gt;
&lt;br /&gt;
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、&#039;&#039;prebootloader&#039;&#039; は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。&lt;br /&gt;
&lt;br /&gt;
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートを無効化する ===&lt;br /&gt;
&lt;br /&gt;
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): &#039;&#039;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Recovery &amp;gt; Advanced startup (Restart now) &amp;gt; Troubleshoot &amp;gt; Advanced options &amp;gt; UEFI Firmware settings &amp;gt; restart&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。&lt;br /&gt;
&lt;br /&gt;
=== インストールイメージを再パックする ===&lt;br /&gt;
&lt;br /&gt;
[[#ISO の再パック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを編集する ===&lt;br /&gt;
&lt;br /&gt;
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/disk/by-label/ARCHISO_EFI /mnt&lt;br /&gt;
&lt;br /&gt;
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi&lt;br /&gt;
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを実現する ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;の理想的なセットアップを実現するにはいくつか条件があります:&lt;br /&gt;
&lt;br /&gt;
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。&lt;br /&gt;
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]&lt;br /&gt;
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFISTUB]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。&lt;br /&gt;
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。&lt;br /&gt;
# [[TPM]] を使うことでさらに改善することができるかもしれませんが、ツールやサポートの問題がこれを難しくしています。&lt;br /&gt;
&lt;br /&gt;
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 自分の鍵を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書を使って署名されている]]ためです。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートでは以下の鍵が使われます:&lt;br /&gt;
&lt;br /&gt;
; Platform Key (PK): トップレベル鍵&lt;br /&gt;
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵&lt;br /&gt;
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます&lt;br /&gt;
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます&lt;br /&gt;
&lt;br /&gt;
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートをを使用するには最低でも &#039;&#039;&#039;PK&#039;&#039;&#039;, &#039;&#039;&#039;KEK&#039;&#039;&#039;, &#039;&#039;&#039;db&#039;&#039;&#039; 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。&lt;br /&gt;
&lt;br /&gt;
Secure Boot を &amp;quot;User Mode&amp;quot; にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (&#039;&#039;sign-efi-sig-list&#039;&#039; を使用)。Platform key は自分自身で署名することができます。&lt;br /&gt;
&lt;br /&gt;
==== 現在の変数をバックアップする ====&lt;br /&gt;
&lt;br /&gt;
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。&lt;br /&gt;
&lt;br /&gt;
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done&lt;br /&gt;
&lt;br /&gt;
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ファームウェアを &amp;quot;Setup Mode&amp;quot; にする ====&lt;br /&gt;
&lt;br /&gt;
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。&lt;br /&gt;
&lt;br /&gt;
==== sbctl でより簡単に行う ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。&lt;br /&gt;
&lt;br /&gt;
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}&lt;br /&gt;
&lt;br /&gt;
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== キーを作成・登録する =====&lt;br /&gt;
&lt;br /&gt;
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを &#039;&#039;&#039;Setup mode&#039;&#039;&#039; にしてください。これはデバイスごとに異なります。&lt;br /&gt;
&lt;br /&gt;
ログインし直したら、セキュアブートの状態を確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
次に、カスタムのセキュアブート鍵を作成してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl create-keys&lt;br /&gt;
&lt;br /&gt;
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:&lt;br /&gt;
&lt;br /&gt;
 # sbctl enroll-keys -m&lt;br /&gt;
&lt;br /&gt;
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブートの状態を再び確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。&lt;br /&gt;
&lt;br /&gt;
===== 署名 =====&lt;br /&gt;
&lt;br /&gt;
セキュアブートを動作させるために署名が必要なファイルを確認します：&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify&lt;br /&gt;
&lt;br /&gt;
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば：&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s /boot/vmlinuz-linux&lt;br /&gt;
 # sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
&lt;br /&gt;
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:&lt;br /&gt;
&lt;br /&gt;
 # sbctl verify {{!}} sed &#039;s/✗ /sbctl sign -s /e&#039;&lt;br /&gt;
&lt;br /&gt;
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbctl status&lt;br /&gt;
&lt;br /&gt;
===== pacman フックを使って自動的に署名する =====&lt;br /&gt;
&lt;br /&gt;
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の &#039;&#039;.efi&#039;&#039; ではなく &#039;&#039;.efi.signed&#039;&#039; ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 手動による手順 ====&lt;br /&gt;
&lt;br /&gt;
===== efitools をインストールする =====&lt;br /&gt;
&lt;br /&gt;
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。&lt;br /&gt;
&lt;br /&gt;
===== 鍵の生成 =====&lt;br /&gt;
&lt;br /&gt;
鍵を生成するには以下の手順を行ってください:&lt;br /&gt;
&lt;br /&gt;
秘密鍵と複数の形式の証明書を作成する必要があります:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。&lt;br /&gt;
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための EFI 署名リストの証明書。&lt;br /&gt;
; {{ic|.auth}}: {{man|1|efi-updatevar}} や &#039;&#039;sbkeysync&#039;&#039;、&#039;&#039;KeyTool&#039;&#039;、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。&lt;br /&gt;
&lt;br /&gt;
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ uuidgen --random &amp;gt; GUID.txt&lt;br /&gt;
&lt;br /&gt;
Platform key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -nodes -keyout PK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Platform Key&#039;&#039;/&amp;quot; -out PK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in PK.crt -out PK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; PK.crt PK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt PK PK.esl PK.auth&lt;br /&gt;
&lt;br /&gt;
&amp;quot;User Mode&amp;quot; で Platform Key を削除できるようにするために空のファイルを署名してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -c PK.crt -k PK.key PK /dev/null noPK.auth&lt;br /&gt;
&lt;br /&gt;
Key Exchange Key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Key Exchange Key&#039;&#039;/&amp;quot; -out KEK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in KEK.crt -out KEK.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; KEK.crt KEK.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k PK.key -c PK.crt KEK KEK.esl KEK.auth&lt;br /&gt;
&lt;br /&gt;
Signature Database key:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Signature Database key&#039;&#039;/&amp;quot; -out db.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in db.crt -out db.cer&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; db.crt db.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db db.esl db.auth&lt;br /&gt;
&lt;br /&gt;
====== ヘルパースクリプト ======&lt;br /&gt;
&lt;br /&gt;
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。&lt;br /&gt;
&lt;br /&gt;
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使ってユニファイドカーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /etc/efi-keys&lt;br /&gt;
 # cd !$&lt;br /&gt;
 # curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh&lt;br /&gt;
 # chmod +x mkkeys.sh&lt;br /&gt;
 # ./mkkeys.sh&lt;br /&gt;
 &#039;&#039;鍵に埋め込む Common Name を入力 (例: &amp;quot;Secure Boot&amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これは様々な形式で必要なファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
===== ファームウェアに鍵を登録する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録するには、以下に述べる方法のうち1つを使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;&#039;dbx&#039;&#039;&#039; (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|Platform Key を登録するとセキュアブートは &amp;quot;Setup Mode&amp;quot; から &amp;quot;User Mode&amp;quot; になります。なので、Platform Key は最後に登録する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
====== sbkeysync を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 /etc/secureboot/keys&lt;br /&gt;
 ├── db&lt;br /&gt;
 ├── dbx&lt;br /&gt;
 ├── KEK&lt;br /&gt;
 └── PK&lt;br /&gt;
&lt;br /&gt;
例えば、以下のように:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}&lt;br /&gt;
&lt;br /&gt;
そして、先程生成した &#039;&#039;.auth&#039;&#039; ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。&lt;br /&gt;
&lt;br /&gt;
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose&lt;br /&gt;
 # sbkeysync --keystore /etc/secureboot/keys --verbose --pk&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。&lt;br /&gt;
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。&lt;br /&gt;
&lt;br /&gt;
====== ファームウェアのセットアップユーティリティを使う ======&lt;br /&gt;
&lt;br /&gt;
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に &#039;&#039;&#039;{{ic|noPK.auth}} ファイルを除いて&#039;&#039;&#039; {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!&#039;&#039;&#039; そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、&amp;quot;Setup Mode&amp;quot; を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:&lt;br /&gt;
&lt;br /&gt;
* {{ic|KeyTool}} を使用している場合は、&#039;&#039;&#039;[[EFI システムパーティション]]のある外部 USB スティック&#039;&#039;&#039;。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。&lt;br /&gt;
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。&lt;br /&gt;
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティを起動し、&#039;&#039;&#039;db&#039;&#039;&#039;、&#039;&#039;&#039;KEK&#039;&#039;&#039;、&#039;&#039;&#039;PK&#039;&#039;&#039; 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware&#039;s Setup Utility] を見てください。&lt;br /&gt;
&lt;br /&gt;
使用するツールがサポートしていれば、&#039;&#039;.cer&#039;&#039; よりも &#039;&#039;.auth&#039;&#039; と &#039;&#039;.esl&#039;&#039; を使用することを推奨します。&lt;br /&gt;
&lt;br /&gt;
====== KeyTool を使う ======&lt;br /&gt;
&lt;br /&gt;
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。&lt;br /&gt;
&lt;br /&gt;
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== EFI バイナリに署名する =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;セキュアブート&#039;&#039;を有効化(つまり &amp;quot;User Mode&amp;quot; に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[ユニファイドカーネルイメージ]])しか起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
====== sbsigntools を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list &#039;&#039;/path/to/binary&#039;&#039;}}。&lt;br /&gt;
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbsign&#039;&#039; を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|&#039;&#039;filename&#039;&#039;.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
カーネルとブートマネージャに署名するには、&#039;&#039;sbsign&#039;&#039; を使用してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key db.key --cert db.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。&#039;&#039;sbsign&#039;&#039; で手動で署名できる結合イメージを生成する方法は[[ユニファイドカーネルイメージ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックでカーネルに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio]] のポストフックを使って、initramfs の生成時にカーネルイメージに署名することもできます。&lt;br /&gt;
&lt;br /&gt;
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。&lt;br /&gt;
&lt;br /&gt;
====== mkinitcpio のポストフックで ユニファイドカーネルイメージに署名する ======&lt;br /&gt;
&lt;br /&gt;
[[ユニファイドカーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== sbupdate による完全に自動化されたユニファイドカーネルの生成と署名 =====&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに[[ユニファイドカーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux でユニファイドカーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR=&amp;quot;EFI/Linux&amp;quot;}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;sbupdate&#039;&#039; の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}&lt;br /&gt;
&lt;br /&gt;
==== 鍵をアップデートする ====&lt;br /&gt;
&lt;br /&gt;
一度セキュアブートを &amp;quot;User Mode&amp;quot; にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。&lt;br /&gt;
&lt;br /&gt;
例えば、db 鍵を新しいものに置き換えたい場合:&lt;br /&gt;
&lt;br /&gt;
# [[#鍵を作成する|新しい鍵を作成]]&lt;br /&gt;
# EFI 署名リストに変換&lt;br /&gt;
# EFI 署名リストに署名&lt;br /&gt;
# 署名された証明書アップデートファイルを登録&lt;br /&gt;
&lt;br /&gt;
 $ cert-to-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; &#039;&#039;new_db&#039;&#039;.crt &#039;&#039;new_db&#039;&#039;.esl&lt;br /&gt;
 $ sign-efi-sig-list -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
db 鍵を置き換えるかわりに Signature Database に別の鍵を&#039;&#039;&#039;追加&#039;&#039;&#039;したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list &#039;&#039;&#039;-a&#039;&#039;&#039; -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db &#039;&#039;new_db&#039;&#039;.esl &#039;&#039;new_db&#039;&#039;.auth&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;new_db&#039;&#039;.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 他のオペレーティングシステムとデュアルブートする ====&lt;br /&gt;
&lt;br /&gt;
===== Microsoft Windows =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常&#039;&#039;&#039;不可能&#039;&#039;&#039;です:&lt;br /&gt;
&lt;br /&gt;
* {{ic|bootmgfw.efi}} に &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; とあなたの独自のセキュアブート db 鍵の&#039;&#039;&#039;両方&#039;&#039;&#039;の署名 (つまり、&#039;&#039;&#039;2つの署名&#039;&#039;&#039;) が含まれている場合、&#039;&#039;INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)&#039;&#039; のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー (&#039;&#039;&#039;{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}&#039;&#039;&#039;) を発生させます: このような UEFI ファームウェア実装は、おそらく&#039;&#039;&#039;1番目&#039;&#039;&#039;の署名だけは読み込むことができるでしょうが、&#039;&#039;&#039;2番目&#039;&#039;&#039;の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。&lt;br /&gt;
* {{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの &amp;quot;Microsoft Windows Production PCA 2011&amp;quot; 署名が存在しないからです)。&lt;br /&gt;
&lt;br /&gt;
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには&lt;br /&gt;
&lt;br /&gt;
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。&lt;br /&gt;
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):&lt;br /&gt;
&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。&lt;br /&gt;
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。&lt;br /&gt;
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。&lt;br /&gt;
&lt;br /&gt;
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl &#039;windows uefi ca 2023.crt&#039;&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl &#039;microsoft uefi ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl &amp;gt; MS_db.esl&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt&lt;br /&gt;
 $ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl &#039;microsoft corporation kek 2k ca 2023.crt&#039;&lt;br /&gt;
 $ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl &amp;gt; MS_Win_KEK.esl&lt;br /&gt;
&lt;br /&gt;
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth&lt;br /&gt;
&lt;br /&gt;
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく &#039;&#039;&#039;追加&#039;&#039;&#039; します):&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth&lt;br /&gt;
&lt;br /&gt;
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。&lt;br /&gt;
&lt;br /&gt;
=== 署名済みのブートローダを使う ===&lt;br /&gt;
&lt;br /&gt;
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft が &amp;quot;Secured-core PC&amp;quot; と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。&lt;br /&gt;
&lt;br /&gt;
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PreLoader ====&lt;br /&gt;
&lt;br /&gt;
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
===== PreLoader をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi &#039;&#039;esp&#039;&#039;/EFI/systemd&lt;br /&gt;
&lt;br /&gt;
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;PreLoader&amp;quot; --loader /EFI/systemd/PreLoader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
====== フォールバック ======&lt;br /&gt;
&lt;br /&gt;
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/HashTool.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
 # cp &#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/loader.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot&lt;br /&gt;
 # cp /usr/share/preloader-signed/PreLoader.efi &#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot/bootmgfw.efi&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Microsoft/Boot}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。&lt;br /&gt;
&lt;br /&gt;
===== 起動途中で使用するには? =====&lt;br /&gt;
&lt;br /&gt;
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;OK&#039;&#039; を選択してください&lt;br /&gt;
* HashTool のメインメニューで、&#039;&#039;Enroll Hash&#039;&#039; を選択し、{{ic|\loader.efi}} を選んで &#039;&#039;Yes&#039;&#039; で確定してください。再び &#039;&#039;Enroll Hash&#039;&#039; と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、&#039;&#039;Yes&#039;&#039; で確定してください。そして、&#039;&#039;Exit&#039;&#039; を選択してブートデバイスの選択メニューに戻ってください。&lt;br /&gt;
* ブートデバイスの選択メニューで、&#039;&#039;Arch Linux archiso x86_64 UEFI CD&#039;&#039; を選んでください。&lt;br /&gt;
&lt;br /&gt;
===== PreLoader を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/{PreLoader,HashTool}.efi&lt;br /&gt;
 # rm &#039;&#039;esp&#039;&#039;/EFI/systemd/loader.efi&lt;br /&gt;
 # efibootmgr --unicode --bootnum &#039;&#039;N&#039;&#039; --delete-bootnum&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== 登録したハッシュを削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/efitools/efi/KeyTool.efi &#039;&#039;esp&#039;&#039;/EFI/systemd/KeyTool.efi&lt;br /&gt;
&lt;br /&gt;
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。&lt;br /&gt;
&lt;br /&gt;
==== shim ====&lt;br /&gt;
&lt;br /&gt;
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。&lt;br /&gt;
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s &#039;&#039;/path/to/binary.efi&#039;&#039;}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。&lt;br /&gt;
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== shim をセットアップする =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください:&lt;br /&gt;
&lt;br /&gt;
 # mv &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー&#039;&#039;&#039;しない&#039;&#039;&#039;でください。さもないと、shim は {{ic|grubx64.efi}} を&#039;&#039;&#039;実行せず&#039;&#039;&#039;、動作に失敗してマシンをリセットします。}}&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/shim-signed/shimx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
 # cp /usr/share/shim-signed/mmx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --unicode --disk /dev/sd&#039;&#039;&#039;&#039;&#039;X&#039;&#039;&#039;&#039;&#039; --part &#039;&#039;&#039;&#039;&#039;Y&#039;&#039;&#039;&#039;&#039; --create --label &amp;quot;Shim&amp;quot; --loader /EFI/BOOT/BOOTx64.EFI&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。&lt;br /&gt;
&lt;br /&gt;
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵&lt;br /&gt;
; hash: EFI バイナリの SHA256 ハッシュ&lt;br /&gt;
&lt;br /&gt;
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
====== shim でハッシュを使う ======&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;shim&#039;&#039; は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll hash from disk&#039;&#039; を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動してカーネルが起動します。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵を使う ======&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
以下のファイルが必要です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の&#039;&#039;秘密&#039;&#039;鍵。&lt;br /&gt;
; {{ic|.crt}}: &#039;&#039;sbsign&#039;&#039; で使うための PEM 形式の証明書。&lt;br /&gt;
; {{ic|.cer}}: &#039;&#039;MokManager&#039;&#039; で使うための DER 形式の証明書。&lt;br /&gt;
&lt;br /&gt;
Machine Owner Key を作成:&lt;br /&gt;
&lt;br /&gt;
 $ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days &#039;&#039;3650&#039;&#039; -subj &amp;quot;/CN=&#039;&#039;my Machine Owner Key&#039;&#039;/&amp;quot; -out MOK.crt&lt;br /&gt;
 $ openssl x509 -outform DER -in MOK.crt -out MOK.cer&lt;br /&gt;
&lt;br /&gt;
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:&lt;br /&gt;
&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux&lt;br /&gt;
 # sbsign --key MOK.key --cert MOK.crt --output &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi &#039;&#039;esp&#039;&#039;/EFI/BOOT/grubx64.efi&lt;br /&gt;
&lt;br /&gt;
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitcpio]] のポストフックで自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/kernel-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
kernel=&amp;quot;$1&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$kernel&amp;quot; ]] || exit 0&lt;br /&gt;
&lt;br /&gt;
# use already installed kernel if it exists&lt;br /&gt;
[[ ! -f &amp;quot;$KERNELDESTINATION&amp;quot; ]] || kernel=&amp;quot;$KERNELDESTINATION&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;MOK.key &#039;&#039;/path/to/&#039;&#039;MOK.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$kernel&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$kernel&amp;quot; &amp;quot;$kernel&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。&lt;br /&gt;
&lt;br /&gt;
再起動してセキュアブートを有効にしてください。&#039;&#039;shim&#039;&#039; は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MokManager&#039;&#039; で &#039;&#039;Enroll key from disk&#039;&#039; を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら &#039;&#039;Continue boot&#039;&#039; を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
====== shim で鍵と GRUB を使う ======&lt;br /&gt;
&lt;br /&gt;
手順は [[GRUB#Shim-lock]] を見てください。&lt;br /&gt;
&lt;br /&gt;
===== 登録されたハッシュ/鍵を削除する =====&lt;br /&gt;
&lt;br /&gt;
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。&lt;br /&gt;
&lt;br /&gt;
MOK データベースは {{Pkg|mokutil}} で管理できます。&lt;br /&gt;
&lt;br /&gt;
登録された鍵とハッシュを一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-enrolled&lt;br /&gt;
&lt;br /&gt;
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete-hash &amp;lt;削除するハッシュ&amp;gt;&lt;br /&gt;
 Input password:&lt;br /&gt;
&lt;br /&gt;
データベースから鍵を削除する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --delete MOK.cer&lt;br /&gt;
&lt;br /&gt;
次回のブート時に削除されるハッシュ/鍵を一覧表示する:&lt;br /&gt;
&lt;br /&gt;
 # mokutil --list-delete&lt;br /&gt;
&lt;br /&gt;
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== shim を除去する =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした &#039;&#039;shim&#039;&#039; と &#039;&#039;MokManager&#039;&#039; のファイルを削除してブートローダーを元の名前に戻してください。&lt;br /&gt;
&lt;br /&gt;
== セキュアブートを保護する ==&lt;br /&gt;
&lt;br /&gt;
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。&lt;br /&gt;
&lt;br /&gt;
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ISO の再パック ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。&lt;br /&gt;
&lt;br /&gt;
==== 公式の ISO をカスタムの鍵で署名する ====&lt;br /&gt;
&lt;br /&gt;
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。&lt;br /&gt;
&lt;br /&gt;
まず、関連するファイルと El Torito ブートイメージを抽出してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \&lt;br /&gt;
	-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \&lt;br /&gt;
	-extract /shellx64.efi shellx64.efi \&lt;br /&gt;
	-extract /shellia32.efi shellia32.efi \&lt;br /&gt;
	-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkarchiso&#039;&#039; によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:&lt;br /&gt;
&lt;br /&gt;
 $ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:&lt;br /&gt;
&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi&lt;br /&gt;
 $ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux&lt;br /&gt;
&lt;br /&gt;
ブートローダーと UEFI シェルを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために &#039;&#039;mkarchiso&#039;&#039; によって 1 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/&lt;br /&gt;
&lt;br /&gt;
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名されたブートローダーのファイル、UEFI シェル、カーネルを ISO 9660 に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \&lt;br /&gt;
	-map_l ./ / shellx64.efi shellia32.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
完成した {{ic|archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso}} を起動してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ブートローダを PreLoader に置き換える ====&lt;br /&gt;
&lt;br /&gt;
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。&lt;br /&gt;
&lt;br /&gt;
{{Note|ISO の GRUB EFI バイナリ ({{ic|EFI/BOOT/BOOTx64.EFI}}) は {{ic|--disable-shim-lock}} でビルドされているため、shim で使用することはできません。これは GRUB の制限であり、GRUB に shim かカスタムの署名のどちらか一方との互換性を持たせることはできますが、同時に両方との互換性を持たせることはできません。}}&lt;br /&gt;
&lt;br /&gt;
まず、ブートローダと El Torito ブートイメージを抽出してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ osirrox -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-extract_boot_images ./ \&lt;br /&gt;
	-cpx /EFI/BOOT/BOOTx64.EFI ./&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ mv BOOTx64.EFI loader.efi&lt;br /&gt;
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI&lt;br /&gt;
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいファイルをブートイメージに追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/&lt;br /&gt;
&lt;br /&gt;
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
$ xorriso -indev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64.iso \&lt;br /&gt;
	-outdev archlinux-&#039;&#039;YYYY.MM.DD&#039;&#039;-x86_64-Secure_Boot.iso \&lt;br /&gt;
	-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \&lt;br /&gt;
	-boot_image any replay \&lt;br /&gt;
	-append_partition 2 0xef eltorito_img2_uefi.img&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== オプション ROM のダイジェスト値を登録する ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 9&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
- EventNum: 10&lt;br /&gt;
  PCRIndex: 2&lt;br /&gt;
  EventType: EV_EFI_BOOT_SERVICES_DRIVER&lt;br /&gt;
  DigestCount: 1&lt;br /&gt;
  Digests:&lt;br /&gt;
  - AlgorithmId: sha256&lt;br /&gt;
    Digest: &amp;quot;&#039;&#039;&#039;&#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、&#039;&#039;digest-to-efi-sig-list&#039;&#039; を使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&#039;&#039; OpROM1.esl&lt;br /&gt;
 $ digest-to-efi-sig-list &#039;&#039;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&#039;&#039; OpROM2.esl&lt;br /&gt;
&lt;br /&gt;
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
 $ cat OpROM1.esl OpROM2.esl &amp;gt; OpROM.esl&lt;br /&gt;
&lt;br /&gt;
EFI 署名リストに署名して、Signature Database に追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ sign-efi-sig-list -a -g &amp;quot;$(&amp;lt; GUID.txt)&amp;quot; -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth&lt;br /&gt;
&lt;br /&gt;
そして、[[#ファームウェアに鍵を登録する|登録してください]]。&lt;br /&gt;
&lt;br /&gt;
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による&lt;br /&gt;
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による&lt;br /&gt;
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による&lt;br /&gt;
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による&lt;br /&gt;
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer&#039;s &amp;quot;Secure Boot&amp;quot; turn out to be &amp;quot;Restricted Boot&amp;quot;?] — Free Software Foundation&lt;br /&gt;
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]&lt;br /&gt;
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]&lt;br /&gt;
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]&lt;br /&gt;
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]&lt;br /&gt;
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync &amp;amp; maintaining uefi key databases] Jeremy Kerr による&lt;br /&gt;
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/  Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)&lt;br /&gt;
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)&lt;br /&gt;
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)&lt;br /&gt;
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41032</id>
		<title>FFmpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41032"/>
		<updated>2025-10-25T09:32:57Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* ハードサブ */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:オーディオ]]&lt;br /&gt;
[[Category:ビデオ]]&lt;br /&gt;
[[en:FFmpeg]]&lt;br /&gt;
[[zh-hans:FFmpeg]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Flac を Mp3 に変換#FFmpeg を使う}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
プロジェクトの[https://www.ffmpeg.org/ ホームページ] より:&lt;br /&gt;
:FFmpeg は、音声と動画を記録、変換、そしてストリーミングするための完全でクロスプラットフォームなソリューションです。先進的な音声・動画コーデックライブラリである libavcodec が含まれています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;libav&#039;&#039; や &#039;&#039;avconv&#039;&#039; など FFmpeg のフォークも存在しています。FFmpeg の現在の状態やプロジェクトの違いについては [https://blog.pkh.me/p/13-the-ffmpeg-libav-situation.html The FFmpeg/Libav situation] を読んでください。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|ffmpeg}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
開発版は {{AUR|ffmpeg-git}} パッケージでインストールできます。可能な限り多くのオプション機能を有効化してビルドする {{AUR|ffmpeg-full}} も存在します。&lt;br /&gt;
&lt;br /&gt;
== エンコードの例 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* パラメータを正しい順序で指定することが重要です (例: input、video、filters、audio、output)。順序を間違うと、パラメータがスキップされたり、FFmpeg が実行されなかったりする場合があります。&lt;br /&gt;
* FFmpeg は、使用できる CPU スレッド数を自動的に選択するはずです。しかし、パラメータ {{ic|-threads &#039;&#039;number&#039;&#039;}} を使って、使用できるスレッド数を強制したほうが良い場合もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki#Encoding FFmpeg のエンコード wiki] と {{man|1|ffmpeg|EXAMPLES}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== スクリーンキャプチャ ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#x11grab x11grab] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の仮想デバイスが含まれており、ユーザのディスプレイ全体と音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
スクリーンショットを撮って {{ic|screen.png}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -i $DISPLAY -vframes 1 screen.png&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} はキャプチャする領域のサイズを指定します。&lt;br /&gt;
&lt;br /&gt;
ロスレスエンコードで音声なしのスクリーンキャストを撮って {{ic|screen.mkv}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -c:v ffvhuff screen.mkv&lt;br /&gt;
&lt;br /&gt;
ここでは、Huffyuv コーデックが使用されます。このコーデックは高速ですが、ファイルサイズが大きくなります。&lt;br /&gt;
&lt;br /&gt;
ロッシーエンコードで音声ありのスクリーンキャストを撮って {{ic|screen.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac screen.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
動画ストリームをファイルとして保存する必要はないが、画面共有のために仮想ウェブカメラとして使う場合、[[v4l2loopback#FFmpeg を使って X11 をキャストする]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Desktop#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウェブカメラの録画 ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#video4linux2_002c-v4l2 video4linux2] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の入力デバイスが含まれています。これらにより、ウェブカメラと音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドは、ウェブカメラから音声無しで動画を録画し {{ic|webcam.mp4}} に保存します。ウェブカメラが {{ic|/dev/video0}} として正しく認識されていると仮定します:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -c:v libx264 -preset ultrafast webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} は、ウェブカメラからの許可されるイメージサイズの最大値を指定します。&lt;br /&gt;
&lt;br /&gt;
上記のコマンドは無音動画を出力します。音声ありでウェブカメラから動画を録画し {{ic|webcam.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Webcam#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== VOB から他のコンテナに ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:VOB|VOB]] ファイルを一つのストリームに連結して MPEG-2 にするには:&lt;br /&gt;
&lt;br /&gt;
 $ cat f0.VOB f1.VOB f2.VOB | ffmpeg -i - out.mp2&lt;br /&gt;
&lt;br /&gt;
=== x264 ===&lt;br /&gt;
&lt;br /&gt;
==== ロスレス ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットは最速のエンコードをするので素早い録画をしたいときに有用です (スクリーンキャストなど):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset ultrafast -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットの反対は &#039;&#039;veryslow&#039;&#039; で、&#039;&#039;ultrafast&#039;&#039; よりもエンコードが遅いかわりに出力するファイルのサイズが小さくなります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset veryslow -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
どちらでも出力のクオリティは同じです。&lt;br /&gt;
&lt;br /&gt;
{{Tip|あなたの使っているコンピュータがリアルタイムで {{ic|-preset superfast}} を処理できる場合、{{ic|-preset ultrafast}} ではなく {{ic|-preset superfast}} を使用してください。Ultrafast は superfast よりも圧縮率が&#039;&#039;かなり&#039;&#039;落ちます。}}&lt;br /&gt;
&lt;br /&gt;
==== Constant rate factor ====&lt;br /&gt;
&lt;br /&gt;
出力する品質を指定したいときに使います。一般的に使われているのは最高の {{ic|-crf}} 値で、これでも許容範囲内の画質になります。値が低いほど画質は高くなります。0はロスレス、18は見た目がロスレス、そして23がデフォルトの値です。賢明な値は18から28の範囲になります。一番遅い {{ic|-preset}} を使うなら辛抱する必要があります。詳しくは [https://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuide x264 Encoding Guide] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039; -c:v libx264 -tune film -preset slow -crf 22 -x264opts fast_pskip=0 -c:a libmp3lame -aq 4 &#039;&#039;output&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{ic|-tune}} オプションを使うことで[https://forum.doom9.org/showthread.php?t=149394 エンコードされるメディアの中身とタイプにあった設定にすることができます]。&lt;br /&gt;
&lt;br /&gt;
==== ツーパス (超高品質) ====&lt;br /&gt;
&lt;br /&gt;
マルチパスの始めは動画の統計が記録されるため、音声が無効化されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -an -vcodec libx264 -pass 1 -preset veryslow \&lt;br /&gt;
 -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 -f rawvideo -y /dev/null&lt;br /&gt;
&lt;br /&gt;
コンテナの形式は出力ファイルの拡張子 ({{ic|.mkv}}) から自動的に検出して変換されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -acodec aac -b:a 256k -ar 96000 -vcodec libx264 \&lt;br /&gt;
 -pass 2 -preset veryslow -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
==== 動画の手ブレ補正 ====&lt;br /&gt;
&lt;br /&gt;
vbid.stab プラグインを使ってツーパスで手ブレ補正 (ビデオ安定化) を行います。&lt;br /&gt;
&lt;br /&gt;
===== ファーストパス =====&lt;br /&gt;
&lt;br /&gt;
ファーストパスでは補正パラメータを記録してファイルに書き出します、または視覚分析のテスト動画を作成します。&lt;br /&gt;
&lt;br /&gt;
* 補正パラメータを記録してファイルだけに書き出す: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf -f null -}}&lt;br /&gt;
* 補正パラメータをファイルに書きだして、視覚分析用のテストビデオ &amp;quot;output-stab&amp;quot; を作成: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf output-stab}}&lt;br /&gt;
&lt;br /&gt;
===== セカンドパス =====&lt;br /&gt;
&lt;br /&gt;
セカンドパスではファーストパスで作成した補正パラメータを解析して、それを使って &amp;quot;output-stab_final&amp;quot; を生成します。セカンドパスで他のフィルターを適用することもでき、変換を繰り返す必要をなくして画質を最大限保つことができます。下のコマンドでは以下のオプションを使っています:&lt;br /&gt;
&lt;br /&gt;
* {{ic|unsharp}}: vid.stab の作者によって推奨されています。下の例ではデフォルトの 5:5:1.0:5:5:1.0 を使っています。&lt;br /&gt;
* {{ic|1=fade=t=in:st=0:d=4}}: 4秒間のフェードインをファイルの冒頭に挟みます。&lt;br /&gt;
* {{ic|1=fade=t=out:st=60:d=4}}: 動画の60秒目から4秒間のフェードアウトを挟みます。&lt;br /&gt;
* {{ic|-c:a pcm_s16le}}: XAVC-S コーデックは pcm_s16be で記録されロスレスの pcm_s16le に変換されます。&lt;br /&gt;
&lt;br /&gt;
 $  ffmpeg -i input -vf vidstabtransform=smoothing=30:interpol=bicubic:input=transforms.trf,unsharp,fade=t=in:st=0:d=4,fade=t=out:st=60:d=4 -c:v libx264 -tune film -preset veryslow -crf 8 -x264opts fast_pskip=0 -c:a pcm_s16le output-stab_final&lt;br /&gt;
&lt;br /&gt;
=== x265 ===&lt;br /&gt;
&lt;br /&gt;
以下の例は、パラメータを指定せずに libx265 を呼び出した場合のデフォルトを示します (Constant Rate Factor  エンコード):&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -i input -c:v libx265 -crf 28 -preset medium -c:a libvorbis output.mp4&lt;br /&gt;
&lt;br /&gt;
詳細は FFmpeg の [https://trac.ffmpeg.org/wiki/Encode/H.265 H.265/HEVC Video Encoding Guide] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== シングルパス MPEG-2 (ニアロスレス) ===&lt;br /&gt;
&lt;br /&gt;
DVD 標準のパラメータに FFmpeg を自動的に設定することができます。約 30 FPS の DVD [[Wikipedia:ja:MPEG-2|MPEG-2]] にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target ntsc-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
約 24 FPS の DVD MPEG-2 にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target film-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
=== 字幕 ===&lt;br /&gt;
&lt;br /&gt;
==== 抽出 ====&lt;br /&gt;
&lt;br /&gt;
MPEG-2 や Matroska などのコンテナファイルに埋め込まれた字幕を抽出して、SRT や SSA、WebVTT などの字幕形式に変換することができます。[https://trac.ffmpeg.org/wiki/ExtractSubtitles]&lt;br /&gt;
&lt;br /&gt;
* ファイルに字幕ストリームが含まれているか確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffprobe -hide_banner foo.mkv|&lt;br /&gt;
...&lt;br /&gt;
Stream #0:0(und): Video: h264 (High), yuv420p, 1920x800 [SAR 1:1 DAR 12:5], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)&lt;br /&gt;
  Metadata:&lt;br /&gt;
  CREATION_TIME   : 2012-06-05 05:04:15&lt;br /&gt;
  LANGUAGE        : und&lt;br /&gt;
Stream #0:1(und): Audio: aac, 44100 Hz, stereo, fltp (default)&lt;br /&gt;
 Metadata:&lt;br /&gt;
 CREATION_TIME   : 2012-06-05 05:10:34&lt;br /&gt;
 LANGUAGE        : und&lt;br /&gt;
 HANDLER_NAME    : GPAC ISO Audio Handler&lt;br /&gt;
&#039;&#039;&#039;Stream #0:2: Subtitle: ssa (default)&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mkv}} には SSA の字幕が埋め込まれており、別のファイルに抽出することが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv foo.ssa&lt;br /&gt;
&lt;br /&gt;
字幕を望ましい形式 (例として [[Wikipedia:ja:SubRip|SubRip]]) に保存するには {{ic|-c:s srt}} を追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -c:s srt foo.srt&lt;br /&gt;
&lt;br /&gt;
複数の字幕が存在する場合、{{ic|-map &#039;&#039;key&#039;&#039;:&#039;&#039;stream&#039;&#039;}} パラメータを使用して抽出するストリームを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -map 0:2 foo.ssa&lt;br /&gt;
&lt;br /&gt;
==== ハードサブ ====&lt;br /&gt;
&lt;br /&gt;
(FFmpeg wiki の記事の [https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo HowToBurnSubtitlesIntoVideo] に基づく説明)&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Hardsub|ハードサブ]]は動画に字幕を焼きこむことになります。ハードサブは無効化できず、言語の切り替えやフォントサイズのカスタマイズもできないため、推奨されない場合もあります。不明な場合は、ハードサブではなくソフトサブを使用してください。&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mpg}} に {{ic|foo.ssa}} の字幕を重ねるには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mpg -vf subtitles=foo.ssa out.mpg&lt;br /&gt;
&lt;br /&gt;
=== ボリュームゲイン ===&lt;br /&gt;
&lt;br /&gt;
ボリュームゲインは &#039;&#039;ffmpeg&#039;&#039; のフィルタ機能で変更できます。まず、{{ic|-af}} または {{ic|-filter:a}} を使って音声ストリームを選択し、次に、&#039;&#039;volume&#039;&#039; フィルタの後にそのストリームに対するゲインを指定してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;volume=1.5&#039;&#039;&#039; ouput.flac&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|1=volume=1.5}} によって 150% のボリュームゲインとなります。1.5 から 0.5 にすると、ボリュームが半分になります。ボリュームフィルタにはデシベル単位を渡すこともできます。{{ic|1=volume=3dB}} とすると、ボリュームが 3dB 増え、{{ic|1=volume=-3dB}} とすると 3dB 減ります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイルのボリュームゲインを倍にすることは、ボリュームを倍にすることと同じではありません。実験して正しいボリュームを見つける必要があります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;volumedetect&#039;&#039; フィルタを使用することで、ファイルの現在の平均ボリュームとピークボリュームを調べることができます: {{ic|ffmpeg -i input.flac -af volumedetect -f null -}}。そして、目標のレベルと現在のレベルとの差を &#039;&#039;volume&#039;&#039; フィルタに渡すことで、望みのレベルにすることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ボリュームノーマライゼーション ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loudnorm&#039;&#039; フィルタによるノーマライゼーションにより、平均ボリュームとピークボリュームを特定の値にすることができます。&#039;&#039;fmpeg&#039;&#039; のデフォルトの平均ラウドネス、ピークラウドネス、そしてレンジラウドネスの目標値 (それぞれ、-24 LUFS、-2 dBTP、7 LU) を使って、ファイルの知覚ラウドネスを正規化するには、以下のコマンドを使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;loudnorm&#039;&#039;&#039; output.flac&lt;br /&gt;
&lt;br /&gt;
別のラウドネスプロファイルを得るには、&#039;&#039;loudnorm&#039;&#039; フィルタのパラメータ {{ic|i}}、{{ic|tp}}、そして {{ic|lra}} を使って、それぞれ &#039;&#039;i&#039;&#039;ntegrated、&#039;&#039;t&#039;&#039;rue &#039;&#039;p&#039;&#039;eak、&#039;&#039;l&#039;&#039;oudness &#039;&#039;ra&#039;&#039;nge を指定してください。例えば、デフォルトよりも高い知覚ラウドネスにするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af loudnorm=i=-16:tp=-1.5:lra=11:print_format=summary output.flac&lt;br /&gt;
&lt;br /&gt;
この例では、オーディオファイルの入力ラウドネスと出力ラウドネスを表示するために {{ic|1=print_format=summary}} も追加しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|このフィルタはツーパスモードもサポートしています。最初の実行から測定されたラウドネス値を抽出し、その値を使って2回めの実行で線形ノーマライゼーションを行います。詳細は [https://ffmpeg.org/ffmpeg-filters.html#loudnorm ffmpeg loudnorm ドキュメント]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|ファイルの現在のラウドネスを調べるには、{{ic|1=ffmpeg -i input.flac -af loudnorm=print_format=summary -f null -}} を使ってください。}}&lt;br /&gt;
&lt;br /&gt;
=== 音声を抽出する ===&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg output.ext|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: ac3, 48000 Hz, stereo, s16, 384 kb/s&lt;br /&gt;
    Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s&lt;br /&gt;
    Stream #0.3: Audio: dts, 48000 Hz, 5.1 768 kb/s&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
多重化されている一番目の ({{ic|-map 0:1}}) [[Wikipedia:ja:ドルビーデジタル|AC-3]] でエンコードされた音声ストリームをファイルに抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;video&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
三番目の ({{ic|-map 0:3}}) [[Wikipedia:ja:デジタル・シアター・システムズ|DTS]] 音声ストリームをビットレートが 192 kb/s で[[Wikipedia:ja:サンプリングレート|サンプリングレート]]が 96000 Hz の [[Wikipedia:ja:AAC|AAC]] ファイルに変換する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:3 -acodec aac -b:a 192k -ar 96000 -vn &#039;&#039;output&#039;&#039;.aac&lt;br /&gt;
&lt;br /&gt;
{{ic|-vn}} は動画ストリームの処理を無効にします。&lt;br /&gt;
&lt;br /&gt;
時間を指定して音声ストリームを抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -ss 00:01:25 -t 00:00:05 -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;output&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
{{ic|-ss}} で開始時間を、{{ic|-t}} で長さを指定します。&lt;br /&gt;
&lt;br /&gt;
=== 音声を除去する ===&lt;br /&gt;
&lt;br /&gt;
# 一番目の動画ストリーム ({{ic|-map 0:0}}) と二番目の AC-3 音声ストリーム ({{ic|-map 0:2}}) をコピーします。&lt;br /&gt;
# AC-3 音声ストリームをビットレートが 128 kb/s でサンプリングレートが 48000 Hz の2チャンネルの MP3 に変換します。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:0 -map 0:2 -vcodec copy -acodec libmp3lame \&lt;br /&gt;
 -b:a 128k -ar 48000 -ac 2 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mkv|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|無駄な音声ストリームを削除することで余ったビットを画質の向上に割り当てることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ファイルを分割する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|copy}} コーデックを使うことでエンコーディングを変更せずにファイルの操作を行うことができます。例えば、次のコマンドであらゆるメディアファイルを簡単に2つに分けることが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -t 00:05:30 -c copy part1.ext -ss 00:05:30 -c copy part2.ext&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアビデオアクセラレーション ===&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/HWAccelIntro ハードウェアアクセラレーション API] を使用することで、エンコード/デコードのパフォーマンスを向上させることができます。しかし、特定の種類のコーデックしか使えませんし、場合によっては、ソフトウェアエンコードを使ったときと同じ結果が得られるとは限りません。&lt;br /&gt;
&lt;br /&gt;
==== VA-API ====&lt;br /&gt;
&lt;br /&gt;
Intel CPU ({{Pkg|intel-media-driver}} か {{Pkg|libva-intel-driver}} が必要) を使っている場合や、特定の AMD GPU でオープンソースの [[AMDGPU]] ドライバー ({{Pkg|mesa}} が必要) を使っている場合、[[VA-API]] を使用してエンコードとデコードができます。&lt;br /&gt;
&lt;br /&gt;
利用可能なパラメータとサポートされているプラットフォームに関する情報は、[https://trac.ffmpeg.org/wiki/Hardware/VAAPI FFmpeg のドキュメント]や [https://wiki.libav.org/Hardware/vaapi Libav のドキュメント]{{Dead link|2023|04|23|status=domain name not resolved}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
サポートされている H.264 コーデックを使用してエンコードする例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -threads 1 -i file.ext -vaapi_device /dev/dri/renderD128 -vcodec h264_vaapi -vf format=&#039;nv12|vaapi,hwupload&#039; output.mp4&lt;br /&gt;
&lt;br /&gt;
{{Note|通常、VA-API は、(FFmpeg パッケージの依存関係である) {{Pkg|libva}} に含まれるヘッダとライブラリが検出されれば、ビルド時に {{Pkg|ffmpeg}} の自動検出機能によって有効化されます。}}&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を以下に挙げます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf &#039;format=nv12,hwupload&#039; -c:v hevc_vaapi -f mp4 -rc_mode 1 -qp 25 output.mp4&lt;br /&gt;
&lt;br /&gt;
hevc_vaapi を使用する場合、-qp を 25 (視覚的に等価) からそれ以上 (28 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。h264_vaapi を使用する場合、18 (視覚的に等価) からそれ以上 (20 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。また、hevc_vaapi は h264_vaapi よりも 50% 高速にエンコードできるようです。&lt;br /&gt;
&lt;br /&gt;
==== NVIDIA NVENC/NVDEC ====&lt;br /&gt;
&lt;br /&gt;
プロプライエタリな [[NVIDIA]] ドライバを使用していて、{{Pkg|nvidia-utils}} パッケージがインストールされている場合、[[Wikipedia:Nvidia NVENC|NVENC]] と [[Wikipedia:Nvidia NVDEC|NVDEC]] をエンコード/デコードに使用できます。サポートされている GPU は [[Wikipedia:GeForce 600 series|600 シリーズ]]からです。詳細は [[ハードウェアビデオアクセラレーション#NVIDIA]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
テクニックが[https://web.archive.org/web/20190808223352/https://gist.github.com/Brainiarc7/8b471ff91319483cdb725f615908286e こちらの古い gist] に載っています。NVENC は [[CUDA]] と似ているため、ターミナルセッションからでも動作します。ハードウェア NVENC は Intel の VA-API エンコーダよりも数倍高速です。&lt;br /&gt;
&lt;br /&gt;
利用可能なオプションを表示するには以下のコマンドを実行してください ({{ic|hevc_nvenc}} も使えます):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -help encoder=h264_nvenc&lt;br /&gt;
&lt;br /&gt;
使用例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i source.ext -c:v h264_nvenc -rc constqp -qp 28 output.mkv&lt;br /&gt;
&lt;br /&gt;
==== Intel QuickSync (QSV) ====&lt;br /&gt;
&lt;br /&gt;
[https://www.intel.com/content/www/us/en/architecture-and-technology/quick-sync-video/quick-sync-video-general.html Intel® Quick Sync Video] は、[[Intel]] GPU のメディア処理機能を使用して高速なデコードとエンコードを行い、プロセッサが他のタスクを処理できるようにしてシステムの応答性を向上させます。&lt;br /&gt;
&lt;br /&gt;
これを使用するには、&#039;&#039;&#039;libmfx&#039;&#039;&#039; ランタイム実装がインストールされている必要があります。&#039;&#039;&#039;libmfx&#039;&#039;&#039; は、ハードウェアプラットフォームに基づいて実行時に実装をロードするディスパッチャライブラリです。&lt;br /&gt;
[[Wikipedia:ja:Broadwellマイクロアーキテクチャ|Broadwell]] から [[Wikipedia:ja:Rocket Lakeマイクロプロセッサ|Rocket Lake]] までの GPU で実行する場合、このライブラリは {{Pkg|intel-media-sdk}} をランタイム実装としてロードします。&lt;br /&gt;
[[Wikipedia:ja:Tiger Lakeマイクロアーキテクチャ|Tiger Lake]] 及びそれ以降の GPU においては、&#039;&#039;&#039;libmfx&#039;&#039;&#039; は {{Pkg|vpl-gpu-rt}} をロードします。[https://github.com/intel/vpl-gpu-rt#system-requirements vpl-gpu-rt system-requirements]も参照してください。&lt;br /&gt;
単一の Intel GPU を搭載しているシステムでは、ランタイム実装を変更したり選択したりできません。対応する実装は、ハードウェアに応じてインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
上記のランタイムをインストールしないと、以下のようなエラーが発生します:&lt;br /&gt;
&lt;br /&gt;
 [AVHWDeviceContext @ 0x558283838c80] Error initializing an MFX session: -3.&lt;br /&gt;
 Device creation failed: -1313558101.&lt;br /&gt;
&lt;br /&gt;
QuickSync の使用方法は [https://trac.ffmpeg.org/wiki/Hardware/QuickSync FFmpeg Wiki] で説明されています。&#039;&#039;libmfx&#039;&#039; を直接使わずに &#039;&#039;iHD&#039;&#039; ドライバか &#039;&#039;i965&#039;&#039; ドライバで [[VA-API]] [https://trac.ffmpeg.org/wiki/Hardware/VAAPI] を使用することが推奨されます。エンコード例は FFmpeg Wiki の &#039;&#039;Hybrid transcode&#039;&#039; セクションを、ドライバに関する指示は [[ハードウェアビデオアクセラレーション#VA-API の設定]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== AMD AMF ====&lt;br /&gt;
&lt;br /&gt;
AMD は、[[AMDGPU PRO]] プロプライエタリパッケージを使用して AMD Video Coding Engine (GPU エンコード) によって Linux で H264 のみのビデオエンコードを行うためのサポートを追加し、ffmpeg は AMF ビデオエンコードのサポートを追加しました。なので、h264_amf ビデオエンコーダを使ってエンコードするには、{{AUR|amf-amdgpu-pro}} が必要です。[[AMDGPU PRO]] パッケージによって提供されている ICD ファイルを環境変数でリンクする必要がある場合があります。そうしないと、ffmpeg はオープンな AMDGPU の ICD ファイルを使用してしまい、このビデオエンコーダを使用できません。エンコードを行うコマンドの例は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mkv -c:v h264_amf -rc 1 -b:v 8M h264_amf_8M.mp4&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を挙げましょう:&lt;br /&gt;
&lt;br /&gt;
 $ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mp4 -c:v h264_amf -f mp4 -rc 0 -qp_b 22 -qp_i 22 -qp_p 22 -quality 2 output.mp4&lt;br /&gt;
&lt;br /&gt;
3つの -qp_(b|i|p) を調整してください。18 にすると視覚的に等価で、22 から非常に小さな視覚的な損失が発生し始めます。&lt;br /&gt;
&lt;br /&gt;
=== アニメーション GIF ===&lt;br /&gt;
&lt;br /&gt;
一般に、アニメーション GIF は、画像品質が悪く、ファイルサイズが比較的大きく、音声サポートもないので、動画フォーマットとして素晴らしい選択肢とは言えません。しかし、ウェブでは依然として頻繁に使用されています。以下のコマンドを使うことで、動画をアニメーション GIF に変換することができます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.mp4 -vf &amp;quot;fps=10,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse&amp;quot; -loop -1 output.gif&lt;br /&gt;
&lt;br /&gt;
パレットフィルタを使って高品質な GIF を生成する方法については、https://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html を見てください。&lt;br /&gt;
&lt;br /&gt;
== プリセットファイル ==&lt;br /&gt;
&lt;br /&gt;
デフォルトの[https://ffmpeg.org/ffmpeg.html#Preset-files プリセットファイル]で {{ic|~/.ffmpeg}} を作成する:&lt;br /&gt;
&lt;br /&gt;
 $ cp -iR /usr/share/ffmpeg ~/.ffmpeg&lt;br /&gt;
&lt;br /&gt;
新しいファイルを作成したりデフォルトのプリセットファイルを編集する:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.ffmpeg/libavcodec-vhq.ffpreset|2=&lt;br /&gt;
vtag=DX50&lt;br /&gt;
mbd=2&lt;br /&gt;
trellis=2&lt;br /&gt;
flags=+cbp+mv0&lt;br /&gt;
pre_dia_size=4&lt;br /&gt;
dia_size=4&lt;br /&gt;
precmp=4&lt;br /&gt;
cmp=4&lt;br /&gt;
subcmp=4&lt;br /&gt;
preme=2&lt;br /&gt;
qns=2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== プリセットファイルを使う ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vcodec}} の宣言の後に {{ic|-vpre}} オプションを加えて下さい。&lt;br /&gt;
&lt;br /&gt;
==== libavcodec-vhq.ffpreset ====&lt;br /&gt;
&lt;br /&gt;
* {{ic|libavcodec}} &#039;&#039;&#039;=&#039;&#039;&#039; vcodec/acodec の名前&lt;br /&gt;
* {{ic|vhq}} &#039;&#039;&#039;=&#039;&#039;&#039; 使用するプリセットの名前&lt;br /&gt;
* {{ic|ffpreset}} &#039;&#039;&#039;=&#039;&#039;&#039; FFmpeg プリセットの拡張子&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 出力を簡略化 ===&lt;br /&gt;
&lt;br /&gt;
以下のオプションを組み合わせて使うことで、出力の詳細さを好きなレベルまで減らすことができます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|-hide_banner}}: 著作権表示、ビルドオプション、そしてライブラリのバージョンが表示されなくなります&lt;br /&gt;
* {{ic|-loglevel}}: ログレベルを調整します (微調整オプションが利用できます)。例: {{ic|-loglevel warning}}&lt;br /&gt;
* {{ic|-nostats}}: エンコードの進捗/統計が表示されなくなります&lt;br /&gt;
&lt;br /&gt;
=== 動画の再生時間を出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 file.ext&lt;br /&gt;
&lt;br /&gt;
=== ストリーム情報を JSON で出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -v quiet -print_format json -show_format -show_streams file.ext&lt;br /&gt;
&lt;br /&gt;
=== X フレームごとに動画のスクリーンショットを作成する ===&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -an -s 319x180 -vf fps=1/&#039;&#039;&#039;100&#039;&#039;&#039; -qscale:v 75 %03d.jpg&lt;br /&gt;
&lt;br /&gt;
=== メタデータの変更 ===&lt;br /&gt;
&lt;br /&gt;
メタデータは直接変更することはできません。メタデータをエクスポートして変更し、新しいファイルにマージする必要があります。&lt;br /&gt;
&lt;br /&gt;
既存の（グローバル）メタデータをテキストファイルに抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;song.mp3&#039; -f ffmetadata song_metadata.txt&lt;br /&gt;
&lt;br /&gt;
テキストファイルからメタデータを含む新しいファイルを作成する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;song.mp3&#039; -f ffmetadata -i new_metadata.txt -map_metadata 1 -id3v2_version 4 song_new.mp3&lt;br /&gt;
&lt;br /&gt;
{{ic|-map_metadata 1}} は、ffmpeg に 2 番目のファイル (インデックスは 0 から始まる) のメタデータを使用するように指示します。&lt;br /&gt;
&lt;br /&gt;
グローバル メタデータの他に、各ストリームは独自のメタデータを持つこともできます。たとえば、{{ic|-map_metadata:s:v 0:s:v}} および {{ic|-map_metadata:s:a 0:s:a}} を使用してエクスポートします。&lt;br /&gt;
&lt;br /&gt;
{{ic|ffprobe}} は({{Pkg|ffmpeg}} パッケージからも同様に) 、default、compact/csv、flat、ini、json、xml など、さらに多くのエクスポート形式を提供します。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://ffmpeg.org/ffmpeg.html FFmpeg documentation] - 公式ドキュメント&lt;br /&gt;
* [https://trac.ffmpeg.org/wiki FFmpeg Wiki] - 公式 wiki&lt;br /&gt;
* [http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-x264.html Encoding with the x264 codec] - MEncoder ドキュメント&lt;br /&gt;
* [https://avidemux.org/admWiki/doku.php?id=tutorial:h.264 H.264 encoding guide] - Avidemux wiki&lt;br /&gt;
* [http://howto-pages.org/ffmpeg/ Using FFmpeg] - Linux how to pages&lt;br /&gt;
* サポートしている音声・動画ストリームの[https://ffmpeg.org/general.html#Supported-File-Formats_002c-Codecs-or-Features リスト]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|FFmpeg|2023-07-23|776189}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41031</id>
		<title>FFmpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41031"/>
		<updated>2025-10-25T09:07:41Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* 参照 */ リンク修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:オーディオ]]&lt;br /&gt;
[[Category:ビデオ]]&lt;br /&gt;
[[en:FFmpeg]]&lt;br /&gt;
[[zh-hans:FFmpeg]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Flac を Mp3 に変換#FFmpeg を使う}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
プロジェクトの[https://www.ffmpeg.org/ ホームページ] より:&lt;br /&gt;
:FFmpeg は、音声と動画を記録、変換、そしてストリーミングするための完全でクロスプラットフォームなソリューションです。先進的な音声・動画コーデックライブラリである libavcodec が含まれています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;libav&#039;&#039; や &#039;&#039;avconv&#039;&#039; など FFmpeg のフォークも存在しています。FFmpeg の現在の状態やプロジェクトの違いについては [https://blog.pkh.me/p/13-the-ffmpeg-libav-situation.html The FFmpeg/Libav situation] を読んでください。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|ffmpeg}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
開発版は {{AUR|ffmpeg-git}} パッケージでインストールできます。可能な限り多くのオプション機能を有効化してビルドする {{AUR|ffmpeg-full}} も存在します。&lt;br /&gt;
&lt;br /&gt;
== エンコードの例 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* パラメータを正しい順序で指定することが重要です (例: input、video、filters、audio、output)。順序を間違うと、パラメータがスキップされたり、FFmpeg が実行されなかったりする場合があります。&lt;br /&gt;
* FFmpeg は、使用できる CPU スレッド数を自動的に選択するはずです。しかし、パラメータ {{ic|-threads &#039;&#039;number&#039;&#039;}} を使って、使用できるスレッド数を強制したほうが良い場合もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki#Encoding FFmpeg のエンコード wiki] と {{man|1|ffmpeg|EXAMPLES}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== スクリーンキャプチャ ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#x11grab x11grab] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の仮想デバイスが含まれており、ユーザのディスプレイ全体と音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
スクリーンショットを撮って {{ic|screen.png}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -i $DISPLAY -vframes 1 screen.png&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} はキャプチャする領域のサイズを指定します。&lt;br /&gt;
&lt;br /&gt;
ロスレスエンコードで音声なしのスクリーンキャストを撮って {{ic|screen.mkv}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -c:v ffvhuff screen.mkv&lt;br /&gt;
&lt;br /&gt;
ここでは、Huffyuv コーデックが使用されます。このコーデックは高速ですが、ファイルサイズが大きくなります。&lt;br /&gt;
&lt;br /&gt;
ロッシーエンコードで音声ありのスクリーンキャストを撮って {{ic|screen.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac screen.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
動画ストリームをファイルとして保存する必要はないが、画面共有のために仮想ウェブカメラとして使う場合、[[v4l2loopback#FFmpeg を使って X11 をキャストする]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Desktop#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウェブカメラの録画 ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#video4linux2_002c-v4l2 video4linux2] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の入力デバイスが含まれています。これらにより、ウェブカメラと音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドは、ウェブカメラから音声無しで動画を録画し {{ic|webcam.mp4}} に保存します。ウェブカメラが {{ic|/dev/video0}} として正しく認識されていると仮定します:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -c:v libx264 -preset ultrafast webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} は、ウェブカメラからの許可されるイメージサイズの最大値を指定します。&lt;br /&gt;
&lt;br /&gt;
上記のコマンドは無音動画を出力します。音声ありでウェブカメラから動画を録画し {{ic|webcam.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Webcam#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== VOB から他のコンテナに ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:VOB|VOB]] ファイルを一つのストリームに連結して MPEG-2 にするには:&lt;br /&gt;
&lt;br /&gt;
 $ cat f0.VOB f1.VOB f2.VOB | ffmpeg -i - out.mp2&lt;br /&gt;
&lt;br /&gt;
=== x264 ===&lt;br /&gt;
&lt;br /&gt;
==== ロスレス ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットは最速のエンコードをするので素早い録画をしたいときに有用です (スクリーンキャストなど):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset ultrafast -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットの反対は &#039;&#039;veryslow&#039;&#039; で、&#039;&#039;ultrafast&#039;&#039; よりもエンコードが遅いかわりに出力するファイルのサイズが小さくなります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset veryslow -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
どちらでも出力のクオリティは同じです。&lt;br /&gt;
&lt;br /&gt;
{{Tip|あなたの使っているコンピュータがリアルタイムで {{ic|-preset superfast}} を処理できる場合、{{ic|-preset ultrafast}} ではなく {{ic|-preset superfast}} を使用してください。Ultrafast は superfast よりも圧縮率が&#039;&#039;かなり&#039;&#039;落ちます。}}&lt;br /&gt;
&lt;br /&gt;
==== Constant rate factor ====&lt;br /&gt;
&lt;br /&gt;
出力する品質を指定したいときに使います。一般的に使われているのは最高の {{ic|-crf}} 値で、これでも許容範囲内の画質になります。値が低いほど画質は高くなります。0はロスレス、18は見た目がロスレス、そして23がデフォルトの値です。賢明な値は18から28の範囲になります。一番遅い {{ic|-preset}} を使うなら辛抱する必要があります。詳しくは [https://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuide x264 Encoding Guide] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039; -c:v libx264 -tune film -preset slow -crf 22 -x264opts fast_pskip=0 -c:a libmp3lame -aq 4 &#039;&#039;output&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{ic|-tune}} オプションを使うことで[https://forum.doom9.org/showthread.php?t=149394 エンコードされるメディアの中身とタイプにあった設定にすることができます]。&lt;br /&gt;
&lt;br /&gt;
==== ツーパス (超高品質) ====&lt;br /&gt;
&lt;br /&gt;
マルチパスの始めは動画の統計が記録されるため、音声が無効化されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -an -vcodec libx264 -pass 1 -preset veryslow \&lt;br /&gt;
 -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 -f rawvideo -y /dev/null&lt;br /&gt;
&lt;br /&gt;
コンテナの形式は出力ファイルの拡張子 ({{ic|.mkv}}) から自動的に検出して変換されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -acodec aac -b:a 256k -ar 96000 -vcodec libx264 \&lt;br /&gt;
 -pass 2 -preset veryslow -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
==== 動画の手ブレ補正 ====&lt;br /&gt;
&lt;br /&gt;
vbid.stab プラグインを使ってツーパスで手ブレ補正 (ビデオ安定化) を行います。&lt;br /&gt;
&lt;br /&gt;
===== ファーストパス =====&lt;br /&gt;
&lt;br /&gt;
ファーストパスでは補正パラメータを記録してファイルに書き出します、または視覚分析のテスト動画を作成します。&lt;br /&gt;
&lt;br /&gt;
* 補正パラメータを記録してファイルだけに書き出す: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf -f null -}}&lt;br /&gt;
* 補正パラメータをファイルに書きだして、視覚分析用のテストビデオ &amp;quot;output-stab&amp;quot; を作成: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf output-stab}}&lt;br /&gt;
&lt;br /&gt;
===== セカンドパス =====&lt;br /&gt;
&lt;br /&gt;
セカンドパスではファーストパスで作成した補正パラメータを解析して、それを使って &amp;quot;output-stab_final&amp;quot; を生成します。セカンドパスで他のフィルターを適用することもでき、変換を繰り返す必要をなくして画質を最大限保つことができます。下のコマンドでは以下のオプションを使っています:&lt;br /&gt;
&lt;br /&gt;
* {{ic|unsharp}}: vid.stab の作者によって推奨されています。下の例ではデフォルトの 5:5:1.0:5:5:1.0 を使っています。&lt;br /&gt;
* {{ic|1=fade=t=in:st=0:d=4}}: 4秒間のフェードインをファイルの冒頭に挟みます。&lt;br /&gt;
* {{ic|1=fade=t=out:st=60:d=4}}: 動画の60秒目から4秒間のフェードアウトを挟みます。&lt;br /&gt;
* {{ic|-c:a pcm_s16le}}: XAVC-S コーデックは pcm_s16be で記録されロスレスの pcm_s16le に変換されます。&lt;br /&gt;
&lt;br /&gt;
 $  ffmpeg -i input -vf vidstabtransform=smoothing=30:interpol=bicubic:input=transforms.trf,unsharp,fade=t=in:st=0:d=4,fade=t=out:st=60:d=4 -c:v libx264 -tune film -preset veryslow -crf 8 -x264opts fast_pskip=0 -c:a pcm_s16le output-stab_final&lt;br /&gt;
&lt;br /&gt;
=== x265 ===&lt;br /&gt;
&lt;br /&gt;
以下の例は、パラメータを指定せずに libx265 を呼び出した場合のデフォルトを示します (Constant Rate Factor  エンコード):&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -i input -c:v libx265 -crf 28 -preset medium -c:a libvorbis output.mp4&lt;br /&gt;
&lt;br /&gt;
詳細は FFmpeg の [https://trac.ffmpeg.org/wiki/Encode/H.265 H.265/HEVC Video Encoding Guide] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== シングルパス MPEG-2 (ニアロスレス) ===&lt;br /&gt;
&lt;br /&gt;
DVD 標準のパラメータに FFmpeg を自動的に設定することができます。約 30 FPS の DVD [[Wikipedia:ja:MPEG-2|MPEG-2]] にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target ntsc-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
約 24 FPS の DVD MPEG-2 にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target film-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
=== 字幕 ===&lt;br /&gt;
&lt;br /&gt;
==== 抽出 ====&lt;br /&gt;
&lt;br /&gt;
MPEG-2 や Matroska などのコンテナファイルに埋め込まれた字幕を抽出して、SRT や SSA、WebVTT などの字幕形式に変換することができます。[https://trac.ffmpeg.org/wiki/ExtractSubtitles]&lt;br /&gt;
&lt;br /&gt;
* ファイルに字幕ストリームが含まれているか確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffprobe -hide_banner foo.mkv|&lt;br /&gt;
...&lt;br /&gt;
Stream #0:0(und): Video: h264 (High), yuv420p, 1920x800 [SAR 1:1 DAR 12:5], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)&lt;br /&gt;
  Metadata:&lt;br /&gt;
  CREATION_TIME   : 2012-06-05 05:04:15&lt;br /&gt;
  LANGUAGE        : und&lt;br /&gt;
Stream #0:1(und): Audio: aac, 44100 Hz, stereo, fltp (default)&lt;br /&gt;
 Metadata:&lt;br /&gt;
 CREATION_TIME   : 2012-06-05 05:10:34&lt;br /&gt;
 LANGUAGE        : und&lt;br /&gt;
 HANDLER_NAME    : GPAC ISO Audio Handler&lt;br /&gt;
&#039;&#039;&#039;Stream #0:2: Subtitle: ssa (default)&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mkv}} には SSA の字幕が埋め込まれており、別のファイルに抽出することが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv foo.ssa&lt;br /&gt;
&lt;br /&gt;
字幕を望ましい形式 (例として [[Wikipedia:ja:SubRip|SubRip]]) に保存するには {{ic|-c:s srt}} を追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -c:s srt foo.srt&lt;br /&gt;
&lt;br /&gt;
複数の字幕が存在する場合、{{ic|-map &#039;&#039;key&#039;&#039;:&#039;&#039;stream&#039;&#039;}} パラメータを使用して抽出するストリームを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -map 0:2 foo.ssa&lt;br /&gt;
&lt;br /&gt;
==== ハードサブ ====&lt;br /&gt;
&lt;br /&gt;
(FFmpeg wiki の記事の [https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo HowToBurnSubtitlesIntoVideo] に基づく説明)&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Hardsub|ハードサブ]]は動画に字幕を焼きこむことになります。ハードサブは無効にすることが不可能で、言語の切り替えなどもできません。&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mpg}} に {{ic|foo.ssa}} の字幕を重ねるには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mpg -vf subtitles=foo.ssa out.mpg&lt;br /&gt;
&lt;br /&gt;
=== ボリュームゲイン ===&lt;br /&gt;
&lt;br /&gt;
ボリュームゲインは &#039;&#039;ffmpeg&#039;&#039; のフィルタ機能で変更できます。まず、{{ic|-af}} または {{ic|-filter:a}} を使って音声ストリームを選択し、次に、&#039;&#039;volume&#039;&#039; フィルタの後にそのストリームに対するゲインを指定してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;volume=1.5&#039;&#039;&#039; ouput.flac&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|1=volume=1.5}} によって 150% のボリュームゲインとなります。1.5 から 0.5 にすると、ボリュームが半分になります。ボリュームフィルタにはデシベル単位を渡すこともできます。{{ic|1=volume=3dB}} とすると、ボリュームが 3dB 増え、{{ic|1=volume=-3dB}} とすると 3dB 減ります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイルのボリュームゲインを倍にすることは、ボリュームを倍にすることと同じではありません。実験して正しいボリュームを見つける必要があります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;volumedetect&#039;&#039; フィルタを使用することで、ファイルの現在の平均ボリュームとピークボリュームを調べることができます: {{ic|ffmpeg -i input.flac -af volumedetect -f null -}}。そして、目標のレベルと現在のレベルとの差を &#039;&#039;volume&#039;&#039; フィルタに渡すことで、望みのレベルにすることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ボリュームノーマライゼーション ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loudnorm&#039;&#039; フィルタによるノーマライゼーションにより、平均ボリュームとピークボリュームを特定の値にすることができます。&#039;&#039;fmpeg&#039;&#039; のデフォルトの平均ラウドネス、ピークラウドネス、そしてレンジラウドネスの目標値 (それぞれ、-24 LUFS、-2 dBTP、7 LU) を使って、ファイルの知覚ラウドネスを正規化するには、以下のコマンドを使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;loudnorm&#039;&#039;&#039; output.flac&lt;br /&gt;
&lt;br /&gt;
別のラウドネスプロファイルを得るには、&#039;&#039;loudnorm&#039;&#039; フィルタのパラメータ {{ic|i}}、{{ic|tp}}、そして {{ic|lra}} を使って、それぞれ &#039;&#039;i&#039;&#039;ntegrated、&#039;&#039;t&#039;&#039;rue &#039;&#039;p&#039;&#039;eak、&#039;&#039;l&#039;&#039;oudness &#039;&#039;ra&#039;&#039;nge を指定してください。例えば、デフォルトよりも高い知覚ラウドネスにするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af loudnorm=i=-16:tp=-1.5:lra=11:print_format=summary output.flac&lt;br /&gt;
&lt;br /&gt;
この例では、オーディオファイルの入力ラウドネスと出力ラウドネスを表示するために {{ic|1=print_format=summary}} も追加しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|このフィルタはツーパスモードもサポートしています。最初の実行から測定されたラウドネス値を抽出し、その値を使って2回めの実行で線形ノーマライゼーションを行います。詳細は [https://ffmpeg.org/ffmpeg-filters.html#loudnorm ffmpeg loudnorm ドキュメント]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|ファイルの現在のラウドネスを調べるには、{{ic|1=ffmpeg -i input.flac -af loudnorm=print_format=summary -f null -}} を使ってください。}}&lt;br /&gt;
&lt;br /&gt;
=== 音声を抽出する ===&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg output.ext|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: ac3, 48000 Hz, stereo, s16, 384 kb/s&lt;br /&gt;
    Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s&lt;br /&gt;
    Stream #0.3: Audio: dts, 48000 Hz, 5.1 768 kb/s&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
多重化されている一番目の ({{ic|-map 0:1}}) [[Wikipedia:ja:ドルビーデジタル|AC-3]] でエンコードされた音声ストリームをファイルに抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;video&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
三番目の ({{ic|-map 0:3}}) [[Wikipedia:ja:デジタル・シアター・システムズ|DTS]] 音声ストリームをビットレートが 192 kb/s で[[Wikipedia:ja:サンプリングレート|サンプリングレート]]が 96000 Hz の [[Wikipedia:ja:AAC|AAC]] ファイルに変換する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:3 -acodec aac -b:a 192k -ar 96000 -vn &#039;&#039;output&#039;&#039;.aac&lt;br /&gt;
&lt;br /&gt;
{{ic|-vn}} は動画ストリームの処理を無効にします。&lt;br /&gt;
&lt;br /&gt;
時間を指定して音声ストリームを抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -ss 00:01:25 -t 00:00:05 -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;output&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
{{ic|-ss}} で開始時間を、{{ic|-t}} で長さを指定します。&lt;br /&gt;
&lt;br /&gt;
=== 音声を除去する ===&lt;br /&gt;
&lt;br /&gt;
# 一番目の動画ストリーム ({{ic|-map 0:0}}) と二番目の AC-3 音声ストリーム ({{ic|-map 0:2}}) をコピーします。&lt;br /&gt;
# AC-3 音声ストリームをビットレートが 128 kb/s でサンプリングレートが 48000 Hz の2チャンネルの MP3 に変換します。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:0 -map 0:2 -vcodec copy -acodec libmp3lame \&lt;br /&gt;
 -b:a 128k -ar 48000 -ac 2 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mkv|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|無駄な音声ストリームを削除することで余ったビットを画質の向上に割り当てることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ファイルを分割する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|copy}} コーデックを使うことでエンコーディングを変更せずにファイルの操作を行うことができます。例えば、次のコマンドであらゆるメディアファイルを簡単に2つに分けることが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -t 00:05:30 -c copy part1.ext -ss 00:05:30 -c copy part2.ext&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアビデオアクセラレーション ===&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/HWAccelIntro ハードウェアアクセラレーション API] を使用することで、エンコード/デコードのパフォーマンスを向上させることができます。しかし、特定の種類のコーデックしか使えませんし、場合によっては、ソフトウェアエンコードを使ったときと同じ結果が得られるとは限りません。&lt;br /&gt;
&lt;br /&gt;
==== VA-API ====&lt;br /&gt;
&lt;br /&gt;
Intel CPU ({{Pkg|intel-media-driver}} か {{Pkg|libva-intel-driver}} が必要) を使っている場合や、特定の AMD GPU でオープンソースの [[AMDGPU]] ドライバー ({{Pkg|mesa}} が必要) を使っている場合、[[VA-API]] を使用してエンコードとデコードができます。&lt;br /&gt;
&lt;br /&gt;
利用可能なパラメータとサポートされているプラットフォームに関する情報は、[https://trac.ffmpeg.org/wiki/Hardware/VAAPI FFmpeg のドキュメント]や [https://wiki.libav.org/Hardware/vaapi Libav のドキュメント]{{Dead link|2023|04|23|status=domain name not resolved}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
サポートされている H.264 コーデックを使用してエンコードする例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -threads 1 -i file.ext -vaapi_device /dev/dri/renderD128 -vcodec h264_vaapi -vf format=&#039;nv12|vaapi,hwupload&#039; output.mp4&lt;br /&gt;
&lt;br /&gt;
{{Note|通常、VA-API は、(FFmpeg パッケージの依存関係である) {{Pkg|libva}} に含まれるヘッダとライブラリが検出されれば、ビルド時に {{Pkg|ffmpeg}} の自動検出機能によって有効化されます。}}&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を以下に挙げます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf &#039;format=nv12,hwupload&#039; -c:v hevc_vaapi -f mp4 -rc_mode 1 -qp 25 output.mp4&lt;br /&gt;
&lt;br /&gt;
hevc_vaapi を使用する場合、-qp を 25 (視覚的に等価) からそれ以上 (28 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。h264_vaapi を使用する場合、18 (視覚的に等価) からそれ以上 (20 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。また、hevc_vaapi は h264_vaapi よりも 50% 高速にエンコードできるようです。&lt;br /&gt;
&lt;br /&gt;
==== NVIDIA NVENC/NVDEC ====&lt;br /&gt;
&lt;br /&gt;
プロプライエタリな [[NVIDIA]] ドライバを使用していて、{{Pkg|nvidia-utils}} パッケージがインストールされている場合、[[Wikipedia:Nvidia NVENC|NVENC]] と [[Wikipedia:Nvidia NVDEC|NVDEC]] をエンコード/デコードに使用できます。サポートされている GPU は [[Wikipedia:GeForce 600 series|600 シリーズ]]からです。詳細は [[ハードウェアビデオアクセラレーション#NVIDIA]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
テクニックが[https://web.archive.org/web/20190808223352/https://gist.github.com/Brainiarc7/8b471ff91319483cdb725f615908286e こちらの古い gist] に載っています。NVENC は [[CUDA]] と似ているため、ターミナルセッションからでも動作します。ハードウェア NVENC は Intel の VA-API エンコーダよりも数倍高速です。&lt;br /&gt;
&lt;br /&gt;
利用可能なオプションを表示するには以下のコマンドを実行してください ({{ic|hevc_nvenc}} も使えます):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -help encoder=h264_nvenc&lt;br /&gt;
&lt;br /&gt;
使用例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i source.ext -c:v h264_nvenc -rc constqp -qp 28 output.mkv&lt;br /&gt;
&lt;br /&gt;
==== Intel QuickSync (QSV) ====&lt;br /&gt;
&lt;br /&gt;
[https://www.intel.com/content/www/us/en/architecture-and-technology/quick-sync-video/quick-sync-video-general.html Intel® Quick Sync Video] は、[[Intel]] GPU のメディア処理機能を使用して高速なデコードとエンコードを行い、プロセッサが他のタスクを処理できるようにしてシステムの応答性を向上させます。&lt;br /&gt;
&lt;br /&gt;
これを使用するには、&#039;&#039;&#039;libmfx&#039;&#039;&#039; ランタイム実装がインストールされている必要があります。&#039;&#039;&#039;libmfx&#039;&#039;&#039; は、ハードウェアプラットフォームに基づいて実行時に実装をロードするディスパッチャライブラリです。&lt;br /&gt;
[[Wikipedia:ja:Broadwellマイクロアーキテクチャ|Broadwell]] から [[Wikipedia:ja:Rocket Lakeマイクロプロセッサ|Rocket Lake]] までの GPU で実行する場合、このライブラリは {{Pkg|intel-media-sdk}} をランタイム実装としてロードします。&lt;br /&gt;
[[Wikipedia:ja:Tiger Lakeマイクロアーキテクチャ|Tiger Lake]] 及びそれ以降の GPU においては、&#039;&#039;&#039;libmfx&#039;&#039;&#039; は {{Pkg|vpl-gpu-rt}} をロードします。[https://github.com/intel/vpl-gpu-rt#system-requirements vpl-gpu-rt system-requirements]も参照してください。&lt;br /&gt;
単一の Intel GPU を搭載しているシステムでは、ランタイム実装を変更したり選択したりできません。対応する実装は、ハードウェアに応じてインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
上記のランタイムをインストールしないと、以下のようなエラーが発生します:&lt;br /&gt;
&lt;br /&gt;
 [AVHWDeviceContext @ 0x558283838c80] Error initializing an MFX session: -3.&lt;br /&gt;
 Device creation failed: -1313558101.&lt;br /&gt;
&lt;br /&gt;
QuickSync の使用方法は [https://trac.ffmpeg.org/wiki/Hardware/QuickSync FFmpeg Wiki] で説明されています。&#039;&#039;libmfx&#039;&#039; を直接使わずに &#039;&#039;iHD&#039;&#039; ドライバか &#039;&#039;i965&#039;&#039; ドライバで [[VA-API]] [https://trac.ffmpeg.org/wiki/Hardware/VAAPI] を使用することが推奨されます。エンコード例は FFmpeg Wiki の &#039;&#039;Hybrid transcode&#039;&#039; セクションを、ドライバに関する指示は [[ハードウェアビデオアクセラレーション#VA-API の設定]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== AMD AMF ====&lt;br /&gt;
&lt;br /&gt;
AMD は、[[AMDGPU PRO]] プロプライエタリパッケージを使用して AMD Video Coding Engine (GPU エンコード) によって Linux で H264 のみのビデオエンコードを行うためのサポートを追加し、ffmpeg は AMF ビデオエンコードのサポートを追加しました。なので、h264_amf ビデオエンコーダを使ってエンコードするには、{{AUR|amf-amdgpu-pro}} が必要です。[[AMDGPU PRO]] パッケージによって提供されている ICD ファイルを環境変数でリンクする必要がある場合があります。そうしないと、ffmpeg はオープンな AMDGPU の ICD ファイルを使用してしまい、このビデオエンコーダを使用できません。エンコードを行うコマンドの例は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mkv -c:v h264_amf -rc 1 -b:v 8M h264_amf_8M.mp4&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を挙げましょう:&lt;br /&gt;
&lt;br /&gt;
 $ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mp4 -c:v h264_amf -f mp4 -rc 0 -qp_b 22 -qp_i 22 -qp_p 22 -quality 2 output.mp4&lt;br /&gt;
&lt;br /&gt;
3つの -qp_(b|i|p) を調整してください。18 にすると視覚的に等価で、22 から非常に小さな視覚的な損失が発生し始めます。&lt;br /&gt;
&lt;br /&gt;
=== アニメーション GIF ===&lt;br /&gt;
&lt;br /&gt;
一般に、アニメーション GIF は、画像品質が悪く、ファイルサイズが比較的大きく、音声サポートもないので、動画フォーマットとして素晴らしい選択肢とは言えません。しかし、ウェブでは依然として頻繁に使用されています。以下のコマンドを使うことで、動画をアニメーション GIF に変換することができます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.mp4 -vf &amp;quot;fps=10,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse&amp;quot; -loop -1 output.gif&lt;br /&gt;
&lt;br /&gt;
パレットフィルタを使って高品質な GIF を生成する方法については、https://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html を見てください。&lt;br /&gt;
&lt;br /&gt;
== プリセットファイル ==&lt;br /&gt;
&lt;br /&gt;
デフォルトの[https://ffmpeg.org/ffmpeg.html#Preset-files プリセットファイル]で {{ic|~/.ffmpeg}} を作成する:&lt;br /&gt;
&lt;br /&gt;
 $ cp -iR /usr/share/ffmpeg ~/.ffmpeg&lt;br /&gt;
&lt;br /&gt;
新しいファイルを作成したりデフォルトのプリセットファイルを編集する:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.ffmpeg/libavcodec-vhq.ffpreset|2=&lt;br /&gt;
vtag=DX50&lt;br /&gt;
mbd=2&lt;br /&gt;
trellis=2&lt;br /&gt;
flags=+cbp+mv0&lt;br /&gt;
pre_dia_size=4&lt;br /&gt;
dia_size=4&lt;br /&gt;
precmp=4&lt;br /&gt;
cmp=4&lt;br /&gt;
subcmp=4&lt;br /&gt;
preme=2&lt;br /&gt;
qns=2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== プリセットファイルを使う ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vcodec}} の宣言の後に {{ic|-vpre}} オプションを加えて下さい。&lt;br /&gt;
&lt;br /&gt;
==== libavcodec-vhq.ffpreset ====&lt;br /&gt;
&lt;br /&gt;
* {{ic|libavcodec}} &#039;&#039;&#039;=&#039;&#039;&#039; vcodec/acodec の名前&lt;br /&gt;
* {{ic|vhq}} &#039;&#039;&#039;=&#039;&#039;&#039; 使用するプリセットの名前&lt;br /&gt;
* {{ic|ffpreset}} &#039;&#039;&#039;=&#039;&#039;&#039; FFmpeg プリセットの拡張子&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 出力を簡略化 ===&lt;br /&gt;
&lt;br /&gt;
以下のオプションを組み合わせて使うことで、出力の詳細さを好きなレベルまで減らすことができます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|-hide_banner}}: 著作権表示、ビルドオプション、そしてライブラリのバージョンが表示されなくなります&lt;br /&gt;
* {{ic|-loglevel}}: ログレベルを調整します (微調整オプションが利用できます)。例: {{ic|-loglevel warning}}&lt;br /&gt;
* {{ic|-nostats}}: エンコードの進捗/統計が表示されなくなります&lt;br /&gt;
&lt;br /&gt;
=== 動画の再生時間を出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 file.ext&lt;br /&gt;
&lt;br /&gt;
=== ストリーム情報を JSON で出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -v quiet -print_format json -show_format -show_streams file.ext&lt;br /&gt;
&lt;br /&gt;
=== X フレームごとに動画のスクリーンショットを作成する ===&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -an -s 319x180 -vf fps=1/&#039;&#039;&#039;100&#039;&#039;&#039; -qscale:v 75 %03d.jpg&lt;br /&gt;
&lt;br /&gt;
=== メタデータの変更 ===&lt;br /&gt;
&lt;br /&gt;
メタデータは直接変更することはできません。メタデータをエクスポートして変更し、新しいファイルにマージする必要があります。&lt;br /&gt;
&lt;br /&gt;
既存の（グローバル）メタデータをテキストファイルに抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;song.mp3&#039; -f ffmetadata song_metadata.txt&lt;br /&gt;
&lt;br /&gt;
テキストファイルからメタデータを含む新しいファイルを作成する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;song.mp3&#039; -f ffmetadata -i new_metadata.txt -map_metadata 1 -id3v2_version 4 song_new.mp3&lt;br /&gt;
&lt;br /&gt;
{{ic|-map_metadata 1}} は、ffmpeg に 2 番目のファイル (インデックスは 0 から始まる) のメタデータを使用するように指示します。&lt;br /&gt;
&lt;br /&gt;
グローバル メタデータの他に、各ストリームは独自のメタデータを持つこともできます。たとえば、{{ic|-map_metadata:s:v 0:s:v}} および {{ic|-map_metadata:s:a 0:s:a}} を使用してエクスポートします。&lt;br /&gt;
&lt;br /&gt;
{{ic|ffprobe}} は({{Pkg|ffmpeg}} パッケージからも同様に) 、default、compact/csv、flat、ini、json、xml など、さらに多くのエクスポート形式を提供します。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://ffmpeg.org/ffmpeg.html FFmpeg documentation] - 公式ドキュメント&lt;br /&gt;
* [https://trac.ffmpeg.org/wiki FFmpeg Wiki] - 公式 wiki&lt;br /&gt;
* [http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-x264.html Encoding with the x264 codec] - MEncoder ドキュメント&lt;br /&gt;
* [https://avidemux.org/admWiki/doku.php?id=tutorial:h.264 H.264 encoding guide] - Avidemux wiki&lt;br /&gt;
* [http://howto-pages.org/ffmpeg/ Using FFmpeg] - Linux how to pages&lt;br /&gt;
* サポートしている音声・動画ストリームの[https://ffmpeg.org/general.html#Supported-File-Formats_002c-Codecs-or-Features リスト]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|FFmpeg|2023-07-23|776189}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41030</id>
		<title>FFmpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41030"/>
		<updated>2025-10-25T09:04:41Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* メタデータの変更 */ 英語ページより追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:オーディオ]]&lt;br /&gt;
[[Category:ビデオ]]&lt;br /&gt;
[[en:FFmpeg]]&lt;br /&gt;
[[zh-hans:FFmpeg]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Flac を Mp3 に変換#FFmpeg を使う}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
プロジェクトの[https://www.ffmpeg.org/ ホームページ] より:&lt;br /&gt;
:FFmpeg は、音声と動画を記録、変換、そしてストリーミングするための完全でクロスプラットフォームなソリューションです。先進的な音声・動画コーデックライブラリである libavcodec が含まれています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;libav&#039;&#039; や &#039;&#039;avconv&#039;&#039; など FFmpeg のフォークも存在しています。FFmpeg の現在の状態やプロジェクトの違いについては [https://blog.pkh.me/p/13-the-ffmpeg-libav-situation.html The FFmpeg/Libav situation] を読んでください。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|ffmpeg}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
開発版は {{AUR|ffmpeg-git}} パッケージでインストールできます。可能な限り多くのオプション機能を有効化してビルドする {{AUR|ffmpeg-full}} も存在します。&lt;br /&gt;
&lt;br /&gt;
== エンコードの例 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* パラメータを正しい順序で指定することが重要です (例: input、video、filters、audio、output)。順序を間違うと、パラメータがスキップされたり、FFmpeg が実行されなかったりする場合があります。&lt;br /&gt;
* FFmpeg は、使用できる CPU スレッド数を自動的に選択するはずです。しかし、パラメータ {{ic|-threads &#039;&#039;number&#039;&#039;}} を使って、使用できるスレッド数を強制したほうが良い場合もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki#Encoding FFmpeg のエンコード wiki] と {{man|1|ffmpeg|EXAMPLES}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== スクリーンキャプチャ ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#x11grab x11grab] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の仮想デバイスが含まれており、ユーザのディスプレイ全体と音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
スクリーンショットを撮って {{ic|screen.png}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -i $DISPLAY -vframes 1 screen.png&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} はキャプチャする領域のサイズを指定します。&lt;br /&gt;
&lt;br /&gt;
ロスレスエンコードで音声なしのスクリーンキャストを撮って {{ic|screen.mkv}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -c:v ffvhuff screen.mkv&lt;br /&gt;
&lt;br /&gt;
ここでは、Huffyuv コーデックが使用されます。このコーデックは高速ですが、ファイルサイズが大きくなります。&lt;br /&gt;
&lt;br /&gt;
ロッシーエンコードで音声ありのスクリーンキャストを撮って {{ic|screen.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac screen.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
動画ストリームをファイルとして保存する必要はないが、画面共有のために仮想ウェブカメラとして使う場合、[[v4l2loopback#FFmpeg を使って X11 をキャストする]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Desktop#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウェブカメラの録画 ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#video4linux2_002c-v4l2 video4linux2] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の入力デバイスが含まれています。これらにより、ウェブカメラと音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドは、ウェブカメラから音声無しで動画を録画し {{ic|webcam.mp4}} に保存します。ウェブカメラが {{ic|/dev/video0}} として正しく認識されていると仮定します:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -c:v libx264 -preset ultrafast webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} は、ウェブカメラからの許可されるイメージサイズの最大値を指定します。&lt;br /&gt;
&lt;br /&gt;
上記のコマンドは無音動画を出力します。音声ありでウェブカメラから動画を録画し {{ic|webcam.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Webcam#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== VOB から他のコンテナに ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:VOB|VOB]] ファイルを一つのストリームに連結して MPEG-2 にするには:&lt;br /&gt;
&lt;br /&gt;
 $ cat f0.VOB f1.VOB f2.VOB | ffmpeg -i - out.mp2&lt;br /&gt;
&lt;br /&gt;
=== x264 ===&lt;br /&gt;
&lt;br /&gt;
==== ロスレス ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットは最速のエンコードをするので素早い録画をしたいときに有用です (スクリーンキャストなど):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset ultrafast -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットの反対は &#039;&#039;veryslow&#039;&#039; で、&#039;&#039;ultrafast&#039;&#039; よりもエンコードが遅いかわりに出力するファイルのサイズが小さくなります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset veryslow -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
どちらでも出力のクオリティは同じです。&lt;br /&gt;
&lt;br /&gt;
{{Tip|あなたの使っているコンピュータがリアルタイムで {{ic|-preset superfast}} を処理できる場合、{{ic|-preset ultrafast}} ではなく {{ic|-preset superfast}} を使用してください。Ultrafast は superfast よりも圧縮率が&#039;&#039;かなり&#039;&#039;落ちます。}}&lt;br /&gt;
&lt;br /&gt;
==== Constant rate factor ====&lt;br /&gt;
&lt;br /&gt;
出力する品質を指定したいときに使います。一般的に使われているのは最高の {{ic|-crf}} 値で、これでも許容範囲内の画質になります。値が低いほど画質は高くなります。0はロスレス、18は見た目がロスレス、そして23がデフォルトの値です。賢明な値は18から28の範囲になります。一番遅い {{ic|-preset}} を使うなら辛抱する必要があります。詳しくは [https://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuide x264 Encoding Guide] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039; -c:v libx264 -tune film -preset slow -crf 22 -x264opts fast_pskip=0 -c:a libmp3lame -aq 4 &#039;&#039;output&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{ic|-tune}} オプションを使うことで[https://forum.doom9.org/showthread.php?t=149394 エンコードされるメディアの中身とタイプにあった設定にすることができます]。&lt;br /&gt;
&lt;br /&gt;
==== ツーパス (超高品質) ====&lt;br /&gt;
&lt;br /&gt;
マルチパスの始めは動画の統計が記録されるため、音声が無効化されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -an -vcodec libx264 -pass 1 -preset veryslow \&lt;br /&gt;
 -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 -f rawvideo -y /dev/null&lt;br /&gt;
&lt;br /&gt;
コンテナの形式は出力ファイルの拡張子 ({{ic|.mkv}}) から自動的に検出して変換されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -acodec aac -b:a 256k -ar 96000 -vcodec libx264 \&lt;br /&gt;
 -pass 2 -preset veryslow -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
==== 動画の手ブレ補正 ====&lt;br /&gt;
&lt;br /&gt;
vbid.stab プラグインを使ってツーパスで手ブレ補正 (ビデオ安定化) を行います。&lt;br /&gt;
&lt;br /&gt;
===== ファーストパス =====&lt;br /&gt;
&lt;br /&gt;
ファーストパスでは補正パラメータを記録してファイルに書き出します、または視覚分析のテスト動画を作成します。&lt;br /&gt;
&lt;br /&gt;
* 補正パラメータを記録してファイルだけに書き出す: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf -f null -}}&lt;br /&gt;
* 補正パラメータをファイルに書きだして、視覚分析用のテストビデオ &amp;quot;output-stab&amp;quot; を作成: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf output-stab}}&lt;br /&gt;
&lt;br /&gt;
===== セカンドパス =====&lt;br /&gt;
&lt;br /&gt;
セカンドパスではファーストパスで作成した補正パラメータを解析して、それを使って &amp;quot;output-stab_final&amp;quot; を生成します。セカンドパスで他のフィルターを適用することもでき、変換を繰り返す必要をなくして画質を最大限保つことができます。下のコマンドでは以下のオプションを使っています:&lt;br /&gt;
&lt;br /&gt;
* {{ic|unsharp}}: vid.stab の作者によって推奨されています。下の例ではデフォルトの 5:5:1.0:5:5:1.0 を使っています。&lt;br /&gt;
* {{ic|1=fade=t=in:st=0:d=4}}: 4秒間のフェードインをファイルの冒頭に挟みます。&lt;br /&gt;
* {{ic|1=fade=t=out:st=60:d=4}}: 動画の60秒目から4秒間のフェードアウトを挟みます。&lt;br /&gt;
* {{ic|-c:a pcm_s16le}}: XAVC-S コーデックは pcm_s16be で記録されロスレスの pcm_s16le に変換されます。&lt;br /&gt;
&lt;br /&gt;
 $  ffmpeg -i input -vf vidstabtransform=smoothing=30:interpol=bicubic:input=transforms.trf,unsharp,fade=t=in:st=0:d=4,fade=t=out:st=60:d=4 -c:v libx264 -tune film -preset veryslow -crf 8 -x264opts fast_pskip=0 -c:a pcm_s16le output-stab_final&lt;br /&gt;
&lt;br /&gt;
=== x265 ===&lt;br /&gt;
&lt;br /&gt;
以下の例は、パラメータを指定せずに libx265 を呼び出した場合のデフォルトを示します (Constant Rate Factor  エンコード):&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -i input -c:v libx265 -crf 28 -preset medium -c:a libvorbis output.mp4&lt;br /&gt;
&lt;br /&gt;
詳細は FFmpeg の [https://trac.ffmpeg.org/wiki/Encode/H.265 H.265/HEVC Video Encoding Guide] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== シングルパス MPEG-2 (ニアロスレス) ===&lt;br /&gt;
&lt;br /&gt;
DVD 標準のパラメータに FFmpeg を自動的に設定することができます。約 30 FPS の DVD [[Wikipedia:ja:MPEG-2|MPEG-2]] にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target ntsc-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
約 24 FPS の DVD MPEG-2 にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target film-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
=== 字幕 ===&lt;br /&gt;
&lt;br /&gt;
==== 抽出 ====&lt;br /&gt;
&lt;br /&gt;
MPEG-2 や Matroska などのコンテナファイルに埋め込まれた字幕を抽出して、SRT や SSA、WebVTT などの字幕形式に変換することができます。[https://trac.ffmpeg.org/wiki/ExtractSubtitles]&lt;br /&gt;
&lt;br /&gt;
* ファイルに字幕ストリームが含まれているか確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffprobe -hide_banner foo.mkv|&lt;br /&gt;
...&lt;br /&gt;
Stream #0:0(und): Video: h264 (High), yuv420p, 1920x800 [SAR 1:1 DAR 12:5], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)&lt;br /&gt;
  Metadata:&lt;br /&gt;
  CREATION_TIME   : 2012-06-05 05:04:15&lt;br /&gt;
  LANGUAGE        : und&lt;br /&gt;
Stream #0:1(und): Audio: aac, 44100 Hz, stereo, fltp (default)&lt;br /&gt;
 Metadata:&lt;br /&gt;
 CREATION_TIME   : 2012-06-05 05:10:34&lt;br /&gt;
 LANGUAGE        : und&lt;br /&gt;
 HANDLER_NAME    : GPAC ISO Audio Handler&lt;br /&gt;
&#039;&#039;&#039;Stream #0:2: Subtitle: ssa (default)&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mkv}} には SSA の字幕が埋め込まれており、別のファイルに抽出することが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv foo.ssa&lt;br /&gt;
&lt;br /&gt;
字幕を望ましい形式 (例として [[Wikipedia:ja:SubRip|SubRip]]) に保存するには {{ic|-c:s srt}} を追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -c:s srt foo.srt&lt;br /&gt;
&lt;br /&gt;
複数の字幕が存在する場合、{{ic|-map &#039;&#039;key&#039;&#039;:&#039;&#039;stream&#039;&#039;}} パラメータを使用して抽出するストリームを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -map 0:2 foo.ssa&lt;br /&gt;
&lt;br /&gt;
==== ハードサブ ====&lt;br /&gt;
&lt;br /&gt;
(FFmpeg wiki の記事の [https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo HowToBurnSubtitlesIntoVideo] に基づく説明)&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Hardsub|ハードサブ]]は動画に字幕を焼きこむことになります。ハードサブは無効にすることが不可能で、言語の切り替えなどもできません。&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mpg}} に {{ic|foo.ssa}} の字幕を重ねるには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mpg -vf subtitles=foo.ssa out.mpg&lt;br /&gt;
&lt;br /&gt;
=== ボリュームゲイン ===&lt;br /&gt;
&lt;br /&gt;
ボリュームゲインは &#039;&#039;ffmpeg&#039;&#039; のフィルタ機能で変更できます。まず、{{ic|-af}} または {{ic|-filter:a}} を使って音声ストリームを選択し、次に、&#039;&#039;volume&#039;&#039; フィルタの後にそのストリームに対するゲインを指定してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;volume=1.5&#039;&#039;&#039; ouput.flac&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|1=volume=1.5}} によって 150% のボリュームゲインとなります。1.5 から 0.5 にすると、ボリュームが半分になります。ボリュームフィルタにはデシベル単位を渡すこともできます。{{ic|1=volume=3dB}} とすると、ボリュームが 3dB 増え、{{ic|1=volume=-3dB}} とすると 3dB 減ります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイルのボリュームゲインを倍にすることは、ボリュームを倍にすることと同じではありません。実験して正しいボリュームを見つける必要があります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;volumedetect&#039;&#039; フィルタを使用することで、ファイルの現在の平均ボリュームとピークボリュームを調べることができます: {{ic|ffmpeg -i input.flac -af volumedetect -f null -}}。そして、目標のレベルと現在のレベルとの差を &#039;&#039;volume&#039;&#039; フィルタに渡すことで、望みのレベルにすることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ボリュームノーマライゼーション ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loudnorm&#039;&#039; フィルタによるノーマライゼーションにより、平均ボリュームとピークボリュームを特定の値にすることができます。&#039;&#039;fmpeg&#039;&#039; のデフォルトの平均ラウドネス、ピークラウドネス、そしてレンジラウドネスの目標値 (それぞれ、-24 LUFS、-2 dBTP、7 LU) を使って、ファイルの知覚ラウドネスを正規化するには、以下のコマンドを使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;loudnorm&#039;&#039;&#039; output.flac&lt;br /&gt;
&lt;br /&gt;
別のラウドネスプロファイルを得るには、&#039;&#039;loudnorm&#039;&#039; フィルタのパラメータ {{ic|i}}、{{ic|tp}}、そして {{ic|lra}} を使って、それぞれ &#039;&#039;i&#039;&#039;ntegrated、&#039;&#039;t&#039;&#039;rue &#039;&#039;p&#039;&#039;eak、&#039;&#039;l&#039;&#039;oudness &#039;&#039;ra&#039;&#039;nge を指定してください。例えば、デフォルトよりも高い知覚ラウドネスにするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af loudnorm=i=-16:tp=-1.5:lra=11:print_format=summary output.flac&lt;br /&gt;
&lt;br /&gt;
この例では、オーディオファイルの入力ラウドネスと出力ラウドネスを表示するために {{ic|1=print_format=summary}} も追加しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|このフィルタはツーパスモードもサポートしています。最初の実行から測定されたラウドネス値を抽出し、その値を使って2回めの実行で線形ノーマライゼーションを行います。詳細は [https://ffmpeg.org/ffmpeg-filters.html#loudnorm ffmpeg loudnorm ドキュメント]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|ファイルの現在のラウドネスを調べるには、{{ic|1=ffmpeg -i input.flac -af loudnorm=print_format=summary -f null -}} を使ってください。}}&lt;br /&gt;
&lt;br /&gt;
=== 音声を抽出する ===&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg output.ext|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: ac3, 48000 Hz, stereo, s16, 384 kb/s&lt;br /&gt;
    Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s&lt;br /&gt;
    Stream #0.3: Audio: dts, 48000 Hz, 5.1 768 kb/s&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
多重化されている一番目の ({{ic|-map 0:1}}) [[Wikipedia:ja:ドルビーデジタル|AC-3]] でエンコードされた音声ストリームをファイルに抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;video&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
三番目の ({{ic|-map 0:3}}) [[Wikipedia:ja:デジタル・シアター・システムズ|DTS]] 音声ストリームをビットレートが 192 kb/s で[[Wikipedia:ja:サンプリングレート|サンプリングレート]]が 96000 Hz の [[Wikipedia:ja:AAC|AAC]] ファイルに変換する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:3 -acodec aac -b:a 192k -ar 96000 -vn &#039;&#039;output&#039;&#039;.aac&lt;br /&gt;
&lt;br /&gt;
{{ic|-vn}} は動画ストリームの処理を無効にします。&lt;br /&gt;
&lt;br /&gt;
時間を指定して音声ストリームを抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -ss 00:01:25 -t 00:00:05 -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;output&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
{{ic|-ss}} で開始時間を、{{ic|-t}} で長さを指定します。&lt;br /&gt;
&lt;br /&gt;
=== 音声を除去する ===&lt;br /&gt;
&lt;br /&gt;
# 一番目の動画ストリーム ({{ic|-map 0:0}}) と二番目の AC-3 音声ストリーム ({{ic|-map 0:2}}) をコピーします。&lt;br /&gt;
# AC-3 音声ストリームをビットレートが 128 kb/s でサンプリングレートが 48000 Hz の2チャンネルの MP3 に変換します。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:0 -map 0:2 -vcodec copy -acodec libmp3lame \&lt;br /&gt;
 -b:a 128k -ar 48000 -ac 2 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mkv|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|無駄な音声ストリームを削除することで余ったビットを画質の向上に割り当てることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ファイルを分割する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|copy}} コーデックを使うことでエンコーディングを変更せずにファイルの操作を行うことができます。例えば、次のコマンドであらゆるメディアファイルを簡単に2つに分けることが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -t 00:05:30 -c copy part1.ext -ss 00:05:30 -c copy part2.ext&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアビデオアクセラレーション ===&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/HWAccelIntro ハードウェアアクセラレーション API] を使用することで、エンコード/デコードのパフォーマンスを向上させることができます。しかし、特定の種類のコーデックしか使えませんし、場合によっては、ソフトウェアエンコードを使ったときと同じ結果が得られるとは限りません。&lt;br /&gt;
&lt;br /&gt;
==== VA-API ====&lt;br /&gt;
&lt;br /&gt;
Intel CPU ({{Pkg|intel-media-driver}} か {{Pkg|libva-intel-driver}} が必要) を使っている場合や、特定の AMD GPU でオープンソースの [[AMDGPU]] ドライバー ({{Pkg|mesa}} が必要) を使っている場合、[[VA-API]] を使用してエンコードとデコードができます。&lt;br /&gt;
&lt;br /&gt;
利用可能なパラメータとサポートされているプラットフォームに関する情報は、[https://trac.ffmpeg.org/wiki/Hardware/VAAPI FFmpeg のドキュメント]や [https://wiki.libav.org/Hardware/vaapi Libav のドキュメント]{{Dead link|2023|04|23|status=domain name not resolved}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
サポートされている H.264 コーデックを使用してエンコードする例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -threads 1 -i file.ext -vaapi_device /dev/dri/renderD128 -vcodec h264_vaapi -vf format=&#039;nv12|vaapi,hwupload&#039; output.mp4&lt;br /&gt;
&lt;br /&gt;
{{Note|通常、VA-API は、(FFmpeg パッケージの依存関係である) {{Pkg|libva}} に含まれるヘッダとライブラリが検出されれば、ビルド時に {{Pkg|ffmpeg}} の自動検出機能によって有効化されます。}}&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を以下に挙げます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf &#039;format=nv12,hwupload&#039; -c:v hevc_vaapi -f mp4 -rc_mode 1 -qp 25 output.mp4&lt;br /&gt;
&lt;br /&gt;
hevc_vaapi を使用する場合、-qp を 25 (視覚的に等価) からそれ以上 (28 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。h264_vaapi を使用する場合、18 (視覚的に等価) からそれ以上 (20 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。また、hevc_vaapi は h264_vaapi よりも 50% 高速にエンコードできるようです。&lt;br /&gt;
&lt;br /&gt;
==== NVIDIA NVENC/NVDEC ====&lt;br /&gt;
&lt;br /&gt;
プロプライエタリな [[NVIDIA]] ドライバを使用していて、{{Pkg|nvidia-utils}} パッケージがインストールされている場合、[[Wikipedia:Nvidia NVENC|NVENC]] と [[Wikipedia:Nvidia NVDEC|NVDEC]] をエンコード/デコードに使用できます。サポートされている GPU は [[Wikipedia:GeForce 600 series|600 シリーズ]]からです。詳細は [[ハードウェアビデオアクセラレーション#NVIDIA]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
テクニックが[https://web.archive.org/web/20190808223352/https://gist.github.com/Brainiarc7/8b471ff91319483cdb725f615908286e こちらの古い gist] に載っています。NVENC は [[CUDA]] と似ているため、ターミナルセッションからでも動作します。ハードウェア NVENC は Intel の VA-API エンコーダよりも数倍高速です。&lt;br /&gt;
&lt;br /&gt;
利用可能なオプションを表示するには以下のコマンドを実行してください ({{ic|hevc_nvenc}} も使えます):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -help encoder=h264_nvenc&lt;br /&gt;
&lt;br /&gt;
使用例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i source.ext -c:v h264_nvenc -rc constqp -qp 28 output.mkv&lt;br /&gt;
&lt;br /&gt;
==== Intel QuickSync (QSV) ====&lt;br /&gt;
&lt;br /&gt;
[https://www.intel.com/content/www/us/en/architecture-and-technology/quick-sync-video/quick-sync-video-general.html Intel® Quick Sync Video] は、[[Intel]] GPU のメディア処理機能を使用して高速なデコードとエンコードを行い、プロセッサが他のタスクを処理できるようにしてシステムの応答性を向上させます。&lt;br /&gt;
&lt;br /&gt;
これを使用するには、&#039;&#039;&#039;libmfx&#039;&#039;&#039; ランタイム実装がインストールされている必要があります。&#039;&#039;&#039;libmfx&#039;&#039;&#039; は、ハードウェアプラットフォームに基づいて実行時に実装をロードするディスパッチャライブラリです。&lt;br /&gt;
[[Wikipedia:ja:Broadwellマイクロアーキテクチャ|Broadwell]] から [[Wikipedia:ja:Rocket Lakeマイクロプロセッサ|Rocket Lake]] までの GPU で実行する場合、このライブラリは {{Pkg|intel-media-sdk}} をランタイム実装としてロードします。&lt;br /&gt;
[[Wikipedia:ja:Tiger Lakeマイクロアーキテクチャ|Tiger Lake]] 及びそれ以降の GPU においては、&#039;&#039;&#039;libmfx&#039;&#039;&#039; は {{Pkg|vpl-gpu-rt}} をロードします。[https://github.com/intel/vpl-gpu-rt#system-requirements vpl-gpu-rt system-requirements]も参照してください。&lt;br /&gt;
単一の Intel GPU を搭載しているシステムでは、ランタイム実装を変更したり選択したりできません。対応する実装は、ハードウェアに応じてインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
上記のランタイムをインストールしないと、以下のようなエラーが発生します:&lt;br /&gt;
&lt;br /&gt;
 [AVHWDeviceContext @ 0x558283838c80] Error initializing an MFX session: -3.&lt;br /&gt;
 Device creation failed: -1313558101.&lt;br /&gt;
&lt;br /&gt;
QuickSync の使用方法は [https://trac.ffmpeg.org/wiki/Hardware/QuickSync FFmpeg Wiki] で説明されています。&#039;&#039;libmfx&#039;&#039; を直接使わずに &#039;&#039;iHD&#039;&#039; ドライバか &#039;&#039;i965&#039;&#039; ドライバで [[VA-API]] [https://trac.ffmpeg.org/wiki/Hardware/VAAPI] を使用することが推奨されます。エンコード例は FFmpeg Wiki の &#039;&#039;Hybrid transcode&#039;&#039; セクションを、ドライバに関する指示は [[ハードウェアビデオアクセラレーション#VA-API の設定]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== AMD AMF ====&lt;br /&gt;
&lt;br /&gt;
AMD は、[[AMDGPU PRO]] プロプライエタリパッケージを使用して AMD Video Coding Engine (GPU エンコード) によって Linux で H264 のみのビデオエンコードを行うためのサポートを追加し、ffmpeg は AMF ビデオエンコードのサポートを追加しました。なので、h264_amf ビデオエンコーダを使ってエンコードするには、{{AUR|amf-amdgpu-pro}} が必要です。[[AMDGPU PRO]] パッケージによって提供されている ICD ファイルを環境変数でリンクする必要がある場合があります。そうしないと、ffmpeg はオープンな AMDGPU の ICD ファイルを使用してしまい、このビデオエンコーダを使用できません。エンコードを行うコマンドの例は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mkv -c:v h264_amf -rc 1 -b:v 8M h264_amf_8M.mp4&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を挙げましょう:&lt;br /&gt;
&lt;br /&gt;
 $ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mp4 -c:v h264_amf -f mp4 -rc 0 -qp_b 22 -qp_i 22 -qp_p 22 -quality 2 output.mp4&lt;br /&gt;
&lt;br /&gt;
3つの -qp_(b|i|p) を調整してください。18 にすると視覚的に等価で、22 から非常に小さな視覚的な損失が発生し始めます。&lt;br /&gt;
&lt;br /&gt;
=== アニメーション GIF ===&lt;br /&gt;
&lt;br /&gt;
一般に、アニメーション GIF は、画像品質が悪く、ファイルサイズが比較的大きく、音声サポートもないので、動画フォーマットとして素晴らしい選択肢とは言えません。しかし、ウェブでは依然として頻繁に使用されています。以下のコマンドを使うことで、動画をアニメーション GIF に変換することができます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.mp4 -vf &amp;quot;fps=10,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse&amp;quot; -loop -1 output.gif&lt;br /&gt;
&lt;br /&gt;
パレットフィルタを使って高品質な GIF を生成する方法については、https://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html を見てください。&lt;br /&gt;
&lt;br /&gt;
== プリセットファイル ==&lt;br /&gt;
&lt;br /&gt;
デフォルトの[https://ffmpeg.org/ffmpeg.html#Preset-files プリセットファイル]で {{ic|~/.ffmpeg}} を作成する:&lt;br /&gt;
&lt;br /&gt;
 $ cp -iR /usr/share/ffmpeg ~/.ffmpeg&lt;br /&gt;
&lt;br /&gt;
新しいファイルを作成したりデフォルトのプリセットファイルを編集する:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.ffmpeg/libavcodec-vhq.ffpreset|2=&lt;br /&gt;
vtag=DX50&lt;br /&gt;
mbd=2&lt;br /&gt;
trellis=2&lt;br /&gt;
flags=+cbp+mv0&lt;br /&gt;
pre_dia_size=4&lt;br /&gt;
dia_size=4&lt;br /&gt;
precmp=4&lt;br /&gt;
cmp=4&lt;br /&gt;
subcmp=4&lt;br /&gt;
preme=2&lt;br /&gt;
qns=2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== プリセットファイルを使う ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vcodec}} の宣言の後に {{ic|-vpre}} オプションを加えて下さい。&lt;br /&gt;
&lt;br /&gt;
==== libavcodec-vhq.ffpreset ====&lt;br /&gt;
&lt;br /&gt;
* {{ic|libavcodec}} &#039;&#039;&#039;=&#039;&#039;&#039; vcodec/acodec の名前&lt;br /&gt;
* {{ic|vhq}} &#039;&#039;&#039;=&#039;&#039;&#039; 使用するプリセットの名前&lt;br /&gt;
* {{ic|ffpreset}} &#039;&#039;&#039;=&#039;&#039;&#039; FFmpeg プリセットの拡張子&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 出力を簡略化 ===&lt;br /&gt;
&lt;br /&gt;
以下のオプションを組み合わせて使うことで、出力の詳細さを好きなレベルまで減らすことができます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|-hide_banner}}: 著作権表示、ビルドオプション、そしてライブラリのバージョンが表示されなくなります&lt;br /&gt;
* {{ic|-loglevel}}: ログレベルを調整します (微調整オプションが利用できます)。例: {{ic|-loglevel warning}}&lt;br /&gt;
* {{ic|-nostats}}: エンコードの進捗/統計が表示されなくなります&lt;br /&gt;
&lt;br /&gt;
=== 動画の再生時間を出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 file.ext&lt;br /&gt;
&lt;br /&gt;
=== ストリーム情報を JSON で出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -v quiet -print_format json -show_format -show_streams file.ext&lt;br /&gt;
&lt;br /&gt;
=== X フレームごとに動画のスクリーンショットを作成する ===&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -an -s 319x180 -vf fps=1/&#039;&#039;&#039;100&#039;&#039;&#039; -qscale:v 75 %03d.jpg&lt;br /&gt;
&lt;br /&gt;
=== メタデータの変更 ===&lt;br /&gt;
&lt;br /&gt;
メタデータは直接変更することはできません。メタデータをエクスポートして変更し、新しいファイルにマージする必要があります。&lt;br /&gt;
&lt;br /&gt;
既存の（グローバル）メタデータをテキストファイルに抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;song.mp3&#039; -f ffmetadata song_metadata.txt&lt;br /&gt;
&lt;br /&gt;
テキストファイルからメタデータを含む新しいファイルを作成する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;song.mp3&#039; -f ffmetadata -i new_metadata.txt -map_metadata 1 -id3v2_version 4 song_new.mp3&lt;br /&gt;
&lt;br /&gt;
{{ic|-map_metadata 1}} は、ffmpeg に 2 番目のファイル (インデックスは 0 から始まる) のメタデータを使用するように指示します。&lt;br /&gt;
&lt;br /&gt;
グローバル メタデータの他に、各ストリームは独自のメタデータを持つこともできます。たとえば、{{ic|-map_metadata:s:v 0:s:v}} および {{ic|-map_metadata:s:a 0:s:a}} を使用してエクスポートします。&lt;br /&gt;
&lt;br /&gt;
{{ic|ffprobe}} は({{Pkg|ffmpeg}} パッケージからも同様に) 、default、compact/csv、flat、ini、json、xml など、さらに多くのエクスポート形式を提供します。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://ffmpeg.org/ffmpeg.html FFmpeg documentation] - 公式ドキュメント&lt;br /&gt;
* [https://trac.ffmpeg.org/wiki FFmpeg Wiki] - 公式 wiki&lt;br /&gt;
* [http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-x264.html Encoding with the x264 codec] - MEncoder ドキュメント&lt;br /&gt;
* [https://avidemux.org/admWiki/doku.php?id=tutorial:h.264 H.264 encoding guide] - Avidemux wiki&lt;br /&gt;
* [http://howto-pages.org/ffmpeg/ Using FFmpeg] - Linux how to pages&lt;br /&gt;
* サポートしている音声・動画ストリームの[https://ffmpeg.org/general.html#Supported-File-Formats-and-Codecs リスト]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|FFmpeg|2023-07-23|776189}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41029</id>
		<title>FFmpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41029"/>
		<updated>2025-10-25T08:25:18Z</updated>

		<summary type="html">&lt;p&gt;ELC: http → https&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:オーディオ]]&lt;br /&gt;
[[Category:ビデオ]]&lt;br /&gt;
[[en:FFmpeg]]&lt;br /&gt;
[[zh-hans:FFmpeg]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Flac を Mp3 に変換#FFmpeg を使う}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
プロジェクトの[https://www.ffmpeg.org/ ホームページ] より:&lt;br /&gt;
:FFmpeg は、音声と動画を記録、変換、そしてストリーミングするための完全でクロスプラットフォームなソリューションです。先進的な音声・動画コーデックライブラリである libavcodec が含まれています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;libav&#039;&#039; や &#039;&#039;avconv&#039;&#039; など FFmpeg のフォークも存在しています。FFmpeg の現在の状態やプロジェクトの違いについては [https://blog.pkh.me/p/13-the-ffmpeg-libav-situation.html The FFmpeg/Libav situation] を読んでください。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|ffmpeg}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
開発版は {{AUR|ffmpeg-git}} パッケージでインストールできます。可能な限り多くのオプション機能を有効化してビルドする {{AUR|ffmpeg-full}} も存在します。&lt;br /&gt;
&lt;br /&gt;
== エンコードの例 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* パラメータを正しい順序で指定することが重要です (例: input、video、filters、audio、output)。順序を間違うと、パラメータがスキップされたり、FFmpeg が実行されなかったりする場合があります。&lt;br /&gt;
* FFmpeg は、使用できる CPU スレッド数を自動的に選択するはずです。しかし、パラメータ {{ic|-threads &#039;&#039;number&#039;&#039;}} を使って、使用できるスレッド数を強制したほうが良い場合もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki#Encoding FFmpeg のエンコード wiki] と {{man|1|ffmpeg|EXAMPLES}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== スクリーンキャプチャ ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#x11grab x11grab] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の仮想デバイスが含まれており、ユーザのディスプレイ全体と音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
スクリーンショットを撮って {{ic|screen.png}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -i $DISPLAY -vframes 1 screen.png&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} はキャプチャする領域のサイズを指定します。&lt;br /&gt;
&lt;br /&gt;
ロスレスエンコードで音声なしのスクリーンキャストを撮って {{ic|screen.mkv}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -c:v ffvhuff screen.mkv&lt;br /&gt;
&lt;br /&gt;
ここでは、Huffyuv コーデックが使用されます。このコーデックは高速ですが、ファイルサイズが大きくなります。&lt;br /&gt;
&lt;br /&gt;
ロッシーエンコードで音声ありのスクリーンキャストを撮って {{ic|screen.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac screen.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
動画ストリームをファイルとして保存する必要はないが、画面共有のために仮想ウェブカメラとして使う場合、[[v4l2loopback#FFmpeg を使って X11 をキャストする]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Desktop#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウェブカメラの録画 ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#video4linux2_002c-v4l2 video4linux2] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の入力デバイスが含まれています。これらにより、ウェブカメラと音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドは、ウェブカメラから音声無しで動画を録画し {{ic|webcam.mp4}} に保存します。ウェブカメラが {{ic|/dev/video0}} として正しく認識されていると仮定します:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -c:v libx264 -preset ultrafast webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} は、ウェブカメラからの許可されるイメージサイズの最大値を指定します。&lt;br /&gt;
&lt;br /&gt;
上記のコマンドは無音動画を出力します。音声ありでウェブカメラから動画を録画し {{ic|webcam.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Webcam#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== VOB から他のコンテナに ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:VOB|VOB]] ファイルを一つのストリームに連結して MPEG-2 にするには:&lt;br /&gt;
&lt;br /&gt;
 $ cat f0.VOB f1.VOB f2.VOB | ffmpeg -i - out.mp2&lt;br /&gt;
&lt;br /&gt;
=== x264 ===&lt;br /&gt;
&lt;br /&gt;
==== ロスレス ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットは最速のエンコードをするので素早い録画をしたいときに有用です (スクリーンキャストなど):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset ultrafast -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットの反対は &#039;&#039;veryslow&#039;&#039; で、&#039;&#039;ultrafast&#039;&#039; よりもエンコードが遅いかわりに出力するファイルのサイズが小さくなります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset veryslow -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
どちらでも出力のクオリティは同じです。&lt;br /&gt;
&lt;br /&gt;
{{Tip|あなたの使っているコンピュータがリアルタイムで {{ic|-preset superfast}} を処理できる場合、{{ic|-preset ultrafast}} ではなく {{ic|-preset superfast}} を使用してください。Ultrafast は superfast よりも圧縮率が&#039;&#039;かなり&#039;&#039;落ちます。}}&lt;br /&gt;
&lt;br /&gt;
==== Constant rate factor ====&lt;br /&gt;
&lt;br /&gt;
出力する品質を指定したいときに使います。一般的に使われているのは最高の {{ic|-crf}} 値で、これでも許容範囲内の画質になります。値が低いほど画質は高くなります。0はロスレス、18は見た目がロスレス、そして23がデフォルトの値です。賢明な値は18から28の範囲になります。一番遅い {{ic|-preset}} を使うなら辛抱する必要があります。詳しくは [https://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuide x264 Encoding Guide] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039; -c:v libx264 -tune film -preset slow -crf 22 -x264opts fast_pskip=0 -c:a libmp3lame -aq 4 &#039;&#039;output&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{ic|-tune}} オプションを使うことで[https://forum.doom9.org/showthread.php?t=149394 エンコードされるメディアの中身とタイプにあった設定にすることができます]。&lt;br /&gt;
&lt;br /&gt;
==== ツーパス (超高品質) ====&lt;br /&gt;
&lt;br /&gt;
マルチパスの始めは動画の統計が記録されるため、音声が無効化されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -an -vcodec libx264 -pass 1 -preset veryslow \&lt;br /&gt;
 -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 -f rawvideo -y /dev/null&lt;br /&gt;
&lt;br /&gt;
コンテナの形式は出力ファイルの拡張子 ({{ic|.mkv}}) から自動的に検出して変換されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -acodec aac -b:a 256k -ar 96000 -vcodec libx264 \&lt;br /&gt;
 -pass 2 -preset veryslow -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
==== 動画の手ブレ補正 ====&lt;br /&gt;
&lt;br /&gt;
vbid.stab プラグインを使ってツーパスで手ブレ補正 (ビデオ安定化) を行います。&lt;br /&gt;
&lt;br /&gt;
===== ファーストパス =====&lt;br /&gt;
&lt;br /&gt;
ファーストパスでは補正パラメータを記録してファイルに書き出します、または視覚分析のテスト動画を作成します。&lt;br /&gt;
&lt;br /&gt;
* 補正パラメータを記録してファイルだけに書き出す: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf -f null -}}&lt;br /&gt;
* 補正パラメータをファイルに書きだして、視覚分析用のテストビデオ &amp;quot;output-stab&amp;quot; を作成: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf output-stab}}&lt;br /&gt;
&lt;br /&gt;
===== セカンドパス =====&lt;br /&gt;
&lt;br /&gt;
セカンドパスではファーストパスで作成した補正パラメータを解析して、それを使って &amp;quot;output-stab_final&amp;quot; を生成します。セカンドパスで他のフィルターを適用することもでき、変換を繰り返す必要をなくして画質を最大限保つことができます。下のコマンドでは以下のオプションを使っています:&lt;br /&gt;
&lt;br /&gt;
* {{ic|unsharp}}: vid.stab の作者によって推奨されています。下の例ではデフォルトの 5:5:1.0:5:5:1.0 を使っています。&lt;br /&gt;
* {{ic|1=fade=t=in:st=0:d=4}}: 4秒間のフェードインをファイルの冒頭に挟みます。&lt;br /&gt;
* {{ic|1=fade=t=out:st=60:d=4}}: 動画の60秒目から4秒間のフェードアウトを挟みます。&lt;br /&gt;
* {{ic|-c:a pcm_s16le}}: XAVC-S コーデックは pcm_s16be で記録されロスレスの pcm_s16le に変換されます。&lt;br /&gt;
&lt;br /&gt;
 $  ffmpeg -i input -vf vidstabtransform=smoothing=30:interpol=bicubic:input=transforms.trf,unsharp,fade=t=in:st=0:d=4,fade=t=out:st=60:d=4 -c:v libx264 -tune film -preset veryslow -crf 8 -x264opts fast_pskip=0 -c:a pcm_s16le output-stab_final&lt;br /&gt;
&lt;br /&gt;
=== x265 ===&lt;br /&gt;
&lt;br /&gt;
以下の例は、パラメータを指定せずに libx265 を呼び出した場合のデフォルトを示します (Constant Rate Factor  エンコード):&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -i input -c:v libx265 -crf 28 -preset medium -c:a libvorbis output.mp4&lt;br /&gt;
&lt;br /&gt;
詳細は FFmpeg の [https://trac.ffmpeg.org/wiki/Encode/H.265 H.265/HEVC Video Encoding Guide] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== シングルパス MPEG-2 (ニアロスレス) ===&lt;br /&gt;
&lt;br /&gt;
DVD 標準のパラメータに FFmpeg を自動的に設定することができます。約 30 FPS の DVD [[Wikipedia:ja:MPEG-2|MPEG-2]] にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target ntsc-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
約 24 FPS の DVD MPEG-2 にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target film-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
=== 字幕 ===&lt;br /&gt;
&lt;br /&gt;
==== 抽出 ====&lt;br /&gt;
&lt;br /&gt;
MPEG-2 や Matroska などのコンテナファイルに埋め込まれた字幕を抽出して、SRT や SSA、WebVTT などの字幕形式に変換することができます。[https://trac.ffmpeg.org/wiki/ExtractSubtitles]&lt;br /&gt;
&lt;br /&gt;
* ファイルに字幕ストリームが含まれているか確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffprobe -hide_banner foo.mkv|&lt;br /&gt;
...&lt;br /&gt;
Stream #0:0(und): Video: h264 (High), yuv420p, 1920x800 [SAR 1:1 DAR 12:5], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)&lt;br /&gt;
  Metadata:&lt;br /&gt;
  CREATION_TIME   : 2012-06-05 05:04:15&lt;br /&gt;
  LANGUAGE        : und&lt;br /&gt;
Stream #0:1(und): Audio: aac, 44100 Hz, stereo, fltp (default)&lt;br /&gt;
 Metadata:&lt;br /&gt;
 CREATION_TIME   : 2012-06-05 05:10:34&lt;br /&gt;
 LANGUAGE        : und&lt;br /&gt;
 HANDLER_NAME    : GPAC ISO Audio Handler&lt;br /&gt;
&#039;&#039;&#039;Stream #0:2: Subtitle: ssa (default)&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mkv}} には SSA の字幕が埋め込まれており、別のファイルに抽出することが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv foo.ssa&lt;br /&gt;
&lt;br /&gt;
字幕を望ましい形式 (例として [[Wikipedia:ja:SubRip|SubRip]]) に保存するには {{ic|-c:s srt}} を追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -c:s srt foo.srt&lt;br /&gt;
&lt;br /&gt;
複数の字幕が存在する場合、{{ic|-map &#039;&#039;key&#039;&#039;:&#039;&#039;stream&#039;&#039;}} パラメータを使用して抽出するストリームを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -map 0:2 foo.ssa&lt;br /&gt;
&lt;br /&gt;
==== ハードサブ ====&lt;br /&gt;
&lt;br /&gt;
(FFmpeg wiki の記事の [https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo HowToBurnSubtitlesIntoVideo] に基づく説明)&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Hardsub|ハードサブ]]は動画に字幕を焼きこむことになります。ハードサブは無効にすることが不可能で、言語の切り替えなどもできません。&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mpg}} に {{ic|foo.ssa}} の字幕を重ねるには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mpg -vf subtitles=foo.ssa out.mpg&lt;br /&gt;
&lt;br /&gt;
=== ボリュームゲイン ===&lt;br /&gt;
&lt;br /&gt;
ボリュームゲインは &#039;&#039;ffmpeg&#039;&#039; のフィルタ機能で変更できます。まず、{{ic|-af}} または {{ic|-filter:a}} を使って音声ストリームを選択し、次に、&#039;&#039;volume&#039;&#039; フィルタの後にそのストリームに対するゲインを指定してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;volume=1.5&#039;&#039;&#039; ouput.flac&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|1=volume=1.5}} によって 150% のボリュームゲインとなります。1.5 から 0.5 にすると、ボリュームが半分になります。ボリュームフィルタにはデシベル単位を渡すこともできます。{{ic|1=volume=3dB}} とすると、ボリュームが 3dB 増え、{{ic|1=volume=-3dB}} とすると 3dB 減ります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイルのボリュームゲインを倍にすることは、ボリュームを倍にすることと同じではありません。実験して正しいボリュームを見つける必要があります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;volumedetect&#039;&#039; フィルタを使用することで、ファイルの現在の平均ボリュームとピークボリュームを調べることができます: {{ic|ffmpeg -i input.flac -af volumedetect -f null -}}。そして、目標のレベルと現在のレベルとの差を &#039;&#039;volume&#039;&#039; フィルタに渡すことで、望みのレベルにすることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ボリュームノーマライゼーション ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loudnorm&#039;&#039; フィルタによるノーマライゼーションにより、平均ボリュームとピークボリュームを特定の値にすることができます。&#039;&#039;fmpeg&#039;&#039; のデフォルトの平均ラウドネス、ピークラウドネス、そしてレンジラウドネスの目標値 (それぞれ、-24 LUFS、-2 dBTP、7 LU) を使って、ファイルの知覚ラウドネスを正規化するには、以下のコマンドを使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;loudnorm&#039;&#039;&#039; output.flac&lt;br /&gt;
&lt;br /&gt;
別のラウドネスプロファイルを得るには、&#039;&#039;loudnorm&#039;&#039; フィルタのパラメータ {{ic|i}}、{{ic|tp}}、そして {{ic|lra}} を使って、それぞれ &#039;&#039;i&#039;&#039;ntegrated、&#039;&#039;t&#039;&#039;rue &#039;&#039;p&#039;&#039;eak、&#039;&#039;l&#039;&#039;oudness &#039;&#039;ra&#039;&#039;nge を指定してください。例えば、デフォルトよりも高い知覚ラウドネスにするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af loudnorm=i=-16:tp=-1.5:lra=11:print_format=summary output.flac&lt;br /&gt;
&lt;br /&gt;
この例では、オーディオファイルの入力ラウドネスと出力ラウドネスを表示するために {{ic|1=print_format=summary}} も追加しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|このフィルタはツーパスモードもサポートしています。最初の実行から測定されたラウドネス値を抽出し、その値を使って2回めの実行で線形ノーマライゼーションを行います。詳細は [https://ffmpeg.org/ffmpeg-filters.html#loudnorm ffmpeg loudnorm ドキュメント]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|ファイルの現在のラウドネスを調べるには、{{ic|1=ffmpeg -i input.flac -af loudnorm=print_format=summary -f null -}} を使ってください。}}&lt;br /&gt;
&lt;br /&gt;
=== 音声を抽出する ===&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg output.ext|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: ac3, 48000 Hz, stereo, s16, 384 kb/s&lt;br /&gt;
    Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s&lt;br /&gt;
    Stream #0.3: Audio: dts, 48000 Hz, 5.1 768 kb/s&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
多重化されている一番目の ({{ic|-map 0:1}}) [[Wikipedia:ja:ドルビーデジタル|AC-3]] でエンコードされた音声ストリームをファイルに抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;video&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
三番目の ({{ic|-map 0:3}}) [[Wikipedia:ja:デジタル・シアター・システムズ|DTS]] 音声ストリームをビットレートが 192 kb/s で[[Wikipedia:ja:サンプリングレート|サンプリングレート]]が 96000 Hz の [[Wikipedia:ja:AAC|AAC]] ファイルに変換する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:3 -acodec aac -b:a 192k -ar 96000 -vn &#039;&#039;output&#039;&#039;.aac&lt;br /&gt;
&lt;br /&gt;
{{ic|-vn}} は動画ストリームの処理を無効にします。&lt;br /&gt;
&lt;br /&gt;
時間を指定して音声ストリームを抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -ss 00:01:25 -t 00:00:05 -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;output&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
{{ic|-ss}} で開始時間を、{{ic|-t}} で長さを指定します。&lt;br /&gt;
&lt;br /&gt;
=== 音声を除去する ===&lt;br /&gt;
&lt;br /&gt;
# 一番目の動画ストリーム ({{ic|-map 0:0}}) と二番目の AC-3 音声ストリーム ({{ic|-map 0:2}}) をコピーします。&lt;br /&gt;
# AC-3 音声ストリームをビットレートが 128 kb/s でサンプリングレートが 48000 Hz の2チャンネルの MP3 に変換します。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:0 -map 0:2 -vcodec copy -acodec libmp3lame \&lt;br /&gt;
 -b:a 128k -ar 48000 -ac 2 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mkv|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|無駄な音声ストリームを削除することで余ったビットを画質の向上に割り当てることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ファイルを分割する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|copy}} コーデックを使うことでエンコーディングを変更せずにファイルの操作を行うことができます。例えば、次のコマンドであらゆるメディアファイルを簡単に2つに分けることが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -t 00:05:30 -c copy part1.ext -ss 00:05:30 -c copy part2.ext&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアビデオアクセラレーション ===&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/HWAccelIntro ハードウェアアクセラレーション API] を使用することで、エンコード/デコードのパフォーマンスを向上させることができます。しかし、特定の種類のコーデックしか使えませんし、場合によっては、ソフトウェアエンコードを使ったときと同じ結果が得られるとは限りません。&lt;br /&gt;
&lt;br /&gt;
==== VA-API ====&lt;br /&gt;
&lt;br /&gt;
Intel CPU ({{Pkg|intel-media-driver}} か {{Pkg|libva-intel-driver}} が必要) を使っている場合や、特定の AMD GPU でオープンソースの [[AMDGPU]] ドライバー ({{Pkg|mesa}} が必要) を使っている場合、[[VA-API]] を使用してエンコードとデコードができます。&lt;br /&gt;
&lt;br /&gt;
利用可能なパラメータとサポートされているプラットフォームに関する情報は、[https://trac.ffmpeg.org/wiki/Hardware/VAAPI FFmpeg のドキュメント]や [https://wiki.libav.org/Hardware/vaapi Libav のドキュメント]{{Dead link|2023|04|23|status=domain name not resolved}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
サポートされている H.264 コーデックを使用してエンコードする例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -threads 1 -i file.ext -vaapi_device /dev/dri/renderD128 -vcodec h264_vaapi -vf format=&#039;nv12|vaapi,hwupload&#039; output.mp4&lt;br /&gt;
&lt;br /&gt;
{{Note|通常、VA-API は、(FFmpeg パッケージの依存関係である) {{Pkg|libva}} に含まれるヘッダとライブラリが検出されれば、ビルド時に {{Pkg|ffmpeg}} の自動検出機能によって有効化されます。}}&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を以下に挙げます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf &#039;format=nv12,hwupload&#039; -c:v hevc_vaapi -f mp4 -rc_mode 1 -qp 25 output.mp4&lt;br /&gt;
&lt;br /&gt;
hevc_vaapi を使用する場合、-qp を 25 (視覚的に等価) からそれ以上 (28 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。h264_vaapi を使用する場合、18 (視覚的に等価) からそれ以上 (20 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。また、hevc_vaapi は h264_vaapi よりも 50% 高速にエンコードできるようです。&lt;br /&gt;
&lt;br /&gt;
==== NVIDIA NVENC/NVDEC ====&lt;br /&gt;
&lt;br /&gt;
プロプライエタリな [[NVIDIA]] ドライバを使用していて、{{Pkg|nvidia-utils}} パッケージがインストールされている場合、[[Wikipedia:Nvidia NVENC|NVENC]] と [[Wikipedia:Nvidia NVDEC|NVDEC]] をエンコード/デコードに使用できます。サポートされている GPU は [[Wikipedia:GeForce 600 series|600 シリーズ]]からです。詳細は [[ハードウェアビデオアクセラレーション#NVIDIA]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
テクニックが[https://web.archive.org/web/20190808223352/https://gist.github.com/Brainiarc7/8b471ff91319483cdb725f615908286e こちらの古い gist] に載っています。NVENC は [[CUDA]] と似ているため、ターミナルセッションからでも動作します。ハードウェア NVENC は Intel の VA-API エンコーダよりも数倍高速です。&lt;br /&gt;
&lt;br /&gt;
利用可能なオプションを表示するには以下のコマンドを実行してください ({{ic|hevc_nvenc}} も使えます):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -help encoder=h264_nvenc&lt;br /&gt;
&lt;br /&gt;
使用例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i source.ext -c:v h264_nvenc -rc constqp -qp 28 output.mkv&lt;br /&gt;
&lt;br /&gt;
==== Intel QuickSync (QSV) ====&lt;br /&gt;
&lt;br /&gt;
[https://www.intel.com/content/www/us/en/architecture-and-technology/quick-sync-video/quick-sync-video-general.html Intel® Quick Sync Video] は、[[Intel]] GPU のメディア処理機能を使用して高速なデコードとエンコードを行い、プロセッサが他のタスクを処理できるようにしてシステムの応答性を向上させます。&lt;br /&gt;
&lt;br /&gt;
これを使用するには、&#039;&#039;&#039;libmfx&#039;&#039;&#039; ランタイム実装がインストールされている必要があります。&#039;&#039;&#039;libmfx&#039;&#039;&#039; は、ハードウェアプラットフォームに基づいて実行時に実装をロードするディスパッチャライブラリです。&lt;br /&gt;
[[Wikipedia:ja:Broadwellマイクロアーキテクチャ|Broadwell]] から [[Wikipedia:ja:Rocket Lakeマイクロプロセッサ|Rocket Lake]] までの GPU で実行する場合、このライブラリは {{Pkg|intel-media-sdk}} をランタイム実装としてロードします。&lt;br /&gt;
[[Wikipedia:ja:Tiger Lakeマイクロアーキテクチャ|Tiger Lake]] 及びそれ以降の GPU においては、&#039;&#039;&#039;libmfx&#039;&#039;&#039; は {{Pkg|vpl-gpu-rt}} をロードします。[https://github.com/intel/vpl-gpu-rt#system-requirements vpl-gpu-rt system-requirements]も参照してください。&lt;br /&gt;
単一の Intel GPU を搭載しているシステムでは、ランタイム実装を変更したり選択したりできません。対応する実装は、ハードウェアに応じてインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
上記のランタイムをインストールしないと、以下のようなエラーが発生します:&lt;br /&gt;
&lt;br /&gt;
 [AVHWDeviceContext @ 0x558283838c80] Error initializing an MFX session: -3.&lt;br /&gt;
 Device creation failed: -1313558101.&lt;br /&gt;
&lt;br /&gt;
QuickSync の使用方法は [https://trac.ffmpeg.org/wiki/Hardware/QuickSync FFmpeg Wiki] で説明されています。&#039;&#039;libmfx&#039;&#039; を直接使わずに &#039;&#039;iHD&#039;&#039; ドライバか &#039;&#039;i965&#039;&#039; ドライバで [[VA-API]] [https://trac.ffmpeg.org/wiki/Hardware/VAAPI] を使用することが推奨されます。エンコード例は FFmpeg Wiki の &#039;&#039;Hybrid transcode&#039;&#039; セクションを、ドライバに関する指示は [[ハードウェアビデオアクセラレーション#VA-API の設定]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== AMD AMF ====&lt;br /&gt;
&lt;br /&gt;
AMD は、[[AMDGPU PRO]] プロプライエタリパッケージを使用して AMD Video Coding Engine (GPU エンコード) によって Linux で H264 のみのビデオエンコードを行うためのサポートを追加し、ffmpeg は AMF ビデオエンコードのサポートを追加しました。なので、h264_amf ビデオエンコーダを使ってエンコードするには、{{AUR|amf-amdgpu-pro}} が必要です。[[AMDGPU PRO]] パッケージによって提供されている ICD ファイルを環境変数でリンクする必要がある場合があります。そうしないと、ffmpeg はオープンな AMDGPU の ICD ファイルを使用してしまい、このビデオエンコーダを使用できません。エンコードを行うコマンドの例は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mkv -c:v h264_amf -rc 1 -b:v 8M h264_amf_8M.mp4&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を挙げましょう:&lt;br /&gt;
&lt;br /&gt;
 $ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mp4 -c:v h264_amf -f mp4 -rc 0 -qp_b 22 -qp_i 22 -qp_p 22 -quality 2 output.mp4&lt;br /&gt;
&lt;br /&gt;
3つの -qp_(b|i|p) を調整してください。18 にすると視覚的に等価で、22 から非常に小さな視覚的な損失が発生し始めます。&lt;br /&gt;
&lt;br /&gt;
=== アニメーション GIF ===&lt;br /&gt;
&lt;br /&gt;
一般に、アニメーション GIF は、画像品質が悪く、ファイルサイズが比較的大きく、音声サポートもないので、動画フォーマットとして素晴らしい選択肢とは言えません。しかし、ウェブでは依然として頻繁に使用されています。以下のコマンドを使うことで、動画をアニメーション GIF に変換することができます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.mp4 -vf &amp;quot;fps=10,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse&amp;quot; -loop -1 output.gif&lt;br /&gt;
&lt;br /&gt;
パレットフィルタを使って高品質な GIF を生成する方法については、https://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html を見てください。&lt;br /&gt;
&lt;br /&gt;
== プリセットファイル ==&lt;br /&gt;
&lt;br /&gt;
デフォルトの[https://ffmpeg.org/ffmpeg.html#Preset-files プリセットファイル]で {{ic|~/.ffmpeg}} を作成する:&lt;br /&gt;
&lt;br /&gt;
 $ cp -iR /usr/share/ffmpeg ~/.ffmpeg&lt;br /&gt;
&lt;br /&gt;
新しいファイルを作成したりデフォルトのプリセットファイルを編集する:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.ffmpeg/libavcodec-vhq.ffpreset|2=&lt;br /&gt;
vtag=DX50&lt;br /&gt;
mbd=2&lt;br /&gt;
trellis=2&lt;br /&gt;
flags=+cbp+mv0&lt;br /&gt;
pre_dia_size=4&lt;br /&gt;
dia_size=4&lt;br /&gt;
precmp=4&lt;br /&gt;
cmp=4&lt;br /&gt;
subcmp=4&lt;br /&gt;
preme=2&lt;br /&gt;
qns=2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== プリセットファイルを使う ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vcodec}} の宣言の後に {{ic|-vpre}} オプションを加えて下さい。&lt;br /&gt;
&lt;br /&gt;
==== libavcodec-vhq.ffpreset ====&lt;br /&gt;
&lt;br /&gt;
* {{ic|libavcodec}} &#039;&#039;&#039;=&#039;&#039;&#039; vcodec/acodec の名前&lt;br /&gt;
* {{ic|vhq}} &#039;&#039;&#039;=&#039;&#039;&#039; 使用するプリセットの名前&lt;br /&gt;
* {{ic|ffpreset}} &#039;&#039;&#039;=&#039;&#039;&#039; FFmpeg プリセットの拡張子&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 出力を簡略化 ===&lt;br /&gt;
&lt;br /&gt;
以下のオプションを組み合わせて使うことで、出力の詳細さを好きなレベルまで減らすことができます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|-hide_banner}}: 著作権表示、ビルドオプション、そしてライブラリのバージョンが表示されなくなります&lt;br /&gt;
* {{ic|-loglevel}}: ログレベルを調整します (微調整オプションが利用できます)。例: {{ic|-loglevel warning}}&lt;br /&gt;
* {{ic|-nostats}}: エンコードの進捗/統計が表示されなくなります&lt;br /&gt;
&lt;br /&gt;
=== 動画の再生時間を出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 file.ext&lt;br /&gt;
&lt;br /&gt;
=== ストリーム情報を JSON で出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -v quiet -print_format json -show_format -show_streams file.ext&lt;br /&gt;
&lt;br /&gt;
=== X フレームごとに動画のスクリーンショットを作成する ===&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -an -s 319x180 -vf fps=1/&#039;&#039;&#039;100&#039;&#039;&#039; -qscale:v 75 %03d.jpg&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://ffmpeg.org/ffmpeg.html FFmpeg documentation] - 公式ドキュメント&lt;br /&gt;
* [https://trac.ffmpeg.org/wiki FFmpeg Wiki] - 公式 wiki&lt;br /&gt;
* [http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-x264.html Encoding with the x264 codec] - MEncoder ドキュメント&lt;br /&gt;
* [https://avidemux.org/admWiki/doku.php?id=tutorial:h.264 H.264 encoding guide] - Avidemux wiki&lt;br /&gt;
* [http://howto-pages.org/ffmpeg/ Using FFmpeg] - Linux how to pages&lt;br /&gt;
* サポートしている音声・動画ストリームの[https://ffmpeg.org/general.html#Supported-File-Formats-and-Codecs リスト]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|FFmpeg|2023-07-23|776189}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41028</id>
		<title>FFmpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41028"/>
		<updated>2025-10-25T08:21:55Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* AMD AMF */ VK_ICD_FILENAMES → VK_DRIVER_FILES&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:オーディオ]]&lt;br /&gt;
[[Category:ビデオ]]&lt;br /&gt;
[[en:FFmpeg]]&lt;br /&gt;
[[zh-hans:FFmpeg]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Flac を Mp3 に変換#FFmpeg を使う}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
プロジェクトの[https://www.ffmpeg.org/ ホームページ] より:&lt;br /&gt;
:FFmpeg は、音声と動画を記録、変換、そしてストリーミングするための完全でクロスプラットフォームなソリューションです。先進的な音声・動画コーデックライブラリである libavcodec が含まれています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;libav&#039;&#039; や &#039;&#039;avconv&#039;&#039; など FFmpeg のフォークも存在しています。FFmpeg の現在の状態やプロジェクトの違いについては [http://blog.pkh.me/p/13-the-ffmpeg-libav-situation.html The FFmpeg/Libav situation] を読んでください。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|ffmpeg}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
開発版は {{AUR|ffmpeg-git}} パッケージでインストールできます。可能な限り多くのオプション機能を有効化してビルドする {{AUR|ffmpeg-full}} も存在します。&lt;br /&gt;
&lt;br /&gt;
== エンコードの例 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* パラメータを正しい順序で指定することが重要です (例: input、video、filters、audio、output)。順序を間違うと、パラメータがスキップされたり、FFmpeg が実行されなかったりする場合があります。&lt;br /&gt;
* FFmpeg は、使用できる CPU スレッド数を自動的に選択するはずです。しかし、パラメータ {{ic|-threads &#039;&#039;number&#039;&#039;}} を使って、使用できるスレッド数を強制したほうが良い場合もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki#Encoding FFmpeg のエンコード wiki] と {{man|1|ffmpeg|EXAMPLES}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== スクリーンキャプチャ ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#x11grab x11grab] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の仮想デバイスが含まれており、ユーザのディスプレイ全体と音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
スクリーンショットを撮って {{ic|screen.png}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -i $DISPLAY -vframes 1 screen.png&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} はキャプチャする領域のサイズを指定します。&lt;br /&gt;
&lt;br /&gt;
ロスレスエンコードで音声なしのスクリーンキャストを撮って {{ic|screen.mkv}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -c:v ffvhuff screen.mkv&lt;br /&gt;
&lt;br /&gt;
ここでは、Huffyuv コーデックが使用されます。このコーデックは高速ですが、ファイルサイズが大きくなります。&lt;br /&gt;
&lt;br /&gt;
ロッシーエンコードで音声ありのスクリーンキャストを撮って {{ic|screen.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac screen.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
動画ストリームをファイルとして保存する必要はないが、画面共有のために仮想ウェブカメラとして使う場合、[[v4l2loopback#FFmpeg を使って X11 をキャストする]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Desktop#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウェブカメラの録画 ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#video4linux2_002c-v4l2 video4linux2] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の入力デバイスが含まれています。これらにより、ウェブカメラと音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドは、ウェブカメラから音声無しで動画を録画し {{ic|webcam.mp4}} に保存します。ウェブカメラが {{ic|/dev/video0}} として正しく認識されていると仮定します:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -c:v libx264 -preset ultrafast webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} は、ウェブカメラからの許可されるイメージサイズの最大値を指定します。&lt;br /&gt;
&lt;br /&gt;
上記のコマンドは無音動画を出力します。音声ありでウェブカメラから動画を録画し {{ic|webcam.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Webcam#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== VOB から他のコンテナに ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:VOB|VOB]] ファイルを一つのストリームに連結して MPEG-2 にするには:&lt;br /&gt;
&lt;br /&gt;
 $ cat f0.VOB f1.VOB f2.VOB | ffmpeg -i - out.mp2&lt;br /&gt;
&lt;br /&gt;
=== x264 ===&lt;br /&gt;
&lt;br /&gt;
==== ロスレス ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットは最速のエンコードをするので素早い録画をしたいときに有用です (スクリーンキャストなど):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset ultrafast -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットの反対は &#039;&#039;veryslow&#039;&#039; で、&#039;&#039;ultrafast&#039;&#039; よりもエンコードが遅いかわりに出力するファイルのサイズが小さくなります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset veryslow -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
どちらでも出力のクオリティは同じです。&lt;br /&gt;
&lt;br /&gt;
{{Tip|あなたの使っているコンピュータがリアルタイムで {{ic|-preset superfast}} を処理できる場合、{{ic|-preset ultrafast}} ではなく {{ic|-preset superfast}} を使用してください。Ultrafast は superfast よりも圧縮率が&#039;&#039;かなり&#039;&#039;落ちます。}}&lt;br /&gt;
&lt;br /&gt;
==== Constant rate factor ====&lt;br /&gt;
&lt;br /&gt;
出力する品質を指定したいときに使います。一般的に使われているのは最高の {{ic|-crf}} 値で、これでも許容範囲内の画質になります。値が低いほど画質は高くなります。0はロスレス、18は見た目がロスレス、そして23がデフォルトの値です。賢明な値は18から28の範囲になります。一番遅い {{ic|-preset}} を使うなら辛抱する必要があります。詳しくは [https://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuide x264 Encoding Guide] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039; -c:v libx264 -tune film -preset slow -crf 22 -x264opts fast_pskip=0 -c:a libmp3lame -aq 4 &#039;&#039;output&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{ic|-tune}} オプションを使うことで[https://forum.doom9.org/showthread.php?t=149394 エンコードされるメディアの中身とタイプにあった設定にすることができます]。&lt;br /&gt;
&lt;br /&gt;
==== ツーパス (超高品質) ====&lt;br /&gt;
&lt;br /&gt;
マルチパスの始めは動画の統計が記録されるため、音声が無効化されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -an -vcodec libx264 -pass 1 -preset veryslow \&lt;br /&gt;
 -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 -f rawvideo -y /dev/null&lt;br /&gt;
&lt;br /&gt;
コンテナの形式は出力ファイルの拡張子 ({{ic|.mkv}}) から自動的に検出して変換されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -acodec aac -b:a 256k -ar 96000 -vcodec libx264 \&lt;br /&gt;
 -pass 2 -preset veryslow -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
==== 動画の手ブレ補正 ====&lt;br /&gt;
&lt;br /&gt;
vbid.stab プラグインを使ってツーパスで手ブレ補正 (ビデオ安定化) を行います。&lt;br /&gt;
&lt;br /&gt;
===== ファーストパス =====&lt;br /&gt;
&lt;br /&gt;
ファーストパスでは補正パラメータを記録してファイルに書き出します、または視覚分析のテスト動画を作成します。&lt;br /&gt;
&lt;br /&gt;
* 補正パラメータを記録してファイルだけに書き出す: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf -f null -}}&lt;br /&gt;
* 補正パラメータをファイルに書きだして、視覚分析用のテストビデオ &amp;quot;output-stab&amp;quot; を作成: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf output-stab}}&lt;br /&gt;
&lt;br /&gt;
===== セカンドパス =====&lt;br /&gt;
&lt;br /&gt;
セカンドパスではファーストパスで作成した補正パラメータを解析して、それを使って &amp;quot;output-stab_final&amp;quot; を生成します。セカンドパスで他のフィルターを適用することもでき、変換を繰り返す必要をなくして画質を最大限保つことができます。下のコマンドでは以下のオプションを使っています:&lt;br /&gt;
&lt;br /&gt;
* {{ic|unsharp}}: vid.stab の作者によって推奨されています。下の例ではデフォルトの 5:5:1.0:5:5:1.0 を使っています。&lt;br /&gt;
* {{ic|1=fade=t=in:st=0:d=4}}: 4秒間のフェードインをファイルの冒頭に挟みます。&lt;br /&gt;
* {{ic|1=fade=t=out:st=60:d=4}}: 動画の60秒目から4秒間のフェードアウトを挟みます。&lt;br /&gt;
* {{ic|-c:a pcm_s16le}}: XAVC-S コーデックは pcm_s16be で記録されロスレスの pcm_s16le に変換されます。&lt;br /&gt;
&lt;br /&gt;
 $  ffmpeg -i input -vf vidstabtransform=smoothing=30:interpol=bicubic:input=transforms.trf,unsharp,fade=t=in:st=0:d=4,fade=t=out:st=60:d=4 -c:v libx264 -tune film -preset veryslow -crf 8 -x264opts fast_pskip=0 -c:a pcm_s16le output-stab_final&lt;br /&gt;
&lt;br /&gt;
=== x265 ===&lt;br /&gt;
&lt;br /&gt;
以下の例は、パラメータを指定せずに libx265 を呼び出した場合のデフォルトを示します (Constant Rate Factor  エンコード):&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -i input -c:v libx265 -crf 28 -preset medium -c:a libvorbis output.mp4&lt;br /&gt;
&lt;br /&gt;
詳細は FFmpeg の [https://trac.ffmpeg.org/wiki/Encode/H.265 H.265/HEVC Video Encoding Guide] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== シングルパス MPEG-2 (ニアロスレス) ===&lt;br /&gt;
&lt;br /&gt;
DVD 標準のパラメータに FFmpeg を自動的に設定することができます。約 30 FPS の DVD [[Wikipedia:ja:MPEG-2|MPEG-2]] にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target ntsc-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
約 24 FPS の DVD MPEG-2 にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target film-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
=== 字幕 ===&lt;br /&gt;
&lt;br /&gt;
==== 抽出 ====&lt;br /&gt;
&lt;br /&gt;
MPEG-2 や Matroska などのコンテナファイルに埋め込まれた字幕を抽出して、SRT や SSA、WebVTT などの字幕形式に変換することができます。[https://trac.ffmpeg.org/wiki/ExtractSubtitles]&lt;br /&gt;
&lt;br /&gt;
* ファイルに字幕ストリームが含まれているか確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffprobe -hide_banner foo.mkv|&lt;br /&gt;
...&lt;br /&gt;
Stream #0:0(und): Video: h264 (High), yuv420p, 1920x800 [SAR 1:1 DAR 12:5], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)&lt;br /&gt;
  Metadata:&lt;br /&gt;
  CREATION_TIME   : 2012-06-05 05:04:15&lt;br /&gt;
  LANGUAGE        : und&lt;br /&gt;
Stream #0:1(und): Audio: aac, 44100 Hz, stereo, fltp (default)&lt;br /&gt;
 Metadata:&lt;br /&gt;
 CREATION_TIME   : 2012-06-05 05:10:34&lt;br /&gt;
 LANGUAGE        : und&lt;br /&gt;
 HANDLER_NAME    : GPAC ISO Audio Handler&lt;br /&gt;
&#039;&#039;&#039;Stream #0:2: Subtitle: ssa (default)&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mkv}} には SSA の字幕が埋め込まれており、別のファイルに抽出することが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv foo.ssa&lt;br /&gt;
&lt;br /&gt;
字幕を望ましい形式 (例として [[Wikipedia:ja:SubRip|SubRip]]) に保存するには {{ic|-c:s srt}} を追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -c:s srt foo.srt&lt;br /&gt;
&lt;br /&gt;
複数の字幕が存在する場合、{{ic|-map &#039;&#039;key&#039;&#039;:&#039;&#039;stream&#039;&#039;}} パラメータを使用して抽出するストリームを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -map 0:2 foo.ssa&lt;br /&gt;
&lt;br /&gt;
==== ハードサブ ====&lt;br /&gt;
&lt;br /&gt;
(FFmpeg wiki の記事の [https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo HowToBurnSubtitlesIntoVideo] に基づく説明)&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Hardsub|ハードサブ]]は動画に字幕を焼きこむことになります。ハードサブは無効にすることが不可能で、言語の切り替えなどもできません。&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mpg}} に {{ic|foo.ssa}} の字幕を重ねるには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mpg -vf subtitles=foo.ssa out.mpg&lt;br /&gt;
&lt;br /&gt;
=== ボリュームゲイン ===&lt;br /&gt;
&lt;br /&gt;
ボリュームゲインは &#039;&#039;ffmpeg&#039;&#039; のフィルタ機能で変更できます。まず、{{ic|-af}} または {{ic|-filter:a}} を使って音声ストリームを選択し、次に、&#039;&#039;volume&#039;&#039; フィルタの後にそのストリームに対するゲインを指定してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;volume=1.5&#039;&#039;&#039; ouput.flac&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|1=volume=1.5}} によって 150% のボリュームゲインとなります。1.5 から 0.5 にすると、ボリュームが半分になります。ボリュームフィルタにはデシベル単位を渡すこともできます。{{ic|1=volume=3dB}} とすると、ボリュームが 3dB 増え、{{ic|1=volume=-3dB}} とすると 3dB 減ります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイルのボリュームゲインを倍にすることは、ボリュームを倍にすることと同じではありません。実験して正しいボリュームを見つける必要があります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;volumedetect&#039;&#039; フィルタを使用することで、ファイルの現在の平均ボリュームとピークボリュームを調べることができます: {{ic|ffmpeg -i input.flac -af volumedetect -f null -}}。そして、目標のレベルと現在のレベルとの差を &#039;&#039;volume&#039;&#039; フィルタに渡すことで、望みのレベルにすることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ボリュームノーマライゼーション ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loudnorm&#039;&#039; フィルタによるノーマライゼーションにより、平均ボリュームとピークボリュームを特定の値にすることができます。&#039;&#039;fmpeg&#039;&#039; のデフォルトの平均ラウドネス、ピークラウドネス、そしてレンジラウドネスの目標値 (それぞれ、-24 LUFS、-2 dBTP、7 LU) を使って、ファイルの知覚ラウドネスを正規化するには、以下のコマンドを使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;loudnorm&#039;&#039;&#039; output.flac&lt;br /&gt;
&lt;br /&gt;
別のラウドネスプロファイルを得るには、&#039;&#039;loudnorm&#039;&#039; フィルタのパラメータ {{ic|i}}、{{ic|tp}}、そして {{ic|lra}} を使って、それぞれ &#039;&#039;i&#039;&#039;ntegrated、&#039;&#039;t&#039;&#039;rue &#039;&#039;p&#039;&#039;eak、&#039;&#039;l&#039;&#039;oudness &#039;&#039;ra&#039;&#039;nge を指定してください。例えば、デフォルトよりも高い知覚ラウドネスにするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af loudnorm=i=-16:tp=-1.5:lra=11:print_format=summary output.flac&lt;br /&gt;
&lt;br /&gt;
この例では、オーディオファイルの入力ラウドネスと出力ラウドネスを表示するために {{ic|1=print_format=summary}} も追加しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|このフィルタはツーパスモードもサポートしています。最初の実行から測定されたラウドネス値を抽出し、その値を使って2回めの実行で線形ノーマライゼーションを行います。詳細は [https://ffmpeg.org/ffmpeg-filters.html#loudnorm ffmpeg loudnorm ドキュメント]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|ファイルの現在のラウドネスを調べるには、{{ic|1=ffmpeg -i input.flac -af loudnorm=print_format=summary -f null -}} を使ってください。}}&lt;br /&gt;
&lt;br /&gt;
=== 音声を抽出する ===&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg output.ext|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: ac3, 48000 Hz, stereo, s16, 384 kb/s&lt;br /&gt;
    Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s&lt;br /&gt;
    Stream #0.3: Audio: dts, 48000 Hz, 5.1 768 kb/s&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
多重化されている一番目の ({{ic|-map 0:1}}) [[Wikipedia:ja:ドルビーデジタル|AC-3]] でエンコードされた音声ストリームをファイルに抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;video&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
三番目の ({{ic|-map 0:3}}) [[Wikipedia:ja:デジタル・シアター・システムズ|DTS]] 音声ストリームをビットレートが 192 kb/s で[[Wikipedia:ja:サンプリングレート|サンプリングレート]]が 96000 Hz の [[Wikipedia:ja:AAC|AAC]] ファイルに変換する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:3 -acodec aac -b:a 192k -ar 96000 -vn &#039;&#039;output&#039;&#039;.aac&lt;br /&gt;
&lt;br /&gt;
{{ic|-vn}} は動画ストリームの処理を無効にします。&lt;br /&gt;
&lt;br /&gt;
時間を指定して音声ストリームを抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -ss 00:01:25 -t 00:00:05 -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;output&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
{{ic|-ss}} で開始時間を、{{ic|-t}} で長さを指定します。&lt;br /&gt;
&lt;br /&gt;
=== 音声を除去する ===&lt;br /&gt;
&lt;br /&gt;
# 一番目の動画ストリーム ({{ic|-map 0:0}}) と二番目の AC-3 音声ストリーム ({{ic|-map 0:2}}) をコピーします。&lt;br /&gt;
# AC-3 音声ストリームをビットレートが 128 kb/s でサンプリングレートが 48000 Hz の2チャンネルの MP3 に変換します。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:0 -map 0:2 -vcodec copy -acodec libmp3lame \&lt;br /&gt;
 -b:a 128k -ar 48000 -ac 2 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mkv|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|無駄な音声ストリームを削除することで余ったビットを画質の向上に割り当てることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ファイルを分割する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|copy}} コーデックを使うことでエンコーディングを変更せずにファイルの操作を行うことができます。例えば、次のコマンドであらゆるメディアファイルを簡単に2つに分けることが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -t 00:05:30 -c copy part1.ext -ss 00:05:30 -c copy part2.ext&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアビデオアクセラレーション ===&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/HWAccelIntro ハードウェアアクセラレーション API] を使用することで、エンコード/デコードのパフォーマンスを向上させることができます。しかし、特定の種類のコーデックしか使えませんし、場合によっては、ソフトウェアエンコードを使ったときと同じ結果が得られるとは限りません。&lt;br /&gt;
&lt;br /&gt;
==== VA-API ====&lt;br /&gt;
&lt;br /&gt;
Intel CPU ({{Pkg|intel-media-driver}} か {{Pkg|libva-intel-driver}} が必要) を使っている場合や、特定の AMD GPU でオープンソースの [[AMDGPU]] ドライバー ({{Pkg|mesa}} が必要) を使っている場合、[[VA-API]] を使用してエンコードとデコードができます。&lt;br /&gt;
&lt;br /&gt;
利用可能なパラメータとサポートされているプラットフォームに関する情報は、[https://trac.ffmpeg.org/wiki/Hardware/VAAPI FFmpeg のドキュメント]や [https://wiki.libav.org/Hardware/vaapi Libav のドキュメント]{{Dead link|2023|04|23|status=domain name not resolved}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
サポートされている H.264 コーデックを使用してエンコードする例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -threads 1 -i file.ext -vaapi_device /dev/dri/renderD128 -vcodec h264_vaapi -vf format=&#039;nv12|vaapi,hwupload&#039; output.mp4&lt;br /&gt;
&lt;br /&gt;
{{Note|通常、VA-API は、(FFmpeg パッケージの依存関係である) {{Pkg|libva}} に含まれるヘッダとライブラリが検出されれば、ビルド時に {{Pkg|ffmpeg}} の自動検出機能によって有効化されます。}}&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を以下に挙げます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf &#039;format=nv12,hwupload&#039; -c:v hevc_vaapi -f mp4 -rc_mode 1 -qp 25 output.mp4&lt;br /&gt;
&lt;br /&gt;
hevc_vaapi を使用する場合、-qp を 25 (視覚的に等価) からそれ以上 (28 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。h264_vaapi を使用する場合、18 (視覚的に等価) からそれ以上 (20 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。また、hevc_vaapi は h264_vaapi よりも 50% 高速にエンコードできるようです。&lt;br /&gt;
&lt;br /&gt;
==== NVIDIA NVENC/NVDEC ====&lt;br /&gt;
&lt;br /&gt;
プロプライエタリな [[NVIDIA]] ドライバを使用していて、{{Pkg|nvidia-utils}} パッケージがインストールされている場合、[[Wikipedia:Nvidia NVENC|NVENC]] と [[Wikipedia:Nvidia NVDEC|NVDEC]] をエンコード/デコードに使用できます。サポートされている GPU は [[Wikipedia:GeForce 600 series|600 シリーズ]]からです。詳細は [[ハードウェアビデオアクセラレーション#NVIDIA]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
テクニックが[https://web.archive.org/web/20190808223352/https://gist.github.com/Brainiarc7/8b471ff91319483cdb725f615908286e こちらの古い gist] に載っています。NVENC は [[CUDA]] と似ているため、ターミナルセッションからでも動作します。ハードウェア NVENC は Intel の VA-API エンコーダよりも数倍高速です。&lt;br /&gt;
&lt;br /&gt;
利用可能なオプションを表示するには以下のコマンドを実行してください ({{ic|hevc_nvenc}} も使えます):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -help encoder=h264_nvenc&lt;br /&gt;
&lt;br /&gt;
使用例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i source.ext -c:v h264_nvenc -rc constqp -qp 28 output.mkv&lt;br /&gt;
&lt;br /&gt;
==== Intel QuickSync (QSV) ====&lt;br /&gt;
&lt;br /&gt;
[https://www.intel.com/content/www/us/en/architecture-and-technology/quick-sync-video/quick-sync-video-general.html Intel® Quick Sync Video] は、[[Intel]] GPU のメディア処理機能を使用して高速なデコードとエンコードを行い、プロセッサが他のタスクを処理できるようにしてシステムの応答性を向上させます。&lt;br /&gt;
&lt;br /&gt;
これを使用するには、&#039;&#039;&#039;libmfx&#039;&#039;&#039; ランタイム実装がインストールされている必要があります。&#039;&#039;&#039;libmfx&#039;&#039;&#039; は、ハードウェアプラットフォームに基づいて実行時に実装をロードするディスパッチャライブラリです。&lt;br /&gt;
[[Wikipedia:ja:Broadwellマイクロアーキテクチャ|Broadwell]] から [[Wikipedia:ja:Rocket Lakeマイクロプロセッサ|Rocket Lake]] までの GPU で実行する場合、このライブラリは {{Pkg|intel-media-sdk}} をランタイム実装としてロードします。&lt;br /&gt;
[[Wikipedia:ja:Tiger Lakeマイクロアーキテクチャ|Tiger Lake]] 及びそれ以降の GPU においては、&#039;&#039;&#039;libmfx&#039;&#039;&#039; は {{Pkg|vpl-gpu-rt}} をロードします。[https://github.com/intel/vpl-gpu-rt#system-requirements vpl-gpu-rt system-requirements]も参照してください。&lt;br /&gt;
単一の Intel GPU を搭載しているシステムでは、ランタイム実装を変更したり選択したりできません。対応する実装は、ハードウェアに応じてインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
上記のランタイムをインストールしないと、以下のようなエラーが発生します:&lt;br /&gt;
&lt;br /&gt;
 [AVHWDeviceContext @ 0x558283838c80] Error initializing an MFX session: -3.&lt;br /&gt;
 Device creation failed: -1313558101.&lt;br /&gt;
&lt;br /&gt;
QuickSync の使用方法は [https://trac.ffmpeg.org/wiki/Hardware/QuickSync FFmpeg Wiki] で説明されています。&#039;&#039;libmfx&#039;&#039; を直接使わずに &#039;&#039;iHD&#039;&#039; ドライバか &#039;&#039;i965&#039;&#039; ドライバで [[VA-API]] [https://trac.ffmpeg.org/wiki/Hardware/VAAPI] を使用することが推奨されます。エンコード例は FFmpeg Wiki の &#039;&#039;Hybrid transcode&#039;&#039; セクションを、ドライバに関する指示は [[ハードウェアビデオアクセラレーション#VA-API の設定]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== AMD AMF ====&lt;br /&gt;
&lt;br /&gt;
AMD は、[[AMDGPU PRO]] プロプライエタリパッケージを使用して AMD Video Coding Engine (GPU エンコード) によって Linux で H264 のみのビデオエンコードを行うためのサポートを追加し、ffmpeg は AMF ビデオエンコードのサポートを追加しました。なので、h264_amf ビデオエンコーダを使ってエンコードするには、{{AUR|amf-amdgpu-pro}} が必要です。[[AMDGPU PRO]] パッケージによって提供されている ICD ファイルを環境変数でリンクする必要がある場合があります。そうしないと、ffmpeg はオープンな AMDGPU の ICD ファイルを使用してしまい、このビデオエンコーダを使用できません。エンコードを行うコマンドの例は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mkv -c:v h264_amf -rc 1 -b:v 8M h264_amf_8M.mp4&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を挙げましょう:&lt;br /&gt;
&lt;br /&gt;
 $ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mp4 -c:v h264_amf -f mp4 -rc 0 -qp_b 22 -qp_i 22 -qp_p 22 -quality 2 output.mp4&lt;br /&gt;
&lt;br /&gt;
3つの -qp_(b|i|p) を調整してください。18 にすると視覚的に等価で、22 から非常に小さな視覚的な損失が発生し始めます。&lt;br /&gt;
&lt;br /&gt;
=== アニメーション GIF ===&lt;br /&gt;
&lt;br /&gt;
一般に、アニメーション GIF は、画像品質が悪く、ファイルサイズが比較的大きく、音声サポートもないので、動画フォーマットとして素晴らしい選択肢とは言えません。しかし、ウェブでは依然として頻繁に使用されています。以下のコマンドを使うことで、動画をアニメーション GIF に変換することができます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.mp4 -vf &amp;quot;fps=10,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse&amp;quot; -loop -1 output.gif&lt;br /&gt;
&lt;br /&gt;
パレットフィルタを使って高品質な GIF を生成する方法については、http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html を見てください。&lt;br /&gt;
&lt;br /&gt;
== プリセットファイル ==&lt;br /&gt;
&lt;br /&gt;
デフォルトの[https://ffmpeg.org/ffmpeg.html#Preset-files プリセットファイル]で {{ic|~/.ffmpeg}} を作成する:&lt;br /&gt;
&lt;br /&gt;
 $ cp -iR /usr/share/ffmpeg ~/.ffmpeg&lt;br /&gt;
&lt;br /&gt;
新しいファイルを作成したりデフォルトのプリセットファイルを編集する:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.ffmpeg/libavcodec-vhq.ffpreset|2=&lt;br /&gt;
vtag=DX50&lt;br /&gt;
mbd=2&lt;br /&gt;
trellis=2&lt;br /&gt;
flags=+cbp+mv0&lt;br /&gt;
pre_dia_size=4&lt;br /&gt;
dia_size=4&lt;br /&gt;
precmp=4&lt;br /&gt;
cmp=4&lt;br /&gt;
subcmp=4&lt;br /&gt;
preme=2&lt;br /&gt;
qns=2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== プリセットファイルを使う ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vcodec}} の宣言の後に {{ic|-vpre}} オプションを加えて下さい。&lt;br /&gt;
&lt;br /&gt;
==== libavcodec-vhq.ffpreset ====&lt;br /&gt;
&lt;br /&gt;
* {{ic|libavcodec}} &#039;&#039;&#039;=&#039;&#039;&#039; vcodec/acodec の名前&lt;br /&gt;
* {{ic|vhq}} &#039;&#039;&#039;=&#039;&#039;&#039; 使用するプリセットの名前&lt;br /&gt;
* {{ic|ffpreset}} &#039;&#039;&#039;=&#039;&#039;&#039; FFmpeg プリセットの拡張子&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 出力を簡略化 ===&lt;br /&gt;
&lt;br /&gt;
以下のオプションを組み合わせて使うことで、出力の詳細さを好きなレベルまで減らすことができます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|-hide_banner}}: 著作権表示、ビルドオプション、そしてライブラリのバージョンが表示されなくなります&lt;br /&gt;
* {{ic|-loglevel}}: ログレベルを調整します (微調整オプションが利用できます)。例: {{ic|-loglevel warning}}&lt;br /&gt;
* {{ic|-nostats}}: エンコードの進捗/統計が表示されなくなります&lt;br /&gt;
&lt;br /&gt;
=== 動画の再生時間を出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 file.ext&lt;br /&gt;
&lt;br /&gt;
=== ストリーム情報を JSON で出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -v quiet -print_format json -show_format -show_streams file.ext&lt;br /&gt;
&lt;br /&gt;
=== X フレームごとに動画のスクリーンショットを作成する ===&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -an -s 319x180 -vf fps=1/&#039;&#039;&#039;100&#039;&#039;&#039; -qscale:v 75 %03d.jpg&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://ffmpeg.org/ffmpeg.html FFmpeg documentation] - 公式ドキュメント&lt;br /&gt;
* [https://trac.ffmpeg.org/wiki FFmpeg Wiki] - 公式 wiki&lt;br /&gt;
* [http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-x264.html Encoding with the x264 codec] - MEncoder ドキュメント&lt;br /&gt;
* [https://avidemux.org/admWiki/doku.php?id=tutorial:h.264 H.264 encoding guide] - Avidemux wiki&lt;br /&gt;
* [http://howto-pages.org/ffmpeg/ Using FFmpeg] - Linux how to pages&lt;br /&gt;
* サポートしている音声・動画ストリームの[https://ffmpeg.org/general.html#Supported-File-Formats-and-Codecs リスト]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|FFmpeg|2023-07-23|776189}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41027</id>
		<title>FFmpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41027"/>
		<updated>2025-10-25T08:19:01Z</updated>

		<summary type="html">&lt;p&gt;ELC: /* VA-API */ libva-mesa-driver → mesa&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:オーディオ]]&lt;br /&gt;
[[Category:ビデオ]]&lt;br /&gt;
[[en:FFmpeg]]&lt;br /&gt;
[[zh-hans:FFmpeg]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Flac を Mp3 に変換#FFmpeg を使う}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
プロジェクトの[https://www.ffmpeg.org/ ホームページ] より:&lt;br /&gt;
:FFmpeg は、音声と動画を記録、変換、そしてストリーミングするための完全でクロスプラットフォームなソリューションです。先進的な音声・動画コーデックライブラリである libavcodec が含まれています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;libav&#039;&#039; や &#039;&#039;avconv&#039;&#039; など FFmpeg のフォークも存在しています。FFmpeg の現在の状態やプロジェクトの違いについては [http://blog.pkh.me/p/13-the-ffmpeg-libav-situation.html The FFmpeg/Libav situation] を読んでください。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|ffmpeg}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
開発版は {{AUR|ffmpeg-git}} パッケージでインストールできます。可能な限り多くのオプション機能を有効化してビルドする {{AUR|ffmpeg-full}} も存在します。&lt;br /&gt;
&lt;br /&gt;
== エンコードの例 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* パラメータを正しい順序で指定することが重要です (例: input、video、filters、audio、output)。順序を間違うと、パラメータがスキップされたり、FFmpeg が実行されなかったりする場合があります。&lt;br /&gt;
* FFmpeg は、使用できる CPU スレッド数を自動的に選択するはずです。しかし、パラメータ {{ic|-threads &#039;&#039;number&#039;&#039;}} を使って、使用できるスレッド数を強制したほうが良い場合もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki#Encoding FFmpeg のエンコード wiki] と {{man|1|ffmpeg|EXAMPLES}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== スクリーンキャプチャ ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#x11grab x11grab] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の仮想デバイスが含まれており、ユーザのディスプレイ全体と音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
スクリーンショットを撮って {{ic|screen.png}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -i $DISPLAY -vframes 1 screen.png&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} はキャプチャする領域のサイズを指定します。&lt;br /&gt;
&lt;br /&gt;
ロスレスエンコードで音声なしのスクリーンキャストを撮って {{ic|screen.mkv}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -c:v ffvhuff screen.mkv&lt;br /&gt;
&lt;br /&gt;
ここでは、Huffyuv コーデックが使用されます。このコーデックは高速ですが、ファイルサイズが大きくなります。&lt;br /&gt;
&lt;br /&gt;
ロッシーエンコードで音声ありのスクリーンキャストを撮って {{ic|screen.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac screen.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
動画ストリームをファイルとして保存する必要はないが、画面共有のために仮想ウェブカメラとして使う場合、[[v4l2loopback#FFmpeg を使って X11 をキャストする]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Desktop#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウェブカメラの録画 ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#video4linux2_002c-v4l2 video4linux2] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の入力デバイスが含まれています。これらにより、ウェブカメラと音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドは、ウェブカメラから音声無しで動画を録画し {{ic|webcam.mp4}} に保存します。ウェブカメラが {{ic|/dev/video0}} として正しく認識されていると仮定します:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -c:v libx264 -preset ultrafast webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} は、ウェブカメラからの許可されるイメージサイズの最大値を指定します。&lt;br /&gt;
&lt;br /&gt;
上記のコマンドは無音動画を出力します。音声ありでウェブカメラから動画を録画し {{ic|webcam.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Webcam#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== VOB から他のコンテナに ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:VOB|VOB]] ファイルを一つのストリームに連結して MPEG-2 にするには:&lt;br /&gt;
&lt;br /&gt;
 $ cat f0.VOB f1.VOB f2.VOB | ffmpeg -i - out.mp2&lt;br /&gt;
&lt;br /&gt;
=== x264 ===&lt;br /&gt;
&lt;br /&gt;
==== ロスレス ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットは最速のエンコードをするので素早い録画をしたいときに有用です (スクリーンキャストなど):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset ultrafast -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットの反対は &#039;&#039;veryslow&#039;&#039; で、&#039;&#039;ultrafast&#039;&#039; よりもエンコードが遅いかわりに出力するファイルのサイズが小さくなります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset veryslow -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
どちらでも出力のクオリティは同じです。&lt;br /&gt;
&lt;br /&gt;
{{Tip|あなたの使っているコンピュータがリアルタイムで {{ic|-preset superfast}} を処理できる場合、{{ic|-preset ultrafast}} ではなく {{ic|-preset superfast}} を使用してください。Ultrafast は superfast よりも圧縮率が&#039;&#039;かなり&#039;&#039;落ちます。}}&lt;br /&gt;
&lt;br /&gt;
==== Constant rate factor ====&lt;br /&gt;
&lt;br /&gt;
出力する品質を指定したいときに使います。一般的に使われているのは最高の {{ic|-crf}} 値で、これでも許容範囲内の画質になります。値が低いほど画質は高くなります。0はロスレス、18は見た目がロスレス、そして23がデフォルトの値です。賢明な値は18から28の範囲になります。一番遅い {{ic|-preset}} を使うなら辛抱する必要があります。詳しくは [https://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuide x264 Encoding Guide] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039; -c:v libx264 -tune film -preset slow -crf 22 -x264opts fast_pskip=0 -c:a libmp3lame -aq 4 &#039;&#039;output&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{ic|-tune}} オプションを使うことで[https://forum.doom9.org/showthread.php?t=149394 エンコードされるメディアの中身とタイプにあった設定にすることができます]。&lt;br /&gt;
&lt;br /&gt;
==== ツーパス (超高品質) ====&lt;br /&gt;
&lt;br /&gt;
マルチパスの始めは動画の統計が記録されるため、音声が無効化されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -an -vcodec libx264 -pass 1 -preset veryslow \&lt;br /&gt;
 -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 -f rawvideo -y /dev/null&lt;br /&gt;
&lt;br /&gt;
コンテナの形式は出力ファイルの拡張子 ({{ic|.mkv}}) から自動的に検出して変換されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -acodec aac -b:a 256k -ar 96000 -vcodec libx264 \&lt;br /&gt;
 -pass 2 -preset veryslow -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
==== 動画の手ブレ補正 ====&lt;br /&gt;
&lt;br /&gt;
vbid.stab プラグインを使ってツーパスで手ブレ補正 (ビデオ安定化) を行います。&lt;br /&gt;
&lt;br /&gt;
===== ファーストパス =====&lt;br /&gt;
&lt;br /&gt;
ファーストパスでは補正パラメータを記録してファイルに書き出します、または視覚分析のテスト動画を作成します。&lt;br /&gt;
&lt;br /&gt;
* 補正パラメータを記録してファイルだけに書き出す: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf -f null -}}&lt;br /&gt;
* 補正パラメータをファイルに書きだして、視覚分析用のテストビデオ &amp;quot;output-stab&amp;quot; を作成: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf output-stab}}&lt;br /&gt;
&lt;br /&gt;
===== セカンドパス =====&lt;br /&gt;
&lt;br /&gt;
セカンドパスではファーストパスで作成した補正パラメータを解析して、それを使って &amp;quot;output-stab_final&amp;quot; を生成します。セカンドパスで他のフィルターを適用することもでき、変換を繰り返す必要をなくして画質を最大限保つことができます。下のコマンドでは以下のオプションを使っています:&lt;br /&gt;
&lt;br /&gt;
* {{ic|unsharp}}: vid.stab の作者によって推奨されています。下の例ではデフォルトの 5:5:1.0:5:5:1.0 を使っています。&lt;br /&gt;
* {{ic|1=fade=t=in:st=0:d=4}}: 4秒間のフェードインをファイルの冒頭に挟みます。&lt;br /&gt;
* {{ic|1=fade=t=out:st=60:d=4}}: 動画の60秒目から4秒間のフェードアウトを挟みます。&lt;br /&gt;
* {{ic|-c:a pcm_s16le}}: XAVC-S コーデックは pcm_s16be で記録されロスレスの pcm_s16le に変換されます。&lt;br /&gt;
&lt;br /&gt;
 $  ffmpeg -i input -vf vidstabtransform=smoothing=30:interpol=bicubic:input=transforms.trf,unsharp,fade=t=in:st=0:d=4,fade=t=out:st=60:d=4 -c:v libx264 -tune film -preset veryslow -crf 8 -x264opts fast_pskip=0 -c:a pcm_s16le output-stab_final&lt;br /&gt;
&lt;br /&gt;
=== x265 ===&lt;br /&gt;
&lt;br /&gt;
以下の例は、パラメータを指定せずに libx265 を呼び出した場合のデフォルトを示します (Constant Rate Factor  エンコード):&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -i input -c:v libx265 -crf 28 -preset medium -c:a libvorbis output.mp4&lt;br /&gt;
&lt;br /&gt;
詳細は FFmpeg の [https://trac.ffmpeg.org/wiki/Encode/H.265 H.265/HEVC Video Encoding Guide] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== シングルパス MPEG-2 (ニアロスレス) ===&lt;br /&gt;
&lt;br /&gt;
DVD 標準のパラメータに FFmpeg を自動的に設定することができます。約 30 FPS の DVD [[Wikipedia:ja:MPEG-2|MPEG-2]] にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target ntsc-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
約 24 FPS の DVD MPEG-2 にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target film-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
=== 字幕 ===&lt;br /&gt;
&lt;br /&gt;
==== 抽出 ====&lt;br /&gt;
&lt;br /&gt;
MPEG-2 や Matroska などのコンテナファイルに埋め込まれた字幕を抽出して、SRT や SSA、WebVTT などの字幕形式に変換することができます。[https://trac.ffmpeg.org/wiki/ExtractSubtitles]&lt;br /&gt;
&lt;br /&gt;
* ファイルに字幕ストリームが含まれているか確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffprobe -hide_banner foo.mkv|&lt;br /&gt;
...&lt;br /&gt;
Stream #0:0(und): Video: h264 (High), yuv420p, 1920x800 [SAR 1:1 DAR 12:5], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)&lt;br /&gt;
  Metadata:&lt;br /&gt;
  CREATION_TIME   : 2012-06-05 05:04:15&lt;br /&gt;
  LANGUAGE        : und&lt;br /&gt;
Stream #0:1(und): Audio: aac, 44100 Hz, stereo, fltp (default)&lt;br /&gt;
 Metadata:&lt;br /&gt;
 CREATION_TIME   : 2012-06-05 05:10:34&lt;br /&gt;
 LANGUAGE        : und&lt;br /&gt;
 HANDLER_NAME    : GPAC ISO Audio Handler&lt;br /&gt;
&#039;&#039;&#039;Stream #0:2: Subtitle: ssa (default)&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mkv}} には SSA の字幕が埋め込まれており、別のファイルに抽出することが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv foo.ssa&lt;br /&gt;
&lt;br /&gt;
字幕を望ましい形式 (例として [[Wikipedia:ja:SubRip|SubRip]]) に保存するには {{ic|-c:s srt}} を追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -c:s srt foo.srt&lt;br /&gt;
&lt;br /&gt;
複数の字幕が存在する場合、{{ic|-map &#039;&#039;key&#039;&#039;:&#039;&#039;stream&#039;&#039;}} パラメータを使用して抽出するストリームを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -map 0:2 foo.ssa&lt;br /&gt;
&lt;br /&gt;
==== ハードサブ ====&lt;br /&gt;
&lt;br /&gt;
(FFmpeg wiki の記事の [https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo HowToBurnSubtitlesIntoVideo] に基づく説明)&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Hardsub|ハードサブ]]は動画に字幕を焼きこむことになります。ハードサブは無効にすることが不可能で、言語の切り替えなどもできません。&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mpg}} に {{ic|foo.ssa}} の字幕を重ねるには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mpg -vf subtitles=foo.ssa out.mpg&lt;br /&gt;
&lt;br /&gt;
=== ボリュームゲイン ===&lt;br /&gt;
&lt;br /&gt;
ボリュームゲインは &#039;&#039;ffmpeg&#039;&#039; のフィルタ機能で変更できます。まず、{{ic|-af}} または {{ic|-filter:a}} を使って音声ストリームを選択し、次に、&#039;&#039;volume&#039;&#039; フィルタの後にそのストリームに対するゲインを指定してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;volume=1.5&#039;&#039;&#039; ouput.flac&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|1=volume=1.5}} によって 150% のボリュームゲインとなります。1.5 から 0.5 にすると、ボリュームが半分になります。ボリュームフィルタにはデシベル単位を渡すこともできます。{{ic|1=volume=3dB}} とすると、ボリュームが 3dB 増え、{{ic|1=volume=-3dB}} とすると 3dB 減ります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイルのボリュームゲインを倍にすることは、ボリュームを倍にすることと同じではありません。実験して正しいボリュームを見つける必要があります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;volumedetect&#039;&#039; フィルタを使用することで、ファイルの現在の平均ボリュームとピークボリュームを調べることができます: {{ic|ffmpeg -i input.flac -af volumedetect -f null -}}。そして、目標のレベルと現在のレベルとの差を &#039;&#039;volume&#039;&#039; フィルタに渡すことで、望みのレベルにすることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ボリュームノーマライゼーション ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loudnorm&#039;&#039; フィルタによるノーマライゼーションにより、平均ボリュームとピークボリュームを特定の値にすることができます。&#039;&#039;fmpeg&#039;&#039; のデフォルトの平均ラウドネス、ピークラウドネス、そしてレンジラウドネスの目標値 (それぞれ、-24 LUFS、-2 dBTP、7 LU) を使って、ファイルの知覚ラウドネスを正規化するには、以下のコマンドを使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;loudnorm&#039;&#039;&#039; output.flac&lt;br /&gt;
&lt;br /&gt;
別のラウドネスプロファイルを得るには、&#039;&#039;loudnorm&#039;&#039; フィルタのパラメータ {{ic|i}}、{{ic|tp}}、そして {{ic|lra}} を使って、それぞれ &#039;&#039;i&#039;&#039;ntegrated、&#039;&#039;t&#039;&#039;rue &#039;&#039;p&#039;&#039;eak、&#039;&#039;l&#039;&#039;oudness &#039;&#039;ra&#039;&#039;nge を指定してください。例えば、デフォルトよりも高い知覚ラウドネスにするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af loudnorm=i=-16:tp=-1.5:lra=11:print_format=summary output.flac&lt;br /&gt;
&lt;br /&gt;
この例では、オーディオファイルの入力ラウドネスと出力ラウドネスを表示するために {{ic|1=print_format=summary}} も追加しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|このフィルタはツーパスモードもサポートしています。最初の実行から測定されたラウドネス値を抽出し、その値を使って2回めの実行で線形ノーマライゼーションを行います。詳細は [https://ffmpeg.org/ffmpeg-filters.html#loudnorm ffmpeg loudnorm ドキュメント]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|ファイルの現在のラウドネスを調べるには、{{ic|1=ffmpeg -i input.flac -af loudnorm=print_format=summary -f null -}} を使ってください。}}&lt;br /&gt;
&lt;br /&gt;
=== 音声を抽出する ===&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg output.ext|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: ac3, 48000 Hz, stereo, s16, 384 kb/s&lt;br /&gt;
    Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s&lt;br /&gt;
    Stream #0.3: Audio: dts, 48000 Hz, 5.1 768 kb/s&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
多重化されている一番目の ({{ic|-map 0:1}}) [[Wikipedia:ja:ドルビーデジタル|AC-3]] でエンコードされた音声ストリームをファイルに抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;video&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
三番目の ({{ic|-map 0:3}}) [[Wikipedia:ja:デジタル・シアター・システムズ|DTS]] 音声ストリームをビットレートが 192 kb/s で[[Wikipedia:ja:サンプリングレート|サンプリングレート]]が 96000 Hz の [[Wikipedia:ja:AAC|AAC]] ファイルに変換する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:3 -acodec aac -b:a 192k -ar 96000 -vn &#039;&#039;output&#039;&#039;.aac&lt;br /&gt;
&lt;br /&gt;
{{ic|-vn}} は動画ストリームの処理を無効にします。&lt;br /&gt;
&lt;br /&gt;
時間を指定して音声ストリームを抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -ss 00:01:25 -t 00:00:05 -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;output&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
{{ic|-ss}} で開始時間を、{{ic|-t}} で長さを指定します。&lt;br /&gt;
&lt;br /&gt;
=== 音声を除去する ===&lt;br /&gt;
&lt;br /&gt;
# 一番目の動画ストリーム ({{ic|-map 0:0}}) と二番目の AC-3 音声ストリーム ({{ic|-map 0:2}}) をコピーします。&lt;br /&gt;
# AC-3 音声ストリームをビットレートが 128 kb/s でサンプリングレートが 48000 Hz の2チャンネルの MP3 に変換します。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:0 -map 0:2 -vcodec copy -acodec libmp3lame \&lt;br /&gt;
 -b:a 128k -ar 48000 -ac 2 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mkv|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|無駄な音声ストリームを削除することで余ったビットを画質の向上に割り当てることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ファイルを分割する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|copy}} コーデックを使うことでエンコーディングを変更せずにファイルの操作を行うことができます。例えば、次のコマンドであらゆるメディアファイルを簡単に2つに分けることが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -t 00:05:30 -c copy part1.ext -ss 00:05:30 -c copy part2.ext&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアビデオアクセラレーション ===&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/HWAccelIntro ハードウェアアクセラレーション API] を使用することで、エンコード/デコードのパフォーマンスを向上させることができます。しかし、特定の種類のコーデックしか使えませんし、場合によっては、ソフトウェアエンコードを使ったときと同じ結果が得られるとは限りません。&lt;br /&gt;
&lt;br /&gt;
==== VA-API ====&lt;br /&gt;
&lt;br /&gt;
Intel CPU ({{Pkg|intel-media-driver}} か {{Pkg|libva-intel-driver}} が必要) を使っている場合や、特定の AMD GPU でオープンソースの [[AMDGPU]] ドライバー ({{Pkg|mesa}} が必要) を使っている場合、[[VA-API]] を使用してエンコードとデコードができます。&lt;br /&gt;
&lt;br /&gt;
利用可能なパラメータとサポートされているプラットフォームに関する情報は、[https://trac.ffmpeg.org/wiki/Hardware/VAAPI FFmpeg のドキュメント]や [https://wiki.libav.org/Hardware/vaapi Libav のドキュメント]{{Dead link|2023|04|23|status=domain name not resolved}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
サポートされている H.264 コーデックを使用してエンコードする例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -threads 1 -i file.ext -vaapi_device /dev/dri/renderD128 -vcodec h264_vaapi -vf format=&#039;nv12|vaapi,hwupload&#039; output.mp4&lt;br /&gt;
&lt;br /&gt;
{{Note|通常、VA-API は、(FFmpeg パッケージの依存関係である) {{Pkg|libva}} に含まれるヘッダとライブラリが検出されれば、ビルド時に {{Pkg|ffmpeg}} の自動検出機能によって有効化されます。}}&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を以下に挙げます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf &#039;format=nv12,hwupload&#039; -c:v hevc_vaapi -f mp4 -rc_mode 1 -qp 25 output.mp4&lt;br /&gt;
&lt;br /&gt;
hevc_vaapi を使用する場合、-qp を 25 (視覚的に等価) からそれ以上 (28 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。h264_vaapi を使用する場合、18 (視覚的に等価) からそれ以上 (20 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。また、hevc_vaapi は h264_vaapi よりも 50% 高速にエンコードできるようです。&lt;br /&gt;
&lt;br /&gt;
==== NVIDIA NVENC/NVDEC ====&lt;br /&gt;
&lt;br /&gt;
プロプライエタリな [[NVIDIA]] ドライバを使用していて、{{Pkg|nvidia-utils}} パッケージがインストールされている場合、[[Wikipedia:Nvidia NVENC|NVENC]] と [[Wikipedia:Nvidia NVDEC|NVDEC]] をエンコード/デコードに使用できます。サポートされている GPU は [[Wikipedia:GeForce 600 series|600 シリーズ]]からです。詳細は [[ハードウェアビデオアクセラレーション#NVIDIA]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
テクニックが[https://web.archive.org/web/20190808223352/https://gist.github.com/Brainiarc7/8b471ff91319483cdb725f615908286e こちらの古い gist] に載っています。NVENC は [[CUDA]] と似ているため、ターミナルセッションからでも動作します。ハードウェア NVENC は Intel の VA-API エンコーダよりも数倍高速です。&lt;br /&gt;
&lt;br /&gt;
利用可能なオプションを表示するには以下のコマンドを実行してください ({{ic|hevc_nvenc}} も使えます):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -help encoder=h264_nvenc&lt;br /&gt;
&lt;br /&gt;
使用例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i source.ext -c:v h264_nvenc -rc constqp -qp 28 output.mkv&lt;br /&gt;
&lt;br /&gt;
==== Intel QuickSync (QSV) ====&lt;br /&gt;
&lt;br /&gt;
[https://www.intel.com/content/www/us/en/architecture-and-technology/quick-sync-video/quick-sync-video-general.html Intel® Quick Sync Video] は、[[Intel]] GPU のメディア処理機能を使用して高速なデコードとエンコードを行い、プロセッサが他のタスクを処理できるようにしてシステムの応答性を向上させます。&lt;br /&gt;
&lt;br /&gt;
これを使用するには、&#039;&#039;&#039;libmfx&#039;&#039;&#039; ランタイム実装がインストールされている必要があります。&#039;&#039;&#039;libmfx&#039;&#039;&#039; は、ハードウェアプラットフォームに基づいて実行時に実装をロードするディスパッチャライブラリです。&lt;br /&gt;
[[Wikipedia:ja:Broadwellマイクロアーキテクチャ|Broadwell]] から [[Wikipedia:ja:Rocket Lakeマイクロプロセッサ|Rocket Lake]] までの GPU で実行する場合、このライブラリは {{Pkg|intel-media-sdk}} をランタイム実装としてロードします。&lt;br /&gt;
[[Wikipedia:ja:Tiger Lakeマイクロアーキテクチャ|Tiger Lake]] 及びそれ以降の GPU においては、&#039;&#039;&#039;libmfx&#039;&#039;&#039; は {{Pkg|vpl-gpu-rt}} をロードします。[https://github.com/intel/vpl-gpu-rt#system-requirements vpl-gpu-rt system-requirements]も参照してください。&lt;br /&gt;
単一の Intel GPU を搭載しているシステムでは、ランタイム実装を変更したり選択したりできません。対応する実装は、ハードウェアに応じてインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
上記のランタイムをインストールしないと、以下のようなエラーが発生します:&lt;br /&gt;
&lt;br /&gt;
 [AVHWDeviceContext @ 0x558283838c80] Error initializing an MFX session: -3.&lt;br /&gt;
 Device creation failed: -1313558101.&lt;br /&gt;
&lt;br /&gt;
QuickSync の使用方法は [https://trac.ffmpeg.org/wiki/Hardware/QuickSync FFmpeg Wiki] で説明されています。&#039;&#039;libmfx&#039;&#039; を直接使わずに &#039;&#039;iHD&#039;&#039; ドライバか &#039;&#039;i965&#039;&#039; ドライバで [[VA-API]] [https://trac.ffmpeg.org/wiki/Hardware/VAAPI] を使用することが推奨されます。エンコード例は FFmpeg Wiki の &#039;&#039;Hybrid transcode&#039;&#039; セクションを、ドライバに関する指示は [[ハードウェアビデオアクセラレーション#VA-API の設定]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== AMD AMF ====&lt;br /&gt;
&lt;br /&gt;
AMD は、[[AMDGPU PRO]] プロプライエタリパッケージを使用して AMD Video Coding Engine (GPU エンコード) によって Linux で H264 のみのビデオエンコードを行うためのサポートを追加し、ffmpeg は AMF ビデオエンコードのサポートを追加しました。なので、h264_amf ビデオエンコーダを使ってエンコードするには、{{AUR|amf-amdgpu-pro}} が必要です。[[AMDGPU PRO]] パッケージによって提供されている ICD ファイルを環境変数でリンクする必要がある場合があります。そうしないと、ffmpeg はオープンな AMDGPU の ICD ファイルを使用してしまい、このビデオエンコーダを使用できません。エンコードを行うコマンドの例は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mkv -c:v h264_amf -rc 1 -b:v 8M h264_amf_8M.mp4&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を挙げましょう:&lt;br /&gt;
&lt;br /&gt;
 $ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mp4 -c:v h264_amf -f mp4 -rc 0 -qp_b 22 -qp_i 22 -qp_p 22 -quality 2 output.mp4&lt;br /&gt;
&lt;br /&gt;
3つの -qp_(b|i|p) を調整してください。18 にすると視覚的に等価で、22 から非常に小さな視覚的な損失が発生し始めます。&lt;br /&gt;
&lt;br /&gt;
=== アニメーション GIF ===&lt;br /&gt;
&lt;br /&gt;
一般に、アニメーション GIF は、画像品質が悪く、ファイルサイズが比較的大きく、音声サポートもないので、動画フォーマットとして素晴らしい選択肢とは言えません。しかし、ウェブでは依然として頻繁に使用されています。以下のコマンドを使うことで、動画をアニメーション GIF に変換することができます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.mp4 -vf &amp;quot;fps=10,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse&amp;quot; -loop -1 output.gif&lt;br /&gt;
&lt;br /&gt;
パレットフィルタを使って高品質な GIF を生成する方法については、http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html を見てください。&lt;br /&gt;
&lt;br /&gt;
== プリセットファイル ==&lt;br /&gt;
&lt;br /&gt;
デフォルトの[https://ffmpeg.org/ffmpeg.html#Preset-files プリセットファイル]で {{ic|~/.ffmpeg}} を作成する:&lt;br /&gt;
&lt;br /&gt;
 $ cp -iR /usr/share/ffmpeg ~/.ffmpeg&lt;br /&gt;
&lt;br /&gt;
新しいファイルを作成したりデフォルトのプリセットファイルを編集する:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.ffmpeg/libavcodec-vhq.ffpreset|2=&lt;br /&gt;
vtag=DX50&lt;br /&gt;
mbd=2&lt;br /&gt;
trellis=2&lt;br /&gt;
flags=+cbp+mv0&lt;br /&gt;
pre_dia_size=4&lt;br /&gt;
dia_size=4&lt;br /&gt;
precmp=4&lt;br /&gt;
cmp=4&lt;br /&gt;
subcmp=4&lt;br /&gt;
preme=2&lt;br /&gt;
qns=2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== プリセットファイルを使う ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vcodec}} の宣言の後に {{ic|-vpre}} オプションを加えて下さい。&lt;br /&gt;
&lt;br /&gt;
==== libavcodec-vhq.ffpreset ====&lt;br /&gt;
&lt;br /&gt;
* {{ic|libavcodec}} &#039;&#039;&#039;=&#039;&#039;&#039; vcodec/acodec の名前&lt;br /&gt;
* {{ic|vhq}} &#039;&#039;&#039;=&#039;&#039;&#039; 使用するプリセットの名前&lt;br /&gt;
* {{ic|ffpreset}} &#039;&#039;&#039;=&#039;&#039;&#039; FFmpeg プリセットの拡張子&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 出力を簡略化 ===&lt;br /&gt;
&lt;br /&gt;
以下のオプションを組み合わせて使うことで、出力の詳細さを好きなレベルまで減らすことができます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|-hide_banner}}: 著作権表示、ビルドオプション、そしてライブラリのバージョンが表示されなくなります&lt;br /&gt;
* {{ic|-loglevel}}: ログレベルを調整します (微調整オプションが利用できます)。例: {{ic|-loglevel warning}}&lt;br /&gt;
* {{ic|-nostats}}: エンコードの進捗/統計が表示されなくなります&lt;br /&gt;
&lt;br /&gt;
=== 動画の再生時間を出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 file.ext&lt;br /&gt;
&lt;br /&gt;
=== ストリーム情報を JSON で出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -v quiet -print_format json -show_format -show_streams file.ext&lt;br /&gt;
&lt;br /&gt;
=== X フレームごとに動画のスクリーンショットを作成する ===&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -an -s 319x180 -vf fps=1/&#039;&#039;&#039;100&#039;&#039;&#039; -qscale:v 75 %03d.jpg&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://ffmpeg.org/ffmpeg.html FFmpeg documentation] - 公式ドキュメント&lt;br /&gt;
* [https://trac.ffmpeg.org/wiki FFmpeg Wiki] - 公式 wiki&lt;br /&gt;
* [http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-x264.html Encoding with the x264 codec] - MEncoder ドキュメント&lt;br /&gt;
* [https://avidemux.org/admWiki/doku.php?id=tutorial:h.264 H.264 encoding guide] - Avidemux wiki&lt;br /&gt;
* [http://howto-pages.org/ffmpeg/ Using FFmpeg] - Linux how to pages&lt;br /&gt;
* サポートしている音声・動画ストリームの[https://ffmpeg.org/general.html#Supported-File-Formats-and-Codecs リスト]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|FFmpeg|2023-07-23|776189}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41025</id>
		<title>FFmpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=FFmpeg&amp;diff=41025"/>
		<updated>2025-10-24T19:14:22Z</updated>

		<summary type="html">&lt;p&gt;ELC: 英語ページより更新&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:オーディオ]]&lt;br /&gt;
[[Category:ビデオ]]&lt;br /&gt;
[[en:FFmpeg]]&lt;br /&gt;
[[zh-hans:FFmpeg]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Flac を Mp3 に変換#FFmpeg を使う}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
プロジェクトの[https://www.ffmpeg.org/ ホームページ] より:&lt;br /&gt;
:FFmpeg は、音声と動画を記録、変換、そしてストリーミングするための完全でクロスプラットフォームなソリューションです。先進的な音声・動画コーデックライブラリである libavcodec が含まれています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;libav&#039;&#039; や &#039;&#039;avconv&#039;&#039; など FFmpeg のフォークも存在しています。FFmpeg の現在の状態やプロジェクトの違いについては [http://blog.pkh.me/p/13-the-ffmpeg-libav-situation.html The FFmpeg/Libav situation] を読んでください。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|ffmpeg}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
開発版は {{AUR|ffmpeg-git}} パッケージでインストールできます。可能な限り多くのオプション機能を有効化してビルドする {{AUR|ffmpeg-full}} も存在します。&lt;br /&gt;
&lt;br /&gt;
== エンコードの例 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* パラメータを正しい順序で指定することが重要です (例: input、video、filters、audio、output)。順序を間違うと、パラメータがスキップされたり、FFmpeg が実行されなかったりする場合があります。&lt;br /&gt;
* FFmpeg は、使用できる CPU スレッド数を自動的に選択するはずです。しかし、パラメータ {{ic|-threads &#039;&#039;number&#039;&#039;}} を使って、使用できるスレッド数を強制したほうが良い場合もあります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki#Encoding FFmpeg のエンコード wiki] と {{man|1|ffmpeg|EXAMPLES}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== スクリーンキャプチャ ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#x11grab x11grab] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の仮想デバイスが含まれており、ユーザのディスプレイ全体と音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
スクリーンショットを撮って {{ic|screen.png}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -i $DISPLAY -vframes 1 screen.png&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} はキャプチャする領域のサイズを指定します。&lt;br /&gt;
&lt;br /&gt;
ロスレスエンコードで音声なしのスクリーンキャストを撮って {{ic|screen.mkv}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -c:v ffvhuff screen.mkv&lt;br /&gt;
&lt;br /&gt;
ここでは、Huffyuv コーデックが使用されます。このコーデックは高速ですが、ファイルサイズが大きくなります。&lt;br /&gt;
&lt;br /&gt;
ロッシーエンコードで音声ありのスクリーンキャストを撮って {{ic|screen.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f x11grab -video_size 1920x1080 -framerate 25 -i $DISPLAY -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac screen.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
動画ストリームをファイルとして保存する必要はないが、画面共有のために仮想ウェブカメラとして使う場合、[[v4l2loopback#FFmpeg を使って X11 をキャストする]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Desktop#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウェブカメラの録画 ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg には [https://www.ffmpeg.org/ffmpeg-devices.html#video4linux2_002c-v4l2 video4linux2] と [https://www.ffmpeg.org/ffmpeg-devices.html#alsa-1 ALSA] の入力デバイスが含まれています。これらにより、ウェブカメラと音声入力をキャプチャすることができます。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドは、ウェブカメラから音声無しで動画を録画し {{ic|webcam.mp4}} に保存します。ウェブカメラが {{ic|/dev/video0}} として正しく認識されていると仮定します:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -c:v libx264 -preset ultrafast webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|-video_size}} は、ウェブカメラからの許可されるイメージサイズの最大値を指定します。&lt;br /&gt;
&lt;br /&gt;
上記のコマンドは無音動画を出力します。音声ありでウェブカメラから動画を録画し {{ic|webcam.mp4}} に保存するには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -f alsa -i default -c:v libx264 -preset ultrafast -c:a aac webcam.mp4&lt;br /&gt;
&lt;br /&gt;
ここでは、x264 コーデックが最も高速なオプションで使用されます。他のコーデックを使用することもできます。(ディスクのパフォーマンスが十分でなかったり、エンコードが遅かったりで) 各フレームの書き込みが遅すぎる場合、フレームがドロップされ、動画出力がカクカクになります。&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/Capture/Webcam#Linux 公式のドキュメント]も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== VOB から他のコンテナに ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:VOB|VOB]] ファイルを一つのストリームに連結して MPEG-2 にするには:&lt;br /&gt;
&lt;br /&gt;
 $ cat f0.VOB f1.VOB f2.VOB | ffmpeg -i - out.mp2&lt;br /&gt;
&lt;br /&gt;
=== x264 ===&lt;br /&gt;
&lt;br /&gt;
==== ロスレス ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットは最速のエンコードをするので素早い録画をしたいときに有用です (スクリーンキャストなど):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset ultrafast -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ultrafast&#039;&#039; プリセットの反対は &#039;&#039;veryslow&#039;&#039; で、&#039;&#039;ultrafast&#039;&#039; よりもエンコードが遅いかわりに出力するファイルのサイズが小さくなります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input -c:v libx264 -preset veryslow -qp 0 -c:a copy output&lt;br /&gt;
&lt;br /&gt;
どちらでも出力のクオリティは同じです。&lt;br /&gt;
&lt;br /&gt;
{{Tip|あなたの使っているコンピュータがリアルタイムで {{ic|-preset superfast}} を処理できる場合、{{ic|-preset ultrafast}} ではなく {{ic|-preset superfast}} を使用してください。Ultrafast は superfast よりも圧縮率が&#039;&#039;かなり&#039;&#039;落ちます。}}&lt;br /&gt;
&lt;br /&gt;
==== Constant rate factor ====&lt;br /&gt;
&lt;br /&gt;
出力する品質を指定したいときに使います。一般的に使われているのは最高の {{ic|-crf}} 値で、これでも許容範囲内の画質になります。値が低いほど画質は高くなります。0はロスレス、18は見た目がロスレス、そして23がデフォルトの値です。賢明な値は18から28の範囲になります。一番遅い {{ic|-preset}} を使うなら辛抱する必要があります。詳しくは [https://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuide x264 Encoding Guide] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039; -c:v libx264 -tune film -preset slow -crf 22 -x264opts fast_pskip=0 -c:a libmp3lame -aq 4 &#039;&#039;output&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{ic|-tune}} オプションを使うことで[https://forum.doom9.org/showthread.php?t=149394 エンコードされるメディアの中身とタイプにあった設定にすることができます]。&lt;br /&gt;
&lt;br /&gt;
==== ツーパス (超高品質) ====&lt;br /&gt;
&lt;br /&gt;
マルチパスの始めは動画の統計が記録されるため、音声が無効化されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -an -vcodec libx264 -pass 1 -preset veryslow \&lt;br /&gt;
 -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 -f rawvideo -y /dev/null&lt;br /&gt;
&lt;br /&gt;
コンテナの形式は出力ファイルの拡張子 ({{ic|.mkv}}) から自動的に検出して変換されます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -acodec aac -b:a 256k -ar 96000 -vcodec libx264 \&lt;br /&gt;
 -pass 2 -preset veryslow -threads 0 -b:v 3000k -x264opts frameref=15:fast_pskip=0 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
==== 動画の手ブレ補正 ====&lt;br /&gt;
&lt;br /&gt;
vbid.stab プラグインを使ってツーパスで手ブレ補正 (ビデオ安定化) を行います。&lt;br /&gt;
&lt;br /&gt;
===== ファーストパス =====&lt;br /&gt;
&lt;br /&gt;
ファーストパスでは補正パラメータを記録してファイルに書き出します、または視覚分析のテスト動画を作成します。&lt;br /&gt;
&lt;br /&gt;
* 補正パラメータを記録してファイルだけに書き出す: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf -f null -}}&lt;br /&gt;
* 補正パラメータをファイルに書きだして、視覚分析用のテストビデオ &amp;quot;output-stab&amp;quot; を作成: {{bc|1=$ ffmpeg -i input -vf vidstabdetect=stepsize=4:mincontrast=0:result=transforms.trf output-stab}}&lt;br /&gt;
&lt;br /&gt;
===== セカンドパス =====&lt;br /&gt;
&lt;br /&gt;
セカンドパスではファーストパスで作成した補正パラメータを解析して、それを使って &amp;quot;output-stab_final&amp;quot; を生成します。セカンドパスで他のフィルターを適用することもでき、変換を繰り返す必要をなくして画質を最大限保つことができます。下のコマンドでは以下のオプションを使っています:&lt;br /&gt;
&lt;br /&gt;
* {{ic|unsharp}}: vid.stab の作者によって推奨されています。下の例ではデフォルトの 5:5:1.0:5:5:1.0 を使っています。&lt;br /&gt;
* {{ic|1=fade=t=in:st=0:d=4}}: 4秒間のフェードインをファイルの冒頭に挟みます。&lt;br /&gt;
* {{ic|1=fade=t=out:st=60:d=4}}: 動画の60秒目から4秒間のフェードアウトを挟みます。&lt;br /&gt;
* {{ic|-c:a pcm_s16le}}: XAVC-S コーデックは pcm_s16be で記録されロスレスの pcm_s16le に変換されます。&lt;br /&gt;
&lt;br /&gt;
 $  ffmpeg -i input -vf vidstabtransform=smoothing=30:interpol=bicubic:input=transforms.trf,unsharp,fade=t=in:st=0:d=4,fade=t=out:st=60:d=4 -c:v libx264 -tune film -preset veryslow -crf 8 -x264opts fast_pskip=0 -c:a pcm_s16le output-stab_final&lt;br /&gt;
&lt;br /&gt;
=== x265 ===&lt;br /&gt;
&lt;br /&gt;
以下の例は、パラメータを指定せずに libx265 を呼び出した場合のデフォルトを示します (Constant Rate Factor  エンコード):&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -i input -c:v libx265 -crf 28 -preset medium -c:a libvorbis output.mp4&lt;br /&gt;
&lt;br /&gt;
詳細は FFmpeg の [https://trac.ffmpeg.org/wiki/Encode/H.265 H.265/HEVC Video Encoding Guide] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== シングルパス MPEG-2 (ニアロスレス) ===&lt;br /&gt;
&lt;br /&gt;
DVD 標準のパラメータに FFmpeg を自動的に設定することができます。約 30 FPS の DVD [[Wikipedia:ja:MPEG-2|MPEG-2]] にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target ntsc-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
約 24 FPS の DVD MPEG-2 にエンコードするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.VOB -target film-dvd &#039;&#039;output&#039;&#039;.mpg&lt;br /&gt;
&lt;br /&gt;
=== 字幕 ===&lt;br /&gt;
&lt;br /&gt;
==== 抽出 ====&lt;br /&gt;
&lt;br /&gt;
MPEG-2 や Matroska などのコンテナファイルに埋め込まれた字幕を抽出して、SRT や SSA、WebVTT などの字幕形式に変換することができます。[https://trac.ffmpeg.org/wiki/ExtractSubtitles]&lt;br /&gt;
&lt;br /&gt;
* ファイルに字幕ストリームが含まれているか確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffprobe -hide_banner foo.mkv|&lt;br /&gt;
...&lt;br /&gt;
Stream #0:0(und): Video: h264 (High), yuv420p, 1920x800 [SAR 1:1 DAR 12:5], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)&lt;br /&gt;
  Metadata:&lt;br /&gt;
  CREATION_TIME   : 2012-06-05 05:04:15&lt;br /&gt;
  LANGUAGE        : und&lt;br /&gt;
Stream #0:1(und): Audio: aac, 44100 Hz, stereo, fltp (default)&lt;br /&gt;
 Metadata:&lt;br /&gt;
 CREATION_TIME   : 2012-06-05 05:10:34&lt;br /&gt;
 LANGUAGE        : und&lt;br /&gt;
 HANDLER_NAME    : GPAC ISO Audio Handler&lt;br /&gt;
&#039;&#039;&#039;Stream #0:2: Subtitle: ssa (default)&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mkv}} には SSA の字幕が埋め込まれており、別のファイルに抽出することが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv foo.ssa&lt;br /&gt;
&lt;br /&gt;
字幕を望ましい形式 (例として [[Wikipedia:ja:SubRip|SubRip]]) に保存するには {{ic|-c:s srt}} を追加してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -c:s srt foo.srt&lt;br /&gt;
&lt;br /&gt;
複数の字幕が存在する場合、{{ic|-map &#039;&#039;key&#039;&#039;:&#039;&#039;stream&#039;&#039;}} パラメータを使用して抽出するストリームを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mkv -map 0:2 foo.ssa&lt;br /&gt;
&lt;br /&gt;
==== ハードサブ ====&lt;br /&gt;
&lt;br /&gt;
(FFmpeg wiki の記事の [https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo HowToBurnSubtitlesIntoVideo] に基づく説明)&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Hardsub|ハードサブ]]は動画に字幕を焼きこむことになります。ハードサブは無効にすることが不可能で、言語の切り替えなどもできません。&lt;br /&gt;
&lt;br /&gt;
* {{ic|foo.mpg}} に {{ic|foo.ssa}} の字幕を重ねるには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i foo.mpg -vf subtitles=foo.ssa out.mpg&lt;br /&gt;
&lt;br /&gt;
=== ボリュームゲイン ===&lt;br /&gt;
&lt;br /&gt;
ボリュームゲインは &#039;&#039;ffmpeg&#039;&#039; のフィルタ機能で変更できます。まず、{{ic|-af}} または {{ic|-filter:a}} を使って音声ストリームを選択し、次に、&#039;&#039;volume&#039;&#039; フィルタの後にそのストリームに対するゲインを指定してください。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;volume=1.5&#039;&#039;&#039; ouput.flac&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|1=volume=1.5}} によって 150% のボリュームゲインとなります。1.5 から 0.5 にすると、ボリュームが半分になります。ボリュームフィルタにはデシベル単位を渡すこともできます。{{ic|1=volume=3dB}} とすると、ボリュームが 3dB 増え、{{ic|1=volume=-3dB}} とすると 3dB 減ります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイルのボリュームゲインを倍にすることは、ボリュームを倍にすることと同じではありません。実験して正しいボリュームを見つける必要があります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;volumedetect&#039;&#039; フィルタを使用することで、ファイルの現在の平均ボリュームとピークボリュームを調べることができます: {{ic|ffmpeg -i input.flac -af volumedetect -f null -}}。そして、目標のレベルと現在のレベルとの差を &#039;&#039;volume&#039;&#039; フィルタに渡すことで、望みのレベルにすることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ボリュームノーマライゼーション ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;loudnorm&#039;&#039; フィルタによるノーマライゼーションにより、平均ボリュームとピークボリュームを特定の値にすることができます。&#039;&#039;fmpeg&#039;&#039; のデフォルトの平均ラウドネス、ピークラウドネス、そしてレンジラウドネスの目標値 (それぞれ、-24 LUFS、-2 dBTP、7 LU) を使って、ファイルの知覚ラウドネスを正規化するには、以下のコマンドを使用してください:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af &#039;&#039;&#039;loudnorm&#039;&#039;&#039; output.flac&lt;br /&gt;
&lt;br /&gt;
別のラウドネスプロファイルを得るには、&#039;&#039;loudnorm&#039;&#039; フィルタのパラメータ {{ic|i}}、{{ic|tp}}、そして {{ic|lra}} を使って、それぞれ &#039;&#039;i&#039;&#039;ntegrated、&#039;&#039;t&#039;&#039;rue &#039;&#039;p&#039;&#039;eak、&#039;&#039;l&#039;&#039;oudness &#039;&#039;ra&#039;&#039;nge を指定してください。例えば、デフォルトよりも高い知覚ラウドネスにするには:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.flac -af loudnorm=i=-16:tp=-1.5:lra=11:print_format=summary output.flac&lt;br /&gt;
&lt;br /&gt;
この例では、オーディオファイルの入力ラウドネスと出力ラウドネスを表示するために {{ic|1=print_format=summary}} も追加しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|このフィルタはツーパスモードもサポートしています。最初の実行から測定されたラウドネス値を抽出し、その値を使って2回めの実行で線形ノーマライゼーションを行います。詳細は [https://ffmpeg.org/ffmpeg-filters.html#loudnorm ffmpeg loudnorm ドキュメント]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|ファイルの現在のラウドネスを調べるには、{{ic|1=ffmpeg -i input.flac -af loudnorm=print_format=summary -f null -}} を使ってください。}}&lt;br /&gt;
&lt;br /&gt;
=== 音声を抽出する ===&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg output.ext|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: ac3, 48000 Hz, stereo, s16, 384 kb/s&lt;br /&gt;
    Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s&lt;br /&gt;
    Stream #0.3: Audio: dts, 48000 Hz, 5.1 768 kb/s&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
多重化されている一番目の ({{ic|-map 0:1}}) [[Wikipedia:ja:ドルビーデジタル|AC-3]] でエンコードされた音声ストリームをファイルに抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;video&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
三番目の ({{ic|-map 0:3}}) [[Wikipedia:ja:デジタル・シアター・システムズ|DTS]] 音声ストリームをビットレートが 192 kb/s で[[Wikipedia:ja:サンプリングレート|サンプリングレート]]が 96000 Hz の [[Wikipedia:ja:AAC|AAC]] ファイルに変換する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:3 -acodec aac -b:a 192k -ar 96000 -vn &#039;&#039;output&#039;&#039;.aac&lt;br /&gt;
&lt;br /&gt;
{{ic|-vn}} は動画ストリームの処理を無効にします。&lt;br /&gt;
&lt;br /&gt;
時間を指定して音声ストリームを抽出する:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -ss 00:01:25 -t 00:00:05 -i &#039;&#039;video&#039;&#039;.mpg -map 0:1 -acodec copy -vn &#039;&#039;output&#039;&#039;.ac3&lt;br /&gt;
&lt;br /&gt;
{{ic|-ss}} で開始時間を、{{ic|-t}} で長さを指定します。&lt;br /&gt;
&lt;br /&gt;
=== 音声を除去する ===&lt;br /&gt;
&lt;br /&gt;
# 一番目の動画ストリーム ({{ic|-map 0:0}}) と二番目の AC-3 音声ストリーム ({{ic|-map 0:2}}) をコピーします。&lt;br /&gt;
# AC-3 音声ストリームをビットレートが 128 kb/s でサンプリングレートが 48000 Hz の2チャンネルの MP3 に変換します。&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i &#039;&#039;video&#039;&#039;.mpg -map 0:0 -map 0:2 -vcodec copy -acodec libmp3lame \&lt;br /&gt;
 -b:a 128k -ar 48000 -ac 2 &#039;&#039;video&#039;&#039;.mkv&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ffmpeg -i &#039;&#039;video&#039;&#039;.mkv|&lt;br /&gt;
...&lt;br /&gt;
Input #0, avi, from &#039;&#039;&#039;video&#039;&#039;.mpg&#039;:&lt;br /&gt;
  Duration: 01:58:28.96, start: 0.000000, bitrate: 3000 kb/s&lt;br /&gt;
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc&lt;br /&gt;
    Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|無駄な音声ストリームを削除することで余ったビットを画質の向上に割り当てることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ファイルを分割する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|copy}} コーデックを使うことでエンコーディングを変更せずにファイルの操作を行うことができます。例えば、次のコマンドであらゆるメディアファイルを簡単に2つに分けることが可能です:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -t 00:05:30 -c copy part1.ext -ss 00:05:30 -c copy part2.ext&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアビデオアクセラレーション ===&lt;br /&gt;
&lt;br /&gt;
[https://trac.ffmpeg.org/wiki/HWAccelIntro ハードウェアアクセラレーション API] を使用することで、エンコード/デコードのパフォーマンスを向上させることができます。しかし、特定の種類のコーデックしか使えませんし、場合によっては、ソフトウェアエンコードを使ったときと同じ結果が得られるとは限りません。&lt;br /&gt;
&lt;br /&gt;
==== VA-API ====&lt;br /&gt;
&lt;br /&gt;
Intel CPU ({{Pkg|intel-media-driver}} か {{Pkg|libva-intel-driver}} が必要) を使っている場合や、特定の AMD GPU でオープンソースの [[AMDGPU]] ドライバー ({{Pkg|libva-mesa-driver}} が必要) を使っている場合、[[VA-API]] を使用してエンコードとデコードができます。&lt;br /&gt;
&lt;br /&gt;
利用可能なパラメータとサポートされているプラットフォームに関する情報は、[https://trac.ffmpeg.org/wiki/Hardware/VAAPI FFmpeg のドキュメント]や [https://wiki.libav.org/Hardware/vaapi Libav のドキュメント]{{Dead link|2023|04|23|status=domain name not resolved}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
サポートされている H.264 コーデックを使用してエンコードする例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -threads 1 -i file.ext -vaapi_device /dev/dri/renderD128 -vcodec h264_vaapi -vf format=&#039;nv12|vaapi,hwupload&#039; output.mp4&lt;br /&gt;
&lt;br /&gt;
{{Note|通常、VA-API は、(FFmpeg パッケージの依存関係である) {{Pkg|libva}} に含まれるヘッダとライブラリが検出されれば、ビルド時に {{Pkg|ffmpeg}} の自動検出機能によって有効化されます。}}&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を以下に挙げます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf &#039;format=nv12,hwupload&#039; -c:v hevc_vaapi -f mp4 -rc_mode 1 -qp 25 output.mp4&lt;br /&gt;
&lt;br /&gt;
hevc_vaapi を使用する場合、-qp を 25 (視覚的に等価) からそれ以上 (28 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。h264_vaapi を使用する場合、18 (視覚的に等価) からそれ以上 (20 から非常に小さな視覚的な損失が発生し始めます) の間で調整してください。また、hevc_vaapi は h264_vaapi よりも 50% 高速にエンコードできるようです。&lt;br /&gt;
&lt;br /&gt;
==== NVIDIA NVENC/NVDEC ====&lt;br /&gt;
&lt;br /&gt;
プロプライエタリな [[NVIDIA]] ドライバを使用していて、{{Pkg|nvidia-utils}} パッケージがインストールされている場合、[[Wikipedia:Nvidia NVENC|NVENC]] と [[Wikipedia:Nvidia NVDEC|NVDEC]] をエンコード/デコードに使用できます。サポートされている GPU は [[Wikipedia:GeForce 600 series|600 シリーズ]]からです。詳細は [[ハードウェアビデオアクセラレーション#NVIDIA]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
テクニックが[https://web.archive.org/web/20190808223352/https://gist.github.com/Brainiarc7/8b471ff91319483cdb725f615908286e こちらの古い gist] に載っています。NVENC は [[CUDA]] と似ているため、ターミナルセッションからでも動作します。ハードウェア NVENC は Intel の VA-API エンコーダよりも数倍高速です。&lt;br /&gt;
&lt;br /&gt;
利用可能なオプションを表示するには以下のコマンドを実行してください ({{ic|hevc_nvenc}} も使えます):&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -help encoder=h264_nvenc&lt;br /&gt;
&lt;br /&gt;
使用例:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i source.ext -c:v h264_nvenc -rc constqp -qp 28 output.mkv&lt;br /&gt;
&lt;br /&gt;
==== Intel QuickSync (QSV) ====&lt;br /&gt;
&lt;br /&gt;
[https://www.intel.com/content/www/us/en/architecture-and-technology/quick-sync-video/quick-sync-video-general.html Intel® Quick Sync Video] は、[[Intel]] GPU のメディア処理機能を使用して高速なデコードとエンコードを行い、プロセッサが他のタスクを処理できるようにしてシステムの応答性を向上させます。&lt;br /&gt;
&lt;br /&gt;
これを使用するには、&#039;&#039;&#039;libmfx&#039;&#039;&#039; ランタイム実装がインストールされている必要があります。&#039;&#039;&#039;libmfx&#039;&#039;&#039; は、ハードウェアプラットフォームに基づいて実行時に実装をロードするディスパッチャライブラリです。&lt;br /&gt;
[[Wikipedia:ja:Broadwellマイクロアーキテクチャ|Broadwell]] から [[Wikipedia:ja:Rocket Lakeマイクロプロセッサ|Rocket Lake]] までの GPU で実行する場合、このライブラリは {{Pkg|intel-media-sdk}} をランタイム実装としてロードします。&lt;br /&gt;
[[Wikipedia:ja:Tiger Lakeマイクロアーキテクチャ|Tiger Lake]] 及びそれ以降の GPU においては、&#039;&#039;&#039;libmfx&#039;&#039;&#039; は {{Pkg|vpl-gpu-rt}} をロードします。[https://github.com/intel/vpl-gpu-rt#system-requirements vpl-gpu-rt system-requirements]も参照してください。&lt;br /&gt;
単一の Intel GPU を搭載しているシステムでは、ランタイム実装を変更したり選択したりできません。対応する実装は、ハードウェアに応じてインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
上記のランタイムをインストールしないと、以下のようなエラーが発生します:&lt;br /&gt;
&lt;br /&gt;
 [AVHWDeviceContext @ 0x558283838c80] Error initializing an MFX session: -3.&lt;br /&gt;
 Device creation failed: -1313558101.&lt;br /&gt;
&lt;br /&gt;
QuickSync の使用方法は [https://trac.ffmpeg.org/wiki/Hardware/QuickSync FFmpeg Wiki] で説明されています。&#039;&#039;libmfx&#039;&#039; を直接使わずに &#039;&#039;iHD&#039;&#039; ドライバか &#039;&#039;i965&#039;&#039; ドライバで [[VA-API]] [https://trac.ffmpeg.org/wiki/Hardware/VAAPI] を使用することが推奨されます。エンコード例は FFmpeg Wiki の &#039;&#039;Hybrid transcode&#039;&#039; セクションを、ドライバに関する指示は [[ハードウェアビデオアクセラレーション#VA-API の設定]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== AMD AMF ====&lt;br /&gt;
&lt;br /&gt;
AMD は、[[AMDGPU PRO]] プロプライエタリパッケージを使用して AMD Video Coding Engine (GPU エンコード) によって Linux で H264 のみのビデオエンコードを行うためのサポートを追加し、ffmpeg は AMF ビデオエンコードのサポートを追加しました。なので、h264_amf ビデオエンコーダを使ってエンコードするには、{{AUR|amf-amdgpu-pro}} が必要です。[[AMDGPU PRO]] パッケージによって提供されている ICD ファイルを環境変数でリンクする必要がある場合があります。そうしないと、ffmpeg はオープンな AMDGPU の ICD ファイルを使用してしまい、このビデオエンコーダを使用できません。エンコードを行うコマンドの例は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mkv -c:v h264_amf -rc 1 -b:v 8M h264_amf_8M.mp4&lt;br /&gt;
&lt;br /&gt;
クイックリファレンスとして、constant quality エンコードを行う例を挙げましょう:&lt;br /&gt;
&lt;br /&gt;
 $ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/amd_pro_icd64.json ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mp4 -c:v h264_amf -f mp4 -rc 0 -qp_b 22 -qp_i 22 -qp_p 22 -quality 2 output.mp4&lt;br /&gt;
&lt;br /&gt;
3つの -qp_(b|i|p) を調整してください。18 にすると視覚的に等価で、22 から非常に小さな視覚的な損失が発生し始めます。&lt;br /&gt;
&lt;br /&gt;
=== アニメーション GIF ===&lt;br /&gt;
&lt;br /&gt;
一般に、アニメーション GIF は、画像品質が悪く、ファイルサイズが比較的大きく、音声サポートもないので、動画フォーマットとして素晴らしい選択肢とは言えません。しかし、ウェブでは依然として頻繁に使用されています。以下のコマンドを使うことで、動画をアニメーション GIF に変換することができます:&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i input.mp4 -vf &amp;quot;fps=10,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse&amp;quot; -loop -1 output.gif&lt;br /&gt;
&lt;br /&gt;
パレットフィルタを使って高品質な GIF を生成する方法については、http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html を見てください。&lt;br /&gt;
&lt;br /&gt;
== プリセットファイル ==&lt;br /&gt;
&lt;br /&gt;
デフォルトの[https://ffmpeg.org/ffmpeg.html#Preset-files プリセットファイル]で {{ic|~/.ffmpeg}} を作成する:&lt;br /&gt;
&lt;br /&gt;
 $ cp -iR /usr/share/ffmpeg ~/.ffmpeg&lt;br /&gt;
&lt;br /&gt;
新しいファイルを作成したりデフォルトのプリセットファイルを編集する:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.ffmpeg/libavcodec-vhq.ffpreset|2=&lt;br /&gt;
vtag=DX50&lt;br /&gt;
mbd=2&lt;br /&gt;
trellis=2&lt;br /&gt;
flags=+cbp+mv0&lt;br /&gt;
pre_dia_size=4&lt;br /&gt;
dia_size=4&lt;br /&gt;
precmp=4&lt;br /&gt;
cmp=4&lt;br /&gt;
subcmp=4&lt;br /&gt;
preme=2&lt;br /&gt;
qns=2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== プリセットファイルを使う ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vcodec}} の宣言の後に {{ic|-vpre}} オプションを加えて下さい。&lt;br /&gt;
&lt;br /&gt;
==== libavcodec-vhq.ffpreset ====&lt;br /&gt;
&lt;br /&gt;
* {{ic|libavcodec}} &#039;&#039;&#039;=&#039;&#039;&#039; vcodec/acodec の名前&lt;br /&gt;
* {{ic|vhq}} &#039;&#039;&#039;=&#039;&#039;&#039; 使用するプリセットの名前&lt;br /&gt;
* {{ic|ffpreset}} &#039;&#039;&#039;=&#039;&#039;&#039; FFmpeg プリセットの拡張子&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 出力を簡略化 ===&lt;br /&gt;
&lt;br /&gt;
以下のオプションを組み合わせて使うことで、出力の詳細さを好きなレベルまで減らすことができます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|-hide_banner}}: 著作権表示、ビルドオプション、そしてライブラリのバージョンが表示されなくなります&lt;br /&gt;
* {{ic|-loglevel}}: ログレベルを調整します (微調整オプションが利用できます)。例: {{ic|-loglevel warning}}&lt;br /&gt;
* {{ic|-nostats}}: エンコードの進捗/統計が表示されなくなります&lt;br /&gt;
&lt;br /&gt;
=== 動画の再生時間を出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 file.ext&lt;br /&gt;
&lt;br /&gt;
=== ストリーム情報を JSON で出力 ===&lt;br /&gt;
&lt;br /&gt;
 $ ffprobe -v quiet -print_format json -show_format -show_streams file.ext&lt;br /&gt;
&lt;br /&gt;
=== X フレームごとに動画のスクリーンショットを作成する ===&lt;br /&gt;
&lt;br /&gt;
 $ ffmpeg -i file.ext -an -s 319x180 -vf fps=1/&#039;&#039;&#039;100&#039;&#039;&#039; -qscale:v 75 %03d.jpg&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://ffmpeg.org/ffmpeg.html FFmpeg documentation] - 公式ドキュメント&lt;br /&gt;
* [https://trac.ffmpeg.org/wiki FFmpeg Wiki] - 公式 wiki&lt;br /&gt;
* [http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-x264.html Encoding with the x264 codec] - MEncoder ドキュメント&lt;br /&gt;
* [https://avidemux.org/admWiki/doku.php?id=tutorial:h.264 H.264 encoding guide] - Avidemux wiki&lt;br /&gt;
* [http://howto-pages.org/ffmpeg/ Using FFmpeg] - Linux how to pages&lt;br /&gt;
* サポートしている音声・動画ストリームの[https://ffmpeg.org/general.html#Supported-File-Formats-and-Codecs リスト]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|FFmpeg|2023-07-23|776189}}&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%83%A6%E3%83%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%89%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8&amp;diff=40374</id>
		<title>ユニファイドカーネルイメージ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%83%A6%E3%83%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%89%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8&amp;diff=40374"/>
		<updated>2025-06-08T13:03:40Z</updated>

		<summary type="html">&lt;p&gt;ELC: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートローダー]]&lt;br /&gt;
[[en:Unified kernel image]]&lt;br /&gt;
[[pt:Unified kernel image]]&lt;br /&gt;
[https://uapi-group.org/specifications/specs/unified_kernel_image ユニファイドカーネルイメージ] (UKI) は、単一の実行可能ファイルであり、[[UEFI]] ファームウェアから直接起動するか、ほとんどまたは全く設定を必要とせずにブートローダーによって自動的に取得されます。これは {{man|7|systemd-stub}} のような UEFI ブートスタブプログラム、Linux [[Arch ブートプロセス#カーネル|カーネルイメージ]]、[[Arch ブートプロセス#initramfs|initrd]]、および [https://uapi-group.org/specifications/specs/unified_kernel_image/#uki-components その他のリソース] を単一の UEFI PE ファイルに組み合わせたものです。&lt;br /&gt;
&lt;br /&gt;
このファイルは、したがってこれらのすべての要素を[[Unified Extensible Firmware Interface/セキュアブート# EFI バイナリに署名する|署名]]して [[Secure Boot]] で使用することが容易になります。&lt;br /&gt;
&lt;br /&gt;
{{Note|記事全体で {{ic|&#039;&#039;esp&#039;&#039;}} は [[EFI システムパーティション]] のマウントポイントを表します。}}&lt;br /&gt;
&lt;br /&gt;
== ユニファイドカーネルイメージの準備 ==&lt;br /&gt;
&lt;br /&gt;
UKI (Unified Kernel Image) イメージを生成し、適切な場所 (&amp;quot;esp/Linux&amp;quot; ディレクトリ) にインストールする方法はいくつかあります。現在、この機能を実行するためのツールがいくつか競合しているので、ニーズと好みに応じて以下のいずれかを選択してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 以下のいずれかのサブセクションを実行するだけで済みます。&lt;br /&gt;
* UKI を [[Unified Extensible Firmware Interface#Default boot path for removable drives|フォールバックブートパス]] {{ic|&#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTx64.EFI}} (または 32 ビット IA32 UEFI の場合は {{ic|BOOTIA32.EFI}}) に配置することも可能です。フォールバックブートパスを使用すると、NVRAM に UEFI ブートエントリを明示的に作成する必要がなくなります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== mkinitcpio ===&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio]] は、{{Pkg|systemd-ukify}} がインストールされていない限り、UKI (Unified Kernel Image) を自身で組み立てます。{{Pkg|systemd-ukify}} がインストールされている場合は、{{ic|--no-ukify}} オプションで明示的に無効にしない限り、UKI の作成は &amp;quot;ukify&amp;quot; にオフロードされます。&lt;br /&gt;
&lt;br /&gt;
==== カーネルコマンドライン ====&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio]] は、{{ic|/etc/cmdline.d}} ディレクトリ内のコマンドライン ファイルからの[[カーネルパラメータ]]の読み取りをサポートします。Mkinitcpio は、このディレクトリ内の {{ic|.conf}} 拡張子を持つすべてのファイルの内容を連結し、それらを使用してカーネルコマンドラインを生成します。コマンドラインファイル内の &#039;&#039;#&#039;&#039; 文字で始まる行はコメントとして扱われ、mkinitcpio によって無視されます。マイクロコードと initramfs を指す &#039;&#039;エントリを削除&#039;&#039; するように注意してください。&lt;br /&gt;
&lt;br /&gt;
例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/cmdline.d/root.conf|2=&lt;br /&gt;
root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ルート ファイルシステムがデフォルト以外の Btrfs サブボリューム上にある場合は、必ず必要なマウントフラグを {{ic|rootflags}} に設定してください。[[Btrfs#サブボリュームをルートとしてマウントする]] を参照してください。&lt;br /&gt;
* たとえば、システムのサブボリューム ID が {{ic|256}} の場合 (サブボリューム ID は、{{ic|btrfs subvolume list &#039;&#039;btrfs_mountpoint&#039;&#039;}} を使用して確認できます。または、{{ic|/etc/fstab}}) でフラグを見ることができます、カーネルコマンドラインに {{ic|1=rootflags=subvolid=256}} を追加する必要があります。&lt;br /&gt;
* {{ic|rootflags}} は起動時にのみ使用されるため、{{ic|/etc/fstab}} 内のすべてのフラグをコピーする必要はありません。Systemd は fstab を読み取り、再マウントし、ブート後にそこにリストされているフラグを自動的に適用します。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/cmdline.d/security.conf|2=&lt;br /&gt;
# enable apparmor&lt;br /&gt;
lsm=landlock,lockdown,yama,integrity,apparmor,bpf audit=1 audit_backlog_limit=256&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
あるいは、{{ic|/etc/kernel/cmdline}} を使用してカーネルコマンドラインを設定することもできます。&lt;br /&gt;
&lt;br /&gt;
例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/kernel/cmdline|2=&lt;br /&gt;
root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet bgrt_disable&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* root パーティションが [[systemd#GPT パーティションの自動マウント|systemd によって自動マウントされる]] 場合、{{ic|1=root=}} パラメータは省略できます。&lt;br /&gt;
* {{ic|bgrt_disable}} パラメータは、ACPI テーブルのロード後に OEM ロゴを表示しないように Linux に指示します。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== .preset ファイル ====&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|/etc/mkinitcpio.d/linux.preset}}、または使用しているプリセットを、[[EFI システムパーティション]] の適切なマウントポイントを指定して、以下のように変更します:&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=PRESETS=}} の各項目について、{{ic|1=&#039;&#039;PRESET&#039;&#039;_uki=}} パラメータのコメントを解除する (つまり {{ic|#}} を削除する)、&lt;br /&gt;
* 冗長な {{ic|initramfs-*.img}} ファイルを保存しないように、{{ic|1=&#039;&#039;PRESET&#039;&#039;_image=}} をコメントアウトする、&lt;br /&gt;
* オプションとして、スプラッシュイメージを追加したい各 {{ic|1=&#039;&#039;PRESET&#039;&#039;_options=}} 行に {{ic|--splash}} パラメータを追加またはコメント解除します。&lt;br /&gt;
&lt;br /&gt;
以下は {{Pkg|linux}} カーネルと Arch スプラッシュスクリーンの {{ic|linux.preset}} の例です。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.d/linux.preset|2= &lt;br /&gt;
# mkinitcpio preset file for the &#039;linux&#039; package&lt;br /&gt;
&lt;br /&gt;
#ALL_config=&amp;quot;/etc/mkinitcpio.conf&amp;quot;&lt;br /&gt;
ALL_kver=&amp;quot;/boot/vmlinuz-linux&amp;quot;&lt;br /&gt;
&lt;br /&gt;
PRESETS=(&#039;default&#039; &#039;fallback&#039;)&lt;br /&gt;
&lt;br /&gt;
#default_config=&amp;quot;/etc/mkinitcpio.conf&amp;quot;&lt;br /&gt;
#default_image=&amp;quot;/boot/initramfs-linux.img&amp;quot;&lt;br /&gt;
default_uki=&amp;quot;&#039;&#039;esp&#039;&#039;/EFI/Linux/arch-linux.efi&amp;quot;&lt;br /&gt;
default_options=&amp;quot;--splash=/usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#fallback_config=&amp;quot;/etc/mkinitcpio.conf&amp;quot;&lt;br /&gt;
#fallback_image=&amp;quot;/boot/initramfs-linux-fallback.img&amp;quot;&lt;br /&gt;
fallback_uki=&amp;quot;&#039;&#039;esp&#039;&#039;/EFI/Linux/arch-linux-fallback.efi&amp;quot;&lt;br /&gt;
fallback_options=&amp;quot;-S autodetect&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 統一されたカーネルイメージからブートしたいだけであれば、[[EFI システムパーティション#典型的なマウントポイント|ESP のマウント]]を {{ic|/efi}} にして、[[ESP]] パーティションに存在する必要があるものだけをマウントすることができます。&lt;br /&gt;
* {{ic|--cmdline /etc/kernel/&#039;&#039;fallback_cmdline&#039;&#039;}} を {{ic|fallback_options}} に追加することで、フォールバックイメージに上記とは異なる [[Unified カーネルイメージ#カーネルコマンドライン|cmdline]] を使用することができます (例えば {{ic|quiet}} を無くす。)&lt;br /&gt;
* カーネルコマンドラインの埋め込みを省略するには、{{ic|--no-cmdline}} を {{ic|1=&#039;&#039;PRESET&#039;&#039;_options=}} に追加してください。カーネルパラメーターはブートローダー経由で渡す必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|&#039;&#039;PRESET&#039;&#039;_uki}} オプションは以前は {{ic|&#039;&#039;PRESET&#039;&#039;_efi_image}} として知られていました。[https://gitlab.archlinux.org/archlinux/mkinitcpio/mkinitcpio/-/issues/134 2022 年 11 月変更], 古いオプションは非推奨ですが、今のところ動作しています。&lt;br /&gt;
* [[Unified Extensible Firmware Interface# UEFI ファームウェアのビット数|IA32 UEFI]] では、{{ic|--uefistub /usr/lib/systemd/boot/efi/linuxia32.efi.stub}} を {{ic|1=&#039;&#039;PRESET&#039;&#039;_options=}} に追加してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== pacman フック ====&lt;br /&gt;
&lt;br /&gt;
systemd-stub ({{pkg|systemd}} の一部)、microcode ({{pkg|intel-ucode}} と {{pkg|amd-ucode}} の両方)、および {{pkg|linux}} カーネルの更新は、自動的に UKI (Unified Kernel Image) の再構築をトリガーします。ただし、{{ic|/etc/pacman.d/hooks/}} ディレクトリにある他の [[pacman フック]] (例えば、[[NVIDIA#pacman hook|NVIDIA ドライバー]] のものなど) を確認することをお勧めします。&lt;br /&gt;
&lt;br /&gt;
==== UKI の構築 ====&lt;br /&gt;
&lt;br /&gt;
最後に、UKI のディレクトリが存在することを確認し、[[mkinitcpio#イメージ作成とアクティベーション|initramfs を再生成]] します。たとえば、&#039;&#039;linux&#039;&#039; プリセットの場合は次のようになります。&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/Linux&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
必要に応じて、残っている {{ic|initramfs-*.img}} を {{ic|/boot}} または {{ic|/efi}} から削除します。&lt;br /&gt;
&lt;br /&gt;
=== kernel-install ===&lt;br /&gt;
&lt;br /&gt;
確実に kernel-install が [[Kernel-install#自動で|正しく設定されている]] ことを確認してください。&lt;br /&gt;
&lt;br /&gt;
UKI を生成するには、{{Pkg|systemd-ukify}} をインストールし、{{ic|kernel-install}} の layout を {{ic|uki}} に設定します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/kernel/install.conf|&lt;br /&gt;
2=layout=uki}}&lt;br /&gt;
&lt;br /&gt;
{{Note|[[mkinitcpio]] が initrd を作成し、その後 [[#ukify]] が UKI を生成します。}}&lt;br /&gt;
&lt;br /&gt;
[[#ukify]] の設定は、[[kernel-install]] で使用するために、{{ic|/etc/kernel/uki.conf}} で行う必要があります。例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/kernel/uki.conf|&lt;br /&gt;
2=[UKI]&lt;br /&gt;
Splash=/usr/share/systemd/bootctl/splash-arch.bmp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/usr/lib/kernel/uki.conf}} から {{ic|/etc/kernel/uki.conf}} にテンプレートをコピーし、セクションタイトルと役立つ行をコメントアウトすることもできます。このファイルにカーネルコマンドラインを設定しないでください。無視されます。[[Kernel-install#カーネルコマンドライン]] を使用してください。}}&lt;br /&gt;
&lt;br /&gt;
あるいは、mkinitcpio が UKI を生成するように、それをデフォルトの {{ic|uki_generator}} として設定します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/kernel/install.conf|&lt;br /&gt;
2=layout=uki&lt;br /&gt;
uki_generator=mkinitcpio}}&lt;br /&gt;
&lt;br /&gt;
この場合、{{Pkg|systemd-ukify}} は不要です。別の {{ic|initrd_generator}} を設定することもできます。{{Man|8|kernel-install}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
変更を有効にするには、使用しているカーネルパッケージを再インストールしてください。&lt;br /&gt;
&lt;br /&gt;
=== dracut ===&lt;br /&gt;
&lt;br /&gt;
こちらを参照して下さい [[dracut#ユニファイドカーネルイメージ]] と [[dracut#カーネルのアップグレード時に新しい initramfs を生成]]&lt;br /&gt;
&lt;br /&gt;
=== ukify ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|systemd-ukify}} パッケージを [[インストール]] します。&#039;&#039;ukify&#039;&#039; は単独で initramfs を生成できないため、必要な場合は、[[dracut]]、[[mkinitcpio]]、または [[booster]] を使用して生成する必要があります。&lt;br /&gt;
&lt;br /&gt;
最小限の動作例は次のようになります。&lt;br /&gt;
&lt;br /&gt;
 # ukify build --linux=&#039;&#039;/boot/vmlinuz-linux&#039;&#039; \&lt;br /&gt;
               --initrd=&#039;&#039;/boot/initramfs-linux.img&#039;&#039; \&lt;br /&gt;
               --cmdline=&amp;quot;&#039;&#039;quiet rw&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Note|[[マイクロコード#早期ロード|外部マイクロコード initramfs イメージ]] を使用する場合 ({{ic|/boot/amd-ucode.img}} または {{ic|/boot/intel-ucode.img}}) を使用する必要があります。常にメインの initramfs イメージの前に &#039;&#039;最初に&#039;&#039; 配置します (例: {{ic|/boot/initramfs-linux.img}})}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 出来上がった EFI 実行ファイルを EFI システムパーティションにコピーするのをスキップするには、{{ic|1=--output=&#039;&#039;esp&#039;&#039;/EFI/Linux/&#039;&#039;filename&#039;&#039;.efi}} コマンドラインオプションを &#039;&#039;ukify&#039;&#039; に使用します。&lt;br /&gt;
* {{ic|--cmdline}} オプションを指定する場合、{{ic|1=--cmdline=@&#039;&#039;/path/to/cmdline&#039;&#039;}} のように {{ic|/etc/kernel/cmdline}} ファイル名の前に {{ic|@}} シンボルを追加することで、カーネルパラメータを読み込むファイル名を指定できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、{{man|1|ukify}}を参照してください。&lt;br /&gt;
&lt;br /&gt;
intel ucode および /efi マウント ESP を使用した通常のカーネルイメージの systemd サービスを使用した自動 UKI 構築の例:&lt;br /&gt;
&lt;br /&gt;
{{Note|カーネル、マイクロコード、または initramfs が変更されたときに UKI が自動的に更新されるようにするには、例えば [[kernel-install]] や [[mkinitcpio]] と共に ukify を使用するだけです。詳細については、上記のセクション [[#kernel-install]] および [[#mkinitcpio]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
=== 手動で ===&lt;br /&gt;
&lt;br /&gt;
使用するカーネルコマンドラインをファイルに記述し、{{man|1|objcopy}} を使用してバンドルファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
[[マイクロコード]] の場合は、まず次のようにマイクロコードファイルと initrd を連結します。&lt;br /&gt;
&lt;br /&gt;
 $ cat &#039;&#039;esp&#039;&#039;/&#039;&#039;cpu_manufacturer&#039;&#039;-ucode.img &#039;&#039;esp&#039;&#039;/initramfs-linux.img &amp;gt; /tmp/combined_initrd.img&lt;br /&gt;
&lt;br /&gt;
統合カーネルイメージを構築するときは、{{ic|/tmp/combined_initrd.img}} を initrd として渡します。このファイルは後で削除できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|[[Unified Extensible Firmware Interface#UEFI ファームウェアのビット数|IA32 UEFI]] では、以下のコマンドの {{ic|/usr/lib/systemd/boot/efi/linuxx64.efi.stub}} を {{ic|/usr/lib/systemd/boot/efi/linuxia32.efi.stub}} に置き換えてください。}}&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
$ align=&amp;quot;$(objdump -p /usr/lib/systemd/boot/efi/linuxx64.efi.stub {{!}} awk &#039;{ if ($1 == &amp;quot;SectionAlignment&amp;quot;){print $2} }&#039;)&amp;quot;&lt;br /&gt;
$ align=$((16#$align))&lt;br /&gt;
$ osrel_offs=&amp;quot;$(objdump -h &amp;quot;/usr/lib/systemd/boot/efi/linuxx64.efi.stub&amp;quot; {{!}} awk &#039;NF==7 {size=strtonum(&amp;quot;0x&amp;quot;$3); offset=strtonum(&amp;quot;0x&amp;quot;$4)} END {print size + offset}&#039;)&amp;quot;&lt;br /&gt;
$ osrel_offs=$((osrel_offs + &amp;quot;$align&amp;quot; - osrel_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
$ cmdline_offs=$((osrel_offs + $(stat -Lc%s &amp;quot;/usr/lib/os-release&amp;quot;)))&lt;br /&gt;
$ cmdline_offs=$((cmdline_offs + &amp;quot;$align&amp;quot; - cmdline_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
$ splash_offs=$((cmdline_offs + $(stat -Lc%s &amp;quot;/etc/kernel/cmdline&amp;quot;)))&lt;br /&gt;
$ splash_offs=$((splash_offs + &amp;quot;$align&amp;quot; - splash_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
$ initrd_offs=$((splash_offs + $(stat -Lc%s &amp;quot;/usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;)))&lt;br /&gt;
$ initrd_offs=$((initrd_offs + &amp;quot;$align&amp;quot; - initrd_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
$ linux_offs=$((initrd_offs + $(stat -Lc%s &amp;quot;&#039;&#039;initrd-file&#039;&#039;&amp;quot;)))&lt;br /&gt;
$ linux_offs=$((linux_offs + &amp;quot;$align&amp;quot; - linux_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
$ objcopy \&lt;br /&gt;
    --add-section .osrel=&amp;quot;/usr/lib/os-release&amp;quot; --change-section-vma .osrel=$(printf 0x%x $osrel_offs) \&lt;br /&gt;
    --add-section .cmdline=&amp;quot;/etc/kernel/cmdline&amp;quot; \&lt;br /&gt;
    --change-section-vma .cmdline=$(printf 0x%x $cmdline_offs) \&lt;br /&gt;
    --add-section .splash=&amp;quot;/usr/share/systemd/bootctl/splash-arch.bmp&amp;quot; \&lt;br /&gt;
    --change-section-vma .splash=$(printf 0x%x $splash_offs) \&lt;br /&gt;
    --add-section .initrd=&amp;quot;&#039;&#039;initrd-file&#039;&#039;&amp;quot; \&lt;br /&gt;
    --change-section-vma .initrd=$(printf 0x%x $initrd_offs) \&lt;br /&gt;
    --add-section .linux=&amp;quot;&#039;&#039;vmlinuz-file&#039;&#039;&amp;quot; \&lt;br /&gt;
    --change-section-vma .linux=$(printf 0x%x $linux_offs) \&lt;br /&gt;
    &amp;quot;/usr/lib/systemd/boot/efi/linuxx64.efi.stub&amp;quot; &amp;quot;&#039;&#039;linux&#039;&#039;.efi&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
注意すべき点がいくつかあります:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/systemd/systemd/commit/0fa2cac4f0cdefaf1addd7f1fe0fd8113db9360b#commitcomment-76747223] で推奨されているように、オフセットは動的に計算されるので、セクションが重なることはありません。&lt;br /&gt;
* セクションは、PE スタブの {{ic|SectionAlignment}} フィールドが示す値 (通常は 0x1000) にアラインメントされます。&lt;br /&gt;
* カーネルイメージは、[https://github.com/systemd/systemd/commit/0fa2cac4f0cdefaf1addd7f1fe0fd8113db9360b#commitcomment-84868898] で述べられているように、インプレース解凍で後続のセクションが上書きされるのを防ぐために、最後のセクションにある必要があります。&lt;br /&gt;
&lt;br /&gt;
イメージを作成したら、それを EFI システムパーティションにコピーします。&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;linux&#039;&#039;.efi &#039;&#039;esp&#039;&#039;/EFI/Linux/&lt;br /&gt;
&lt;br /&gt;
== セキュアブート 用の UKI への署名 ==&lt;br /&gt;
&lt;br /&gt;
=== sbctl ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbctl}} は、更新されたバイナリに署名するための [[kernel-install]] スクリプト、[[mkinitcpio]] ポストフック、および pacman フックを提供します。&lt;br /&gt;
&lt;br /&gt;
=== mkinitcpio ===&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio#ポストフック|mkinitcpio ポストフック]] を使用することで、生成された Unified Kernel Image に [[セキュアブート]] 用の署名を付けることができます。以下のファイルを作成し、[[ヘルプ:読み方#実行可能属性の付与|実行可能]]にしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/post/uki-sbsign|2=&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
uki=&amp;quot;$3&amp;quot;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[ -n &amp;quot;$uki&amp;quot; ]] || exit 0&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keypairs=(&#039;&#039;/path/to/&#039;&#039;db.key &#039;&#039;/path/to/&#039;&#039;db.crt)&lt;br /&gt;
&lt;br /&gt;
for (( i=0; i&amp;lt;${#keypairs[@]}; i+=2 )); do&lt;br /&gt;
    key=&amp;quot;${keypairs[$i]}&amp;quot; cert=&amp;quot;${keypairs[(( i + 1 ))]}&amp;quot;&lt;br /&gt;
    if ! sbverify --cert &amp;quot;$cert&amp;quot; &amp;quot;$uki&amp;quot; &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        sbsign --key &amp;quot;$key&amp;quot; --cert &amp;quot;$cert&amp;quot; --output &amp;quot;$uki&amp;quot; &amp;quot;$uki&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/&#039;&#039;db.key}} と {{ic|&#039;&#039;/path/to/&#039;&#039;db.crt}} を、イメージの署名に使用するキーペアのパスに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== ukify ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|sbsigntools}} をインストールし、{{ic|/etc/kernel/uki.conf}} で {{ic|--secureboot-private-key}} と {{ic|--secureboot-certificate}} を指定します。&lt;br /&gt;
&lt;br /&gt;
== 起動方法 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|[[セキュアブート]] がアクティブな場合、{{ic|.cmdline}} が埋め込まれた統合カーネルイメージは、(ブートエントリを使用するか対話的に) 渡されたすべてのコマンドラインオプションを無視します。セキュアブートがアクティブでない場合、コマンドライン経由で渡されたオプションは、埋め込まれた {{ic|.cmdline}} をオーバーライドします。}}&lt;br /&gt;
&lt;br /&gt;
=== Limine ===&lt;br /&gt;
&lt;br /&gt;
[[Limine]] は Unified Kernel Image (UKI) を自動的に検出しません。ただし、{{ic|limine.conf}} を手動で構成して UKI をロードできます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;例 1: デフォルトの EFI システムパーティションから UKI を起動する&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UKI ファイルが {{ic|&#039;&#039;esp&#039;&#039;/EFI/Linux/}} に保存されている場合は、次の設定を {{ic|limine.conf}} に追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|limine.conf|2=&lt;br /&gt;
 /Arch Linux&lt;br /&gt;
  protocol: efi_chainload&lt;br /&gt;
  image_path: boot():/EFI/Linux/arch-linux.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;例 2: 別の EFI パーティションから UKI を起動する&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UKI ファイルが別のディスク上の別の EFI パーティションにある場合は、{{ic|uuid(&#039;&#039;partition UUID&#039;&#039;)}} を使用します。&lt;br /&gt;
&lt;br /&gt;
{{Note|パーティション UUID はファイルシステム UUID &#039;&#039;&#039;ではありません&#039;&#039;&#039;。{{ic|PARTUUID}} としてパーティション UUID を見つけるには、次を使用します。&lt;br /&gt;
 $ lsblk -o NAME,FSTYPE,PARTUUID,PARTTYPENAME,MOUNTPOINT,SIZE,LABEL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|limine.conf|2=&lt;br /&gt;
 /Arch Linux&lt;br /&gt;
  protocol: efi_chainload&lt;br /&gt;
  image_path: uuid(&#039;&#039;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&#039;&#039;):/EFI/Linux/arch-linux.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
サポートされているパスと設定オプションの詳細については、[https://github.com/limine-bootloader/limine/blob/v8.x/CONFIG.md#Paths Limine Paths ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== systemd-boot ===&lt;br /&gt;
&lt;br /&gt;
[[systemd-boot#Unified kernel images|systemd-boot]] は {{ic|&#039;&#039;esp&#039;&#039;/EFI/Linux/}} 内でユニファイドカーネルイメージを検索しますので、それ以上の設定は必要ありません。{{man|7|sd-boot|FILES}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== rEFInd ===&lt;br /&gt;
&lt;br /&gt;
[[rEFInd]] は、EFI システム パーティション上のユニファイドカーネルイメージを自動検出し、それらをロードできます。{{ic|refind.conf}} で手動で指定することもできます。デフォルトでは次の場所にあります。&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/EFI/refind/refind.conf|2=&lt;br /&gt;
menuentry Linux {&lt;br /&gt;
    loader &#039;&#039;esp&#039;&#039;/EFI/Linux/archlinux-linux.efi&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
イメージが ESP のルートにある場合、rEFInd は次のようにその名前のみを必要とします: {{ic|loader archlinux-linux.efi}} この方法で起動すると、{{ic|&#039;&#039;esp&#039;&#039;/EFI/refind_linux.conf}} からのカーネルパラメータは渡されません。&lt;br /&gt;
&lt;br /&gt;
=== GRUB ===&lt;br /&gt;
&lt;br /&gt;
rEFInd と同様に、[[GRUB]] は [[GRUB#ユニファイドカーネルイメージをチェインロード]] で説明されているように EFI UKI をチェーンロードできます。&lt;br /&gt;
&lt;br /&gt;
=== UEFI から直接起動 ===&lt;br /&gt;
&lt;br /&gt;
[[efibootmgr]] を使って &#039;&#039;.efi&#039;&#039; ファイルに UEFI ブートエントリを作成することができます。&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --create --disk /dev/sd&#039;&#039;X&#039;&#039; --part &#039;&#039;partition_number&#039;&#039; --label &amp;quot;Arch Linux&amp;quot; --loader &#039;\EFI\Linux\arch-linux.efi&#039; --unicode&lt;br /&gt;
&lt;br /&gt;
オプションの説明は {{man|8|efibootmgr}} をご覧ください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=7UhwK3g99_0 All Systems Go! talk on UKIs]&lt;br /&gt;
* [https://uapi-group.org/specifications/specs/unified_kernel_image/ Unified kernel image specification]&lt;br /&gt;
* [https://linderud.dev/blog/mkinitcpio-v31-and-uefi-stubs/ mkinitcpio v31 and UEFI stubs]&lt;/div&gt;</summary>
		<author><name>ELC</name></author>
	</entry>
</feed>