Verificación de certificaciones para claves de Cloud HSM

En este tema, se muestra cómo verificar certificaciones para claves de Cloud HSM, que siempre se almacenan en un módulo de seguridad de hardware (HSM). Para obtener más información sobre las certificaciones, consulta las certificaciones de Cloud HSM.

Resumen

En criptografía, una certificación es una declaración legible por computadora que se puede probar de manera programática y que una pieza de software hace sobre sí misma. Las certificaciones son un componente importante de la computación confiable y pueden ser necesarias por motivos de cumplimiento.

Para ver y verificar las certificaciones, solicita una declaración de certificación con firma criptográfica, junto con el conjunto de certificados que se usa para firmarla. La declaración de certificación es producida por el hardware de HSM y firmada por certificados que pertenecen a Google y al fabricante de HSM.

Después de descargar la declaración de certificación y los certificados, verifica la validez de los certificados en el conjunto y, luego, la declaración de certificación.

El fabricante de HSM proporciona el formato de la declaración de certificación y las secuencias de comandos de verificación. No es posible verificar una certificación mediante Cloud Console, la API de Cloud KMS o la herramienta de gcloud. La verificación es intencionalmente independiente de Google. El fabricante de HSM proporciona y mantiene el formato de la certificación y las secuencias de comandos utilizadas para analizar y verificar la certificación.

Las secuencias de comandos de este tema están diseñadas para entornos de Linux, incluido Cloud Shell. Para usar las secuencias de comandos en clientes macOS o Windows, es posible que deba realizar modificaciones.

Antes de comenzar

  • OpenSSL debe estar instalado en el cliente. Si usa Cloud Shell, OpenSSL está configurado correctamente.

  • Instala la biblioteca pyopenssl. El siguiente comando es una forma de instalarlo mediante pip: pip.

        pip install --user pyopenssl
        
  • Crea la clave de Cloud HSM en un llavero de claves que se encuentre en una región compatible con Cloud HSM. Las claves de Cloud HSM no están disponibles en la región global.

  • Descarga las secuencias de comandos verify_attest.py, verify_pubkey.py, parse_v1.py y parse_v2.py del fabricante de HSM. Familiarízate con las instrucciones para usar las secuencias de comandos que se proporcionan en la misma ubicación.

Descargar los artefactos

Antes de certificar una clave, debes descargar los certificados y la declaración de certificación.

Descargar los certificados

La firma de una certificación puede verificarse mediante un conjunto de certificados que conduzca a los certificados raíz de Google y al fabricante de HSM, y firmarse por las autoridades certificadas (CA) de Google y del fabricante de HSM.

  1. Descarga el conjunto de certificados que dirige el certificado raíz de Google.

        curl -O https://www.gstatic.com/cloudhsm/cloud-kms-prod-[location]-google.pem
        
  2. Descarga el conjunto de certificados que lleva al certificado raíz del fabricante de HSM.

        curl -O https://www.gstatic.com/cloudhsm/cloud-kms-prod-[location]-cavium.pem
        
  3. Descarga el certificado raíz de Google.

        curl -O https://www.gstatic.com/cloudhsm/roots/global_1498867200.pem
        
  4. Descarga y extrae el certificado raíz y la clave pública del fabricante de HSM.

        curl -O https://www.marvell.com/content/dam/marvell/en/public-collateral/security-solutions/liquid_security_certificate.zip
    
        unzip liquid_security_certificate.zip
        

    El certificado se extrae a liquid_security_certificate.crt y la clave pública a liquid_security_certificate.txt.

Descargar la declaración de certificación

Puedes descargar la certificación para una versión de clave criptográfica con Google Cloud Console o la línea de comandos. La declaración de certificación se descarga directamente desde el dispositivo HSM que contiene la clave.

Console

  1. Ve a la página Claves criptográficas en Cloud Console.

    Ir a la página Claves criptográficas

  2. Selecciona el llavero de claves que contiene la clave que deseas certificar y, luego, selecciona la clave.

  3. Haz clic en el ícono Más (3 puntos verticales) para la versión de clave que deseas certificar y selecciona Obtener certificación.

  4. En el diálogo Obtener certificación, haz clic en Descargar. El archivo de certificación se descarga en tu sistema local.

    El nombre del archivo de certificación tiene el siguiente formato: [keyring-name]-[key-name]-[key-version]-[attestation-format]-attestation.dat. Cada parte del nombre del archivo está separada por un guion. Por ese motivo, el texto del marcador de posición está rodeado por corchetes ([ y ]).

gcloud

  1. Haz clic en Activar Cloud Shell en la parte superior de la ventana de la consola.

    Activar Cloud ShellSe abrirá una sesión de Cloud Shell en un marco nuevo en la parte inferior de la consola, en la que se mostrará una ventana de línea de comandos. La sesión del shell puede tomar unos segundos en inicializarse.

    Sesión de Cloud Shell

  2. En la línea de comandos de Cloud Shell, usa el comando gcloud kms keys versions describe para recuperar el formato de certificación de la clave que quieres certificar.

        gcloud kms keys versions describe key-version \
          --key key-name \
          --location location \
          --keyring keyring-name
        

    El resultado de este comando muestra el formato de la certificación de la versión de clave, que necesitarás para el siguiente paso.

  3. En la línea de comandos de Cloud Shell, usa el comando gcloud kms keys versions describe para recuperar la certificación de la clave que deseas certificar, y reemplaza certificación-formato con el formato de certificación que recuperaste en el paso anterior. La marca --attestation-file especifica la ruta de acceso y el destino del nombre del archivo para la certificación recuperada. Cada parte del nombre del archivo está separada por un guion. Por ese motivo, el texto del marcador de posición está rodeado por corchetes ([ y ]).

        gcloud kms keys versions describe key-version \
         --key key-name \
         --location location \
         --keyring keyring-name \
         --attestation-file \
         [keyring-name]-[key-name]-[key-version]-[attestation-format]-attestation.dat
        

Verificación y análisis de la certificación

La documentación del fabricante de HSM incluye instrucciones completas para usar sus secuencias de comandos a fin de verificar y analizar una certificación. Estos vínculos van directamente a instrucciones específicas del fabricante de HSM:

Las instrucciones para analizar el valor de la certificación incluyen una referencia de campos generales en la certificación, no específica de las claves de HSM en Cloud HSM. En las siguientes secciones, se muestra cómo verificar la información de las claves que es específica de Cloud HSM, como el ID de versión.

Verifica el ID de versión de la clave

Puedes verificar si la certificación contiene el hash SHA-256 del ID de recurso de la versión de clave. El nombre del recurso de la clave es parte del campo 0x0102 en el archivo de certificación. Este campo contiene el ID de clave. El ID de clave se compone de dos resúmenes de hash SHA-256 concatenados en formato hexadecimal. El segundo resumen de hash debe coincidir con el nombre del recurso de la clave.

  1. Obtén el ID de recurso de la versión de clave. Puedes usar Cloud Console para obtener el ID de recurso de la versión de clave o puedes ejecutar el siguiente comando:

        gcloud kms keys versions list \
         --location location \
         --keyring keyring-name \
         --key key-name
        
  2. Configura la variable de entorno RESOURCE_NAME con el ID de recurso de la versión de clave que acabas de recuperar.

        RESOURCE_NAME="projects/project-id/locations/location/keyRings/keyring-name/cryptoKeys/key-name/cryptoKeyVersions/key-version""
        
  3. Configura la variable de entorno RESOURCE_NAME_HEX con el valor hexadecimal para el ID de recurso, ya que el valor en la declaración de certificación también está codificado en hexadecimal.

        RESOURCE_NAME_NEX="$(echo -n ${RESOURCE_NAME} | openssl dgst -sha256 -hex | awk '{print $2}')"
        
  4. La secuencia de comandos de análisis vuelca todos los campos de certificación en formato hexadecimal, y el ID de clave se codifica de manera interna una vez más. Establece la variable de entorno KEYID_HEX en el valor del ID de clave con una capa de decodificación con codificación hexadecimal:

        KEYID_HEX=$(grep -m 1 0x0102 /path/to/parsed.dat | awk '{print $2}' | xxd -p -r)
        
  5. Compara los valores de RESOURCE_NAME_HEX y KEYID_HEX como strings:

        test  ${RESOURCE_NAME_HEX} == ${KEYID_HEX} || echo "Values don't match"
        

    Si los valores coinciden, no se muestra ningún resultado y el comando sale con el código 0.

Verificando otras propiedades de la clave

Puedes ver varias propiedades clave, que corresponden a los campos del estándar PKCS #11. Usa los siguientes ejemplos como guía para verificar otras propiedades de la clave.

  • Si una clave es extraíble se almacena en el campo 0x0102 del resultado analizado. Para determinar si una clave se puede extraer, examina el campo 0x0162: Un valor de \x01 es true y un valor de \x00 es false. Las claves de Cloud HSM no se pueden extraer.

        grep '0x0162:' parsed.dat
        
  • El tipo de clave se almacena en el campo 0x0100. Los tipos de clave se documentan en el estándar PCKS#11 con el prefijo CKK_*. Por ejemplo, una clave AES tiene un tipo de \x1f.

        grep '0x0100:' parsed.dat
        
  • Si una clave se importó, en lugar de crearse en Cloud HSM, se almacena en el campo 0x0163. Un valor de \x01 es true y un valor de \x00 es false.

        grep '0x0163:' parsed.dat