Spesifikasi Aksesori Jaringan Temukan Perangkat Saya

v1.3

Spesifikasi aksesori Find My Device Network (FMDN) menentukan pendekatan terenkripsi end-to-end untuk melacak beaconing perangkat Bluetooth Hemat Energi (BLE). 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 (GATT) tambahan harus ditambahkan ke Layanan Sambungan Cepat dengan semantik berikut:

Karakteristik Layanan Sambungan Cepat Dienkripsi Izin UUID
Tindakan beacon Tidak Membaca, menulis, dan memberi tahu FE2C1238-8366-4814-8EB0-01DE32100BEA

Tabel 1: Karakteristik Layanan Sambungan Cepat untuk FMDN.

Autentikasi

Operasi yang diperlukan oleh ekstensi ini dijalankan sebagai operasi tulis, yang diamankan oleh mekanisme tantangan-respons. Sebelum melakukan operasi apa pun, Pencari kerja diharapkan melakukan operasi baca dari karakteristik dalam tabel 1, yang menghasilkan buffer dalam format berikut:

Oktet Jenis Data Deskripsi Nilai
0 uint8 Nomor versi utama protokol 0x01
1 - 8 array byte Nonce acak satu kali bervariasi

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

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

Operasi

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

Oktet 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 dari 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 efemeral, yang dienkripsi AES-ECB-128 dengan kunci akun. Jika Penyedia sudah menetapkan kunci identitas singkat, kirim juga 8 byte pertama dari SHA256(current ephemeral identity key || the last nonce read from the characteristic)
  • 0x03: 8 byte pertama dari SHA256(ephemeral identity key || the last nonce read from the characteristic)

Tabel 2: Permintaan penyediaan beacon.

Oktet 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 dari 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.

Oktet 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 dari 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 berdering.

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 dari 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 dari SHA256(ephemeral identity key || the last nonce read from the characteristic)

Tabel 5: Permintaan perlindungan pelacakan yang tidak diinginkan.

Berhasil menulis notifikasi pemicu seperti yang tercantum dalam tabel 6.

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

Oktet 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 berdering, AES-ECB-128 dienkripsi dengan kunci akun (dengan padding 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 efemeral, yang dienkripsi AES-ECB-128 dengan kunci akun
  • 0x05: 4 byte yang menunjukkan status baru dan pemicu perubahan
  • 0x06: 3 byte yang menunjukkan komponen yang aktif berdering dan jumlah dedetik yang tersisa untuk berdering
  • ID data lain menggunakan data tambahan yang kosong

Tabel 6: Respons layanan beacon.

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

Code 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 ada nilai yang tidak valid atau data yang diterima memiliki jumlah byte yang tidak terduga.
0x82 Tidak ada izin pengguna Ditampilkan sebagai respons atas permintaan tulis dengan ID data 0x04: Membaca kunci identitas singkat dengan izin pengguna saat perangkat tidak dalam mode penyambungan.

Tabel 7: Kode error GATT.

Membaca parameter beacon

Pencari kerja dapat mengkueri Penyedia untuk parameter beacon dengan melakukan operasi tulis ke karakteristik yang terdiri atas permintaan dari tabel 2 dengan ID data 0x00. Penyedia memverifikasi bahwa kunci autentikasi satu kali yang diberikan cocok dengan kunci akun mana pun 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:

Oktet Jenis Data Deskripsi Nilai
0 uint8 Daya yang dikalibrasi Daya yang dikalibrasi seperti yang diterima pada 0 m (nilai dalam rentang [-100, 20]). Digambarkan sebagai bilangan bulat yang ditandai, dengan resolusi 1 dBm.
1 - 4 uint32 Nilai jam Nilai jam saat ini dalam detik (endian besar).
5 uint8 Pemilihan kurva Kurva eliptis yang digunakan untuk enkripsi:
  • 0x00 (default): SECP160R1
  • 0x01: SECP256R1 (memerlukan 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 berdering.
  • 0x02: Menunjukkan bahwa dua komponen, earbud kiri dan kanan, mampu berdering secara independen.
  • 0x03: Menunjukkan bahwa tiga komponen, buds kiri dan kanan serta kasus, mampu berdering secara independen.
7 uint8 Kemampuan dering Opsi yang didukung adalah:
  • 0x00: Pemilihan volume dering tidak tersedia.
  • 0x01: Pemilihan volume dering tersedia. Jika disetel, Penyedia harus menerima dan menangani 3 level volume seperti yang ditunjukkan dalam Operasi dering.
8-15 array byte Padding Tanpa padding untuk enkripsi AES.

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

Segmen autentikasi ditentukan sebagai 8 byte pertama dari 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 Kerja 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 mana pun 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:

Oktet Jenis Data Deskripsi Nilai
0 uint8 Status penyediaan Bitmask memiliki nilai berikut:
  • Bit 1 (0x01): Menetapkan jika kunci identitas sementara ditetapkan untuk perangkat.
  • Bit 2 (0x02): Menetapkan apakah kunci autentikasi satu kali 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 sudah ditetapkan untuk perangkat.

Segmen autentikasi ditentukan sebagai 8 byte pertama dari 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 sementara dari Penyedia yang sudah disediakan, Pencari Kerja 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 singkat diberikan, kunci identitas efemeral yang di-hash akan cocok dengan kunci identitas sementara saat ini.
  • Jika hash kunci identitas sementara tidak diberikan, pastikan bahwa Penyedia belum disediakan sebagai beacon FMDN.

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

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

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

Menghapus kunci identitas singkat

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

  • Kunci autentikasi satu kali yang diberikan cocok dengan kunci akun pemilik.
  • Kunci identitas efemeral yang di-hash cocok dengan kunci identitas sementara saat ini.

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

Setelah berhasil, Penyedia akan melupakan kunci tersebut dan berhenti mengiklankan frame FMDN. Penyedia memberitahukan dengan respons dari tabel 6 dengan ID data 0x03. Segmen autentikasi ditentukan sebagai 8 byte pertama dari 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 Kerja. Dengan demikian, kemampuan ini hanya tersedia saat perangkat berada dalam mode penyambungan atau selama waktu terbatas setelah tombol fisik ditekan pada 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 terhadap 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 dari 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 Kerja dapat meminta Penyedia untuk memutar suara dengan melakukan operasi tulis ke karakteristik, yang terdiri dari permintaan dari tabel 4 dengan ID data 0x05. Penyedia membuat segmen data sebagai berikut:

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

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

Setelah menerima permintaan tersebut, Penyedia akan memverifikasi bahwa:

  • Kunci autentikasi satu kali yang diberikan cocok dengan kunci dering.
  • 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 mengaktifkan perlindungan pelacakan yang tidak diinginkan dan permintaan perlindungan pelacakan yang tidak diinginkan telah mengaktifkan tanda autentikasi lewati berdering, Penyedia harus melewati pemeriksaan tersebut. Data autentikasi masih diharapkan untuk disediakan oleh Pencari Kerja, tetapi dapat ditetapkan ke nilai arbitrer.

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

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

Segmen autentikasi ditentukan sebagai 8 byte pertama dari 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 berdering yang diminta saat permintaan untuk menderingkan atau berhenti berdering, Penyedia harus mengirimkan notifikasi dengan status berdering atau 0x00: Dimulai atau 0x04: Dihentikan (permintaan GATT). Permintaan ini mengganti parameter status yang ada, sehingga durasi berdering dapat diperpanjang.

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

Mendapatkan status dering beacon

Untuk mendapatkan status berdering beacon, Pencari Kerja 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 dering.

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:

Oktet Jenis Data Deskripsi Nilai
0 uint8 Komponen berdering Komponen berdering secara aktif, seperti yang didefinisikan dalam permintaan dering.
1 - 2 uint16 Waktu tunggu Sisa waktu untuk berdering dalam detik. Perhatikan bahwa jika perangkat tidak berdering, 0x0000 akan ditampilkan.

Segmen autentikasi ditentukan sebagai 8 byte pertama dari 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 ditujukan untuk memungkinkan klien mengidentifikasi perangkat yang melanggar tanpa komunikasi server. Secara default, Penyedia harus merotasi semua ID seperti yang dijelaskan dalam rotasi ID. Layanan Temukan Perangkat Saya dapat menyampaikan permintaan aktivasi mode perlindungan pelacakan yang tidak diinginkan melalui jaringan Temukan Perangkat Saya. Dengan demikian, layanan tersebut 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 untuk beacon, Pencari Kerja melakukan operasi tulis ke karakteristik, yang masing-masing 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:

Oktet Jenis Data Deskripsi Nilai
0 uint8 Tanda Kontrol
  • 0x01: Lewati autentikasi berdering. Jika ditetapkan, permintaan dering tidak diautentikasi saat berada dalam mode perlindungan pelacakan yang tidak diinginkan.
Jika tidak ada flag yang ditetapkan (byte semuanya berisi angka nol), Anda dapat menghilangkan bagian data sepenuhnya dan mengirim bagian data kosong.
Tanda ini 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.

Jika 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 ini juga tercermin di bagian tanda 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 sementara saat ini.

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

Jika mode perlindungan pelacakan yang tidak diinginkan dinonaktifkan, beacon akan mulai memutar alamat MAC lagi pada tingkat normal, yang disinkronkan dengan rotasi ID efemeral. Jenis frame harus disetel kembali ke 0x40. Status ini juga tercermin di bagian tanda yang di-hash.

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

Segmen autentikasi ditentukan sebagai 8 byte pertama dari 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 menyisipkan 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 ke jaringan crowdsourcing. Dua jenis kunci kurva eliptis 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 mana yang digunakan.

Frame FMDN disusun sebagai berikut.

Oktet Nilai Deskripsi
0 0x02 Durasi
1 0x01 Nilai jenis data flag
2 0x06 Data flag
3 0x18 atau 0x19 Durasi
4 0x16 Nilai jenis 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 Durasi
1 0x01 Nilai jenis data flag
2 0x06 Data flag
3 0x24 atau 0x25 Durasi
4 0x16 Nilai jenis 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 efemeral (EID)

Acak dihasilkan oleh AES-ECB-256 yang mengenkripsi struktur data berikut dengan kunci identitas efemeral:

Oktet 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 terendah 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 akan dihapus.

Tabel 10: Konstruksi angka pseudorandom.

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

Untuk perhitungan lainnya, SECP160R1 atau SECP256R1 digunakan untuk operasi kriptografi kurva eliptis. Lihat definisi kurva di SEC 2: Rekomendasi Parameter Domain Kurva Eliptik, yang menentukan Fp, n, dan G yang dirujuk berikutnya.

r' sekarang diproyeksikan ke bidang terbatas Fp dengan menghitung r = r' mod n. Terakhir, komputasi R = r * G, yang merupakan titik pada kurva yang mewakili kunci publik yang digunakan. Beacon memberitahukan 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: Dicadangkan (disetel ke nol).
  • Bit 5-6 menunjukkan level baterai untuk perangkat sebagai berikut:
    • 00: Indikator level baterai tidak didukung
    • 01: Level baterai normal
    • 10: Level baterai rendah
    • 11: Level baterai sangat rendah (penggantian baterai segera diperlukan)
  • Bit 7 disetel ke 1 jika beacon berada dalam mode perlindungan pelacakan yang tidak diinginkan, dan 0 jika tidak.

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

Perhatikan bahwa r harus sejajar 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 berada dalam mode perlindungan pelacakan yang tidak diinginkan, Anda dapat menghapus byte ini sepenuhnya dari iklan.

Enkripsi dengan EID

Untuk mengenkripsi pesan m, observasi (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 sembarang dari hasil yang memungkinkan.
  4. Hitung kunci AES 256 bit k = HKDF-SHA256((s * R)x) dengan (s * R)x sebagai koordinat x dari hasil perkalian kurva. Garam tidak ditentukan.
  5. Misalkan URx dan LRx masing-masing adalah 80 bit atas dan bawah dari Rx, dalam format big-end. 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) kepada pemilik, mungkin melalui layanan jarak jauh yang tidak tepercaya.

Mendekripsi nilai yang dienkripsi dengan EID

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

  1. Dengan mempertimbangkan 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 mempertimbangkan nilai penghitung waktu beacon yang mendasari URx, hitung nilai yang diprediksi sebesar r seperti yang ditentukan di bagian komputasi EID.
  3. Hitung R = r * G, dan verifikasi kecocokan dengan nilai URx yang diberikan oleh sighter.
  4. Hitung S = (Sx, Sy) dengan substitusi dalam persamaan kurva dan memilih nilai Sy sembarang dari hasil yang memungkinkan.
  5. Hitung k = HKDF-SHA256((r * S)x) dengan (r * S)x sebagai 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 diselesaikan (RPA) atau yang tidak dapat diselesaikan (NRPA) harus digunakan untuk mengiklankan frame FMDN. RPA diperlukan untuk perangkat LE Audio (LEA) dan direkomendasikan untuk perangkat lain, kecuali tag pencari lokasi yang tidak menggunakan ikatan.

Iklan Sambungan Cepat, iklan FMDN, dan alamat BLE yang sesuai harus berotasi secara bersamaan. Rotasi rata-rata harus terjadi setiap 1024 detik. Titik akurat saat beacon mulai mengiklankan ID baru harus diacak dalam jendela.

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

Jika perangkat berada dalam mode perlindungan pelacakan yang tidak diinginkan, alamat BLE dari iklan FMDN harus diperbaiki, tetapi iklan RPA untuk 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

Menyelesaikan ID sementara sangat terkait dengan nilai clock-nya pada saat iklan, sehingga penting bagi Penyedia dapat memulihkan nilai clock-nya jika ada kehilangan daya. Sebaiknya Penyedia menulis nilai clock saat ini ke memori nonvolatil setidaknya sekali per hari, dan pada saat booting, Penyedia akan memeriksa NVM untuk melihat apakah ada nilai yang akan diinisialisasi. Pemecah ID sementara akan menerapkan resolusi selama jangka waktu yang cukup untuk memungkinkan penyimpangan jam yang wajar dan jenis pemulihan kehilangan daya ini.

Penyedia tetap harus berusaha sebaik mungkin untuk meminimalkan penyimpangan jam, karena periode waktu penyelesaiannya terbatas. Setidaknya satu metode sinkronisasi jam tambahan harus diterapkan (memasang iklan 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.

Panduan khusus tag pencari 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 pabriknya dan menghapus kunci akun yang disimpan.
  • Setelah disambungkan, Penyedia seharusnya tidak 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 kehilangan daya, perangkat akan memberitahukan frame Sambungan Cepat yang tidak dapat ditemukan hingga pemanggilan parameter baca parameter beacon berikutnya. Hal ini memungkinkan Pencari 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 selama 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 telah disambungkan

Penyedia tidak selalu disediakan untuk FMDN saat disambungkan dengan Pencari Kerja, tetapi beberapa saat setelah itu. 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 bagi Pencari Kerja untuk mendapatkan alamat BLE-nya saat sudah disambungkan:

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

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

Streaming pesan Sambungan Cepat

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

Penyedia harus mengirim pesan informasi perangkat satu kali 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 Kerja yang terhubung dapat memberi tahu pengguna tentang hal tersebut dan menawarkan untuk menyediakannya. Jika tidak, pengguna harus membuka daftar perangkat Bluetooth secara manual untuk memulai penyediaan FMDN.

Untuk memungkinkan hal itu, 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.

Oktet 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 diupdate.

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

Oktet 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 ditetapkan; 0x01 jika disediakan oleh akun mana pun
5 - 10 array byte Alamat MAC BLE perangkat saat ini bervariasi

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

ID efemeral saat ini (kode informasi perangkat 0x0B)

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

Oktet Jenis Data Deskripsi Nilai
0 uint8 Peristiwa informasi perangkat 0x03
1 uint8 ID sementara saat ini 0x0 M
2 - 3 uint16 Panjang data tambahan 0x0018 atau 0x0024
4 - 7 array byte Nilai jam 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 beaconing dan menghapus kunci identitas sementara serta semua kunci akun yang disimpan, termasuk kunci akun pemilik.

Setelah reset ke setelan pabrik (baik manual maupun terprogram), Penyedia tidak dapat langsung mulai mengiklankan Sambungan Cepat, agar alur penyambungan tidak segera dimulai 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).

Panduan relevan khusus FMDN untuk mematuhi spesifikasi DULT:

  • Semua perangkat yang kompatibel dengan FMDN harus terdaftar di Konsol Perangkat di Sekitar, dan mengaktifkan kemampuan "Temukan Perangkat Saya".
  • Perangkat harus mengimplementasikan layanan dan karakteristik Aksesori Non-Pemilik yang ditentukan dalam versi implementasi spesifikasi DULT, termasuk operasi Informasi Aksesori dan Kontrol non-pemilik.
  • 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 akan 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 telah 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 modifikasi apa pun pada petunjuk.
    • Respons dibuat sebagai: 10 byte pertama dari ID efemeral saat ini, diikuti dengan 8 byte pertama HMAC-SHA256(recovery key, the truncated current ephemeral identifier).
  • Panduan untuk menerapkan opcode Sound_Start:
    • Perintah akan memicu dering di semua komponen yang tersedia.
    • Volume maksimal 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 dalam URL yang tersedia untuk publik dan diberikan kepada Google sebagai persyaratan untuk sertifikasi, dan setidaknya 10 hari sebelum pembaruan atau modifikasi apa pun 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 yang dapat diganti-ganti

  • Hanya satu protokol yang boleh digunakan pada satu waktu. Pastikan tidak lebih dari satu jaringan yang dapat beroperasi di perangkat secara bersamaan. Persyaratan ini diperlukan untuk memastikan bahwa tidak ada penggabungan data pengguna yang sensitif di antara berbagai protokol.
  • Sebaiknya Anda memasukkan alur kerja reset ke setelan pabrik ke dalam perangkat, sehingga pengguna dapat menyiapkan ulang perangkat dengan jaringan yang berbeda.
  • Proses update perangkat ke jaringan harus mudah digunakan dan setara di antara jaringan. Pengguna harus dapat memilih jaringan yang ingin mereka gunakan 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+ 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 dari 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 berada dalam mode perlindungan pelacakan yang tidak diinginkan.
  • Menambahkan panduan tentang cara menonaktifkan tag pencari lokasi.
v1.3 Des 2023
  • Menambahkan klarifikasi tentang identifikasi informasi yang diekspos oleh tag pencari lokasi.
  • Menambahkan persyaratan untuk menerapkan spesifikasi pencegahan pelacakan yang tidak diinginkan.
  • Menambahkan panduan untuk perangkat protokol yang dapat diganti.