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:
Kunci akun: Kunci akun Sambungan Cepat 16 byte, seperti yang ditentukan dalam spesifikasi Sambungan Cepat.
Kunci akun pemilik: Penyedia memilih salah satu kunci akun yang ada sebagai kunci akun pemilik saat pertama kali Pencari mengakses karakteristik Tindakan Beacon. Kunci akun pemilik yang dipilih tidak dapat diubah hingga Penyedia direset ke setelan pabrik. Penyedia tidak boleh menghapus kunci akun pemilik jika kehabisan slot kunci akun yang kosong.
Penyedia yang sudah mendukung FMDN saat disambungkan untuk pertama kalinya (atau mendukungnya saat disambungkan setelah reset ke setelan pabrik) memilih kunci akun pertama, karena ini adalah satu-satunya kunci akun yang ada saat Pencari Kerja membaca status penyediaan selama penyambungan.
Penyedia yang mendapatkan dukungan FMDN setelah disambungkan (misalnya, melalui update firmware) dapat memilih kunci akun yang ada. Anda dapat memilih kunci akun pertama yang digunakan untuk membaca status penyediaan dari karakteristik tindakan beacon setelah update firmware, dengan asumsi bahwa pengguna yang melakukan update adalah pemilik Penyedia saat ini.
Kunci identitas efemeral (EIK): Kunci 32 byte yang dipilih secara acak oleh Pencari Kerja saat melakukan proses penyediaan FMDN. Kunci ini digunakan untuk memperoleh kunci kriptografis yang digunakan untuk mengenkripsi laporan lokasi secara menyeluruh. Pencari Kerja tidak pernah mengungkapkannya ke backend.
Kunci pemulihan: Didefinisikan sebagai
SHA256(ephemeral identity key || 0x01)
, dipotong menjadi 8 byte pertama. Kunci disimpan di backend dan Pencari Kerja dapat menggunakannya untuk memulihkan EIK, asalkan pengguna menyatakan izin dengan menekan tombol di perangkat.Ring key: Didefinisikan sebagai
SHA256(ephemeral identity key || 0x02)
, dipotong hingga 8 byte pertama. Kunci tersebut disimpan di backend dan Pencari Kerja dapat menggunakannya hanya untuk menderingkan perangkat.Kunci perlindungan pelacakan yang tidak diinginkan: Didefinisikan sebagai
SHA256(ephemeral identity key || 0x03)
, dipotong menjadi 8 byte pertama. Kunci tersebut disimpan di backend dan Pencari Kerja hanya dapat menggunakannya untuk mengaktifkan mode perlindungan pelacakan yang tidak diinginkan.
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 |
|
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 |
|
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 |
|
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 |
|
Tabel 4: Permintaan berdering.
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | ID Data |
|
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 |
|
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 |
|
1 | uint8 | Panjang data | bervariasi |
2 - 9 | array byte | Autentikasi | Mendetail per operasi |
10 - var | array byte | Data tambahan |
|
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:
|
6 | uint8 | Komponen | Jumlah komponen yang dapat berdering:
|
7 | uint8 | Kemampuan dering | Opsi yang didukung adalah:
|
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:
|
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:
|
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 |
|
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 |
|
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 |
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:
- Pilih angka acak
s
diFp
, seperti yang ditentukan di bagian komputasi EID. - Hitung
S = s * G
. - Hitung
R = (Rx, Ry)
dengan substitusi dalam persamaan kurva dan memilih nilaiRy
sembarang dari hasil yang memungkinkan. - Hitung kunci AES 256 bit
k = HKDF-SHA256((s * R)x)
dengan(s * R)x
sebagai koordinatx
dari hasil perkalian kurva. Garam tidak ditentukan. - Misalkan
URx
danLRx
masing-masing adalah 80 bit atas dan bawah dariRx
, dalam format big-end. Dengan cara yang sama, tentukanUSx
danLSx
untukS
. - Hitung
nonce = LRx || LSx
. - Hitung
(m’, tag) = AES-EAX-256-ENC(k, nonce, m)
. - 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:
- Dengan mempertimbangkan
URx
, dapatkan nilai penghitung waktu beacon yang menjadi dasarURx
. Hal ini dapat dilakukan oleh klien pemilik yang menghitung nilaiRx
untuk nilai penghitung waktu beacon untuk masa lalu dan masa mendatang. - Dengan mempertimbangkan nilai penghitung waktu beacon yang mendasari
URx
, hitung nilai yang diprediksi sebesarr
seperti yang ditentukan di bagian komputasi EID. - Hitung
R = r * G
, dan verifikasi kecocokan dengan nilaiURx
yang diberikan oleh sighter. - Hitung
S = (Sx, Sy)
dengan substitusi dalam persamaan kurva dan memilih nilaiSy
sembarang dari hasil yang memungkinkan. - Hitung
k = HKDF-SHA256((r * S)x)
dengan(r * S)x
sebagai koordinatx
dari hasil perkalian kurva. - Hitung
nonce = LRx || LSx
. - 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 |
|
v1.2 | April 2023 |
|
v1.3 | Des 2023 |
|