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).

Nota

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

Procedimiento

  1. 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).

  2. 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
  3. 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 de kmk.

  4. 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
  5. 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