Red Hat Training

A Red Hat training course is available for RHEL 8

9.3. 使用可信密钥

您可以使用 keyctl 工具创建、导出、加载和更新可信密钥来提高系统安全性。

先决条件

注意

Red Hat Enterprise Linux 8 支持 TPM 1.2 和 TPM 2.0。如果使用 TPM 1.2,请跳过第 1 步。

流程

  1. 使用具有持久句柄的 SHA-256 主存储密钥创建一个 2048 位 RSA 密钥,例如 81000001,使用以下工具之一:

    1. 通过使用 tss2 软件包:

      # TPM_DEVICE=/dev/tpm0 tsscreateprimary -hi o -st
      Handle 80000000
      # TPM_DEVICE=/dev/tpm0 tssevictcontrol -hi o -ho 80000000 -hp 81000001
    2. 通过使用 tpm2-tools 软件包:

      # tpm2_createprimary --key-algorithm=rsa2048 --key-context=key.ctxt
      name-alg:
        value: sha256
        raw: 0xb
      …
      sym-keybits: 128
      rsa: xxxxxx…
      
      # tpm2_evictcontrol -c key.ctxt 0x81000001
      persistentHandle: 0x81000001
      action: persisted
  2. 创建一个可信密钥:

    1. 按照 keyctl add trusted <NAME> "new <KEY_LENGTH> keyhandle=<PERSISTENT-HANDLE> [options]" <KEYRING> 语法使用 TPM 2.0。在本例中,持久性句柄为 81000001

      # keyctl add trusted kmk "new 32 keyhandle=0x81000001" @u
      642500861

      命令创建一个名为 kmk 的可信密钥,长度为 32 字节(256 位),并将其放置在用户密钥环 (@u) 中。密钥长度为 32 到 128 字节(256 到 1024 位)。

    2. 按照 keyctl add trusted <NAME> "new <KEY_LENGTH>" <KEYRING> 语法使用 TPM 1.2 :

      # keyctl add trusted kmk "new 32" @u
  3. 列出内核密钥环的当前结构:

    # keyctl show
    Session Keyring
           -3 --alswrv    500   500  keyring: ses 97833714 --alswrv 500 -1 \ keyring: uid.1000 642500861 --alswrv 500 500 \ trusted: kmk
  4. 使用可信密钥的序列号将密钥导出到用户空间 blob:

    # keyctl pipe 642500861 > kmk.blob

    命令使用 pipe 子命令和 kmk 的序列号。

  5. 从用户空间 blob 加载可信密钥:

    # keyctl add trusted kmk "load `cat kmk.blob`" @u
    268728824
  6. 创建使用 TPM 密封的可信密钥的安全加密密钥(kmk)。按照此语法:keyctl add encrypted <NAME> "new [FORMAT] <KEY_TYPE>:<PRIMARY_KEY_NAME> <KEY_LENGTH>" <KEYRING>:

    # keyctl add encrypted encr-key "new trusted:kmk 32" @u
    159771175