En este tema se ofrece una descripción general de Cloud HSM y se explica cómo crear y usar claves de cifrado protegidas por HSM en Cloud Key Management Service.
¿Qué es Cloud HSM?
Cloud HSM es un servicio de módulo de seguridad de hardware (HSM) alojado en la nube que permite alojar claves de encriptado y llevar a cabo operaciones criptográficas en un clúster formado por HSMs con certificación FIPS 140-2 de nivel 3. Google se encarga de gestionar el clúster de HSM, de modo que no tienes que preocuparte por los clústeres, el escalado o los parches. Cloud HSM utiliza Cloud KMS como frontend, por lo que puedes aprovechar todas las ventajas y funciones que ofrece Cloud KMS.
Crear un conjunto de claves
Cuando creas una clave, la añades a un conjunto de claves en una Google Cloud ubicación determinada. Puedes crear un nuevo llavero o usar uno que ya tengas. En este tema, creará un conjunto de claves y le añadirá una clave.
Crea un conjunto de claves en una Google Cloud ubicación que admita Cloud HSM.
Consola
Ve a la página Gestión de claves de la Google Cloud consola.
Haz clic en Crear conjunto de claves.
En Nombre del conjunto de claves, introduce el nombre que quieras darle al conjunto de claves.
En Ubicación del conjunto de claves, selecciona una ubicación como
"us-east1"
.Haz clic en Crear.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
-
En tu entorno, ejecuta el comando
gcloud kms keyrings create
:gcloud kms keyrings create KEY_RING \ --location LOCATION
Haz los cambios siguientes:
KEY_RING
: el nombre del conjunto de claves que contiene la clave.LOCATION
: la ubicación de Cloud KMS del conjunto de claves.
Para obtener información sobre todas las marcas y los valores posibles, ejecuta el comando con la marca
--help
. PROJECT_ID
: el ID del proyecto que contiene el conjunto de claves.KEY_RING
: el nombre del conjunto de claves que contiene la clave.LOCATION
: la ubicación de Cloud KMS del conjunto de claves.
C#
Para ejecutar este código, primero debes configurar un entorno de desarrollo de C# e instalar el SDK de Cloud KMS para C#.
Go
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Go e instalar el SDK de Go de Cloud KMS.
Java
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Java e instalar el SDK de Java de Cloud KMS.
Node.js
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Node.js e instalar el SDK de Node.js de Cloud KMS.
PHP
Para ejecutar este código, primero debes consultar información sobre cómo usar PHP en Google Cloud e instalar el SDK de PHP de Cloud KMS.
Python
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Python e instalar el SDK de Python de Cloud KMS.
Ruby
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Ruby e instalar el SDK de Ruby de Cloud KMS.
API
En estos ejemplos se usa curl como cliente HTTP para mostrar cómo se usa la API. Para obtener más información sobre el control de acceso, consulta el artículo sobre cómo acceder a la API Cloud KMS.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING" \ --request "POST" \ --header "authorization: Bearer TOKEN"
Haz los cambios siguientes:
Para obtener más información, consulta la documentación de la API KeyRing.create
.
Crear clave
Sigue estos pasos para crear una clave de Cloud HSM en el conjunto de claves y la ubicación especificados.
Consola
Ve a la página Gestión de claves de la Google Cloud consola.
Haga clic en el nombre del conjunto de claves para el que creará una clave.
Haz clic en Crear clave.
En ¿Qué tipo de clave quieres crear?, elige Clave generada.
En el campo Nombre de la clave, introduce el nombre de la clave.
Haz clic en el desplegable Nivel de protección y selecciona HSM.
Haga clic en el menú desplegable Propósito y seleccione Cifrado/descifrado simétrico.
Acepta los valores predeterminados de Periodo de rotación y Empezar el.
Haz clic en Crear.
gcloud
Para usar Cloud KMS en la línea de comandos, primero instala o actualiza a la versión más reciente de la CLI de Google Cloud.
gcloud kms keys create key \ --keyring key-ring \ --location location \ --purpose "encryption" \ --protection-level "hsm"
Sustituye key por el nombre de la nueva clave. Sustituye key-ring por el nombre del conjunto de claves en el que se ubicará la clave. Sustituye location por la ubicación de Cloud KMS del conjunto de claves.
Para obtener información sobre todas las marcas y los valores posibles, ejecuta el comando con la marca --help
.
C#
Para ejecutar este código, primero debes configurar un entorno de desarrollo de C# e instalar el SDK de Cloud KMS para C#.
Go
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Go e instalar el SDK de Go de Cloud KMS.
Java
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Java e instalar el SDK de Java de Cloud KMS.
Node.js
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Node.js e instalar el SDK de Node.js de Cloud KMS.
PHP
Para ejecutar este código, primero debes consultar información sobre cómo usar PHP en Google Cloud e instalar el SDK de PHP de Cloud KMS.
Python
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Python e instalar el SDK de Python de Cloud KMS.
Ruby
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Ruby e instalar el SDK de Ruby de Cloud KMS.
Cifrar datos
Ahora que tienes una clave, puedes usarla para cifrar texto o contenido binario.
gcloud
Para usar Cloud KMS en la línea de comandos, primero instala o actualiza a la versión más reciente de la CLI de Google Cloud.
gcloud kms encrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --plaintext-file FILE_TO_ENCRYPT \ --ciphertext-file ENCRYPTED_OUTPUT
Haz los cambios siguientes:
KEY_NAME
: el nombre de la clave que quieras usar para el cifrado.KEY_RING
: el nombre del conjunto de claves que contiene la clave.LOCATION
: la ubicación de Cloud KMS que contiene el conjunto de claves.FILE_TO_ENCRYPT
: la ruta al archivo que quieres cifrar.ENCRYPTED_OUTPUT
: la ruta en la que quieres guardar el resultado cifrado.
Para obtener información sobre todas las marcas y los valores posibles, ejecuta el comando con la marca --help
.
C#
Para ejecutar este código, primero debes configurar un entorno de desarrollo de C# e instalar el SDK de Cloud KMS para C#.
Go
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Go e instalar el SDK de Go de Cloud KMS.
Java
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Java e instalar el SDK de Java de Cloud KMS.
Node.js
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Node.js e instalar el SDK de Node.js de Cloud KMS.
PHP
Para ejecutar este código, primero debes consultar información sobre cómo usar PHP en Google Cloud e instalar el SDK de PHP de Cloud KMS.
Python
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Python e instalar el SDK de Python de Cloud KMS.
Ruby
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Ruby e instalar el SDK de Ruby de Cloud KMS.
API
En estos ejemplos se usa curl como cliente HTTP para mostrar cómo se usa la API. Para obtener más información sobre el control de acceso, consulta el artículo sobre cómo acceder a la API Cloud KMS.
Cuando se usa JSON y la API REST, el contenido debe codificarse en base64 para que Cloud KMS pueda encriptarlo.
Para cifrar datos, haz una solicitud POST
y proporciona la información del proyecto y de la clave correspondientes. Además, especifica el texto codificado en base64 que quieras cifrar en el campo plaintext
del cuerpo de la solicitud.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:encrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"plaintext\": \"PLAINTEXT_TO_ENCRYPT\"}"
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto que contiene el conjunto de claves y la clave que quieres usar para el cifrado.LOCATION
: la ubicación de Cloud KMS que contiene el conjunto de claves.KEY_RING
: el conjunto de claves que contiene la clave que quieres usar para el cifrado.KEY_NAME
: el nombre de la clave que quieras usar para el cifrado.PLAINTEXT_TO_ENCRYPT
: los datos de texto sin formato que quieras cifrar. El texto sin formato debe estar codificado en Base64 antes de llamar al métodoencrypt
.
A continuación, se muestra un ejemplo de carga útil con datos codificados en base64:
{ "plaintext": "U3VwZXIgc2VjcmV0IHRleHQgdGhhdCBtdXN0IGJlIGVuY3J5cHRlZAo=", }
Descifrar texto cifrado
Para descifrar contenido cifrado, debe usar la misma clave que se usó para cifrarlo.
gcloud
Para usar Cloud KMS en la línea de comandos, primero instala o actualiza a la versión más reciente de la CLI de Google Cloud.
gcloud kms decrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --ciphertext-file FILE_TO_DECRYPT \ --plaintext-file DECRYPTED_OUTPUT
Haz los cambios siguientes:
KEY_NAME
: el nombre de la clave que quieras usar para el descifrado.KEY_RING
: el nombre del conjunto de claves que contiene la clave.LOCATION
: la ubicación de Cloud KMS que contiene el conjunto de claves.FILE_TO_DECRYPT
: la ruta al archivo que quieres descifrar.DECRYPTED_OUTPUT
: la ruta en la que quieres guardar el resultado descifrado.
Para obtener información sobre todas las marcas y los valores posibles, ejecuta el comando con la marca --help
.
C#
Para ejecutar este código, primero debes configurar un entorno de desarrollo de C# e instalar el SDK de Cloud KMS para C#.
Go
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Go e instalar el SDK de Go de Cloud KMS.
Java
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Java e instalar el SDK de Java de Cloud KMS.
Node.js
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Node.js e instalar el SDK de Node.js de Cloud KMS.
PHP
Para ejecutar este código, primero debes consultar información sobre cómo usar PHP en Google Cloud e instalar el SDK de PHP de Cloud KMS.
Python
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Python e instalar el SDK de Python de Cloud KMS.
Ruby
Para ejecutar este código, primero debes configurar un entorno de desarrollo de Ruby e instalar el SDK de Ruby de Cloud KMS.
API
En estos ejemplos se usa curl como cliente HTTP para mostrar cómo se usa la API. Para obtener más información sobre el control de acceso, consulta el artículo sobre cómo acceder a la API Cloud KMS.
El texto descifrado que devuelve Cloud KMS en el JSON está codificado en base64.
Para descifrar datos cifrados, haz una solicitud POST
y proporciona el proyecto y la información de la clave adecuados, así como el texto cifrado (también conocido como texto cifrado) que quieras descifrar en el campo ciphertext
del cuerpo de la solicitud.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:decrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"ciphertext\": \"ENCRYPTED_DATA\"}"
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto que contiene el conjunto de claves y la clave que quieres usar para el descifrado.LOCATION
: la ubicación de Cloud KMS que contiene el conjunto de claves.KEY_RING
: el conjunto de claves que contiene la clave que quieres usar para el descifrado.KEY_NAME
: el nombre de la clave que quieras usar para el descifrado.ENCRYPTED_DATA
: los datos cifrados que quieres descifrar.
A continuación, se muestra un ejemplo de carga útil con datos codificados en base64:
{ "ciphertext": "CiQAhMwwBo61cHas7dDgifrUFs5zNzBJ2uZtVFq4ZPEl6fUVT4kSmQ...", }
Pasos siguientes
En el ejemplo de cifrado de este tema se ha usado una clave simétrica con el nivel de protección HSM. Para cifrar con una clave asimétrica con el nivel de protección HSM, sigue los pasos que se indican en Cifrar y descifrar datos con una clave asimétrica con estos cambios:
- Crea el conjunto de claves en una de las regiones admitidas de Cloud HSM.
- Crea la clave con el nivel de protección HSM.
Para usar una clave asimétrica con el nivel de protección de HSM para la firma de curvas elípticas o la firma RSA, sigue los pasos que se indican en Crear y validar firmas con estos cambios:
- Crea el conjunto de claves en una de las regiones admitidas de Cloud HSM.
- Crea la clave con el nivel de protección HSM.
Empieza a usar la API.
Consulta la referencia de la API de Cloud KMS.
Consulta las guías de procedimientos para empezar a crear, rotar y definir permisos en las claves.
Consulta la sección Conceptos para entender mejor la jerarquía de objetos, los estados clave y la rotación de claves.
Consulta información sobre el registro en Cloud KMS. Ten en cuenta que el registro se basa en las operaciones y se aplica a las claves con niveles de protección de HSM y de software.
Consulta más información sobre cómo protege Cloud HSM tus datos en el informe técnico sobre la arquitectura de Cloud HSM.
Limitaciones conocidas
El tamaño de los mensajes está limitado a 8 KiB (en lugar de los 64 KiB de las claves de software de Cloud KMS) para el texto sin formato y el texto cifrado proporcionados por el usuario, incluidos los datos autenticados adicionales.
Es posible que Cloud HSM no esté disponible en algunas regiones multirregión o birregión. Para obtener más información, consulta Regiones admitidas para Cloud HSM.
Si usas claves de Cloud HSM con integraciones de claves de cifrado gestionadas por el cliente (CMEK) en otros Google Cloud servicios, las ubicaciones que uses para los servicios deben coincidir exactamente con las ubicaciones de tus claves de Cloud HSM. Esto se aplica a las ubicaciones regionales, birregionales y multirregionales.
Para obtener más información sobre las integraciones de CMEK, consulta la sección correspondiente del artículo Cifrado en reposo.
Actualmente, las operaciones de claves asimétricas almacenadas en Cloud HSM pueden tener una latencia considerablemente mayor que las claves de software de Cloud KMS.
Bare Metal Rack HSM
Google Cloud ofrece opciones adicionales de HSM, como el modelo de un solo arrendatario. Bare Metal Rack HSM está disponible para que los clientes alojen sus propios HSMs en el espacio proporcionado por Google. Ponte en contacto con tu representante de cuentas para obtener más información.