Déchiffrer l'identifiant publicitaire

Authorized Buyers permet désormais de transmettre l'identifiant publicitaire Android dans les demandes d'enchères pour l'inventaire d'applications mobiles.

À propos de l'identifiant publicitaire

Avec la version 4.0 des services Google Play, Android a lancé pour la publicité un nouvel identifiant réinitialisable par l'utilisateur appelé identifiant publicitaire.

Les annonceurs peuvent utiliser l'identifiant publicitaire pour diffuser des campagnes de remarketing et enregistrer des "conversions" (achat ou téléchargement). L'identifiant publicitaire présente deux caractéristiques principales:

  • Les utilisateurs peuvent réinitialiser l'identifiant publicitaire à tout moment.
  • Les utilisateurs peuvent désactiver les annonces par centres d'intérêt à tout moment, directement depuis l'application Paramètres Google. Ce paramètre s'applique à toutes les sociétés publicitaires qui utilisent l'identifiant publicitaire.

Définition technique

L'identifiant publicitaire est transmis via BidRequest.Mobile.encrypted_advertising_id dans le protocole d'enchères en temps réel:

optional bytes encrypted_advertising_id = 20;

Le champ fait 36 octets et contient trois sections:

  • initialization_vector: 16 octets.
  • ciphertext: 16 octets, UUID chiffré de l'identifiant publicitaire.
  • integrity_signature: 4 octets.
{initialization_vector (16 bytes)}{ciphertext (16 bytes)}{integrity_signature (4 bytes)}

Définitions

Variable Détails
initialization_vector 16 octets : propre à l'impression.
ciphertext 16 octets – généré en tant que: <advertising_id <xor> hmac(encryption_key, initialization_vector)>
integrity_signature 4 octets – générés en tant que 4 premiers octets de: hmac(integrity_key, advertising_id || initialization_vector)
encryption_key 32 octets : fournis lors de la configuration du compte.
integrity_key 32 octets : fournis lors de la configuration du compte.
advertising_id 16 octets : identifiant publicitaire d'origine non chiffré, qui est un UUID
final_message 36 octets : tableau d'octets envoyé via le champ encrypted_advertising_id.
Opérateurs Détails
hmac(key, data) HMAC SHA-1, utilisant key pour chiffrer data.
a || b la chaîne a concaténée avec la chaîne b.

Schéma de chiffrement

Le schéma de chiffrement de l'identifiant publicitaire est basé sur le même schéma que celui utilisé pour le déchiffrement des confirmations de prix.

  1. L'identifiant publicitaire est stocké dans un tableau d'octets, lequel est chiffré à l'aide d'un schéma de chiffrement personnalisé conçu pour réduire au maximum la taille et garantir une sécurité adéquate.
  2. Le schéma de chiffrement utilise un algorithme HMAC à clé pour générer un bloc secret basé sur le initialization_vector, qui est propre à l'événement d'impression.

Pseudo-code de chiffrement

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

Schéma de déchiffrement

Votre code de déchiffrement doit 1) déchiffrer le champ encrypted_advertising_id à l'aide de la clé de chiffrement et éventuellement 2) vérifier les bits d'intégrité à l'aide de la clé d'intégrité. Les clés vous seront fournies lors de la configuration du compte. Il n'existe aucune restriction concernant la structure de votre implémentation.

  1. Générez votre pad: hmac(encryption_key, initialization_vector)
  2. XOR: prenez ce résultat et <xor> avec le texte chiffré pour inverser le chiffrement.
  3. Vérifier: la signature d'intégrité transmet 4 octets de HMAC(integrity_key, advertising_id || initialization_vector).

Pseudo-code de déchiffrement

(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)

Bibliothèque Java

Plutôt que de mettre en œuvre les algorithmes de chiffrement pour encoder et décoder l'identifiant publicitaire, vous pouvez utiliser DoubleClickCrypto.java. Pour en savoir plus, consultez la page Cryptographie.