Descriptografar ID de publicidade

Agora o Authorized Buyers é compatível com a transmissão do ID de publicidade do Android em solicitações de lance para inventários de apps para dispositivos móveis.

Sobre o ID de publicidade

Com o Google Play Services v4.0, o Android lançou um novo identificador para publicidade que pode ser redefinido pelo usuário, chamado ID de publicidade.

O ID de publicidade pode ser usado pelos anunciantes para executar campanhas de remarketing e registrar "conversões" (compra ou download). O ID de publicidade tem dois recursos principais:

  • Os usuários podem redefinir o ID de publicidade a qualquer momento.
  • Os usuários podem desativar os anúncios com base em interesses a qualquer momento no app Configurações do Google. Essa configuração se aplica a todas as empresas de publicidade que usam o ID de publicidade.

Definição técnica

O ID de publicidade é transmitido pelo BidRequest.Mobile.encrypted_advertising_id no protótipo de lances em tempo real:

optional bytes encrypted_advertising_id = 20;

O campo tem 36 bytes e contém 3 seções:

  • initialization_vector: 16 bytes.
  • ciphertext: 16 bytes, o UUID de 16 bytes criptografado do ID de publicidade.
  • integrity_signature: 4 bytes.
{initialization_vector (16 bytes)}{ciphertext (16 bytes)}{integrity_signature (4 bytes)}

Definições

Variável Detalhes
initialization_vector 16 bytes: exclusivo da impressão.
ciphertext 16 bytes - gerados como: <advertising_id <xor> hmac(encryption_key, initialization_vector)>
integrity_signature 4 bytes - gerados como os primeiros 4 bytes de: hmac(integrity_key, advertising_id || initialization_vector)
encryption_key 32 bytes: fornecidos na configuração da conta.
integrity_key 32 bytes: fornecidos na configuração da conta.
advertising_id 16 bytes: o ID de publicidade original não criptografado, que é um UUID
final_message 36 bytes: a matriz de bytes enviada pelo campo encrypted_advertising_id.
Operadores Detalhes
hmac(key, data) SHA-1 HMAC que usa key para criptografar data.
a || b string a concatenada com a string b.

Esquema de criptografia

O esquema de criptografia do ID de publicidade é baseado no mesmo esquema usado para descriptografar confirmações de preço.

  1. O ID de publicidade é armazenado em uma matriz de bytes, que é criptografada com um esquema de criptografia personalizado projetado para minimizar a sobrecarga de tamanho e garantir a segurança adequada.
  2. O esquema de criptografia usa um algoritmo HMAC com chave para gerar um preenchimento secreto com base no initialization_vector, que é exclusivo do evento de impressão.

Pseudocódigo de criptografia

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 descriptografia

Seu código de descriptografia precisa 1) descriptografar o campo encrypted_advertising_id usando a chave de criptografia e, opcionalmente, 2) verificar os bits de integridade com a chave de integridade. As chaves serão fornecidas a você durante a configuração da conta. Não há restrições em como você estrutura sua implementação.

  1. Gere seu pad: hmac(encryption_key, initialization_vector)
  2. XOR: use esse resultado e <xor> com o texto criptografado para reverter a criptografia.
  3. Verificar: a assinatura de integridade transmite 4 bytes de HMAC(integrity_key, advertising_id || initialization_vector).

Pseudocódigo de descriptografia

(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

Em vez de implementar os algoritmos de criptografia para codificar e decodificar o ID de publicidade, use o DoubleClickCrypto.java. Para mais informações, consulte Criptografia.