Spesifikasi Aksesori Jaringan Temukan Perangkat Saya

v1.3

Spesifikasi aksesori Jaringan Temukan Perangkat Saya (FMDN) menentukan pendekatan terenkripsi end-to-end untuk melacak perangkat Bluetooth Hemat Energi (BLE) yang memancarkan beacon. Halaman ini menjelaskan FMDN sebagai ekstensi untuk spesifikasi Sambungan Cepat. Penyedia harus mengaktifkan ekstensi ini jika mereka memiliki perangkat yang kompatibel dengan FMDN dan bersedia mengaktifkan pelacakan lokasi untuk perangkat tersebut.

Spesifikasi GATT

Karakteristik atribut generik tambahan (GATT) harus ditambahkan ke Layanan Sambungan Cepat dengan semantik berikut:

Karakteristik Layanan Sambungan Cepat Dienkripsi Izin UUID
Tindakan beacon Tidak Baca, tulis, dan beri tahu FE2C1238-8366-4814-8EB0-01DE32100BEA

Tabel 1: Karakteristik Layanan Sambungan Cepat untuk FMDN.

Autentikasi

Operasi yang diperlukan oleh ekstensi ini dilakukan sebagai operasi tulis, yang diamankan oleh mekanisme verifikasi tantangan. Sebelum melakukan operasi apa pun, Pencari diharapkan untuk melakukan operasi baca dari karakteristik dalam tabel 1, yang menghasilkan buffering dalam format berikut:

Octet Jenis Data Deskripsi Nilai
0 uint8 Protokol nomor versi utama 0x01
1 - 8 array byte Nonce acak satu kali bervariasi

Setiap operasi baca akan menghasilkan nonce yang berbeda, dan satu nonce hanya boleh valid untuk satu operasi. Nonce harus dibatalkan validasinya meskipun operasi gagal.

Pencari kemudian menghitung kunci autentikasi satu kali yang akan digunakan dalam permintaan tulis berikutnya. Kunci autentikasi dihitung sebagaimana dijelaskan pada tabel 2 hingga 5. Bergantung pada operasi yang diminta, Pencari membuktikan pengetahuan tentang satu atau beberapa kunci berikut:

Operasi

Format data yang ditulis ke karakteristik diberikan dalam tabel 2 sampai 5. Setiap operasi akan dibahas secara lebih mendetail nanti di bagian ini.

Octet Jenis Data Deskripsi Nilai
0 uint8 ID Data
  • 0x00: Membaca parameter beacon
  • 0x01: Membaca status penyediaan
  • 0x02: Menetapkan kunci identitas sementara
  • 0x03: Menghapus kunci identitas sementara
1 uint8 Panjang data bervariasi
2 - 9 array byte Kunci autentikasi satu kali 8 byte pertama HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data)
10 - var array byte Data tambahan
  • 0x00: t/a
  • 0x01: t/a
  • 0x02: 32 byte yang merupakan kunci identitas sementara, AES-ECB-128 yang dienkripsi dengan kunci akun. Jika Penyedia sudah memiliki kumpulan kunci identitas sementara, kirim juga 8 byte pertama SHA256(current ephemeral identity key || the last nonce read from the characteristic)
  • 0x03: 8 byte pertama SHA256(ephemeral identity key || the last nonce read from the characteristic)

Tabel 2: Permintaan penyediaan beacon.

Octet Jenis Data Deskripsi Nilai
0 uint8 ID data 0x04: Membaca kunci identitas sementara dengan izin pengguna
1 uint8 Panjang data 0x08
2 - 9 array byte Kunci autentikasi satu kali 8 byte pertama HMAC-SHA256(recovery key, protocol major version number || the last nonce read from the characteristic || data ID || data length)

Tabel 3: Permintaan pemulihan kunci penyediaan beacon.

Octet Jenis Data Deskripsi Nilai
0 uint8 ID Data
  • 0x05: Dering
  • 0x06: Membaca status berdering
1 uint8 Panjang data bervariasi
2 - 9 array byte Kunci autentikasi satu kali 8 byte pertama HMAC-SHA256(ring key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data)
10 - var array byte Data tambahan
  • 0x05: 4 byte yang menunjukkan status dering, durasi dering, dan volume dering.
  • 0x06: t/a

Tabel 4: Permintaan dering.

Oktet Jenis Data Deskripsi Nilai
0 uint8 ID Data
  • 0x07: Mengaktifkan mode perlindungan pelacakan yang tidak diinginkan
  • 0x08: Menonaktifkan mode perlindungan pelacakan yang tidak diinginkan
1 uint8 Panjang data bervariasi
2 - 9 array byte Kunci autentikasi satu kali 8 byte pertama HMAC-SHA256(unwanted tracking protection key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data)
10 - var array byte Data tambahan
  • 0x07: 1 byte flag kontrol (opsional)
  • 0x08: 8 byte pertama SHA256(ephemeral identity key || the last nonce read from the characteristic)

Tabel 5: Permintaan perlindungan terhadap pelacakan yang tidak diinginkan.

Penulisan notifikasi pemicu yang berhasil, seperti yang tercantum dalam tabel 6.

Notifikasi dengan ID data selain 0x05: Perubahan status cincin harus dikirim sebelum transaksi tulis yang memicu notifikasi selesai, yaitu sebelum PDU respons untuk permintaan tulis dikirim.

Octet Jenis Data Deskripsi Nilai
0 uint8 ID data
  • 0x00: Membaca parameter beacon
  • 0x01: Membaca status penyediaan
  • 0x02: Menetapkan kunci identitas sementara
  • 0x03: Menghapus kunci identitas sementara
  • 0x04: Membaca kunci identitas sementara dengan izin pengguna
  • 0x05: Perubahan status dering
  • 0x06: Membaca status berdering
  • 0x07: Mengaktifkan mode perlindungan pelacakan yang tidak diinginkan
  • 0x08: Menonaktifkan mode perlindungan pelacakan yang tidak diinginkan
1 uint8 Panjang data bervariasi
2 - 9 array byte Autentikasi Mendetail per operasi
10 - var array byte Data tambahan
  • 0x00: 8 byte yang menunjukkan daya transmisi, nilai clock, metode enkripsi, dan kemampuan dering, AES-ECB-128 dienkripsi dengan kunci akun (diisi dengan nol)
  • 0x01: 1 byte yang menunjukkan status penyediaan, diikuti dengan ID sementara saat ini (20 atau 32 byte) jika berlaku
  • 0x04: 32 byte yang merupakan kunci identitas sementara, AES-ECB-128 yang dienkripsi dengan kunci akun
  • 0x05: 4 byte menunjukkan status baru dan memicu perubahan
  • 0x06: 3 byte yang menunjukkan komponen yang aktif berdering dan jumlah desidetik yang tersisa untuk berdering
  • ID data lainnya menggunakan data tambahan kosong

Tabel 6: Respons layanan beacon.

Tabel 7 mencantumkan kemungkinan kode error GATT yang ditampilkan oleh operasi.

Kode Deskripsi Catatan
0x80 Tidak diautentikasi Ditampilkan sebagai respons terhadap permintaan tulis saat autentikasi gagal (termasuk kasus saat nonce lama digunakan).
0x81 Nilai tidak valid Ditampilkan saat nilai yang tidak valid diberikan atau data yang diterima memiliki jumlah byte yang tidak terduga.
0x82 Tidak ada izin pengguna Ditampilkan sebagai respons terhadap permintaan tulis dengan ID data 0x04: Baca kunci identitas sementara dengan izin pengguna saat perangkat tidak dalam mode penyambungan.

Tabel 7: Kode error GATT.

Membaca parameter beacon

Pencari dapat mengkueri Penyedia untuk parameter beacon dengan melakukan operasi tulis ke karakteristik yang terdiri dari permintaan dari tabel 2 dengan ID data 0x00. Penyedia memverifikasi bahwa kunci autentikasi satu kali yang diberikan cocok dengan kunci akun yang disimpan di perangkat.

Jika verifikasi gagal, Penyedia akan menampilkan error yang tidak diautentikasi.

Jika berhasil, Penyedia akan memberi tahu dengan respons dari tabel 6 dengan ID data 0x00. Penyedia membuat segmen data sebagai berikut:

Octet Jenis Data Deskripsi Nilai
0 uint8 Daya yang dikalibrasi Daya terkalibrasi seperti yang diterima pada 0 m (nilai dalam rentang [-100, 20]). Direpresentasikan sebagai bilangan bulat bertanda tangan, dengan resolusi 1 dBm.
1 - 4 uint32 Nilai clock Nilai jam saat ini dalam detik (big endian).
5 uint8 Pemilihan kurva Kurva elips yang digunakan untuk enkripsi:
  • 0x00 (default): SECP160R1
  • 0x01: SECP256R1 (membutuhkan iklan yang diperluas)
6 uint8 Komponen Jumlah komponen yang dapat berdering:
  • 0x00: Menunjukkan bahwa perangkat tidak dapat berdering.
  • 0x01: Menunjukkan bahwa hanya satu komponen yang dapat dering.
  • 0x02: Menunjukkan bahwa dua komponen, bud kiri dan kanan, mampu berdering secara independen.
  • 0x03: Menunjukkan bahwa tiga komponen, bud kiri dan kanan serta kotak, dapat berdering secara independen.
7 uint8 Kemampuan dering Opsi yang didukung adalah:
  • 0x00: Pilihan volume dering tidak tersedia.
  • 0x01: Pilihan volume dering tersedia. Jika ditetapkan, Penyedia harus menerima dan menangani 3 level volume seperti yang ditunjukkan dalam Operasi dering.
8-15 array byte Padding Padding nol untuk enkripsi AES.

Data harus dienkripsi AES-ECB-128 dengan kunci akun yang digunakan untuk mengautentikasi permintaan.

Segmen autentikasi ditentukan sebagai 8 byte pertama HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data after encryption || 0x01).

Membaca status penyediaan beacon

Pencari dapat mengkueri Penyedia untuk mengetahui status penyediaan beacon dengan melakukan operasi tulis ke karakteristik yang terdiri dari permintaan dari tabel 2 dengan ID data 0x01. Penyedia memverifikasi bahwa kunci autentikasi satu kali yang diberikan cocok dengan kunci akun yang disimpan di perangkat.

Jika verifikasi gagal, Penyedia akan menampilkan error yang tidak diautentikasi.

Jika berhasil, Penyedia akan memberi tahu dengan respons dari tabel 6 dengan ID data 0x01. Penyedia membuat segmen data sebagai berikut:

Octet Jenis Data Deskripsi Nilai
0 uint8 Status penyediaan Bitmask yang memiliki nilai berikut:
  • Bit 1 (0x01): Menyetel apakah kunci identitas efemeral disetel untuk perangkat.
  • Bit 2 (0x02): Tetapkan jika kunci autentikasi sekali pakai yang diberikan cocok dengan kunci akun pemilik.
1 - 20 atau 32 array byte ID sementara saat ini 20 atau 32 byte (bergantung pada metode enkripsi yang digunakan) yang menunjukkan ID sementara saat ini yang diiklankan oleh beacon, jika ditetapkan untuk perangkat.

Segmen autentikasi ditentukan sebagai 8 byte pertama HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data || 0x01).

Menetapkan kunci identitas sementara

Untuk menyediakan Penyedia yang tidak disediakan sebagai beacon FMDN, atau mengubah kunci identitas efemeral dari Penyedia yang sudah disediakan, Pencari akan melakukan operasi tulis ke karakteristik yang terdiri dari permintaan dari tabel 2 dengan ID data 0x02. Penyedia memverifikasi bahwa:

  • Kunci autentikasi satu kali yang diberikan cocok dengan kunci akun pemilik.
  • Jika hash kunci identitas sementara diberikan, kunci identitas sementara yang di-hash akan cocok dengan kunci identitas sementara saat ini.
  • Jika hash kunci identitas sementara tidak diberikan, pastikan Penyedia belum disediakan sebagai beacon FMDN.

Jika verifikasi gagal, Penyedia akan menampilkan error yang tidak diautentikasi.

Jika berhasil, kunci identitas efemeral akan dipulihkan oleh AES-ECB-128 yang mendekripsinya menggunakan kunci akun yang cocok. Kunci harus dipertahankan di perangkat, dan dari titik tersebut, Penyedia harus mulai mengiklankan frame FMDN. Kunci identitas sementara baru akan segera berlaku setelah koneksi BLE dihentikan. Penyedia memberi tahu dengan respons dari tabel 6 dengan ID data 0x02.

Segmen autentikasi didefinisikan sebagai 8 byte pertama HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || 0x01).

Menghapus kunci identitas sementara

Untuk membatalkan penyediaan bagian beacon dari Penyedia, Pencari melakukan operasi menulis ke karakteristik, yang terdiri dari permintaan dari tabel 2 dengan ID data 0x03. Penyedia memverifikasi bahwa:

  • Kunci autentikasi sekali pakai yang diberikan cocok dengan kunci akun pemilik.
  • Kunci identitas sementara yang di-hash cocok dengan kunci identitas sementara saat ini.

Jika Penyedia tidak disediakan sebagai beacon FMDN atau verifikasi gagal, penyedia akan menampilkan error yang tidak diautentikasi.

Jika berhasil, Penyedia akan melupakan kunci dan berhenti mengiklankan frame FMDN. Penyedia memberi tahu dengan respons dari tabel 6 dengan ID data 0x03. Segmen autentikasi didefinisikan sebagai 8 byte pertama HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || 0x01).

Membaca kunci identitas sementara dengan izin pengguna

Opsi ini hanya tersedia untuk memulihkan kunci yang hilang, karena kunci hanya disimpan secara lokal oleh Pencari. Dengan demikian, kemampuan ini hanya tersedia saat perangkat dalam mode penyambungan atau untuk waktu terbatas setelah tombol fisik ditekan di perangkat (yang merupakan izin pengguna).

Pencari harus menyimpan kunci pemulihan di backend agar dapat memulihkan kunci cleartext, tetapi tidak menyimpan EIK itu sendiri.

Untuk membaca EIK, Pencari Kerja melakukan operasi tulis pada karakteristik, yang terdiri dari permintaan dari tabel 3 dengan ID data 0x04. Penyedia memverifikasi bahwa:

  • Kunci pemulihan yang di-hash cocok dengan kunci pemulihan yang diharapkan.
  • Perangkat dalam mode pemulihan EIK.

Jika verifikasi gagal, Penyedia akan menampilkan error yang tidak diautentikasi.

Jika perangkat tidak dalam mode penyambungan, Penyedia akan menampilkan error Tidak Ada Izin Pengguna.

Jika berhasil, Penyedia akan memberi tahu dengan respons dari tabel 6 dengan ID data 0x04.

Segmen autentikasi ditentukan sebagai 8 byte pertama HMAC-SHA256(recovery key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data || 0x01).

Operasi dering

Pencari dapat meminta Penyedia memutar suara dengan melakukan operasi tulis pada karakteristik, yang terdiri dari permintaan dari tabel 4 dengan ID data 0x05. Penyedia membuat segmen data sebagai berikut:

Octet Jenis Data Deskripsi Nilai
0 uint8 Operasi dering Bitmask yang memiliki nilai berikut:
  • Bit 1 (0x01): Deringkan earbud kanan
  • Bit 2 (0x02): Dering kiri
  • Bit 3 (0x04): Casing ring
  • 0xFF: Menderingkan semua komponen
  • 0x00: Berhenti berdering
1 - 2 uint16 Waktu habis Waktu tunggu dalam desisekon. Tidak boleh nol dan tidak boleh lebih besar dari 10 menit.
Penyedia menggunakan nilai ini untuk menentukan durasi dering sebelum membisukan audionya sendiri. Waktu tunggu akan menggantikan waktu tunggu yang sudah berlaku jika komponen perangkat sudah berdering.

Jika operasi dering disetel ke 0x00, waktu tunggu akan diabaikan.
3 uint8 Volume
  • 0x00: Default
  • 0x01: Rendah
  • 0x02: Sedang
  • 0x03: Tinggi
Arti sebenarnya dari nilai-nilai ini bergantung pada implementasi.

Setelah menerima permintaan, Penyedia akan memverifikasi bahwa:

  • Kunci autentikasi satu kali yang diberikan cocok dengan kunci ring.
  • Status yang diminta cocok dengan komponen yang dapat berdering.

Jika Penyedia tidak disediakan sebagai beacon FMDN atau verifikasi gagal, error yang tidak diautentikasi akan ditampilkan. Namun, jika Penyedia memiliki perlindungan pelacakan yang tidak diinginkan yang aktif, dan permintaan perlindungan pelacakan yang tidak diinginkan yang memicunya telah mengaktifkan tanda autentikasi lewati dering, Penyedia harus melewati pemeriksaan tersebut. Data autentikasi masih diharapkan untuk disediakan oleh Pencari Kerja, tetapi dapat ditetapkan ke nilai arbitrer.

Saat dering dimulai atau menghentikan, notifikasi akan dikirim seperti ditunjukkan dalam tabel 6 dengan ID data 0x05. Isi notifikasi didefinisikan sebagai berikut:

Oktet Jenis Data Deskripsi Nilai
0 uint8 Status dering
  • 0x00: Dimulai
  • 0x01: Gagal memulai atau menghentikan (semua komponen yang diminta berada di luar rentang)
  • 0x02: Dihentikan (waktu tunggu)
  • 0x03: Dihentikan (tekan tombol)
  • 0x04: Dihentikan (permintaan GATT)
1 uint8 Komponen berdering Bitmask komponen yang aktif berdering, seperti yang ditentukan dalam permintaan.
2 - 3 uint16 Waktu habis Sisa waktu untuk berdering dalam desidetik. Jika perangkat telah berhenti berdering, 0x0000 akan ditampilkan.

Segmen autentikasi ditentukan sebagai 8 byte pertama HMAC-SHA256(ring key, protocol major version number || the nonce used to initiate the ringing command || data ID || data length || additional data || 0x01).

Jika perangkat sudah dalam status dering yang diminta saat permintaan untuk berdering atau berhenti berdering diterima, Penyedia harus mengirim notifikasi dengan status dering atau 0x00: Dimulai atau 0x04: Dihentikan (permintaan GATT). Permintaan ini mengganti parameter status yang ada, sehingga durasi dering dapat diperpanjang.

Jika Penyedia memiliki tombol fisik (atau sensor sentuh diaktifkan), tombol tersebut akan menghentikan fungsi dering jika ditekan saat dering aktif.

Mendapatkan status dering beacon

Untuk mendapatkan status dering beacon, Pencari melakukan operasi tulis ke karakteristik, yang terdiri dari permintaan dari tabel 4 dengan ID data 0x06. Penyedia memverifikasi bahwa kunci autentikasi satu kali yang diberikan cocok dengan kunci cincin.

Jika Penyedia tidak disediakan sebagai beacon FMDN atau jika verifikasi gagal, Penyedia akan menampilkan error yang tidak diautentikasi.

Jika berhasil, Penyedia akan memberi tahu dengan respons dari tabel 6 dengan ID data 0x06. Penyedia membuat segmen data sebagai berikut:

Octet Jenis Data Deskripsi Nilai
0 uint8 Komponen berdering Komponen aktif berdering, seperti yang ditentukan dalam permintaan dering.
1 - 2 uint16 Waktu habis Sisa waktu untuk berdering dalam desidetik. Perhatikan bahwa jika perangkat tidak berdering, 0x0000 akan ditampilkan.

Segmen autentikasi ditentukan sebagai 8 byte pertama HMAC-SHA256 (ring key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data || 0x01).

Mode perlindungan pelacakan yang tidak diinginkan

Mode perlindungan pelacakan yang tidak diinginkan dimaksudkan untuk memungkinkan klien mengidentifikasi perangkat yang melanggar tanpa komunikasi server. Secara default, Penyedia harus memutar semua ID seperti yang dijelaskan dalam Rotasi ID. Layanan Temukan Perangkat Saya dapat meneruskan permintaan aktivasi mode perlindungan pelacakan yang tidak diinginkan melalui jaringan Temukan Perangkat Saya. Dengan demikian, layanan akan menyebabkan Penyedia menggunakan alamat MAC tetap untuk sementara, sehingga klien dapat mendeteksi perangkat dan memperingatkan pengguna tentang kemungkinan pelacakan yang tidak diinginkan.

Untuk mengaktifkan atau menonaktifkan mode perlindungan pelacakan yang tidak diinginkan dari beacon, Pencari melakukan operasi tulis ke karakteristik, yang terdiri dari permintaan dari tabel 5 dengan ID data 0x07 atau 0x08.

Saat mengaktifkan mode perlindungan pelacakan yang tidak diinginkan

Penyedia membuat segmen data sebagai berikut:

Octet Jenis Data Deskripsi Nilai
0 uint8 Tanda Kontrol
  • 0x01: Lewati autentikasi dering. Jika ditetapkan, permintaan dering tidak diautentikasi saat dalam mode perlindungan pelacakan yang tidak diinginkan.
Jika tidak ada tanda yang ditetapkan (byte semuanya nol), Anda dapat menghapus bagian data seluruhnya dan mengirim bagian data kosong.
Flag hanya berlaku hingga mode perlindungan pelacakan yang tidak diinginkan dinonaktifkan.

Penyedia memverifikasi bahwa kunci autentikasi satu kali yang diberikan cocok dengan kunci perlindungan pelacakan yang tidak diinginkan. Jika Penyedia tidak disediakan sebagai beacon FMDN atau verifikasi gagal, error yang tidak diautentikasi akan ditampilkan.

Saat mode perlindungan pelacakan yang tidak diinginkan diaktifkan, beacon akan mengurangi frekuensi rotasi alamat pribadi MAC menjadi sekali per 24 jam. ID sementara yang diiklankan akan terus berputar seperti biasa. Jenis frame harus ditetapkan ke 0x41. Status juga ditampilkan di bagian flag yang di-hash.

Saat menonaktifkan mode perlindungan pelacakan yang tidak diinginkan

Penyedia memverifikasi bahwa:

  • Kunci autentikasi satu kali yang diberikan cocok dengan kunci perlindungan pelacakan yang tidak diinginkan.
  • Kunci identitas efemeral yang di-hash cocok dengan kunci identitas efemeral saat ini.

Jika Penyedia tidak disediakan sebagai beacon FMDN atau verifikasi gagal, Penyedia akan menampilkan error yang tidak diautentikasi.

Saat mode perlindungan pelacakan yang tidak diinginkan dinonaktifkan, beacon akan mulai memutar alamat MAC dengan kecepatan normal lagi, yang disinkronkan dengan rotasi ID sementara. Jenis frame harus disetel kembali ke 0x40. Status ini juga tercermin di bagian hashed flags.

Jika berhasil, Penyedia akan memberi tahu dengan respons dari tabel 6 dengan ID data 0x07 atau 0x08.

Segmen autentikasi ditentukan sebagai 8 byte pertama HMAC-SHA256(unwanted tracking protection key, protocol major version number || the last nonce read from the characteristic || data ID || data length || 0x01).

Frame yang diiklankan

Setelah penyediaan, Penyedia diharapkan untuk mengiklankan frame FMDN setidaknya sekali setiap 2 detik. Jika frame Sambungan Cepat diiklankan, Penyedia harus melakukan intersing dari frame FMDN dalam iklan Sambungan Cepat reguler. Misalnya, setiap dua detik, Penyedia harus mengiklankan tujuh iklan Sambungan Cepat dan satu iklan FMDN.

Frame FMDN membawa kunci publik yang digunakan untuk mengenkripsi laporan lokasi oleh klien pendukung yang berkontribusi pada jaringan crowdsourcing. Ada dua jenis kunci kurva elips yang tersedia: kunci 160-bit yang sesuai dengan frame BLE 4 lama, atau kunci 256-bit yang memerlukan BLE 5 dengan kemampuan iklan yang diperluas. Implementasi Penyedia menentukan kurva yang digunakan.

Frame FMDN disusun sebagai berikut.

Octet Nilai Deskripsi
0 0x02 Panjang
1 0x01 Nilai jenis data tanda
2 0x06 Data flag
3 0x18 atau 0x19 Panjang
4 0x16 Nilai jenis data data layanan
5 0xAA UUID layanan 16-bit
6 0xFE ...
7 0x40 atau 0x41 Jenis frame FMDN dengan indikasi mode perlindungan pelacakan yang tidak diinginkan
8..27 ID efemeral 20 byte
28 Tanda yang di-hash

Tabel 8: Frame FMDN yang mendukung kurva 160-bit.

Tabel 9 menunjukkan offset dan nilai byte untuk kurva 256-bit.

Oktet Nilai Deskripsi
0 0x02 Panjang
1 0x01 Nilai jenis data tanda
2 0x06 Data flag
3 0x24 atau 0x25 Panjang
4 0x16 Nilai jenis data data layanan
5 0xAA UUID layanan 16-bit
6 0xFE ...
7 0x40 atau 0x41 Jenis frame FMDN dengan indikasi mode perlindungan pelacakan yang tidak diinginkan
8..39 ID efemeral 32 byte
40 Tanda yang di-hash

Tabel 9: Frame FMDN yang mendukung kurva 256-bit.

Komputasi ID sementara (EID)

Data acak dihasilkan oleh AES-ECB-256 yang mengenkripsi struktur data berikut dengan kunci identitas sementara:

Octet Kolom Deskripsi
0 - 10 Padding Nilai = 0xFF
11 K Eksponen periode rotasi
12 - 15 TS[0]...TS[3] Penghitung waktu beacon, dalam format big-endian 32-bit. Bit terkecil K akan dihapus.
16 - 26 Padding Nilai = 0x00
27 K Eksponen periode rotasi
28 - 31 TS[0]...TS[3] Penghitung waktu beacon, dalam format big-endian 32-bit. Bit terendah K dihapus.

Tabel 10: Konstruksi angka pseudorandom.

Hasil komputasi ini adalah angka 256-bit, yang dilambangkan r'.

Untuk sisa penghitungan, SECP160R1 atau SECP256R1 digunakan untuk operasi kriptografis kurva elips. Lihat definisi kurva di SEC 2: Parameter Domain Kurva Eliptik yang Direkomendasikan, yang menentukan Fp, n, dan G yang dirujuk berikutnya.

r' sekarang diproyeksikan ke kolom terbatas Fp dengan menghitung r = r' mod n. Terakhir, hitung R = r * G, yang merupakan titik pada kurva yang mewakili kunci publik yang digunakan. Beacon mengiklankan Rx, yang merupakan koordinat x dari R, sebagai ID sementaranya.

Tanda yang di-hash

Kolom flag yang di-hash dihitung sebagai berikut (bit direferensikan dari yang paling signifikan hingga yang paling tidak signifikan):

  • Bit 0-4: Direservasi (ditetapkan ke nol).
  • Bit 5-6 menunjukkan level baterai untuk perangkat sebagai berikut:
    • 00: Indikasi level baterai tidak didukung
    • 01: Level baterai normal
    • 10: Level baterai rendah
    • 11: Level baterai yang sangat rendah (perlu penggantian baterai segera)
  • Bit 7 ditetapkan ke 1 jika beacon dalam mode perlindungan pelacakan yang tidak diinginkan, dan 0 jika tidak.

Untuk menghasilkan nilai akhir byte ini, byte ini di-xor dengan byte SHA256(r) yang paling tidak signifikan.

Perhatikan bahwa r harus disesuaikan dengan ukuran kurva. Tambahkan nol sebagai bit yang paling signifikan jika representasinya lebih pendek dari 160 atau 256 bit, atau bit yang paling signifikan harus dipotong jika representasinya lebih besar dari 160 atau 256 bit.

Jika beacon tidak mendukung indikasi level baterai, dan tidak dalam mode perlindungan pelacakan yang tidak diinginkan, beacon diizinkan untuk menghapus byte ini sepenuhnya dari iklan.

Enkripsi dengan EID

Untuk mengenkripsi pesan m, penampil (setelah membaca Rx dari beacon) akan melakukan hal berikut:

  1. Pilih angka acak s di Fp, seperti yang ditentukan di bagian komputasi EID.
  2. Hitung S = s * G.
  3. Hitung R = (Rx, Ry) dengan substitusi dalam persamaan kurva dan memilih nilai Ry arbitrer dari kemungkinan hasil.
  4. Hitung kunci AES 256-bit k = HKDF-SHA256((s * R)x) dengan (s * R)x adalah koordinat x dari hasil perkalian kurva. Salt tidak ditentukan.
  5. Misalkan URx dan LRx masing-masing menjadi 80-bit atas dan bawah dari Rx, dalam format big-endian. Dengan cara yang sama, tentukan USx dan LSx untuk S.
  6. Hitung nonce = LRx || LSx.
  7. Hitung (m’, tag) = AES-EAX-256-ENC(k, nonce, m).
  8. Kirim (URx, Sx, m’, tag) ke pemilik, mungkin melalui layanan jarak jauh yang tidak tepercaya.

Dekripsi nilai yang dienkripsi dengan EID

Klien pemilik, yang memiliki EIK dan eksponen periode rotasi, mendekripsi pesan sebagai berikut:

  1. Dengan URx, dapatkan nilai penghitung waktu beacon yang menjadi dasar URx. Hal ini dapat dilakukan oleh klien pemilik yang menghitung nilai Rx untuk nilai penghitung waktu beacon untuk masa lalu dan masa mendatang.
  2. Dengan nilai penghitung waktu beacon yang menjadi dasar URx, hitung nilai r yang diperkirakan seperti yang ditentukan di bagian penghitungan EID.
  3. Hitung R = r * G, dan verifikasi kecocokan dengan nilai URx yang diberikan oleh pelihat.
  4. Hitung S = (Sx, Sy) dengan substitusi dalam persamaan kurva dan memilih nilai Sy arbitrer dari kemungkinan hasil.
  5. Hitung k = HKDF-SHA256((r * S)x) dengan (r * S)x adalah koordinat x dari hasil perkalian kurva.
  6. Hitung nonce = LRx || LSx.
  7. Hitung m = AES-EAX-256-DEC(k, nonce, m’, tag).

Rotasi ID

Alamat BLE yang dapat di-resolve (RPA) atau tidak dapat di-resolve (NRPA) harus digunakan untuk menayangkan frame FMDN. RPA diperlukan untuk perangkat LE Audio (LEA) dan direkomendasikan untuk perangkat lain, dengan pengecualian tag pencari yang tidak menggunakan bonding.

Iklan Sambungan Cepat, iklan FMDN, dan alamat BLE yang sesuai harus dirotasi secara bersamaan. Rotasi harus terjadi rata-rata setiap 1.024 detik. Titik yang tepat saat beacon mulai mengiklankan ID baru harus diacak dalam periode tersebut.

Pendekatan yang direkomendasikan untuk melakukan pengacakan waktu rotasi adalah dengan menetapkannya ke waktu rotasi berikutnya yang diperkirakan (jika tidak ada pengacakan yang diterapkan) ditambah faktor waktu acak positif dalam rentang 1 hingga 204 detik.

Saat perangkat berada dalam mode perlindungan pelacakan yang tidak diinginkan, alamat BLE iklan FMDN harus diperbaiki, tetapi RPA untuk iklan FP yang tidak dapat ditemukan (seperti Sambungan Cepat) harus terus berputar. Anda dapat menggunakan alamat yang berbeda untuk protokol yang berbeda.

Pemulihan dari kehilangan daya

Me-resolve ID sementara sangat terkait dengan nilai jamnya pada saat iklan, sehingga penting bagi Penyedia untuk dapat memulihkan nilai jamnya jika terjadi pemadaman listrik. Sebaiknya Penyedia menulis nilai jam saat ini ke memori nonvolatil minimal sekali sehari, dan pada saat booting, Penyedia memeriksa NVM untuk melihat apakah ada nilai yang akan diinisialisasi. Resolver ID sementara akan menerapkan resolusi selama periode waktu yang cukup untuk memungkinkan drift clock yang wajar dan jenis pemulihan kehilangan daya ini.

Penyedia tetap harus melakukan segala upaya untuk meminimalkan penyimpangan jam, karena jangka waktu penyelesaian masalah terbatas. Minimal satu metode sinkronisasi jam tambahan harus diterapkan (menayangkan frame Sambungan Cepat yang tidak dapat ditemukan atau menerapkan aliran pesan).

Panduan penerapan Sambungan Cepat

Bagian ini menjelaskan aspek khusus penerapan Sambungan Cepat di Penyedia yang mendukung FMDN.

Pedoman khusus tag pelacak lokasi

  • Jika Penyedia disambungkan, tetapi FMDN tidak disediakan dalam waktu 5 menit (atau jika update OTA diterapkan saat perangkat disambungkan, tetapi tidak disediakan FMDN), Penyedia harus kembali ke konfigurasi pabrik dan menghapus kunci akun yang tersimpan.
  • Setelah disambungkan, Penyedia tidak boleh mengubah alamat MAC-nya hingga FMDN disediakan atau hingga 5 menit berlalu.
  • Jika kunci identitas sementara dihapus dari perangkat, perangkat harus melakukan reset ke setelan pabrik dan juga menghapus kunci akun yang tersimpan.
  • Penyedia harus menolak upaya penyambungan Bluetooth normal dan hanya menerima penyambungan Sambungan Cepat.
  • Penyedia harus menyertakan mekanisme yang memungkinkan pengguna menghentikan iklan untuk sementara tanpa mereset perangkat ke setelan pabrik (misalnya, menekan kombinasi tombol).
  • Setelah daya mati, perangkat harus mengiklankan frame Sambungan Cepat yang tidak dapat ditemukan hingga pemanggilan berikutnya dari parameter beacon baca. Hal ini memungkinkan Pencari untuk mendeteksi perangkat dan menyinkronkan jam meskipun terjadi penyimpangan jam yang signifikan.
  • Saat mengiklankan frame Sambungan Cepat yang tidak dapat ditemukan, indikasi UI tidak boleh diaktifkan.
  • Frame Sambungan Cepat yang dapat ditemukan tidak boleh diiklankan saat Penyedia disediakan untuk FMDN.
  • Penyedia tidak boleh mengekspos informasi identitas apa pun dengan cara yang tidak diautentikasi (misalnya, nama atau ID).

Panduan khusus perangkat Bluetooth Klasik

Bagian ini menjelaskan aspek khusus perangkat Bluetooth klasik yang mendukung FMDN.

Penyediaan FMDN untuk perangkat yang sudah disambungkan

Penyedia tidak selalu disediakan untuk FMDN saat disambungkan dengan Pencari, tetapi setelah beberapa saat. Dalam hal ini, Penyedia mungkin tidak memiliki alamat MAC BLE terbaru yang diperlukan untuk membuat koneksi GATT. Penyedia harus mendukung setidaknya salah satu cara berikut agar Pencari mendapatkan alamat BLE-nya saat sudah disambungkan:

  • Penyedia dapat secara berkala mengiklankan data akun Sambungan Cepat yang memungkinkan Pencari menemukan alamat BLE-nya melalui pemindaian BLE.
    Pendekatan ini cocok untuk Penyedia yang tidak menerapkan aliran pesan.
  • Penyedia dapat memberikan data ini melalui aliran pesan Sambungan Cepat melalui Bluetooth klasik.
    Pendekatan ini cocok dengan Penyedia yang tidak mengiklankan frame Sambungan Cepat saat terhubung ke Pencari Kerja melalui Bluetooth.

Mendukung kedua pendekatan tersebut akan meningkatkan peluang pengguna untuk menyediakan perangkat untuk FMDN.

Streaming pesan Sambungan Cepat

Penyedia dapat menerapkan aliran pesan Sambungan Cepat dan menggunakannya untuk memberi tahu Pencari tentang Informasi perangkat. Mengimplementasikan aliran pesan akan mengaktifkan fitur tertentu seperti yang dijelaskan di bagian ini.

Penyedia harus mengirim pesan informasi perangkat sekali setiap kali saluran RFCOMM streaming pesan dibuat.

Versi firmware (kode informasi perangkat 0x09) dan kemampuan pelacakan

Saat update firmware menambahkan dukungan FMDN ke Penyedia, Pencari yang terhubung dapat memberi tahu pengguna tentang hal itu dan menawarkan untuk menyediakannya. Jika tidak, pengguna harus membuka daftar perangkat Bluetooth secara manual untuk memulai penyediaan FMDN.

Untuk mengizinkannya, Penyedia harus menggunakan properti Versi firmware (kode 0x09) untuk melaporkan nilai string yang mewakili versi firmware. Selain itu, Penyedia harus mendukung protokol yang memberi tahu Pencari Kerja tentang Perubahan kemampuan karena update firmware.

Octet Jenis Data Deskripsi Nilai
0 uint8 Peristiwa informasi perangkat 0x03
1 uint8 Versi firmware 0x09
2 - 3 uint16 Panjang data tambahan bervariasi
var array byte String versi bervariasi

Tabel 11: Peristiwa informasi perangkat: versi firmware yang diperbarui.

Setelah menerima permintaan update kemampuan (0x0601), jika Penyedia telah mengaktifkan dukungan untuk pelacakan FMDN, Penyedia harus merespons seperti yang ditunjukkan dalam tabel 12.

Octet Jenis Data Deskripsi Nilai
0 uint8 Peristiwa sinkronisasi kemampuan perangkat 0x06
1 uint8 Pelacakan FMDN 0x03
2 - 3 uint16 Panjang data tambahan 0x0007
4 uint8 Status penyediaan FMDN 0x00 jika tidak disediakan; 0x01 jika disediakan oleh akun apa pun
5 - 10 array byte Alamat MAC BLE perangkat saat ini bervariasi

Tabel 12: Peristiwa sinkronisasi kemampuan perangkat: menambahkan kemampuan pelacakan.

ID sementara saat ini (kode informasi perangkat 0x0B)

Penyedia dapat menggunakan ID sementara saat ini (kode 0x0B) untuk melaporkan EID dan nilai jam saat ini saat Penyedia disediakan untuk FMDN, untuk menyinkronkan Pencari jika terjadi drift clock (misalnya, karena baterai habis). Jika tidak, Pencari akan memulai koneksi yang lebih mahal dan kurang andal untuk tujuan ini.

Octet Jenis Data Deskripsi Nilai
0 uint8 Peristiwa informasi perangkat 0x03
1 uint8 ID sementara saat ini 0x0B
2 - 3 uint16 Panjang data tambahan 0x0018 atau 0x0024
4 - 7 array byte Nilai clock Contoh: 0x13F9EA80
8 - 19 atau 31 array byte EID Saat Ini Contoh: 0x1122334455667788990011223344556677889900

Tabel 13: Peristiwa informasi perangkat: sinkronisasi jam.

Reset ke setelan pabrik

Untuk perangkat yang mendukung reset ke setelan pabrik: jika reset ke setelan pabrik dilakukan, Penyedia harus menghentikan beacon dan menghapus kunci identitas sementara dan semua kunci akun yang tersimpan, termasuk kunci akun pemilik.

Setelah reset pabrik (baik manual maupun terprogram), Penyedia tidak boleh mulai mengiklankan Sambungan Cepat dengan segera, untuk mencegah alur penyambungan dimulai segera setelah pengguna menghapus perangkat.

Pencegahan pelacakan yang tidak diinginkan

Perangkat FMDN bersertifikasi juga harus memenuhi persyaratan dalam versi implementasi spesifikasi lintas platform untuk Mendeteksi Pelacak Lokasi yang Tidak Diinginkan (DULT).

Pedoman yang relevan khusus untuk FMDN agar mematuhi spesifikasi DULT:

  • Setiap perangkat yang kompatibel dengan FMDN harus terdaftar di Konsol Perangkat di Sekitar, dan mengaktifkan kemampuan "Temukan Perangkat Saya".
  • Perangkat harus mengimplementasikan layanan dan karakteristik Accessory Non-Owner yang ditentukan dalam versi implementasi spesifikasi DULT, termasuk operasi Accessory Information dan Non-owner controls.
  • Selama periode kompatibilitas mundur, seperti yang ditentukan dalam spesifikasi DULT, tidak ada perubahan pada frame yang diiklankan seperti yang ditentukan dalam dokumen ini.
  • "Mode perlindungan pelacakan yang tidak diinginkan" yang ditentukan dalam dokumen ini dipetakan ke "status terpisah" yang ditentukan oleh spesifikasi DULT.
  • Panduan untuk menerapkan opcode Informasi Aksesori:
    • Get_Product_Data akan menampilkan ID model yang disediakan oleh konsol, dengan padding nol agar sesuai dengan persyaratan 8 byte. Misalnya, ID model 0xFFFFFF ditampilkan sebagai 0x0000000000FFFFFF.
    • Get_Manufacturer_Name dan Get_Model_Name harus cocok dengan nilai yang diberikan di konsol.
    • Get_Accessory_Category dapat menampilkan nilai "Pelacak Lokasi" generik jika tidak ada kategori lain yang lebih sesuai dengan jenis perangkat.
    • Get_Accessory_Capabilities harus menunjukkan dukungan untuk dering serta pencarian ID BLE.
    • Get_Network_ID akan menampilkan ID Google (0x02).
  • Panduan untuk menerapkan opcode Get_Identifier:
    • Operasi hanya boleh menampilkan respons yang valid selama 5 menit setelah pengguna mengaktifkan mode 'identifikasi', yang memerlukan kombinasi penekanan tombol. Sinyal visual atau audio harus menunjukkan kepada pengguna bahwa penyedia memasuki mode tersebut. Petunjuk khusus model untuk mengaktifkan mode tersebut harus diberikan kepada Google sebagai persyaratan untuk sertifikasi dan setidaknya 10 hari sebelum pembaruan atau perubahan pada petunjuk.
    • Respons dibuat sebagai: 10 byte pertama dari ID sementara saat ini, diikuti dengan 8 byte pertama HMAC-SHA256(recovery key, the truncated current ephemeral identifier).
  • Panduan untuk menerapkan ID melalui NFC:
    • Sebagai URL, gunakan find-my.googleapis.com/lookup.
    • Sebagai parameter e, gunakan respons yang sama seperti yang dibuat untuk Get_Identifier, yang dienkode hex.
    • Sebagai parameter pid, gunakan respons yang sama seperti yang dibuat untuk Get_Product_Data, yang dienkode hex.
  • Panduan untuk menerapkan opcode Sound_Start:
    • Perintah ini akan memicu dering di semua komponen yang tersedia.
    • Volume maksimum yang didukung harus digunakan.
    • Durasi yang direkomendasikan untuk berdering adalah 12 detik.
  • Tag pencari lokasi harus menyertakan mekanisme yang memungkinkan pengguna menghentikan iklan untuk sementara tanpa mereset perangkat ke setelan pabrik (misalnya, menekan kombinasi tombol).
    • Petunjuk penonaktifan harus didokumentasikan di URL yang tersedia secara publik dan diberikan kepada Google sebagai persyaratan untuk sertifikasi dan setidaknya 10 hari sebelum pembaruan atau perubahan pada petunjuk.
    • URL harus mendukung pelokalan. Bergantung pada klien, bahasa akan diberikan sebagai parameter kueri ("hl=en") atau menggunakan header HTTP "accept-language".

Panduan protokol switchable

  • Hanya satu protokol yang harus digunakan pada satu waktu. Pastikan tidak lebih dari satu jaringan yang dapat beroperasi pada perangkat secara bersamaan. Persyaratan ini diperlukan untuk memastikan tidak ada penggabungan data pengguna sensitif di antara protokol yang berbeda.
  • Sebaiknya gabungkan alur kerja hard reset ke dalam perangkat yang memungkinkan pengguna menyiapkan ulang perangkat dengan jaringan yang berbeda.
  • Proses mengupdate perangkat ke jaringan harus mudah digunakan dan adil di antara jaringan. Pengguna harus dapat memilih jaringan yang ingin digunakan tanpa memberikan preferensi ke salah satu jaringan. Alur ini perlu disetujui oleh tim Google.

Update firmware

Proses dan distribusi update OTA harus dikelola oleh partner menggunakan alur kerja aplikasi Seluler atau Web mereka sendiri.

Kompatibilitas

Jaringan Temukan Perangkat Saya memerlukan layanan lokasi dan Bluetooth yang diaktifkan. Memerlukan layanan seluler atau koneksi internet. Berfungsi di Android 9 atau yang lebih baru dan di negara tertentu untuk pengguna yang memenuhi syarat usia.

Log perubahan

Versi FMDN Tanggal Komentar
v1 Rilis awal spesifikasi FMDN untuk akses awal.
v1.1 Feb 2023
  • Menambahkan indikasi cleartext mode perlindungan pelacakan yang tidak diinginkan.
  • Menambahkan opsi untuk melewati autentikasi permintaan berdering saat dalam mode perlindungan pelacakan yang tidak diinginkan.
v1.2 April 2023
  • Memperbarui definisi AK pemilik.
  • Menambahkan rekomendasi untuk pemulihan dari kehilangan daya di tag pencari lokasi.
  • Menambahkan klarifikasi untuk pengacakan alamat MAC.
  • Menambahkan klarifikasi tentang rotasi alamat MAC saat dalam mode perlindungan pelacakan yang tidak diinginkan.
  • Menambahkan panduan tentang cara menonaktifkan tag pencari lokasi.
v1.3 Des 2023
  • Menambahkan klarifikasi tentang informasi identitas yang ditampilkan oleh tag pencari.
  • Menambahkan persyaratan untuk menerapkan spesifikasi pencegahan pelacakan yang tidak diinginkan.
  • Menambahkan panduan untuk perangkat protokol yang dapat dialihkan.