8.3. 使用可信密钥
您可以使用 keyctl
工具创建、导出、加载和更新可信密钥来提高系统安全性。
先决条件
对于 64 位 ARM 架构和 IBM Z,
可信
内核模块已载入。# modprobe trusted
有关如何载入内核模块的更多信息,请参阅 在系统运行时载入内核模块。
- 受信任的平台模块(TPM)已启用并处于活动状态。请参阅内核完整性子系统以及受信任的和加密的密钥。
Red Hat Enterprise Linux 8 支持 TPM 1.2 和 TPM 2.0。如果使用 TPM 1.2,请跳过第 1 步。
流程
使用具有持久句柄的 SHA-256 主存储密钥创建一个 2048 位 RSA 密钥,例如 81000001,使用以下工具之一:
通过使用
tss2
软件包:# TPM_DEVICE=/dev/tpm0 tsscreateprimary -hi o -st Handle 80000000 # TPM_DEVICE=/dev/tpm0 tssevictcontrol -hi o -ho 80000000 -hp 81000001
通过使用
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
创建一个可信密钥:
按照
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 位)。按照
keyctl add trusted <NAME> "new <KEY_LENGTH>" <KEYRING>
语法使用 TPM 1.2 :# keyctl add trusted kmk "new 32" @u
列出内核密钥环的当前结构:
# keyctl show Session Keyring -3 --alswrv 500 500 keyring: ses 97833714 --alswrv 500 -1 \ keyring: uid.1000 642500861 --alswrv 500 500 \ trusted: kmk
使用可信密钥的序列号将密钥导出到用户空间 blob:
# keyctl pipe 642500861 > kmk.blob
命令使用
pipe
子命令和kmk
的序列号。从用户空间 blob 加载可信密钥:
# keyctl add trusted kmk "load `cat kmk.blob`" @u 268728824
创建使用 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