Mã nhận dạng cho quảng cáo được giải mã

Authorized Buyers hiện hỗ trợ chuyển mã nhận dạng cho quảng cáo Android trong các yêu cầu giá thầu khoảng không quảng cáo trên ứng dụng dành cho thiết bị di động.

Giới thiệu về mã nhận dạng cho quảng cáo

Với Dịch vụ Google Play phiên bản 4.0, Android đã ra mắt một giá trị nhận dạng mới mà người dùng có thể đặt lại đối với quảng cáo được gọi là mã nhận dạng cho quảng cáo.

Nhà quảng cáo có thể sử dụng mã nhận dạng cho quảng cáo để chạy chiến dịch tái tiếp thị và ghi lại "lượt chuyển đổi" (mua hoặc tải xuống). Mã nhận dạng cho quảng cáo có hai tính năng chính:

  • Người dùng có thể đặt lại mã nhận dạng cho quảng cáo bất cứ lúc nào.
  • Người dùng có thể chọn không nhận quảng cáo dựa trên mối quan tâm bất cứ lúc nào, ngay trong ứng dụng Cài đặt Google. Chế độ cài đặt này áp dụng cho mọi công ty quảng cáo sử dụng mã nhận dạng cho quảng cáo.

Định nghĩa về kỹ thuật

Mã nhận dạng cho quảng cáo được truyền qua BidRequest.Mobile.encrypted_advertising_id trong giao thức đặt giá thầu theo thời gian thực:

optional bytes encrypted_advertising_id = 20;

Trường này có kích thước 36 byte và chứa 3 phần:

  • initialization_vector: 16 byte.
  • ciphertext: 16 byte, UUID 16 byte được mã hoá của mã nhận dạng cho quảng cáo.
  • integrity_signature: 4 byte.
{initialization_vector (16 bytes)}{ciphertext (16 bytes)}{integrity_signature (4 bytes)}

Định nghĩa

Biến Thông tin chi tiết
initialization_vector 16 byte – duy nhất cho lượt hiển thị.
ciphertext 16 byte – được tạo dưới dạng: <advertising_id <xor> hmac(encryption_key, initialization_vector)>
integrity_signature 4 byte – được tạo dưới dạng 4 byte đầu tiên của: hmac(integrity_key, advertising_id || initialization_vector)
encryption_key 32 byte – được cung cấp khi thiết lập tài khoản.
integrity_key 32 byte – được cung cấp khi thiết lập tài khoản.
advertising_id 16 byte – Mã nhận dạng cho quảng cáo gốc, chưa mã hoá, là UUID
final_message 36 byte – Mảng byte được gửi qua trường encrypted_advertising_id.
Toán tử Thông tin chi tiết
hmac(key, data) SHA-1 HMAC, sử dụng key để mã hoá data.
a || b chuỗi a nối với chuỗi b.

Lược đồ mã hoá

Lược đồ mã hoá cho mã nhận dạng cho quảng cáo dựa trên cùng một lược đồ dùng để giải mã phương thức xác nhận giá.

  1. Mã nhận dạng cho quảng cáo được lưu trữ trong một mảng byte. Mã này được mã hoá bằng lược đồ mã hoá tuỳ chỉnh được thiết kế để giảm thiểu hao tổn về kích thước trong khi vẫn đảm bảo mức độ bảo mật cao.
  2. Giao thức mã hoá sử dụng một thuật toán HMAC có khoá để tạo vùng đệm bí mật dựa trên initialization_vector dành riêng cho sự kiện hiển thị.

Mã giả để mã hoá

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

Lược đồ giải mã

Mã giải mã của bạn phải 1) giải mã trường encrypted_advertising_id bằng khoá mã hoá và 2) xác minh bit tính toàn vẹn bằng khoá tính toàn vẹn (không bắt buộc). Chúng tôi sẽ cung cấp khóa cho bạn trong quá trình thiết lập tài khoản. Không có quy tắc hạn chế nào về cách bạn sắp xếp cấu trúc triển khai.

  1. Tạo bảng tính: hmac(encryption_key, initialization_vector)
  2. XOR: Lấy kết quả này và <xor> cùng với bản mã hoá để đảo ngược quá trình mã hoá.
  3. Xác minh: Chữ ký về tính toàn vẹn truyền 4 byte HMAC(integrity_key, advertising_id || initialization_vector)

Mã giả giải mã

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

Thư viện Java

Thay vì triển khai các thuật toán mã hoá để mã hoá và giải mã mã nhận dạng cho quảng cáo, bạn có thể sử dụng DoubleClickCrypto.java. Để biết thêm thông tin, hãy xem bài viết Mật mã học.