Karakteristik

Layanan Sambungan Cepat

Penyedia Sambungan Cepat harus memiliki layanan GATT berikut.

Layanan UUID
Layanan Sambungan Cepat 0xFE2C

Layanan ini harus memiliki karakteristik berikut.

Karakteristik Layanan Sambungan Cepat Dienkripsi Izin UUID
ID Model Tidak Baca FE2C1233-8366-4814-8EB0-01DE32100BEA
Pasangan Berbasis Kunci Tidak Tulis dan beri tahu FE2C1234-8366-4814-8EB0-01DE32100BEA
Kunci sandi Tidak Tulis dan beri tahu FE2C1235-8366-4814-8EB0-01DE32100BEA
Kunci Akun Tidak Tulis FE2C1236-8366-4814-8EB0-01DE32100BEA

Layanan Informasi Perangkat

Penyedia Sambungan Cepat juga harus mendukung Layanan Informasi Perangkat.

Layanan UUID
Layanan Informasi Perangkat 0x180A

Pencari Sambungan Cepat menggunakan karakteristik berikut.

Nama Dienkripsi Izin UUID
Revisi Firmware Tidak Baca 0x2A26

Karakteristik: ID Model

Karakteristik ini memungkinkan Pencari untuk membaca ID model sesuai kebutuhan, di luar saat perangkat beriklan dalam mode dapat ditemukan. Nilainya harus selalu kembali data berikut:

Oktet Jenis data Deskripsi Nilai
0 - 2 uint24 ID Model di waktu/bulan/tempat/tanggal tertentu

Karakteristik: Pasangan Berbasis Kunci

Karakteristik ini mengendalikan prosedur Pasangan Berbasis Kunci. Dalam prosedur ini, tingkat kepercayaan tertentu dibangun dengan memverifikasi bahwa Pencari dan Penyedia keduanya memiliki {i>pre-shared key<i}. Kuncinya berbeda dalam setiap kasus:

  • Kasus 1: Kunci yang dibagikan sebelumnya didasarkan pada kunci publik/pribadi anti-spoofing dan pasangan kunci umum/pribadi milik Pencari Kerja yang akan berubah untuk setiap upaya penyambungan.

    • Penyedia sedang dalam mode penyambungan.
    • Pencari memverifikasi bahwa Penyedia memiliki kunci pribadi anti-spoofing.

    Perhatikan bahwa saat dalam mode penyambungan, Penyedia tentunya juga bisa memasangkan cara biasa, misalnya, untuk menyambungkan dengan perangkat yang tidak mendukung layanan Cepat Pasangan Berbasis Kunci Pasangan.

  • Kasus 2: Kunci yang dibagikan sebelumnya adalah salah satu kunci akun.

    • Penyedia biasanya tidak dalam mode penyambungan. (Tapi ini bukan persyaratan—Penyedia harus mendukung penggunaan kunci akun bahkan saat mode penyambungan.)
    • Pencari dan Penyedia masing-masing memverifikasi bahwa yang lain memiliki kunci akun.

Karena kedua kasus ini sangat mirip, kecuali untuk {i>pre-shared key<i} yang digunakan, keduanya digabungkan dalam prosedur.

Format Data

Lihat prosedur untuk mengetahui penggunaan setiap format.

Oktet Jenis data Deskripsi Nilai Wajib?
0 - 15 uint128 Permintaan Terenkripsi di waktu/bulan/tempat/tanggal tertentu Wajib
16 - 79 Kunci Publik di waktu/bulan/tempat/tanggal tertentu Opsional

Tabel 1.1: Permintaan Terenkripsi, yang ditulis ke karakteristik oleh Pencari.

Oktet Jenis data Deskripsi Nilai Wajib?
0 uint8 Jenis pesan 0x00 = Permintaan Penyambungan Berbasis Kunci Wajib
1 uint8 Bendera
  • Bit 0 (MSB): tidak digunakan lagi dan diabaikan oleh Pencari Kerja.
  • Bit 1: 1 jika Pencari meminta agar Penyedia memulai ikatan, dan permintaan ini berisi alamat BR/EDR Pencari. 0 sebaliknya.
  • Bit 2: 1 jika Pencari meminta agar Penyedia memberi tahu nama yang ada. 0 sebaliknya.
  • Bit 3: 1 jika ini untuk Menulis kunci akun secara retroaktif. 0 sebaliknya.
  • Bit 4 - 7 dicadangkan untuk penggunaan di masa yang akan datang, dan harus diabaikan.
bervariasi Wajib
2 - 7 uint48 Memenuhi salah satu ketentuan berikut:
  • Alamat BLE penyedia saat ini
  • Alamat publik penyedia
bervariasi Wajib
8-13 tahun uint48 Alamat BR/EDR Pencari bervariasi Hanya ada jika Flag Bit 1 atau 3 disetel
n - 15 Nilai acak (garam) bervariasi Wajib

Tabel 1.2.1: Raw Request (jenis 0x00). Didekripsi dari Data Terenkripsi Permintaan di Tabel 1.1.

Oktet Jenis data Deskripsi Nilai Wajib?
0 uint8 Jenis pesan 0x10 = Permintaan Tindakan Wajib
1 uint8 Bendera bervariasi Wajib
2 - 7 uint48 Memenuhi salah satu ketentuan berikut:
  • Alamat BLE penyedia saat ini
  • Alamat publik penyedia
bervariasi Wajib
8 uint8 Grup pesan bervariasi Wajib jika Flag Bit 0 disetel
9 uint8 Kode pesan bervariasi Wajib jika Flag Bit 0 disetel
10 uint8 Tergantung Tanda:
  • Bit 0 disetel: Panjang data tambahan, kurang dari 6
  • Bit 1 disetel: ID Data
bervariasi Wajib jika Flag Bit 0 atau 1 diatur
11 - n Data tambahan bervariasi Opsional
n - 15 Nilai acak (garam) bervariasi Wajib

Tabel 1.2.2: Raw Request (jenis 0x10). Didekripsi dari Data Terenkripsi Permintaan di Tabel 1.1.

Oktet Jenis data Deskripsi Nilai
0 uint8 Jenis pesan 0x01 = Respons Penyambungan Berbasis Kunci
1 - 6 uint48 Alamat publik penyedia (BR/EDR) bervariasi
7-15 tahun Nilai acak (garam) bervariasi

Tabel 1.3: Respons Mentah. Dienkripsi untuk menghasilkan Respons Terenkripsi di Tabel 1.4.

Oktet Jenis data Deskripsi Nilai
0—15 uint128 Respons Terenkripsi bervariasi

Tabel 1.4: Respons Terenkripsi, yang dikirim oleh Penyedia kepada Pencari Kerja melalui beri tahu.

Karakteristik: Kunci sandi

Karakteristik ini digunakan selama Penyambungan Berbasis Kunci prosedur standar.

Oktet Jenis data Deskripsi Nilai
0 - 15 uint128 Pemblokiran kunci sandi terenkripsi bervariasi

Tabel 2.1: Pemblokiran Kunci Sandi Terenkripsi. Lihat Prosedur Pemasangan Berbasis Kunci untuk penggunaan.

Oktet Jenis data Deskripsi Nilai
0 uint8 Jenis pesan Salah satu dari:
  • 0x02 = Kunci Sandi Pencari Kerja
  • 0x03 = Kunci Sandi Penyedia
1 - 3 unit32 Kunci sandi 6 digit bervariasi
4-15 tahun Nilai acak (garam) bervariasi

Tabel 2.2: Blok Kunci Sandi Mentah. Versi yang didekripsi dari Tabel 2.1.

Karakteristik: Kunci Akun

Setelah penyambungan, Pencari Sambungan Cepat akan menulis Kunci Akun ke Sambungan Cepat Penyedia.

Oktet Jenis data Deskripsi Nilai
0 - 15 uint128 Kunci akun (dienkripsi) bervariasi

Setelah mendapatkan permintaan tulis, Penyedia Sambungan Cepat harus melakukan hal berikut:

  1. Dekripsi kunci akun menggunakan rahasia bersama yang dihasilkan dari langkah 4 di prosedur.
    • Untuk Penyedia yang memerlukan ikatan (umum):
      • Sebelum mendekripsi, verifikasi bahwa rahasia bersama telah digunakan untuk mendekripsi permintaan kunci sandi dari langkah 12. Jika langkah ini tidak berhasil menggunakan rahasia, abaikan tulisan ini dan keluar.
    • Pada tahap ini, rahasia bersama (K dalam prosedur) tidak akan digunakan lagi untuk penyandingan ini. Setiap permintaan yang dienkripsi dengan kunci ini tanpa memulai ulang prosedur harus ditolak.
  2. Pastikan nilai yang didekripsi dimulai dengan 0x04. Jika tidak, abaikan tulis dan berhenti.
  3. Periksa apakah daftar Kunci Akun yang dipertahankan memiliki ruang untuk kunci baru dengan sejumlah nilai.
  4. Jika tidak, hapus nilai yang paling terakhir digunakan dari daftar.
  5. Tambahkan nilai baru ke daftar.

Kunci Akun dalam daftar digunakan selama Penyambungan Berbasis Kunci.

Karakteristik: Revisi Firmware

Karakteristik ini memungkinkan Pencari untuk membaca revisi firmware dari Penyedia layanan sesuai kebutuhan. Metode ini harus selalu menampilkan data berikut:

Oktet Jenis data Deskripsi Nilai
0 - var utf8s Kode revisi firmware bervariasi

Ini harus dienkapsulasi ke satu string utf8 meskipun ada lebih dari satu (misalnya, 3 firmware untuk earbud kiri, earbud kanan, dan casing.) pada Provider. Penyedia juga dapat menampilkan string tertentu untuk kasus khusus:

  1. status-update: jika Penyedia sedang mengupdate ke firmware baru. Atau, Penyedia dapat mengembalikan versi firmware yang disiapkan.

  2. status-abnormal: jika Penyedia dalam keadaan tidak normal. Sebagai contoh, gagal berfungsi karena pembaruan firmware gagal. Nilai ini akan menyebabkan Pencari untuk menampilkan pesan guna memberi tahu pengguna bahwa pesan harus diperbarui sekarang.

Penyedia harus membatasi akses ke karakteristik Revisi Firmware hanya untuk mencegah pelacakan perangkat. Pembatasan yang disarankan:

  • perangkat dengan ikatan harus memiliki akses kapan saja
  • perangkat apa pun harus memiliki akses ketika Penyedia dapat ditemukan

Karakteristik: Data Tambahan

Layanan ini harus memiliki karakteristik berikut.

Karakteristik Layanan Sambungan Cepat Dienkripsi Izin UUID
Data Tidak Tulis dan beri tahu FE2C1237-8366-4814-8EB0-01DE32100BEA
Karakteristik Layanan Sambungan Cepat lama (target tidak akan digunakan lagi pada 1/1/2021) Dienkripsi Izin UUID
Data Tidak Tulis dan beri tahu 0x1237

Sebelum menulis atau memberi tahu karakteristik ini, harus ada melalui karakteristik FE2C1234-8366-4814-8EB0-01DE32100BEA untuk memiliki rahasia bersama. AES-CTR akan digunakan untuk mengenkripsi data yang mengalir melalui karakteristiknya, yang algoritmanya ditentukan di bawah ini. Mode ini lebih aman di seluruh data yang melampaui satu blok 16 byte. HMAC-SHA256 akan digunakan untuk memastikan integritas data, seperti yang dijelaskan di bawah ini.

Oktet Deskripsi Nilai
0 - 7 8 byte pertama HMAC-SHA256. bervariasi
8-15 tahun Nonce, digunakan oleh enkripsi AES-CTR. bervariasi
16 - var Data terenkripsi. bervariasi

Tabel 3.1: Paket Data yang dikirim oleh Penyedia kepada Pencari Kerja melalui diberi tahu atau dikirim oleh Pencari Kerja kepada Penyedia melalui tulisan.

Oktet Jenis data Deskripsi Nilai
0 - var byte array Data bervariasi, lakukan dekode menurut ID Data Tabel 1.2.2:
  • 0x01(nama yang dipersonalisasi): utf8s

Tabel 3.2: Data mentah. Didekripsi dari data terenkripsi di Tabel 3.1.

Saat pemberitahuan diminta (misalnya, meminta nama yang dipersonalisasi melalui Bit 2 dalam Tabel 1.2.1), Penyedia Sambungan Cepat harus melakukan hal berikut:

  1. Buat 8 byte acak secara kriptografis untuk Nonce.
  2. Mengenkripsi data menggunakan AES-CTR, di mana setiap blok 16 byte dihasilkan menggunakan

    encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    di mana

    1. Kunci AES adalah rahasia bersama dari langkah 4 di prosedur.
    2. clearBlock[i] adalah blok 16-byte yang dimulai dari data [i * 16]. Terakhir dapat berukuran kurang dari 16 byte.
  3. Jalankan concat(encryptedBlock[0], encryptedBlock[1],...) untuk membuat Data Terenkripsi.

  4. Buat HMAC-SHA256 dengan

    sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
    

    di mana

    1. K dihasilkan oleh concat(shared_secret, ZEROs 48 byte), shared_secret adalah dari langkah 4 di prosedur.
    2. opad adalah padding luar 64 byte, terdiri dari byte berulang yang dinilai 0x5C.
    3. ipad adalah padding dalam 64 byte, yang terdiri dari byte berulang yang dinilai 0x36.
  5. Ambil 8 byte pertama dari HMAC-SHA256 sebagai awalan Data paket tersebut.

Setelah mendapatkan permintaan tulis, Penyedia Sambungan Cepat harus melakukan hal berikut:

  1. Verifikasi integritas data dengan memeriksa 8 byte pertama dari HMAC-SHA256.
  2. Mendekripsi Data terenkripsi menggunakan AES-CTR, yang setiap bloknya dibuat menggunakan

    clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    di mana

    1. terenkripsiBlock[i] adalah blok 16 byte yang dimulai dari protected_data[i * 16]. Blok terakhir bisa kurang dari 16 byte.
    2. Kunci AES dibuat atau diidentifikasi dari handshake, misalnya
      1. di penamaan alur 1, berasal dari ECDH, dan tidak digunakan lagi untuk penyandingan ini. Setiap permintaan yang dienkripsi dengan kunci ini tanpa memulai ulang prosedurnya seharusnya ditolak.
      2. di nama alur 2, itu adalah kunci akun.
  3. Lakukan concat(clearBlock[0], clearBlock[1],...) untuk membuat data mentah.