Criptografía simétrica sin procesar

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

  • Encripta texto o contenido binario de texto simple de forma local o con Cloud KMS.
  • Desencriptar texto cifrado de forma local o con Cloud KMS

Si, en cambio, quieres 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 forma local, en las instalaciones o con 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 momento una sola operación. Si quieres usar los textos cifrados fuera de Google Cloud, debes usar una clave importada porque las claves generadas en Cloud KMS no pueden y exportarse. Estos algoritmos de encriptación generan texto cifrado estándar que puede desencriptarse con cualquier servicio de desencriptación estándar. 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 brinda autenticación en función del (AAD) y genera una etiqueta de autenticación. Este es el algoritmo de encriptación que se recomienda usar. Los datos encriptados con algoritmos AES-GCM no se pueden desencriptar sin los AAD proporcionados.

  • AES-CBC requiere que el tamaño del texto simple sea múltiplo del bloque. tamaño (16 bytes). Si el texto simple no es un múltiplo del tamaño del bloque, agrega padding al texto simple antes de encriptarlo. De lo contrario, la operación fallará con 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 usos inadecuados accidentales. Son para satisfacer necesidades de interoperabilidad y heredadas, y debe usarse con precaución. Para evitar el uso inadecuado, 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.

Roles obligatorios

A fin de obtener los permisos que necesita para usar la encriptación sin procesar, solicita a tu administrador que te otorgue el los siguientes roles de IAM en tu clave:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Roles adicionales para algoritmos de encriptación sin procesar sin autenticar

  • Para usar claves AES-CBC: Administrador experto de claves AES-CBC sin procesar de Cloud KMS (roles/cloudkms.expertRawAesCbc)
  • Para usar claves AES-CTR: Administrador experto de claves AES-CTR sin procesar de Cloud KMS (roles/cloudkms.expertRawAesCtr)

Antes de comenzar

Encriptar

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: Es el ID de la versión de la clave que se usará para la encriptación.

  • INPUT_FILE_PATH: Es la ruta de acceso del archivo local para leer los datos de texto simple.

  • 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 se usa JSON y la API de REST, el contenido debe estar codificado en base64 antes de poder que Cloud KMS pueda encriptar.

Usa el método rawEncrypt para encriptar datos de texto simple:

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: El ID del proyecto que contiene el llavero.
  • 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: Es el ID de la versión de clave que se usará para la encriptación.
  • BASE64_ENCODED_INPUT: Los datos de texto simple codificados en Base64 que deseas encriptar.
  • BASE64_ENCODED_AAD: Es el elemento adicional codificado en base64. datos autenticados que se usan para brindar integridad y autenticidad seguridad. 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: Es el ID de la versión de clave que se usará en la encriptación.

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

  • OUTPUT_FILE_PATH: Es la ruta de acceso al archivo local en la que deseas guardar el texto simple 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 pueda desencriptarlo Cloud KMS.

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: El ID del proyecto que contiene el llavero.
  • 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: Es 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 quieras desencriptar.
  • BASE64_ENCODED_AAD: Es el elemento adicional codificado en base64. y autenticados que se usaron cuando se encriptaron. Este campo solo se aplica a los algoritmos AES-GCM.
  • BASE64_ENCODED_IV: La inicialización codificada en base64 que se usó cuando se encriptaron los datos.

El resultado es un objeto JSON que contiene el texto simple desencriptado como una cadena codificada en base64.

¿Qué sigue?