Расшифровать рекламный идентификатор

Авторизованные покупатели теперь поддерживают передачу рекламного идентификатора Android в запросах ставок на инвентарь в мобильных приложениях.

О рекламном идентификаторе

В сервисах Google Play версии 4.0 компания Android представила новый сбрасываемый пользователем идентификатор рекламы, называемый рекламным идентификатором .

Рекламный идентификатор может использоваться рекламодателями для запуска кампаний ремаркетинга и регистрации «конверсий» (покупка или загрузка). Рекламный идентификатор имеет две ключевые особенности:

  • Пользователи могут сбросить рекламный идентификатор в любое время.
  • Пользователи могут отказаться от рекламы на основе интересов в любое время прямо из приложения «Настройки Google». Этот параметр применяется ко всем рекламным компаниям, использующим рекламный идентификатор.

Техническое определение

Рекламный идентификатор передается через BidRequest.Mobile.encrypted_advertising_id в прототипе ставок в реальном времени:

optional bytes encrypted_advertising_id = 20;

Поле имеет размер 36 байт и содержит 3 раздела:

  • initialization_vector : 16 байт.
  • ciphertext : 16 байт, зашифрованный 16-байтовый UUID рекламного идентификатора.
  • integrity_signature : 4 байта.
{initialization_vector (16 bytes)}{ciphertext (16 bytes)}{integrity_signature (4 bytes)}

Определения

Переменная Подробности
initialization_vector 16 байт — уникально для впечатления.
ciphertext 16 байт — генерируется как: <advertising_id <xor> hmac(encryption_key, initialization_vector)>
integrity_signature 4 байта — генерируются как первые 4 байта: hmac(integrity_key, advertising_id || initialization_vector)
encryption_key 32 байта — предоставляются при настройке учетной записи.
integrity_key 32 байта — предоставляются при настройке учетной записи.
advertising_id 16 байт — исходный незашифрованный рекламный идентификатор, который представляет собой UUID.
final_message 36 байт — массив байтов, передаваемый через поле encrypted_advertising_id .
Операторы Подробности
hmac(key, data) SHA-1 HMAC, использование key для шифрования data .
a || b строка a объединена со строкой b .

Схема шифрования

Схема шифрования рекламного идентификатора основана на той же схеме, которая используется для расшифровки подтверждений цен .

  1. Рекламный идентификатор хранится в массиве байтов, который зашифрован с использованием специальной схемы шифрования, предназначенной для минимизации накладных расходов по размеру и обеспечения адекватной безопасности.
  2. Схема шифрования использует алгоритм HMAC с ключом для создания секретной панели на основе initialization_vector , уникального для события показа.

Псевдокод шифрования

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

Схема расшифровки

Ваш код дешифрования должен: 1) расшифровать поле encrypted_advertising_id с помощью ключа шифрования и, при необходимости, 2) проверить биты целостности с помощью ключа целостности. Ключи будут предоставлены вам во время настройки учетной записи. Нет никаких ограничений на то, как вы структурируете свою реализацию.

  1. Создайте свой блокнот : hmac(encryption_key, initialization_vector)
  2. XOR : возьмите этот результат и <xor> с зашифрованным текстом, чтобы отменить шифрование.
  3. Проверка : подпись целостности передает 4 байта HMAC(integrity_key, advertising_id || initialization_vector)

Псевдокод расшифровки

(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-библиотека

Вместо реализации криптоалгоритмов для кодирования и декодирования рекламного идентификатора вы можете использовать DoubleClickCrypto.java . Дополнительные сведения см. в разделе Криптография .