Encriptación simétrica sin procesar

En este tema, se muestra cómo realizar las siguientes operaciones de clave simétrica sin procesar:

  • Encripta contenido de texto simple o binario de forma local o con Cloud KMS.
  • Desencripta textos cifrados de forma local o con Cloud KMS.

En cambio, si deseas realizar una operación de clave simétrica regular (no sin procesar), consulta Encripta y desencripta datos con una clave simétrica.

La encriptación simétrica sin procesar te permite encriptar y desencriptar tus datos de manera local o mediante Cloud KMS, y mover datos encriptados entre diferentes bibliotecas y proveedores de servicios sin tener que desencriptarlos primero. Esta funcionalidad depende de la capacidad de acceder a la clave en el punto de operación. Si deseas usar el texto cifrado fuera de Google Cloud, debes usar una clave importada porque las claves generadas en Cloud KMS no se pueden exportar. Estos algoritmos de encriptación generan textos cifrados estándar que cualquier servicio de desencriptación estándar puede desencriptar. Admitimos los siguientes algoritmos de encriptación simétrica sin procesar:

  • 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 encriptación sin procesar:

  • AES-GCM proporciona autenticación basada en los datos autenticados adicionales (AAD) y genera una etiqueta de autenticación. Además, es el algoritmo de encriptación que se recomienda usar. Los datos encriptados con AES-GCM algoritmos no se pueden desencriptar sin los AAD proporcionados.

  • AES-CBC requiere que el tamaño del texto simple sea múltiplo del tamaño del bloque (16 bytes). Si el texto simple no es múltiplo del tamaño del bloque, rellena el texto sin formato antes de encriptarlo; de lo contrario, la operación fallará y mostrará un error que indicará el problema.

  • AES-CBC y AES-CTR no son esquemas de encriptación autenticados, lo que significa que pueden conllevar un mayor riesgo de uso inadecuado accidental. Se ofrecen para satisfacer las necesidades heredadas y de interoperabilidad, y se deben usar con precaución. Para evitar usos inadecuados casuales, el uso de estos algoritmos de encriptación requiere los siguientes permisos de IAM:

    • cloudkms.cryptoKeyVersions.manageRawAesCbcKeys por AES-CBC.
    • cloudkms.cryptoKeyVersions.manageRawAesCtrKeys por AES-CTR.

Funciones obligatorias

A fin de obtener los permisos que necesitas para usar la encriptación sin procesar, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu clave:

Si quieres obtener más información para otorgar funciones, consulta Administra el acceso.

Es posible que también puedas obtener los permisos necesarios mediante funciones personalizadas, o bien otras funciones predefinidas.

Funciones adicionales para los algoritmos de encriptación sin procesar no autenticados

  • Para usar claves de AES-CBC, usa el administrador de claves AES-CBC sin procesar experto de Cloud KMS (roles/cloudkms.expertRawAesCbc)
  • Para usar las claves de AES-CTR, usa el administrador de claves AES-CTR sin procesar experto de Cloud KMS (roles/cloudkms.expertRawAesCtr).

Antes de comenzar

  • Otorga los permisos de encriptación simétrica sin procesar mencionados antes a los principales deseados.
  • Crea un llavero de claves como se describe en Crea un llavero de claves.
  • Crea e importa una clave de encriptación simétrica sin procesar como se describe en Crea claves e importa claves.

Encrypt

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 raw-encrypt \
    --location LOCATION \
    --keyring KEY_RING \
    --key KEY_NAME \
    --version KEY_VERSION \
    --plaintext-file INPUT_FILE_PATH \
    --ciphertext-file OUTPUT_FILE_PATH

Reemplaza lo siguiente:

  • LOCATION: Es la ubicación de Cloud KMS del llavero de claves.

  • KEY_RING: Es el nombre del llavero de claves que contiene la clave.

  • KEY_NAME: Es el nombre de la clave que se usará para la encriptación.

  • KEY_VERSION: El ID de la versión de clave que se usará para la encriptación.

  • INPUT_FILE_PATH: Es la ruta de acceso al archivo local para leer los datos de texto sin formato.

  • OUTPUT_FILE_PATH: Es la ruta del archivo local para guardar el resultado encriptado.

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 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.

Cuando usas JSON y la API de REST, el contenido debe estar codificado en base64 antes de que Cloud KMS pueda encriptarlo.

Usa el método rawEncrypt para encriptar 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"}'

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto que contiene el llavero de claves.
  • LOCATION: Es la ubicación de Cloud KMS del llavero de claves.
  • KEY_RING: Es el nombre del llavero de claves que contiene la clave.
  • KEY_NAME: Es el nombre de la clave que se usará para la encriptación.
  • KEY_VERSION: El ID de la versión de clave que se usará para la encriptación.
  • BASE64_ENCODED_INPUT: Son los datos de texto sin formato codificados en Base64 que deseas encriptar.
  • BASE64_ENCODED_AAD: Son los datos autenticados adicionales codificados en Base64 que se usan para proporcionar garantías de integridad y autenticidad. Este campo solo se aplica a los algoritmos AES-GCM.

El resultado es un objeto JSON que contiene el texto cifrado encriptado y el vector de inicialización asociado como cadenas codificadas en base64.

Decrypt

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 raw-decrypt \
    --location LOCATION \
    --keyring KEY_RING \
    --key KEY_NAME \
    --version KEY_VERSION \
    --ciphertext-file INPUT_FILE_PATH \
    --plaintext-file OUTPUT_FILE_PATH

Reemplaza lo siguiente:

  • LOCATION: Es la ubicación de Cloud KMS del llavero de claves.

  • KEY_RING: Es el nombre del llavero de claves que contiene la clave.

  • KEY_NAME: Es el nombre de la clave que se usará para la encriptación.

  • KEY_VERSION: El ID de la versión de clave que se usará para la encriptación.

  • INPUT_FILE_PATH: Es la ruta de acceso del archivo local al texto cifrado que deseas desencriptar.

  • OUTPUT_FILE_PATH: Es la ruta de acceso del archivo local en la que deseas guardar el texto sin formato desencriptado.

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 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.

Cuando usas la API de REST, el contenido debe estar codificado en base64 antes de que Cloud KMS pueda desencriptarlo.

Para desencriptar los datos encriptados, 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"}'

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto que contiene el llavero de claves.
  • LOCATION: Es la ubicación de Cloud KMS del llavero de claves.
  • KEY_RING: Es el nombre del llavero de claves que contiene la clave.
  • KEY_NAME: Es el nombre de la clave que se usará para la desencriptación.
  • KEY_VERSION: El ID de la versión de clave que se usará para la desencriptación.
  • BASE64_ENCODED_DATA: Es el texto cifrado codificado en base64 que deseas desencriptar.
  • BASE64_ENCODED_AAD: Los datos autenticados adicionales codificados en Base64 que se usaron cuando se encriptaron los datos. Este campo solo se aplica a los algoritmos AES-GCM.
  • BASE64_ENCODED_IV: Es el vector de inicialización codificado en base64 que se usó cuando se encriptaron los datos.

El resultado es un objeto JSON que contiene el texto sin formato desencriptado como una string codificada en base64.

¿Qué sigue?