Red Hat Training
A Red Hat training course is available for RHEL 8
11.4. Claves de confianza y encriptadas
La siguiente sección presenta las claves de confianza y encriptadas como una parte importante para mejorar la seguridad del sistema.
Trusted y encrypted keys son claves simétricas de longitud variable generadas por el núcleo que utilizan el servicio de llavero del núcleo. El hecho de que este tipo de claves nunca aparezcan en el espacio de usuario en forma no cifrada significa que su integridad puede ser verificada, lo que a su vez significa que pueden ser utilizadas, por ejemplo, por el módulo de verificación extendido (EVM) para verificar y confirmar la integridad de un sistema en ejecución. Los programas a nivel de usuario sólo pueden acceder a las claves en forma de cifrado blobs.
Las claves de confianza necesitan un componente de hardware: el chip Trusted Platform Module (TPM), que se utiliza tanto para crear como para cifrar (sellar) las claves. El TPM sella las claves utilizando una clave RSA de 2048 bits denominada storage root key (SRK).
Para utilizar una especificación TPM 1.2, hay que habilitarla y activarla mediante un ajuste en el firmware de la máquina o utilizando el comando tpm_setactive
del paquete de utilidades tpm-tools
. Además, es necesario instalar la pila de software TrouSers
y ejecutar el demonio tcsd
para comunicarse con el TPM (hardware dedicado). El demonio tcsd
forma parte de la suite TrouSers
, que está disponible a través del paquete trousers
. El TPM 2.0, más reciente e incompatible con las versiones anteriores, utiliza una pila de software diferente, en la que las utilidades tpm2-tools
o ibm-tss
proporcionan acceso al hardware dedicado.
Además, el usuario puede sellar las claves de confianza con un conjunto específico de valores del TPM platform configuration register (PCR). El PCR contiene un conjunto de valores de gestión de la integridad que reflejan el firmware, el cargador de arranque y el sistema operativo. Esto significa que las claves selladas por PCR sólo pueden ser descifradas por el TPM en el mismo sistema en el que fueron cifradas. Sin embargo, una vez que se carga una clave de confianza sellada por PCR (añadida a un llavero), y por lo tanto se verifican sus valores de PCR asociados, puede actualizarse con valores de PCR nuevos (o futuros), de modo que pueda arrancarse un nuevo kernel, por ejemplo. Una sola clave también puede guardarse como múltiples blobs, cada uno con diferentes valores de PCR.
Las claves cifradas no requieren un TPM, ya que utilizan el Estándar de Cifrado Avanzado (AES) del núcleo, lo que las hace más rápidas que las claves de confianza. Las claves encriptadas se crean utilizando números aleatorios generados por el núcleo y se encriptan mediante un master key cuando se exportan a blobs del espacio de usuario. La clave maestra es una clave de confianza o una clave de usuario. Si la clave maestra no es de confianza, la clave encriptada sólo es tan segura como la clave de usuario utilizada para encriptarla.
11.4.1. Trabajar con claves de confianza
La siguiente sección describe cómo crear, exportar, cargar o actualizar claves de confianza con la utilidad keyctl
para mejorar la seguridad del sistema.
Requisitos previos
-
Para la arquitectura ARM de 64 bits e IBM Z, es necesario cargar el módulo del kernel
trusted
. Para obtener más información sobre cómo cargar los módulos del kernel, consulte Capítulo 3, Gestión de los módulos del núcleo. - El módulo de plataforma de confianza (TPM) debe estar habilitado y activo. Para más información sobre el TPM, consulte el subsistema de integridad del kernel y las claves de confianza y cifradas.
Procedimiento
Para crear una clave de confianza utilizando un TPM, ejecute:
# keyctl add trusted <name> "new <key_length> [options]" <key_ring>
Basándose en la sintaxis, construya un comando de ejemplo como el siguiente:
# keyctl add trusted kmk "new 32" @u 642500861
El comando crea una clave de confianza llamada
kmk
con una longitud de 32 bytes (256 bits) y la coloca en el llavero del usuario (@u
). Las claves pueden tener una longitud de 32 a 128 bytes (256 a 1024 bits).
Para listar la estructura actual de los llaveros del núcleo:
# keyctl show Session Keyring -3 --alswrv 500 500 keyring: ses 97833714 --alswrv 500 -1 \ keyring: uid.1000 642500861 --alswrv 500 500 \ trusted: kmk
Para exportar la clave a un blob del espacio de usuario, ejecute
# keyctl pipe 642500861 > kmk.blob
El comando utiliza el subcomando
pipe
y el número de serie dekmk
.Para cargar la clave de confianza desde el blob del espacio de usuario, utilice el subcomando
add
con el blob como argumento:# keyctl add trusted kmk "load `cat kmk.blob`" @u 268728824
Crear claves cifradas seguras basadas en la clave de confianza sellada por el TPM:
# keyctl add encrypted <name> "new [format] <key_type>:<primary_key_name> <keylength>" <key_ring>
Basándose en la sintaxis, genere una clave cifrada utilizando la clave de confianza ya creada:
# keyctl add encrypted encr-key "new trusted:kmk 32" @u 159771175
El comando utiliza la clave de confianza sellada por el TPM (
kmk
), producida en el paso anterior, como primary key para generar claves cifradas.
Recursos adicionales
-
Para obtener información detallada sobre el uso de
keyctl
, consulte la página del manualkeyctl(1)
. - Para más información sobre las claves de confianza y encriptadas, consulte Sección 11.4, “Claves de confianza y encriptadas”.
- Para obtener más información sobre el servicio de llavero del núcleo, consulte la documentación del núcleo ascendente.
- Para más información sobre el TPM, consulte Sección 11.1, “El subsistema de integridad del núcleo”.