En este tema se explica cómo realizar las siguientes operaciones con claves simétricas sin formato:
- Encripta contenido de texto sin formato o binario de forma local o con Cloud KMS.
- Desencriptar textos cifrados de forma local o con Cloud KMS.
Si quieres realizar una operación con una clave simétrica normal (no sin formato), consulta Encriptar y desencriptar datos con una clave simétrica.
El encriptado simétrico sin formato te permite encriptar y desencriptar tus datos de forma local en tus instalaciones o mediante Cloud KMS, así como mover datos encriptados entre diferentes bibliotecas y proveedores de servicios sin tener que desencriptarlos primero. Esta función depende de la capacidad de acceder a la clave en el punto de operación. Si quieres usar los textos cifrados fuera de Google Cloud, debes usar una clave importada, ya que las claves generadas en Cloud KMS no se pueden exportar. Estos algoritmos de cifrado generan textos cifrados estándar que se pueden descifrar con cualquier servicio de descifrado estándar. Admitimos los siguientes algoritmos de cifrado simétrico sin formato:
AES-128-GCM
AES-256-GCM
AES-128-CBC
AES-256-CBC
AES-128-CTR
AES-256-CTR
Ten en cuenta los siguientes puntos sobre estos algoritmos de cifrado sin formato:
AES-GCM
proporciona autenticación basada en los datos autenticados adicionales (AAD) y genera una etiqueta de autenticación. Es el algoritmo de cifrado recomendado. Los datos cifrados con algoritmosAES-GCM
no se pueden descifrar sin el AAD proporcionado.AES-CBC
requiere que el tamaño del texto sin formato sea un múltiplo del tamaño del bloque (16 bytes). Si el texto sin formato no es un múltiplo del tamaño del bloque, rellena el texto sin formato antes de cifrarlo. De lo contrario, la operación fallará y se mostrará un error que indica el problema.AES-CBC
yAES-CTR
no son esquemas de cifrado autenticado, lo que significa que pueden conllevar un mayor riesgo de uso inadecuado accidental. Se ofrecen para dar respuesta a las necesidades de interoperabilidad y de sistemas antiguos, y deben usarse con precaución. Para evitar un uso inadecuado, el uso de estos algoritmos de cifrado requiere los siguientes permisos de gestión de identidades y accesos:cloudkms.cryptoKeyVersions.manageRawAesCbcKeys
porAES-CBC
.cloudkms.cryptoKeyVersions.manageRawAesCtrKeys
porAES-CTR
.
Roles obligatorios
Para obtener los permisos que necesitas para usar el cifrado sin formato, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu clave:
-
Para encriptar solamente:
Encargado de encriptar CryptoKey de Cloud KMS (
roles/cloudkms.cryptoKeyEncrypter
) -
Para desencriptar solamente:
Encargado de desencriptar claves de CryptoKey de Cloud KMS (
roles/cloudkms.cryptoKeyDecrypter
) -
Para encriptar y desencriptar:
Encargado del encriptado y desencriptado de claves de CryptoKey de Cloud KMS (
roles/cloudkms.cryptoKeyEncrypterDecrypter
)
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Roles adicionales para algoritmos de cifrado sin formato no autenticados
- Para usar claves
AES-CBC
: Cloud KMS Expert Raw AES-CBC Key Manager (roles/cloudkms.expertRawAesCbc
) - Para usar claves
AES-CTR
: Cloud KMS Expert Raw AES-CTR Key Manager (roles/cloudkms.expertRawAesCtr
)
Antes de empezar
- Concede los permisos de cifrado simétrico sin formato mencionados a las entidades de seguridad correspondientes.
- Crea un conjunto de claves siguiendo las instrucciones del artículo sobre cómo crear conjuntos de claves.
- Crea e importa una clave de cifrado simétrica sin procesar tal como se describe en los artículos sobre creación de claves e importación de claves.
Cifrar
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 raw-encrypt \ --location LOCATION \ --keyring KEY_RING \ --key KEY_NAME \ --version KEY_VERSION \ --plaintext-file INPUT_FILE_PATH \ --ciphertext-file OUTPUT_FILE_PATH
Haz los cambios siguientes:
LOCATION
: la ubicación de Cloud KMS del conjunto de claves.KEY_RING
: el nombre del conjunto de claves que contiene la clave.KEY_NAME
: el nombre de la clave que se va a usar para el cifrado.KEY_VERSION
: el ID de la versión de la clave que se va a usar para el cifrado.INPUT_FILE_PATH
: la ruta del archivo local para leer los datos de texto sin formato.OUTPUT_FILE_PATH
: la ruta del archivo local para guardar el resultado cifrado.
Para obtener información sobre todas las marcas y los valores posibles, ejecuta el comando con la marca --help
.
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.
Usa el método rawEncrypt
para cifrar datos de texto sin formato:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:rawEncrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"plaintext": "BASE64_ENCODED_INPUT", "additionalAuthenticatedData": "BASE64_ENCODED_AAD"}'
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto que contiene el conjunto de claves.LOCATION
: la ubicación de Cloud KMS del conjunto de claves.KEY_RING
: el nombre del conjunto de claves que contiene la clave.KEY_NAME
: el nombre de la clave que se va a usar para el cifrado.KEY_VERSION
: el ID de la versión de la clave que se va a usar para el cifrado.BASE64_ENCODED_INPUT
: los datos de texto sin formato codificados en base64 que quieras cifrar.BASE64_ENCODED_AAD
: los datos adicionales autenticados codificados en base64 que se usan para proporcionar garantías de integridad y autenticidad. Este campo solo se aplica a los algoritmosAES-GCM
.
El resultado es un objeto JSON que contiene el texto cifrado y el vector de inicialización asociado como cadenas codificadas en base64.
Descifrar
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 raw-decrypt \ --location LOCATION \ --keyring KEY_RING \ --key KEY_NAME \ --version KEY_VERSION \ --ciphertext-file INPUT_FILE_PATH \ --plaintext-file OUTPUT_FILE_PATH
Haz los cambios siguientes:
LOCATION
: la ubicación de Cloud KMS del conjunto de claves.KEY_RING
: el nombre del conjunto de claves que contiene la clave.KEY_NAME
: el nombre de la clave que se va a usar para el cifrado.KEY_VERSION
: el ID de la versión de la clave que se va a usar para el cifrado.INPUT_FILE_PATH
: la ruta del archivo local al texto cifrado que quieras descifrar.OUTPUT_FILE_PATH
: la ruta del archivo local donde quieras guardar el texto sin cifrar descifrado.
Para obtener información sobre todas las marcas y los valores posibles, ejecuta el comando con la marca --help
.
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 la API REST, el contenido debe codificarse en base64 para que Cloud KMS pueda descifrarlo.
Para descifrar los datos cifrados, usa el método rawDecrypt
:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:rawDecrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"ciphertext": "BASE64_ENCODED_DATA", "additionalAuthenticatedData": "BASE64_ENCODED_AAD", "initializationVector": "BASE64_ENCODED_IV"}'
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto que contiene el conjunto de claves.LOCATION
: la ubicación de Cloud KMS del conjunto de claves.KEY_RING
: el nombre del conjunto de claves que contiene la clave.KEY_NAME
: el nombre de la clave que se va a usar para el descifrado.KEY_VERSION
: el ID de la versión de la clave que se va a usar para el descifrado.BASE64_ENCODED_DATA
: el texto cifrado codificado en base64 que quieres descifrar.BASE64_ENCODED_AAD
: los datos adicionales autenticados codificados en base64 que se usaron cuando se cifraron los datos. Este campo solo se aplica a los algoritmosAES-GCM
.BASE64_ENCODED_IV
: el vector de inicialización codificado en Base64 que se usó cuando se cifraron los datos.
El resultado es un objeto JSON que contiene el texto sin cifrar descifrado como una cadena codificada en base64.
Siguientes pasos
- Más información sobre cómo importar una versión de clave
- Consulta más información sobre el cifrado envolvente.
- Prueba el codelab sobre cómo encriptar y desencriptar datos con Cloud KMS.