<?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-04-12T07:32:49Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<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>