解密廣告 ID

Authorized Buyers 現在支援在行動應用程式廣告空間出價要求中傳遞 Android 廣告 ID。

關於廣告 ID

Android 推出 Google Play 服務 4.0 版後,Android 推出了一組可由使用者重設的廣告 ID,稱為廣告 ID

廣告客戶可使用廣告 ID 放送再行銷廣告活動,並記錄「轉換」(購買或下載)。廣告 ID 有兩個主要功能:

  • 使用者隨時可以重設廣告 ID。
  • 使用者隨時可以在 Google 設定應用程式中停用按照興趣顯示的廣告。這項設定適用於使用該廣告 ID 的所有廣告公司。

技術定義

廣告 ID 會透過即時出價通訊協定中的 BidRequest.Mobile.encrypted_advertising_id 傳遞:

optional bytes encrypted_advertising_id = 20;

這個欄位的長度為 36 個位元組,當中包含 3 個部分:

  • initialization_vector:16 個位元組。
  • ciphertext:16 個位元組,是廣告 ID 的加密 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 個位元組 - 產生為 hmac(integrity_key, advertising_id || initialization_vector) 的前 4 個位元組
encryption_key 32 個位元組 (在設定帳戶時提供)。
integrity_key 32 個位元組 (在設定帳戶時提供)。
advertising_id 16 個位元組 - 原始未加密的廣告 ID,這是 UUID
final_message 36 個位元組 - 透過 encrypted_advertising_id 欄位傳送的位元組陣列。
運算子 詳細說明
hmac(key, data) SHA-1 HMAC,使用 key 加密 data
a || b 字串 a,與字串 b 串連。

加密配置

廣告 ID 的加密配置採用的解密價格確認配置。

  1. 廣告 ID 會儲存在位元組陣列中,該陣列會使用自訂加密配置來加密,以便盡可能降低大小負擔,同時確保有足夠的安全性。
  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. 產生 padhmac(encryption_key, initialization_vector)
  2. XOR:透過這個結果和 <xor> 使用密文來反向加密。
  3. 驗證:完整性簽名通過 HMAC(integrity_key, advertising_id || initialization_vector) 的 4 個位元組

解密虛擬程式碼

(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,不必導入加密演算法來對廣告 ID 進行編碼及解碼。詳情請參閱加密編譯