สัญญาณการโฆษณาของผู้ให้บริการ
การโฆษณา: เมื่อค้นพบได้
เมื่ออุปกรณ์ของผู้ให้บริการสามารถค้นหา BR/EDR ได้ (นั่นคืออยู่ในโหมดการจับคู่) อุปกรณ์ จะต้องโฆษณาข้อมูลรหัสโมเดลการจับคู่ด่วนผ่าน BLE และจะต้องไม่ หมุนเวียนที่อยู่ BLE
ช่วงเวลาการโฆษณา: เมื่อค้นพบได้
ช่วงเวลาระหว่างโฆษณาควรมีค่าไม่เกิน 100 มิลลิวินาที (10 Hz) อัตราที่รวดเร็วช่วยให้ Seeker ค้นหา Provider ได้อย่างรวดเร็ว แม้ว่าจะสแกนใน โหมดประหยัดพลังงานก็ตาม
เพย์โหลดการโฆษณา: ข้อมูลรหัสโมเดลการจับคู่ด่วน
โฆษณาต้องมีประเภทข้อมูลของข้อมูลบริการ อ้างอิง § 1.11.
UUID ต้องเป็น UUID ของบริการจับคู่ด่วนของ 0xFE2C ข้อมูลบริการต้องมีข้อมูลต่อไปนี้
| Octet | ประเภทข้อมูล | คำอธิบาย | ค่า |
|---|---|---|---|
| 0-2 | uint24 |
รหัสโมเดล 24 บิต | แตกต่างกันไป |
เพย์โหลดการโฆษณาการแชร์เสียง LE: ข้อมูลรหัสโมเดล Fast Pair และแผนที่ความสามารถของ FP
ข้อมูลบริการต้องมีข้อมูลต่อไปนี้
| Octet | ประเภทข้อมูล | คำอธิบาย | ค่า |
|---|---|---|---|
| 0 | uint8 |
เวอร์ชันและแฟล็ก 0bVVVVFFFF
|
0x00 |
| 1 | uint8 |
ความยาวและประเภทฟิลด์ 0bLLLLTTTT
|
0bLLLL0111
|
| 2 - | รหัสโมเดล | แตกต่างกันไป | |
| s + 1 | uint8 |
ความยาวและประเภทฟิลด์ 0bLLLLTTTT
|
0bLLLL1000
|
| s + 2 | uint8 |
แผนที่ความสามารถของ FP | แตกต่างกันไป |
แผนที่ความสามารถของ FP
แผนที่ความสามารถของ FP คือบิตแมปที่แสดงฟีเจอร์ FP ที่ ผู้ให้บริการรองรับ ไบต์แรกของบิตแมปมีการกําหนดดังนี้
| บิตแมป | คำอธิบาย |
|---|---|
| 0bRRRRRRSO | R - บิตที่สงวนไว้ ปัจจุบันผู้ค้นหาจะไม่สนใจบิตนี้และจะตั้งค่าเป็น 0 S - รองรับการแชร์ FP LE Audio (ตั้งค่าเป็น 1 หากเปิดใช้ หรือ 0) O - บิต Out of Box (OOB) ตั้งค่าเป็น 1 หากอุปกรณ์เป็นอุปกรณ์ใหม่จากโรงงาน |
หากผู้ให้บริการรองรับข้อกำหนดการแชร์ LE Audio ของ FP (หมายความว่ารองรับการจับคู่ชั่วคราว เพย์โหลดการโฆษณาการแชร์ LE Audio และ Hearable control เวอร์ชัน 2) ให้ตั้งค่าบิตการรองรับการแชร์ LE Audio ของ FP เป็น 1 มิฉะนั้น ให้ตั้งค่าเป็น 0
หากผู้ให้บริการไม่ได้จับคู่กับผู้ค้นหา FP และเป็นอุปกรณ์ใหม่จากโรงงาน (หมายความว่าไม่มีคีย์บัญชี FP ในผู้ให้บริการ) ให้ตั้งค่าบิต OOB เป็น 1 มิฉะนั้นให้ตั้งค่าเป็น 0
การโฆษณา: เมื่อค้นหาไม่ได้
เมื่อตรวจหาไม่ได้ (คือไม่ได้อยู่ในโหมดการจับคู่) อุปกรณ์ของผู้ให้บริการจะต้อง โฆษณาข้อมูลบัญชีการจับคู่ด่วนโดยใช้หลักเกณฑ์ต่อไปนี้
การโฆษณาข้อมูลบัญชีช่วยให้ผู้ค้นหาที่อยู่ใกล้เคียงทราบว่าเมื่อใดที่ผู้ให้บริการ เป็นของบัญชีของตน และเริ่มการจับคู่ได้โดยไม่ต้องบังคับให้ ผู้ให้บริการกลับเข้าสู่โหมดการจับคู่ก่อน ซึ่งเป็นสาเหตุทั่วไปที่ทำให้ผู้ใช้ ร้องเรียน Seeker จะให้โอกาสผู้ใช้ในการละเว้น การออกอากาศนี้ในกรณีที่ผู้ใช้ไม่ต้องการรอจับคู่กับผู้ให้บริการหรือ การออกอากาศไม่เกี่ยวข้อง (เช่น หากจับคู่แล้ว) นอกจากนี้ Seekers ยังจะกรองการออกอากาศที่เห็นได้ชัดว่าไม่ดีออกโดยอัตโนมัติ เช่น เมื่อมีการกำหนดค่าข้อมูลบัญชีอย่างไม่ถูกต้อง
ช่วงเวลาการโฆษณา: เมื่อไม่พบ
ช่วงเวลาระหว่างโฆษณาควรอยู่ที่ 250 มิลลิวินาที (4Hz) เป็นอย่างมาก
เพย์โหลดการโฆษณา: ข้อมูลบัญชีการจับคู่ด่วน
โฆษณาต้องมีประเภทข้อมูลของข้อมูลบริการ อ้างอิง § 1.11.
UUID ต้องเป็น UUID ของบริการจับคู่ด่วนของ 0xFE2C ข้อมูลบริการต้องมีข้อมูลต่อไปนี้
| Octet | ประเภทข้อมูล | คำอธิบาย | ค่า |
|---|---|---|---|
| 0 | uint8 |
เวอร์ชันและแฟล็ก 0bVVVVFFFF
|
0x00(สงวนไว้สำหรับการใช้งานในอนาคต) |
| 1 - แตกต่างกันไป | ข้อมูลคีย์บัญชี | แตกต่างกันไป |
ข้อมูลคีย์บัญชีประกอบด้วยข้อมูลต่อไปนี้
| Octet | ประเภทข้อมูล | คำอธิบาย | ค่า |
|---|---|---|---|
| 0 | uint8 |
ความยาวและประเภทฟิลด์ 0bLLLLTTTT
|
0bLLLL0000
|
| 1 - s | ตัวกรองคีย์บัญชี | แตกต่างกันไป | |
| s + 1 | uint8 |
ความยาวและประเภทฟิลด์ 0bLLLLTTTT
|
0b00100001
|
| s + 2 - s + 3 | uint16 |
Salt | แตกต่างกันไป |
ตัวกรองคีย์บัญชี
ตัวกรองคีย์บัญชีที่โฆษณาช่วยให้ผู้ค้นหาสามารถตรวจสอบได้อย่างรวดเร็วว่าผู้ให้บริการอาจมีคีย์บัญชีหนึ่งๆ หรือไม่ (โดยมีโอกาสเกิดผลบวกลวงต่ำ ซึ่งโดยเฉลี่ยต่ำกว่า 0.5% มาก) ก่อนที่จะโต้ตอบเพิ่มเติม Seeker อาจเชื่อมต่อโดยอัตโนมัติและพยายามเริ่มกระบวนการเมื่อเห็น ตัวกรองที่ออกอากาศโดยมีประเภทเป็น 0 ซึ่งหมายถึงการแสดงข้อบ่งชี้ UI ที่ อาจมีคีย์บัญชีอย่างน้อย 1 รายการ เพื่อลดอัตราผลบวกลวงให้ดียิ่งขึ้น ในบางสถานการณ์ ผู้ให้บริการอาจต้องการให้ผู้ค้นหารับรู้ถึงการมีอยู่ของตน ในขณะที่ยังไม่พร้อมสำหรับการจับคู่ ตัวอย่างเช่น เมื่อใส่หูฟังกลับเข้าไปในเคส เราต้องการหยุดแสดงการแจ้งเตือนการจับคู่ที่ตามมา เนื่องจากชุดหูฟังอาจปฏิเสธการจับคู่นั้น
ตัวกรองคีย์บัญชีเป็นตัวกรอง Bloom ที่มีความยาวตัวแปรซึ่งสร้างขึ้นดังนี้
- ให้ n เป็นจำนวนคีย์บัญชี (n >= 1) ใน รายการคีย์บัญชีที่คงอยู่
- ให้ s ซึ่งเป็นขนาดของตัวกรองในหน่วยไบต์เป็น (1.2*n + 3) ที่ตัดทอนแล้ว เช่น หากมีการคงคีย์ไว้ 1 คีย์ s = 4 ไบต์
uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3); - เริ่มต้นตัวกรอง F เป็นอาร์เรย์ของไบต์ s โดยตั้งค่าแต่ละไบต์เป็น 0
uint8_t F[s] = {0}; สำหรับคีย์บัญชี K แต่ละรายการในรายการคีย์บัญชีที่บันทึกไว้ ให้ทำดังนี้
ก. ให้ V เป็น concat(K, Salt)// In the sample code, the size of salt is 2 bytes. #define SALT_SIZE 2 uint8_t V[FASTPAIR_ACCOUNT_KEY_SIZE + SALT_SIZE]; for (uint8_t keyIndex = 0; keyIndex < n; keyIndex++) { // concat (K, Salt) fastpair_get_account_key_by_index(keyIndex, V); uint8_t randomSalt = (uint8_t)rand(); V[FASTPAIR_ACCOUNT_KEY_SIZE] = randomSalt; ... }ข. แฮช V โดยใช้ SHA256 เพื่อให้ได้ค่า 32 ไบต์ H = {H0, …, H31}
uint8_t H[32] = {0}; SHA256_hash_function(V, H);ค. แบ่ง H ออกเป็นจำนวนเต็มแบบไม่มีเครื่องหมาย 4 ไบต์ 8 รายการในรูปแบบ Big-Endian X = {X0, …, X7} โดยที่ X0 = 0xH0H1H2H3
uint32_t X[8]; for (index = 0; index < 8; index++) { X[index] = (((uint32_t)(H[index * 4])) << 24) | (((uint32_t)(H[index * 4 + 1])) << 16) | (((uint32_t)(H[index * 4 + 2])) << 8) | (((uint32_t)(H[index * 4 + 3])) << 0); }ง. สำหรับแต่ละ Xi ให้ทำดังนี้
1. ให้ M เป็น Xi modulo จำนวนบิตในตัวกรอง (s * 8)
2. รับไบต์ใน F ที่ดัชนี (M / 8) โดยปัดเศษลง
3. ตั้งค่าบิตที่ดัชนี (M % 8) เป็น 1 ภายในไบต์
4. กล่าวคือ// M = Xi % (s * 8) // F[M/8] = F[M/8] | (1 << (M % 8)) for (index = 0; index < 8; index++) { uint32_t M = X[index] % (s * 8); F[M / 8] = F[M / 8] | (1 << (M % 8)); }
รวมตัวกรอง F เป็นช่องตัวกรองคีย์บัญชีในข้อมูลโฆษณา โปรดทราบว่าค่านี้ไม่มี "Endianness" เนื่องจากไม่มีไบต์ที่มีนัยสำคัญมากหรือน้อยกว่า จึงไม่ต้องเปลี่ยนลำดับไบต์
ทุ่งเกลือ
Salt คือค่าแบบสุ่มที่ต่อท้ายคีย์บัญชีเมื่อสร้าง ฟิลเตอร์ Bloom ควรสร้าง Salt นี้ใหม่ทุกครั้งที่อัปเดต RPA สำหรับ ผู้ให้บริการเพื่อหลีกเลี่ยงการติดตามเมื่อมีการหมุนเวียนที่อยู่
วิธีสร้างตัวกรองคีย์บัญชีโดยใช้ Salt
- สร้าง S แบบสุ่ม 2 ไบต์ โปรดทราบว่าค่านี้ไม่มี "Endianness" เนื่องจากไม่มีไบต์ที่มีนัยสำคัญมากหรือน้อยกว่า ดังนั้นอย่าเปลี่ยนลำดับไบต์
- ใช้ S ขนาด 2 ไบต์เป็น Salt
- ในข้อมูลบัญชีการจับคู่ด่วนที่โฆษณา ให้ใส่ตัวกรองที่สร้างขึ้นในช่องตัวกรองคีย์บัญชี และใส่ S ในช่อง Salt