広告 ID を復号する

認定バイヤーで、モバイルアプリ広告枠の入札リクエストで Android 広告 ID を渡せるようになりました。

広告 ID について

Google Play 開発者サービス v4.0 で、Android は広告 ID と呼ばれる、ユーザーがリセット可能な広告用の新しい識別子をリリースしました。

広告 ID は、広告主がリマーケティング キャンペーンを実施し、「コンバージョン」(購入やダウンロード)を記録する際に使用されます。広告 ID には主に次の 2 つの機能があります。

  • ユーザーはいつでも広告 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. パッドを生成: 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 ライブラリ

広告 ID のエンコードとデコードを行う暗号アルゴリズムを実装する代わりに、 DoubleClickCrypto.java を使用できます。詳細については、暗号化をご覧ください。