Desencriptar ID de publicidad

Authorized Buyers ahora admite pasar el ID de publicidad de Android en las solicitudes de oferta de inventario de aplicaciones para dispositivos móviles.

Acerca del ID de publicidad

Con la versión 4.0 de los Servicios de Google Play, Android lanzó un nuevo identificador para publicidad que el usuario puede restablecer, denominado ID de publicidad.

Los anunciantes pueden usar el ID de publicidad para publicar campañas de remarketing y registrar "conversiones" (de compra o descarga). El ID de publicidad tiene dos características clave:

  • Los usuarios pueden restablecer el ID de publicidad en cualquier momento.
  • Los usuarios pueden inhabilitar los anuncios basados en intereses en cualquier momento directamente desde la aplicación Configuración de Google. Esta configuración se aplica a todas las empresas publicitarias que utilizan el ID de publicidad.

Definición técnica

El ID de publicidad se pasa a través de BidRequest.Mobile.encrypted_advertising_id en el protocolo de ofertas en tiempo real:

optional bytes encrypted_advertising_id = 20;

El campo tiene 36 bytes y contiene 3 secciones:

  • initialization_vector: 16 bytes.
  • ciphertext: Es el UUID de 16 bytes encriptado del ID de publicidad de 16 bytes.
  • integrity_signature: 4 bytes.
{initialization_vector (16 bytes)}{ciphertext (16 bytes)}{integrity_signature (4 bytes)}

Definiciones

Variable Detalles
initialization_vector 16 bytes: único para la impresión.
ciphertext 16 bytes, generado como: <advertising_id <xor> hmac(encryption_key, initialization_vector)>
integrity_signature 4 bytes, generado como los primeros 4 bytes de: hmac(integrity_key, advertising_id || initialization_vector)
encryption_key 32 bytes, que se proporcionan durante la configuración de la cuenta.
integrity_key 32 bytes, que se proporcionan durante la configuración de la cuenta.
advertising_id 16 bytes: el ID de publicidad original sin encriptar, que es un UUID
final_message 36 bytes: el array de bytes enviado a través del campo encrypted_advertising_id.
Operadores Detalles
hmac(key, data) SHA-1 HMAC que usa key para encriptar data.
a || b Se concatenó la cadena a con la cadena b.

Esquema de encriptación

El esquema de encriptación del ID de publicidad se basa en el mismo esquema que se usa para desencriptar las confirmaciones de precios.

  1. El ID de publicidad se almacena en un array de bytes, que se encripta mediante un esquema de encriptación personalizado diseñado para minimizar la sobrecarga de tamaño y, al mismo tiempo, garantizar una seguridad adecuada.
  2. El esquema de encriptación usa un algoritmo HMAC con clave para generar un bloque secreto basado en el initialization_vector, que es único para el evento de impresión.

Pseudocódigo de encriptación

advertising_id = advertising ID from mobile device
pad = hmac(encryption_key, initialization_vector) // first 16 bytes
ciphertext = pad <xor> advertising_id
integrity_signature = hmac(integrity_key, advertising_id || initialization_vector)  // first 4 bytes
final_message = initialization_vector || ciphertext || integrity_signature

Esquema de desencriptación

Tu código de desencriptación debe 1) desencriptar el campo encrypted_advertising_id con la clave de encriptación y, opcionalmente, 2) verificar los bits de integridad con la clave de integridad. Se te proporcionarán las claves durante la configuración de la cuenta. No hay restricciones sobre cómo estructurar tu implementación.

  1. Genera tu pad: hmac(encryption_key, initialization_vector)
  2. XOR: Toma este resultado y <xor> con el texto cifrado para revertir la encriptación.
  3. Verificar: La firma de integridad pasa 4 bytes de HMAC(integrity_key, advertising_id || initialization_vector).

Pseudocódigo de desencriptación

(initialization_vector, ciphertext, integrity_signature) = final_message // split up according to length
pad = hmac(encryption_key, initialization_vector) // first 16 bytes
advertising_id = ciphertext <xor> pad
confirmation_signature = hmac(integrity_key, advertising_id || initialization_vector) // first 4 bytes
success = (confirmation_signature == integrity_signature)

Biblioteca Java

En lugar de implementar los algoritmos criptográficos para codificar y decodificar el ID de publicidad, puedes usar DoubleClickCrypto.java. Para obtener más información, consulta Criptografía.