Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.9.5. 信頼できる鍵および暗号化鍵

信頼できる 鍵および暗号化鍵は、カーネルキーリングサービスを使用するカーネルが生成する可変長の対称鍵です。鍵が暗号化されていない形式でユーザー空間に表示されないため、その整合性を検証できます。つまり、拡張検証モジュール(EVM)などを使用して、実行中のシステムの整合性を検証し、確認することができます。ユーザーレベルのプログラムは、暗号化された Blob の形式で鍵にのみアクセスできます。
信頼できる鍵には、Trusted Platform Module (TPM)チップというハードウェアコンポーネントが必要です。これは、鍵を作成し、暗号化(暗号化)するために使用されます。TPM は、ストレージルートキー (SRK)と呼ばれる 2048 ビットの RSA 鍵を使用して鍵を保護します。
さらに、信頼できる鍵は TPM 'splatform configuration register (PCR)値の特定セットを使用して保護することもできますPCR には、BIOS、ブートローダー、およびオペレーティングシステムを反映する整合性管理値のセットが含まれます。つまり、PCR-sealed 鍵は、暗号化されている同じシステム上にある TPM でしか復号化できません。ただし、PCR(sealed trusted key)が読み込まれると(キーリングに追加されると)、新しいカーネルなどを起動できるように、関連する PCR 値が検証され、新しい(または今後の)PCR 値に更新できます。1 つの鍵を複数のブロブとして保存することもできますが、それぞれ PCR 値が異なります
カーネル AES 暗号化を使用するので、暗号化された鍵には TPM は必要ありません。これにより、信頼できる鍵よりも高速になります。暗号化鍵は、カーネルが生成した乱数を使用して作成され、ユーザー空間のブロブへのエクスポート時にマスターキーにより暗号化されます。このマスターキーは、信頼できる鍵またはユーザーキーのいずれかになります。マスターキーが信頼できる鍵ではない場合には、マスターキーが信頼できる鍵ではない場合には、暗号化鍵は、暗号化に使用するユーザーキーであるため、セキュアになります。

4.9.5.1. 鍵の使用

鍵を使用して操作を実行する前に、信頼できるカーネルモジュールおよび encrypted-keys カーネルモジュールがシステムに読み込まれていることを確認してください。異なる RHEL カーネルアーキテクチャーでカーネルモジュールを読み込む際は、次のポイントを考慮してください。
  • x86_64 アーキテクチャーを持つ RHEL カーネルでは、TRUSTED_KEYS コードとENCRYPTED_KEYS コードはコアカーネルコードの一部として構築されます。これにより、x86_64 システムユーザーは trusted および encrypted-keys モジュールをロードせずにこれらの鍵を使用できます。
  • 他のすべてのアーキテクチャーでは、鍵を使用して操作を実行する前に、trusted および encrypted-keys カーネルモジュールを読み込む必要があります。カーネルモジュールを読み込むには、以下のコマンドを実行します。
    ~]# modprobe trusted encrypted-keys
信頼できる鍵および暗号化された鍵は、keyctl ユーティリティーを使用して作成、読み込み、エクスポート、および更新できます。keyctl の使用に関する詳細は、keyctl(1) を参照してください。
注記
TPM (信頼できる鍵の作成やシールスなど)を使用するには、有効にしてアクティブにする必要があります。これは通常、マシンの BIOS を設定したり、ユーティリティーの tpm-tools パッケージの tpm_setactive コマンドを使用して実現できます。また、TrouSers アプリケーション( trousers パッケージ)および tcsd デーモン (TrouSers スイートの一部で)をインストールして TPM と通信する必要があります。
TPM を使用して信頼できる鍵を作成するには、以下の構文で keyctl コマンドを実行します。
~]$ keyctl add trusted name[]
"新しい keylength options" キーリング
上記の構文を使用すると、以下のようにサンプルコマンドを作成できます。
~]$ keyctl add trusted kmk "new 32" @u
642500861
上記の例では、kmk という名前の信頼できる鍵を 32 バイト(256 ビット)の長さで作成し、ユーザーキーリング(@u)に配置します。鍵の長さは 32 から 128 バイト (256 から 1024 ビット) です。show サブコマンドを使用して、カーネルキーリングの現在の構造を一覧表示します。
~]$ keyctl show
Session Keyring
       -3 --alswrv    500   500  keyring: _ses
 97833714 --alswrv    500    -1   \_ keyring: _uid.1000
642500861 --alswrv    500   500       \_ trusted: kmk
print サブコマンドは、暗号化されたキーを標準出力に出力します。ユーザー空間のブロブに鍵をエクスポートするには、以下のように pipe サブコマンドを使用します。
~]$ keyctl pipe 642500861 > kmk.blob
ユーザー空間のブロブから信頼できる鍵を読み込むには、ブログを引数として add コマンドを再度使用します。
~]$ keyctl add trusted kmk "load `cat kmk.blob`" @u
268728824
TPM-sealed trusted 鍵を使用して、安全な暗号化鍵を作成できます。以下のコマンド構文は、暗号化鍵の生成に使用されます。
~]$ keyctl add encrypted name[]
"New format key-type:master-key-name keylength" キーリング
上記の構文に基づいて、すでに作成された信頼できる鍵を使用して暗号化鍵を生成するコマンドは、以下のように作成できます。
~]$ keyctl add encrypted encr-key "new trusted:kmk 32" @u
159771175
TPM が利用できないシステムに暗号化された鍵を作成するには、乱数シーケンスを使用してユーザーキーを生成します。この鍵は、実際の暗号化鍵を保護します。
~]$ keyctl add user kmk-user "`dd if=/dev/urandom bs=1 count=32 2>/dev/null`" @u
427069434
次に、random-number ユーザーキーを使用して暗号化鍵を生成します。
~]$ keyctl add encrypted encr-key "new user:kmk-user 32" @u
1012412758
list サブコマンドは、指定されたカーネルキーリング内のすべての鍵を一覧表示するために使用できます。
~]$ keyctl list @u
2 keys in keyring:
427069434: --alswrv  1000  1000 user: kmk-user
1012412758: --alswrv  1000  1000 encrypted: encr-key
重要
暗号化鍵がマスターの信頼できる鍵で保護されていない場合には、そのセキュリティーは、ユーザーのマスターキー (乱数キー) を使用して暗号化したものと同じでしかない点に注意してください。そのため、マスターユーザーキーはできるだけ安全に、システムの起動プロセスの早い段階で読み込む必要があります。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。