Sağlayıcı reklam sinyali
Reklamcılık: Keşfedilebilir olduğunda
Sağlayıcı cihazı BR/EDR bulunabilir olduğunda (yani eşleme modunda), BLE üzerinden Hızlı Eşleme Modeli Kimlik Verileri'nin tanıtımını yapamaz ve BLE adresi, döndürülmez.
Reklam aralığı: Bulunabilir olduğunda
Reklamlar arasındaki aralık 100 ms'den (10 Hz) fazla olmamalıdır. CEVAP Hızlı hız, Arayanın Sağlayıcı'yı hızlı bir şekilde bulmasına olanak sağlar. Bu sırada, düşük güç modunu kullanabilirsiniz.
Reklam yükü: Hızlı Eşleme Model Kimliği Verileri
Reklam, Hizmet Verileri veri türünü, a.g., Böl. 1.11. İlgili içeriği oluşturmak için kullanılan
UUID, 0xFE2C
öğesinin Hızlı Eşleme Hizmeti UUID'si olmalıdır. Hizmet verileri,
şunları içerir:
Sekiz | Veri türü | Açıklama | Değer |
---|---|---|---|
0-2 | uint24 |
24 bit model kimliği | değişiklik gösterir |
Reklamcılık: Bulunabilir olmadığında
Bulunabilir değilken (yani eşleme modunda değilken), Sağlayıcı cihazı, aşağıdaki yönergeleri kullanarak Hızlı Eşleme Hesap Verileri'nin reklamını yapabilir.
Hesap verilerinin reklamını yapmak, yakın çevredeki kullanıcıların bir sağlayıcının ne zaman yapıldığını ayırt etmesini sağlar bir kullanıcının hesabına ait olur ve tekrar eşleme moduna geri döner. Bu da kullanıcının şikayetiniz. Arayanlar, kullanıcılara söz konusu içeriği göz ardı etme fırsatı verir. Bu yayını, sağlayıcıyla eşleşmeyi beklememeleri veya yayının alakalı olmaması (örneğin, zaten eşlenmişse). Arama yapanlar ayrıca açıkça kötü olan yayınları otomatik olarak filtreler. hesap verileri yanlış yapılandırıldığında olabilir.
Reklam aralığı: Bulunabilir olmadığında
Reklamlar arasındaki aralık en fazla 250 ms (4 Hz) olmalıdır.
Reklam yükü: Hızlı Eşleme Hesap Verileri
Reklam, Hizmet Verileri veri türünü, aynı zamanda Böl. 1.11. İlgili içeriği oluşturmak için kullanılan
UUID, 0xFE2C
öğesinin Hızlı Eşleme Hizmeti UUID'si olmalıdır. Hizmet verileri,
şunları içerir:
Sekiz | Veri türü | Açıklama | Değer |
---|---|---|---|
0 | uint8 |
Sürüm ve işaretler 0bVVVVFFFF
|
0x00 (ileride kullanılmak üzere ayrılmıştır) |
1 - değişiklik gösterir | Hesap Önemli Verileri | Hesap Anahtar Listesi boşsa veya 0x00 değişir |
Hesap Anahtar Verileri şunları içerir:
Sekiz | Veri türü | Açıklama | Değer |
---|---|---|---|
0 | uint8 |
Alan uzunluğu ve türü 0bLLTTTT
|
0 MrLL0000
|
1 - sn. | Hesap Anahtarı Filtresi | değişiklik gösterir | |
sn + 1 | uint8 |
Alan uzunluğu ve türü 0bLLTTTT
|
0b00100001
|
s + 2 - s + 3 | uint16 |
Salt | değişiklik gösterir |
Hesap Anahtarı Filtresi
Reklamı yapılan Hesap Anahtarı Filtresi, arayanın Sağlayıcının sahip olduğu belirli bir hesap anahtarı (düşük yanlış pozitiflik oranıyla) %0,5'in çok altında bir olasılıkla) olduğunu tespit ettik. İlgili içeriği oluşturmak için kullanılan Arayan, otomatik olarak bağlantı kurabilir ve gördüğünde prosedürü başlatmaya çalışabilir. 0 türünde yayınlanan bir filtre, örneğin kullanıcı arayüzü göstergesini ve böylece yanlışlık oranını azaltmak için potansiyel olarak hesap anahtarlarından birini içerebilir. bir adım daha öteye gösterin. Bazı durumlarda, Sağlayıcı fark edilmek isteyebilir arayan tarafından gönderilen yeni bir e-posta alırsınız. Örneğin, kulaklıklar takıldığında sonraki eşleme bildirimini göstermeyi durdurmak istiyoruz. bu eşleme mikrofonlu kulaklık tarafından reddedilebilir.
Hesap Anahtarı Filtresi değişken uzunluktadır Oluşturulan çiçek filtresi şöyle olur:
- n değerinin kalıcı öğedeki hesap anahtarı sayısı (n >= 1) olmasına izin verin Hesap Anahtarı listesi.
- Filtrenin bayt cinsinden boyutu olan s değerinin (1,2*n + 3) kısaltılmasına izin verin. Örneğin,
Örneğin, 1 anahtar kalıcı olursa s = 4 bayt olarak kabul edilir.
uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3);
- F filtresini s baytlık dizi olarak başlatın ve her biri 0 değerine ayarlayın.
uint8_t F[s] = {0};
Kalıcı Hesap Anahtarı listesindeki her bir hesap anahtarı K için:
a. V'nin concat(K, Salt) olmasına izin verin.// 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; ... }
b. SHA256 kullanarak V'ye karma oluşturma işlemi uygulayarak 32 baytlık H değeri elde edin = {H0, ..., H31}.
uint8_t H[32] = {0}; SHA256_hash_function(V, H);
c. H'yi 4 baytlık işaretsiz tam sayıya bölerek X = {X0; ..., X7}; burada 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); }
d. Her bir Xi için:
i. M'nin, filtredeki bit sayısının Xi modülü olmasına izin verin. (s * 8).
. ii. F biçiminde gösterilen baytı dizinde (M / 8) aşağı yuvarlayın.
. iii. Baytın içinde, dizindeki biti (M % 8) 1 olarak ayarlayın.
. iv. Başka bir deyişle:// 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)); }
Reklamcılık verilerine Hesap Anahtar Filtresi alanı olarak F filtresini ekleyin. "Endianness" diye bir şey olmadığını unutmayın daha fazla veya daha az değer olmadığı için büyük bayt sırasını değiştirmeyin.
Tuz alanı
takviye değer, oluşturulurken hesap anahtarlarına eklenen rastgele bir değerdir çiçek filtresi. Bu takviye değer, RPA her güncellendiğinde yeniden üretilmelidir. adres rotasyonu arasında izleme yapmaktan kaçınmalıdır.
takviye değeri kullanarak Hesap Anahtarı Filtresi oluşturmak için:
- Rastgele bir 2 baytlık S oluşturun. "Endianness" diye bir şey olmadığını unutmayın bu daha fazla veya daha az anlamlı bayt olmadığından değerini değiştirin; sipariş.
- Tuz olarak 2 baytlık S kullanın.
- Reklamı yapılan Hızlı Eşleme hesap verilerinde, oluşturulan filtreyi Hesap Anahtarı Filtresi alanına, Tuz alanında S'ye basın.