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 Dibaca 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 Dibaca 0x2A26

Karakteristik: ID Model

Karakteristik ini memungkinkan Pencari Kerja membaca ID model sesuai kebutuhan, di luar saat perangkat sedang beriklan dalam mode dapat ditemukan. Fungsi ini akan selalu menampilkan data berikut:

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

Karakteristik: Pasangan Berbasis Kunci

Karakteristik ini mengontrol prosedur Penyambungan Berbasis Kunci. Dalam prosedur ini, tingkat kepercayaan tertentu ditetapkan dengan memverifikasi bahwa Pencari Kerja dan Penyedia memiliki kunci yang dibagikan sebelumnya. Kuncinya berbeda pada setiap kasus:

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

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

    Perhatikan bahwa saat dalam mode penyambungan, Penyedia tentu saja juga dapat menyambungkan dengan cara yang biasa, misalnya, untuk menyambungkan dengan perangkat yang tidak mendukung Sambungan Berbasis Kunci Sambungan Cepat.

  • Kasus 2: Pre-shared key adalah salah satu kunci akun.

    • Penyedia biasanya tidak dalam mode penyambungan. (Namun, ini bukan persyaratan—Penyedia harus mendukung penggunaan kunci akun bahkan saat dalam mode penyambungan.)
    • Pencari dan Penyedia memverifikasi bahwa satu sama lain memiliki kunci akun.

Karena kedua kasus tersebut sangat mirip, kecuali menggunakan pre-shared key, keduanya akan digabungkan dalam prosedur.

Format Data

Lihat prosedur tentang cara 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 Kerja.

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 Kerja meminta Penyedia untuk memulai ikatan, dan permintaan ini berisi alamat BR/EDR Pencari Kerja. 0 sebaliknya.
  • Bit 2: 1 jika Pencari Kerja 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 mendatang, 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 Kerja bervariasi Hanya ada jika Flags Bit 1 atau 3 ditetapkan
n—15 Nilai acak (garam) bervariasi Wajib

Tabel 1.2.1: Permintaan Mentah (jenis 0x00). Didekripsi dari Permintaan Terenkripsi 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 Bit Tanda 0 ditetapkan
9 uint8 Kode pesan bervariasi Wajib jika Bit Tanda 0 ditetapkan
10 uint8 Tergantung pada Tanda:
  • Bit 0 disetel: Panjang data tambahan, kurang dari 6
  • Bit 1 ditetapkan: ID Data
bervariasi Wajib jika Bit Flag 0 atau 1 ditetapkan
11 - n Data tambahan bervariasi Opsional
n—15 Nilai acak (garam) bervariasi Wajib

Tabel 1.2.2: Permintaan Mentah (tipe 0x10). Didekripsi dari Permintaan Terenkripsi di Tabel 1.1.

Oktet Jenis data Deskripsi Nilai
0 uint8 Jenis pesan 0x01 = Respons Penyambungan Berbasis Tombol
1 - 6 uint48 Alamat publik (BR/EDR) penyedia bervariasi
7 - 15 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 pemberitahuan.

Karakteristik: Kunci sandi

Karakteristik ini digunakan selama prosedur Penyambungan Berbasis Kunci.

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

Tabel 2.1: Blok Kunci Sandi Terenkripsi. Lihat prosedur Penyambungan 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 Nilai acak (garam) bervariasi

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

Karakteristik: Kunci Akun

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

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

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

  1. Dekripsi kunci akun menggunakan rahasia bersama yang dihasilkan dari langkah 4 dalam prosedur.
    • Untuk Penyedia yang memerlukan bonding (umum):
      • Sebelum mendekripsi, pastikan bahwa rahasia bersama digunakan untuk mendekripsi permintaan kunci sandi dari langkah 12. Jika langkah ini tidak berhasil menggunakan rahasia ini, abaikan penulisan ini dan keluar.
    • Pada tahap ini, rahasia bersama (K dalam prosedur) tidak akan digunakan lagi untuk penyambungan ini. Setiap permintaan yang dienkripsi dengan kunci ini tanpa memulai ulang prosedur harus ditolak.
  2. Pastikan nilai yang didekripsi diawali dengan 0x04. Jika tidak, abaikan tulis dan berhenti.
  3. Periksa apakah daftar Kunci Akun yang dipertahankan memiliki ruang untuk nilai baru.
  4. Jika tidak, hapus nilai yang paling lama 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 Kerja membaca revisi firmware Penyedia sesuai kebutuhan. Kode ini akan selalu menampilkan data berikut:

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

Ini harus dienkapsulasi ke string utf8 tunggal meskipun ada lebih dari satu firmware (misalnya 3 firmware untuk bud kiri, bud kanan, dan case.) di Penyedia. Penyedia juga bisa menampilkan string spesifik untuk kasus khusus:

  1. update status: jika Penyedia sedang mengupdate ke firmware baru. Atau, Penyedia bisa menampilkan versi firmware bertahap.

  2. status-abnormal: jika Penyedia dalam keadaan tidak normal. Misalnya, kode tersebut tidak berfungsi karena update firmware gagal. Nilai ini akan menyebabkan Pencari Kerja menampilkan pesan yang memberi tahu pengguna bahwa pesan tersebut harus diperbarui sekarang.

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

  • perangkat terikat harus memiliki akses kapan saja
  • perangkat apa pun harus memiliki akses saat 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 digunakan lagi pada 1/1/2021) Dienkripsi Izin UUID
Data Tidak Tulis dan beri tahu 0x1237

Sebelum menulis atau memberitahukan karakteristik ini, harus ada handshake melalui FE2C1234-8366-4814-8EB0-01DE32100BEA karakteristik untuk memiliki rahasia bersama. AES-CTR akan digunakan untuk mengenkripsi data yang mengalir melalui karakteristik ini, 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, yang juga didefinisikan di bawah ini.

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

Tabel 3.1: Paket Data, yang dikirim oleh Penyedia kepada Pencari Kerja melalui pemberitahuan atau dikirim oleh Pencari Kerja ke Penyedia melalui surat.

Oktet Jenis data Deskripsi Nilai
0 - var byte array Data bervariasi, mendekodenya sesuai dengan ID Data Tabel 1.2.2:
  • 0x01(nama dipersonalisasi): utf8s

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

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

  1. Membuat 8 byte acak secara kriptografi untuk Nonce.
  2. Mengenkripsi data menggunakan AES-CTR, dengan setiap blok 16 byte dibuat menggunakan

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

    di mana

    1. Kunci AES adalah rahasia bersama dari langkah 4 dalam prosedur.
    2. clearBlock[i] adalah blok 16-byte yang dimulai dari data[i * 16]. Blok terakhir bisa kurang dari 16 byte.
  3. Lakukan concat(encryptedBlock[0], encryptedBlock[1],...) untuk membuat Data yang 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, 48-byte ZEROs), shared_secret dimulai dari langkah 4 dalam prosedur.
    2. opad adalah padding luar berukuran 64 byte, yang terdiri dari byte berulang bernilai 0x5C.
    3. ipad adalah padding dalam berukuran 64 byte, yang terdiri dari byte berulang dengan nilai 0x36.
  5. Ambil 8 byte pertama dari HMAC-SHA256 sebagai awalan Paket data.

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

  1. Verifikasi integritas data dengan memeriksa 8 byte pertama HMAC-SHA256.
  2. Dekripsi Data terenkripsi menggunakan AES-CTR, dengan

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

    di mana

    1. terenkripsiBlock[i] adalah blok 16-byte yang dimulai dari encryption_data[i * 16]. Blok terakhir bisa kurang dari 16 byte.
    2. Kunci AES dibuat atau diidentifikasi dari handshake, misalnya
      1. dalam alur penamaan 1, nama tersebut berasal dari ECDH, dan tidak akan digunakan lagi untuk pasangan ini. Setiap permintaan yang datang terenkripsi dengan kunci ini tanpa memulai ulang prosedur harus ditolak.
      2. dalam alur penamaan 2, ini adalah kunci akun.
  3. Jalankan concat(clearBlock[0], clearBlock[1],...) untuk membuat data mentah.