En este artículo se explica cómo verificar las atestaciones de las claves de Cloud HSM, que siempre se almacenan en un módulo de seguridad de hardware (HSM).
Información general
En criptografía, una certificación es una declaración legible por máquina y demostrable mediante programación que un software hace sobre sí mismo. Las certificaciones son un componente importante de la computación de confianza y pueden ser necesarias por motivos de cumplimiento.
Para ver y verificar las atestaciones, solicita una declaración de atestación firmada criptográficamente al HSM, junto con las cadenas de certificados usadas para firmarla. La declaración de atestación la genera el hardware del HSM y la firman los certificados propiedad de Google y del fabricante del HSM.
Después de descargar la declaración de atestación y las cadenas de certificados, puedes consultar sus atributos o verificar la validez de la atestación mediante las cadenas de certificados.
La secuencia de comandos de certificación es una secuencia de comandos de código abierto de Python desarrollada por Google. Puedes ver el código fuente de la secuencia de comandos para obtener más información sobre el formato de atestación y cómo funciona la verificación, o bien como modelo para una solución personalizada.
Los ejemplos de este tema están diseñados para entornos Linux, incluido Cloud Shell. Para seguir los pasos en clientes macOS o Windows, es posible que tengas que hacer modificaciones.
Antes de empezar
- Si es necesario, crea una clave de Cloud HSM en un conjunto de claves de una región compatible con Cloud HSM.
Descarga e instala los scripts para analizar los valores de la certificación del fabricante del HSM. Descarga cada una de estas secuencias de comandos:
verify_pubkey.py
parse_v1.py
parse_v2.py
Consulta la documentación sobre el uso de las secuencias de comandos, que se encuentra en la misma ubicación.
Descarga e instala la secuencia de comandos para verificar las certificaciones y sus requisitos previos, y consulta la documentación de la secuencia de comandos.
Verificar la certificación
El proceso de verificación de la certificación se puede realizar automáticamente a través de la Google Cloud consola o manualmente descargando el paquete de certificación y la secuencia de comandos de verificación de la certificación y ejecutándola de forma local o en Cloud Shell.
Verificar atestaciones a través de la consola Google Cloud
Puedes verificar la certificación a través de la Google Cloud consola, que abrirá un Cloud Shell y lo rellenará previamente con los fragmentos de código necesarios para llevar a cabo todo el proceso de verificación de la certificación.
Ve a la página Gestión de claves de la Google Cloud consola.
Seleccione el llavero que contenga la clave que quiera certificar y, a continuación, seleccione la clave.
Haz clic en Más more_vert en la versión de la clave que quieras verificar y selecciona Verificar atestación.
En el cuadro de diálogo Verificar atestación, haz clic en Abrir Cloud Shell. Se abrirá Cloud Shell y se rellenará automáticamente con el fragmento de código necesario para completar todo el proceso de verificación.
Inspecciona el fragmento de código rellenado previamente en Cloud Shell. El fragmento descarga la secuencia de comandos de verificación de la atestación y sus dependencias, ejecuta los comandos de gcloud para descargar la atestación y las cadenas de certificados, y, a continuación, ejecuta la secuencia de comandos para verificar la atestación.
Ejecuta el fragmento de código para verificar la certificación.
Verificar la atestación manualmente
La atestación, las cadenas de certificados y la secuencia de comandos de verificación de la atestación deben descargarse antes de verificar manualmente la atestación.
Descarga las cadenas de atestación y de certificados.
Consola
Ve a la página Gestión de claves de la Google Cloud consola.
Seleccione el llavero que contenga la clave que quiera certificar y, a continuación, seleccione la clave.
Haz clic en Más more_vert en la versión de la clave que quieras verificar y selecciona Verificar atestación.
En el cuadro de diálogo Verificar atestación, haz clic en Descargar paquete de atestación. Se descargará un archivo ZIP que contiene las cadenas de certificación y atestación.
Extrae las cadenas de atestación y de certificados del paquete de atestación.
gcloud
En la parte superior de la ventana de la consola, haz clic en Activar Cloud Shell.
Se abrirá una sesión de Cloud Shell dentro de un nuevo marco en la parte inferior de la consola y se mostrará en ella un mensaje de la línea de comandos. La sesión del shell puede tardar unos segundos en inicializarse.
En la línea de comandos de Cloud Shell, usa el comando
gcloud kms keys versions describe
para obtener la certificación de la clave que quieras certificar. La marca--attestation-file
especifica la ruta y el nombre de archivo de destino de la atestación recuperada.gcloud kms keys versions describe key-version \ --key key-name \ --location location \ --keyring keyring-name \ --attestation-file [attestation-file] \
En la línea de comandos de Cloud Shell, usa el comando
gcloud kms keys versions get-certificate-chain
para obtener las cadenas de certificados de la clave que quieras verificar. La marca--output-file
especifica la ruta y el nombre de archivo de destino de los certificados recuperados.gcloud kms keys versions get-certificate-chain key-version \ --key key-name \ --location location \ --keyring keyring-name \ --output-file [certificates-file] \
Descarga la secuencia de comandos para verificar atestaciones y sus requisitos previos, y consulta la documentación de la secuencia de comandos para verificar la atestación del archivo de atestación con los certificados del archivo de certificados.
Analizar los valores de la certificación
La documentación del fabricante del HSM incluye instrucciones completas para usar sus secuencias de comandos con el fin de analizar los valores de una atestación y verificar la clave pública de un par de claves asimétricas. La certificación deberá descomprimirse con el siguiente comando antes de poder analizarse.
Descomprime la atestación comprimida.
gzip -d < compressed_attestation.dat > attestation.dat
Estos enlaces dirigen directamente a instrucciones específicas del fabricante del HSM:
Las instrucciones para analizar el valor de la atestación incluyen una referencia de los campos generales de la atestación, no específicos de las claves de HSM en Cloud HSM.
En las siguientes secciones se muestra cómo verificar la información sobre tus claves que es específica de Cloud HSM.
Verificar el ID de versión de la clave
Puedes verificar si el hash SHA-256 del ID de recurso de la versión de la clave está presente en la certificación. El nombre de recurso de la clave forma parte del campo 0x0102
o del campo de ID de clave del archivo de certificación. El ID de clave se compone de dos resúmenes de hash SHA-256 concatenados en formato hexadecimal. El segundo debe coincidir con el nombre del recurso de la clave.
Obtén el ID de recurso de versión de clave de la versión de clave. Puedes usar laGoogle Cloud consola para obtener el ID de recurso de la versión de clave o ejecutar el siguiente comando:
gcloud kms keys versions list \ --location location \ --keyring key-ring-name \ --key key-name
En la línea de comandos, asigna
resource_name
al ID de recurso de la versión de clave que acabas de obtener.RESOURCE_NAME="projects/project-id/locations/location/keyRings/key-ring-name/cryptoKeys/key-name/cryptoKeyVersions/key-version"
Como la secuencia de comandos de análisis vuelca todos los campos de atestación en formato hexadecimal, el ID de clave se habría formateado dos veces en formato hexadecimal. Una vez al crear el ID de clave y otra al analizar la atestación. Para verificar que el nombre del recurso coincide con el ID de clave, convierte el nombre del recurso en un digestión hexadecimal SHA-256, revierte una conversión hexadecimal del ID de clave en el archivo de atestación y compara los dos.
RESOURCE_NAME_HEX="$(echo -n ${RESOURCE_NAME} | openssl dgst -sha256 -hex | awk '{print $2}')"
La secuencia de comandos de análisis vuelca todos los campos de certificación en formato hexadecimal y el ID de clave se codifica internamente en hexadecimal una segunda vez. Asigna a la variable de entorno
KEYID_HEX
el valor del ID de clave con una capa de decodificación hexadecimal:KEYID_HEX=$(grep -m 1 0x0102 /path/to/parsed/attestation.dat | awk '{print $2}' | xxd -p -r)
Compara los valores de
RESOURCE_NAME_HEX
yKEYID_HEX
como cadenas:test ${RESOURCE_NAME_HEX} == ${KEYID_HEX:(-64)} || echo "Values don't match"
Si los valores coinciden, no se devuelve ningún resultado y el comando se cierra con el código
0
.
Verificar otras propiedades de la clave
Puede ver varias propiedades clave, que se corresponden con los campos del estándar PKCS #11. Usa los siguientes ejemplos como guía para verificar otras propiedades de la clave.
Si una clave se puede extraer, se almacena en el campo
0x0102
del resultado analizado. Para determinar si una clave se puede extraer, examina el campo0x0162
. El valor\x01
estrue
y el valor\x00
esfalse
.Las claves de Cloud HSM no se pueden extraer.
grep '0x0162:' /path/to/parsed/attestation.dat
En el campo
0x0163
se almacena cómo se ha introducido la clave en el HSM (si se ha creado directamente o se ha importado). Si la clave se ha creado de forma local en el HSM, el campo se define como\x01
. El campo de una clave importada se ha definido como\x00
.Puedes deducir cierta información sobre cómo se ha creado la clave en el HSM. Si la clave se ha creado en Cloud HSM, significa que nunca se ha almacenado sin cifrar fuera de un HSM. Si la clave se ha importado, el mecanismo de importación garantiza que la clave esté protegida durante el proceso de importación y en Cloud HSM después.
grep '0x0163:' /path/to/parsed/attestation.dat
El tipo de clave se almacena en el campo
0x0100
. Los tipos de claves se documentan en el estándar PCKS#11 con el prefijoCKK_*
. Por ejemplo, una clave AES tiene el tipo\x1f
.grep '0x0100:' /path/to/parsed/attestation.dat
Información adicional
Verificas una atestación para determinar si se ha creado una versión de una clave en un HSM.