En este documento, se proporciona información para crear y usar una clave de encriptación asimétrica con una clave RSA. Consulta Crear y validar firmas digitales, si deseas usar claves asimétricas para crear y validar firmas. Además, consulta Encripta y desencripta datos si quieres usar claves simétricas para estas operaciones.
La criptografía asimétrica usa la parte de la clave pública de la clave asimétrica, y la desencriptación usa la parte de la clave privada de la clave. Cloud Key Management Service proporciona una funcionalidad para recuperar la clave pública y para desencriptar el texto cifrado que se encriptó con esta. Cloud KMS no permite el acceso directo a la clave privada.
Antes de comenzar
En este documento, se proporcionan ejemplos que se ejecutan en la línea de comandos. Para simplificar el uso de los ejemplos, usa Cloud Shell. En el ejemplo de encriptación, se usa OpenSSL, que viene preinstalado en Cloud Shell.
Crea una clave asimétrica con el propósito de clave de
ASYMMETRIC_DECRYPT. Para ver qué algoritmos son compatibles con el propósito de claveASYMMETRIC_DECRYPT, consulta Algoritmos de encriptación asimétrica. No puedes seguir este procedimiento con una clave con el propósito deASYMMETRIC_SIGN.Si vas a usar la línea de comandos, instala OpenSSL si aún no lo tienes. Si usas Cloud Shell, OpenSSL ya está instalado.
- Usuarios de macOS: La versión de OpenSSL instalada en macOS no admite las marcas que se usan para desencriptar datos en este tema. Para seguir estos pasos en macOS, instala OpenSSL desde Homebrew.
Controla el acceso a la clave
Para un usuario o servicio que recuperará la clave pública, otorga el permiso
cloudkms.cryptoKeyVersions.viewPublicKeysobre la clave asimétrica. La clave pública es necesaria para encriptar los datos.Para un usuario o servicio que desencriptará datos que se encriptaron con la clave pública, otorga el permiso
cloudkms.cryptoKeyVersions.useToDecrypten la clave asimétrica.
Para obtener más información sobre los permisos y los roles en Cloud KMS, consulta Permisos y roles.
Encripta datos
Para encriptar datos con una clave de criptografía asimétrica, recupera la clave pública y úsala para encriptar los datos.
gcloud
Para esta muestra, se requiere que OpenSSL esté instalado en tu sistema local.
Descargar clave pública
Descarga la clave pública:
gcloud kms keys versions get-public-key KEY_VERSION \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--output-file PUBLIC_KEY_PATH
Reemplaza lo siguiente:
KEY_VERSION: Es la versión de la clave del par de claves asimétricas para la que deseas descargar la clave pública.KEY_NAME: el nombre de la clave.KEY_RING: Es el llavero de claves que contiene la clave.LOCATION: Es la ubicación del llavero de claves.PUBLIC_KEY_PATH: Es la ruta de acceso en la que deseas guardar la clave pública.
Encripta datos
Encripta los datos con la clave pública que acabas de descargar y guarda el resultado en un archivo:
openssl pkeyutl -in INPUT_PATH \
-encrypt \
-pubin \
-inkey PUBLIC_KEY_PATH \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:HASH_SIZE \
-pkeyopt rsa_mgf1_md:HASH_SIZE \
> OUTPUT_PATH
Reemplaza lo siguiente:
INPUT_PATH: Es la ruta de acceso a los datos de texto simple que deseas encriptar.PUBLIC_KEY_PATH: Es la ruta de acceso a la clave pública.HASH_SIZE: Es el tamaño del hash, por ejemplo,256para SHA256.OUTPUT_PATH: Es la ruta de acceso en la que deseas guardar los datos encriptados.
C#
Para ejecutar este código, primero configura un entorno de desarrollo de C# e instala el SDK de C# para Cloud KMS.
Go
Para usar Cloud KMS en la línea de comandos, primero instala o actualiza a la versión más reciente de Google Cloud CLI.
Java
Para ejecutar este código, primero configura un entorno de desarrollo de Java y, luego, instala el SDK de Java para Cloud KMS.
Node.js
Para ejecutar este código, primero configura un entorno de desarrollo de Node.js y, luego, instala el SDK de Node.js para Cloud KMS.
PHP
Para ejecutar este código, primero obtén información sobre cómo usar PHP en Google Cloud y, luego, instala el SDK de PHP para Cloud KMS.
Python
Para ejecutar este código, primero configura un entorno de desarrollo de Python y, luego, instala el SDK de Python para Cloud KMS.
Ruby
Para ejecutar este código, primero configura un entorno de desarrollo de Ruby y, luego, instala el SDK de Ruby para Cloud KMS.
Desencripta datos
Desencripta los datos con Cloud KMS.
gcloud
Para usar Cloud KMS en la línea de comandos, primero instala o actualiza a la versión más reciente de Google Cloud CLI.
gcloud kms asymmetric-decrypt \
--version KEY_VERSION \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--ciphertext-file INPUT_PATH \
--plaintext-file OUTPUT_PATH
Reemplaza lo siguiente:
KEY_VERSION: Es la versión de la clave del par de claves asimétricas que se usó para encriptar los datos. Puedes omitir la marca--versionpara detectar la versión automáticamente.KEY_NAME: Es el nombre de la clave que se usó para encriptar los datos.KEY_RING: el nombre del llavero de claves que incluye la claveLOCATION: Es la ubicación del llavero de claves.INPUT_PATH: Es la ruta de acceso al archivo que contiene el texto cifrado.OUTPUT_PATH: Es la ruta de acceso al archivo que contendrá el texto simple.
Para obtener información sobre todas las marcas y los valores posibles, ejecuta el comando con la marca --help.
Para mostrar el contenido del archivo desencriptado, ábrelo en un editor de texto o usa
el comando cat para verlo en una terminal.
C#
Para ejecutar este código, primero configura un entorno de desarrollo de C# e instala el SDK de C# para Cloud KMS.
Go
Para ejecutar este código, primero configura un entorno de desarrollo de Go y, luego, instala el SDK de Go para Cloud KMS.
Java
Para ejecutar este código, primero configura un entorno de desarrollo de Java y, luego, instala el SDK de Java para Cloud KMS.
Node.js
Para ejecutar este código, primero configura un entorno de desarrollo de Node.js y, luego, instala el SDK de Node.js para Cloud KMS.
PHP
Para ejecutar este código, primero obtén información sobre cómo usar PHP en Google Cloud y, luego, instala el SDK de PHP para Cloud KMS.
Python
Para ejecutar este código, primero configura un entorno de desarrollo de Python y, luego, instala el SDK de Python para Cloud KMS.
Ruby
Para ejecutar este código, primero configura un entorno de desarrollo de Ruby y, luego, instala el SDK de Ruby para Cloud KMS.
API
En estos ejemplos, se usa curl como un cliente HTTP para demostrar el uso de la API. Para obtener más información sobre el control de acceso, consulta Accede a la API de Cloud KMS.
Usa el método CryptoKeyVersions.asymmetricDecrypt.
Soluciona problemas
incorrect key purpose: ASYMMETRIC_SIGN
Solo puedes desencriptar datos con una clave con el propósito de clave ASYMMETRIC_DECRYPT.
invalid parameter durante la desencriptación en macOS
La versión de OpenSSL instalada en macOS no admite las marcas que se usan para desencriptar datos en este tema. Para seguir estos pasos en macOS, instala OpenSSL desde Homebrew.
data too large for key size
El tamaño máximo de la carga útil para la desencriptación de RSA depende del tamaño de la clave y el algoritmo de relleno. Todos los formatos de encriptación RSA que usa Cloud KMS usan OAEP, estandarizado en RFC 2437. Como referencia rápida, los siguientes algoritmos admiten los siguientes tamaños máximos de carga útil.
| Algoritmo | Parámetros | Longitud máxima del mensaje (bytes) |
|---|---|---|
| RSA_DECRYPT_OAEP_2048_SHA256 | k = 256; hLen = 32; | 190 |
| RSA_DECRYPT_OAEP_3072_SHA256 | k = 384; hLen = 32; | 318 |
| RSA_DECRYPT_OAEP_4096_SHA256 | k = 512; hLen = 32; | 446 |
| RSA_DECRYPT_OAEP_4096_SHA512 | k = 512; hLen = 64; | 382 |
No se recomienda la criptografía asimétrica para mensajes de longitudes variables que puedan ser mayores que estos límites. En su lugar, considera usar la encriptación híbrida. Tink es una biblioteca criptográfica que usa este enfoque.