Linuxカーネルモジュールに署名するには、物理​​スマートカードとリーダーデバイスが必要ですか?

Linuxカーネルモジュールに署名するには、物理​​スマートカードとリーダーデバイスが必要ですか?

私は楽しい(ローリング安定性)のためにLinuxカーネルソースを構築してテストしました。

しかし、OpenSSLがキー/証明書を要求できないという問題があります。だから確認を使用しましたが、pkcs11-tool結果は「スロットなし」です。

これは、スロットにスマートカードを含める必要があるという意味ですか?それ以外の場合、カーネルモジュールに署名する方法は?

以下はopenssl.cnfダイジェストの内容です。

# referenced from the [provider_sect] below.
# Refer to the OpenSSL security policy for more information.
# .include fipsmodule.cnf

[openssl_init]
providers = provider_sect
ssl_conf = ssl_sect
engines = engine_section

[engine_section]
pkcs11 = pkcs11_section

[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-3/pkcs11.so
MODULE_PATH = /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
init = 0

# List of providers to load
[provider_sect]

一日中グーグルをしてみましたが、企業、クラウドに関する情報だけが見つかりました…役に立たなかった。

答え1

Linuxカーネルソースパッケージのサブディレクトリには、ツール(以前はスクリプト、現在はカーネルでビルドされたバイナリツール)がscriptsあります。sign-file

例:linux-6.6.13/scripts/sign-file

これを使用してカーネルモジュールに署名できます。

/path/to/linux-6.6.13/scripts/sign-file sha256 private-key.pem certificate.der kernelmodule.ko

または、PEM形式の単一ファイルに秘密鍵と証明書の両方がある場合は、[設定]CONFIG_MODULE_SIG_KEYメニューでカーネル設定オプションを設定できます。暗号化API - >署名の検証に使用される証明書 - >モジュール署名鍵のファイル名またはPKCS#11 URI) はファイルをポイントしCONFIG_MODULE_SIG_ALL=y(設定メニューから)設定します.ロード可能なモジュールサポートを有効にする - >すべてのモジュールに自動的に署名)、カーネルビルドプロセスは、選択したキーを使用してそのカーネルビルドのすべてのモジュールに自動的に署名します。

次のコマンドを使用して、適切なキーと証明書ファイルを生成できます。

openssl req -new -nodes -utf8 -sha256 -days 36500 -batch -x509 \
   -config x509.genkey -outform PEM -out kernel_key.pem \
   -keyout kernel_key.pem

このツールを使用するには、sign-file次のコマンドを使用して証明書部分をDER形式に変換することもできます。

openssl x509 -in kernel_key.pem -out certificate.der -outform DER

バラよりカーネルソースパッケージの Documentation/admin-guide/module-signing.rst詳細については。

カーネルモジュールの署名にはPKCS#11(および拡張スマートカードまたは他のハードウェアセキュリティモジュール)を使用する必要はありません。

しかし、独自のLinuxディストリビューションを作成して世界中に大量にデプロイし始める場合は、セキュリティを強化するためにデプロイメント署名キーを格納するPKCS#11セキュリティモジュールを使用するのが良い選択です。とても良い考えです。

関連情報