Datos autenticados adicionales

Los datos autenticados adicionales (AAD) son cualquier cadena que envíes a Cloud Key Management Service como parte de una solicitud de cifrado o descifrado. AAD se usa como comprobación de integridad y puede ayudar a proteger tus datos frente a un ataque de delegado confuso. La cadena AAD no debe superar los 64 KiB.

Cloud KMS no descifrará el texto cifrado a menos que se utilice el mismo valor de AAD tanto para el cifrado como para el descifrado.

AAD está vinculado a los datos cifrados, ya que no puedes descifrar el texto cifrado a menos que conozcas AAD, pero no se almacena como parte del texto cifrado. AAD tampoco aumenta la solidez criptográfica del texto cifrado. En su lugar, es una comprobación adicional que realiza Cloud KMS para autenticar una solicitud de descifrado.

En Cloud KMS, el AAD siempre está presente cuando haces una llamada para cifrar o descifrar. Si no proporcionas un valor para el AAD, se utiliza una cadena vacía. Si se usa una cadena vacía como AAD para cifrar texto sin formato, solo una cadena vacía permitirá descifrar el texto cifrado.

AAD no se registra en registros de auditoría de Cloud.

Cuándo usar AAD

Un ejemplo de uso de AAD es cuando tu aplicación actúa como proxy de envolver/desenvolver con una sola clave y un número ilimitado de clientes, y cada cliente se encuentra en límites de seguridad distintos. Por ejemplo, la aplicación podría ser un diario que permita a los usuarios mantener un diario privado. Cuando un usuario necesite ver una entrada privada del diario, la aplicación puede usar el nombre de usuario único como AAD en la solicitud de apertura (descifrado) para autenticar al usuario de forma explícita. En este caso, puedes usar una sola clave para atender a varios usuarios (sin límite). Una de las principales ventajas es que no tienes que mantener el estado de los usuarios individuales.

Otro ejemplo es si tu aplicación necesita usar tokens de portador que contengan información privada, como una dirección de correo electrónico. Las entradas del token de portador serían los datos autenticados utilizados para un token de portador más la dirección de correo electrónico en texto sin cifrar. Estas entradas se cifrarían para que el token de portador que se intercambia tenga el formato Datos autenticados cifrados adicionales (AEAD).

Ejemplo de ataque de delegado confuso

En este ejemplo se muestra cómo se puede engañar a una aplicación para que descifre texto cifrado en nombre de un usuario malintencionado. En este ejemplo, la aplicación es el delegado confuso porque no sabe que el atacante la ha engañado para que haga un uso inadecuado de su autoridad. El resultado es que el atacante puede ver datos descifrados que originalmente se cifraron para otro usuario. En este ataque, el atacante no necesita conocer la clave de cifrado, ya que se basa en el delegado confundido para realizar el descifrado.

  1. Una aplicación de diario permite a los usuarios mantener un diario privado. Cada entrada del diario se cifra y está pensada para que solo la descifre el usuario que la ha creado.

  2. Alicia crea una entrada de diario. La aplicación cifra la entrada del diario y, a continuación, la almacena en una ubicación reservada para las entradas del diario que pertenecen a Alicia.

  3. Alicia envía una solicitud para ver la entrada de su diario. Como la entrada del diario cifrada se encuentra en una ubicación reservada para Alicia, la aplicación descifra los datos y los devuelve como respuesta a la solicitud de Alicia. Este es el comportamiento previsto de la aplicación.

  4. Mallory copia la entrada del diario de Alicia de la ubicación reservada para Alicia a la ubicación reservada para Mallory.

  5. Mallory envía una solicitud para ver la copia que tiene Mallory de la entrada del diario de Alicia. Como la copia de la entrada del diario de Alicia se encuentra en una ubicación reservada para Mallory, la aplicación descifra la entrada del diario y devuelve el texto sin cifrar como respuesta a la solicitud de Mallory. Mallory puede ver la entrada del diario de Alicia, lo que no es el comportamiento previsto de la aplicación.

Para protegerse frente a este tipo de ataque, la aplicación puede usar una cadena no vacía como AAD para el cifrado y el descifrado. Los datos adicionales autenticados proporcionan una comprobación adicional para las solicitudes de descifrado. Cuando Mallory envía la solicitud de descifrado para ver la copia de Mallory de la entrada del diario de Alicia, la solicitud de Mallory no se completará a menos que Mallory también pueda engañar a la aplicación para que use el AAD correcto.

Almacenar o reproducir AAD

Antes de cifrar con AAD, decide si vas a almacenar el AAD junto con los datos cifrados o reproducir el AAD para descifrarlo posteriormente.

Un motivo para almacenar AAD es que sea sencillo usarlo cuando necesites descifrar texto cifrado. Por ejemplo, una fila de una base de datos podría contener tanto el texto cifrado como los datos autenticados asociados que se usaron cuando se cifró el texto sin cifrar. Cuando se recibe una solicitud de descifrado, la aplicación puede recuperar tanto los AAD como el texto cifrado de la base de datos. La aplicación puede usar el AAD en el proceso de descifrado del texto cifrado.

Un motivo para reproducir AAD es verificar los datos no privados y, al mismo tiempo, evitar el almacenamiento de AAD. Por ejemplo, si quieres asegurarte de que la ruta y el nombre de un archivo cifrado no han cambiado, puedes incluir la ruta y el nombre como AAD al cifrar el archivo. Después, cuando se envíe una solicitud de descifrado del archivo, podrás reproducir los AAD examinando la ruta y el nombre del archivo.

Almacenar AAD

Almacenar AAD significa que AAD se guarda y, a continuación, tu aplicación puede acceder a él fácilmente para usarlo en el futuro. Por ejemplo, una tabla de una base de datos podría contener una columna para el texto cifrado y otra para los datos autenticados asociados que se usaron cuando se creó el texto cifrado. Cuando llega el momento de descifrar el texto cifrado, la aplicación recupera los datos adicionales autenticados y los usa para el descifrado.

Imagina una aplicación de diario diseñada para mostrar una entrada del diario solo al usuario que la creó. Cuando se crea una entrada del diario, se cifra y se guarda en una base de datos, en la columna ENCRYPTED_DIARY_ENTRY. Por cada solicitud para ver una entrada del diario, la aplicación autentica al usuario y, a continuación, le proporciona la entrada del diario.

Supongamos que no se usa ningún AAD (aparte de la cadena vacía predeterminada) y que, hipotéticamente, Mallory ha podido copiar los datos ENCRYPTED_DIARY_ENTRY de Alicia en los datos ENCRYPTED_DIARY_ENTRY de Mallory. Cuando Mallory envía una solicitud de descifrado de los datos de ENCRYPTED_DIARY_ENTRY de Mallory (que se copiaron de los datos de Alicia), la aplicación realiza el descifrado sin darse cuenta de que ha sido engañada. Mallory puede ver la entrada del diario de Alicia como texto sin formato.

Supongamos que la dirección de correo del usuario se usa como AAD cuando se cifra una entrada del diario. Cuando Alicia crea una entrada en el diario, la aplicación almacena su dirección de correo sin cifrar en la columna EMAIL, junto con los datos de ENCRYPTED_DIARY_ENTRY. Supongamos de nuevo que María José ha podido copiar los datos ENCRYPTED_DIARY_ENTRY de Alicia en los datos ENCRYPTED_DIARY_ENTRY de María José. Cuando Mallory envía una solicitud de descifrado, la aplicación recupera la dirección de correo de Mallory de la columna EMAIL para usarla como AAD en la solicitud de descifrado. La dirección de correo de Mallory no funcionará como AAD para el descifrado, por lo que la aplicación no permitirá que Mallory vea la entrada del diario de Alicia como texto sin formato.

Reproducción de AAD

Reproducir AAD significa que no se almacena en ningún sitio, pero puedes reproducirlo cuando sea el momento de descifrarlo.

Por ejemplo, puedes usar una ruta de archivo y un nombre de archivo como AAD. Durante el proceso de cifrado, supongamos que el archivo cifrado se guardó en MY_PATH\MY_FILE1.enc, por lo que "MY_PATH\MY_FILE1.enc" se usó como AAD. Este AAD no se almacena. Cuando se recibe una solicitud de descifrado, la aplicación reproduce los AADs examinando la ruta y el nombre del archivo que se va a descifrar. Si el archivo cifrado no se ha movido a otra ubicación, se usará "MY_PATH\MY_FILE1.enc" como AAD durante el descifrado, que es el mismo AAD que se usó durante el cifrado, por lo que se podrá llevar a cabo el descifrado.

Si el archivo cifrado se ha movido, por ejemplo, a SOME_OTHER_PATH\MY_FILE1.enc, se usará "SOME_OTHER_PATH\MY_FILE1.enc" como AAD para el descifrado. Este valor de AAD no coincide con el valor de AAD usado para el cifrado, por lo que se producirá un error en el descifrado.