Werbe-ID entschlüsseln

In Authorized Buyers wird jetzt die Übergabe der Android-Werbe-ID in Gebotsanfragen für Inventar in mobilen Apps unterstützt.

Werbe-ID

Mit Version 4.0 der Google Play-Dienste wurde eine neue, vom Nutzer zurücksetzbare Werbe-ID eingeführt: die Werbe-ID.

Die Werbe-ID kann von Werbetreibenden für Remarketing-Kampagnen und zur Erfassung von "Conversions" (Kauf oder Download) verwendet werden. Die Werbe-ID hat zwei Hauptfunktionen:

  • Nutzer können die Werbe-ID jederzeit zurücksetzen.
  • Nutzer können interessenbezogene Werbung jederzeit direkt in der App „Google Einstellungen“ deaktivieren. Diese Einstellung gilt für alle Anzeigenunternehmen, die die Werbe-ID verwenden.

Technische Definition

Die Werbe-ID wird über BidRequest.Mobile.encrypted_advertising_id im Protokoll für Echtzeitgebote übergeben:

optional bytes encrypted_advertising_id = 20;

Das Feld ist 36 Byte groß und enthält drei Abschnitte:

  • initialization_vector: 16 Byte.
  • ciphertext: 16 Byte, die verschlüsselte 16-Byte-UUID der Werbe-ID.
  • integrity_signature: 4 Byte.
{initialization_vector (16 bytes)}{ciphertext (16 bytes)}{integrity_signature (4 bytes)}

Definitionen

Variable Details
initialization_vector 16 Byte: für die Impression eindeutig.
ciphertext 16 Byte – generiert als: <advertising_id <xor> hmac(encryption_key, initialization_vector)>
integrity_signature 4 Byte – generiert mit den ersten 4 Byte von: hmac(integrity_key, advertising_id || initialization_vector)
encryption_key 32 Byte werden bei der Kontoeinrichtung angegeben.
integrity_key 32 Byte werden bei der Kontoeinrichtung angegeben.
advertising_id 16 Byte: die ursprüngliche, unverschlüsselte Werbe-ID, bei der es sich um eine UUID handelt
final_message 36 Byte: das Byte-Array, das über das Feld encrypted_advertising_id gesendet wurde.
Operatoren Details
hmac(key, data) SHA-1-HMAC, mit key zum Verschlüsseln von data
a || b Der String a ist mit dem String b verkettet.

Verschlüsselungsschema

Das Verschlüsselungsschema für die Werbe-ID basiert auf demselben Schema, das auch für die Entschlüsselung von Preisbestätigungen verwendet wird.

  1. Die Werbe-ID wird in einem Byte-Array gespeichert, das mithilfe eines benutzerdefinierten Verschlüsselungsschemas verschlüsselt wird. So wird der Größen-Overhead minimiert und gleichzeitig eine angemessene Sicherheit gewährleistet.
  2. Beim Verschlüsselungsschema wird ein verschlüsselter HMAC-Algorithmus verwendet, um ein geheimes Pad basierend auf der initialization_vector zu generieren, die für das Impressionsereignis eindeutig ist.

Pseudocode für Verschlüsselung

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

Entschlüsselungsmethode

Der Entschlüsselungscode sollte 1) das Feld encrypted_advertising_id mit dem Verschlüsselungsschlüssel entschlüsseln und optional 2) die Integritätsbits mit dem Integritätsschlüssel verifizieren. Die Schlüssel erhalten Sie bei der Kontoeinrichtung. Für die Strukturierung Ihrer Implementierung gibt es keine Einschränkungen.

  1. Eingabefeld generieren: hmac(encryption_key, initialization_vector)
  2. XOR Verwenden Sie dieses Ergebnis und <xor> mit dem Geheimtext, um die Verschlüsselung umzukehren.
  3. Überprüfen: Die Integritätssignatur übergibt 4 Byte von HMAC(integrity_key, advertising_id || initialization_vector)

Entschlüsselungs-Pseudocode

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

Java-Bibliothek

Anstatt die Kryptoalgorithmen zum Codieren und Decodieren der Werbe-ID zu implementieren, können Sie DoubleClickCrypto.java verwenden. Weitere Informationen finden Sie unter Kryptografie.