8.3. 使用可信密钥
您可以使用 keyctl
工具创建、导出、加载和更新可信密钥来提高系统安全性。
先决条件
对于 64 位 ARM 架构和 IBM Z,
可信
内核模块已载入。modprobe trusted
# modprobe trusted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关如何载入内核模块的更多信息,请参阅 在系统运行时载入内核模块。
- 受信任的平台模块(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 TPM_DEVICE=/dev/tpm0 tssevictcontrol -hi o -ho 80000000 -hp 81000001
# TPM_DEVICE=/dev/tpm0 tsscreateprimary -hi o -st Handle 80000000 # TPM_DEVICE=/dev/tpm0 tssevictcontrol -hi o -ho 80000000 -hp 81000001
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过使用
tpm2-tools
软件包:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个可信密钥:
按照
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
# keyctl add trusted kmk "new 32 keyhandle=0x81000001" @u 642500861
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令创建一个名为
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 add trusted kmk "new 32" @u
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
列出内核密钥环的当前结构:
keyctl show
# keyctl show Session Keyring -3 --alswrv 500 500 keyring: ses 97833714 --alswrv 500 -1 \ keyring: uid.1000 642500861 --alswrv 500 500 \ trusted: kmk
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用可信密钥的序列号将密钥导出到用户空间 blob:
keyctl pipe 642500861 > kmk.blob
# keyctl pipe 642500861 > kmk.blob
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令使用
pipe
子命令和kmk
的序列号。从用户空间 blob 加载可信密钥:
keyctl add trusted kmk "load `cat kmk.blob`" @u 268728824
# keyctl add trusted kmk "load `cat kmk.blob`" @u 268728824
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建使用 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
# keyctl add encrypted encr-key "new trusted:kmk 32" @u 159771175
Copy to Clipboard Copied! Toggle word wrap Toggle overflow