Message Authentication Code

Aliran pesan digunakan untuk mengonfigurasi Pengalihan audio, lihat Pesan pengalihan audio. Untuk konfigurasi penting ini, Penyedia harus memastikan bahwa pesan dikirim oleh GMSCore (modul Sambungan Cepat) dan bukan aplikasi lain di Seeker.

Membuat MAC (kode autentikasi pesan)

FP Seeker menambahkan kode autentikasi pesan untuk pesan konfigurasi perangkat menggunakan HMAC-SHA256. MAC pesan terdiri dari 8 byte pertama dari:

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

di mana

  1. K dihasilkan oleh concat(kunci akun, 48-byte ZEROs).
  2. message adalah data tambahan dari aliran Message.
  3. nonce dibuat dengan concat(session_nonce, message_nonce); nonce sesi dan nonce pesan ditentukan di bagian berikut.
  4. opad adalah padding luar 64 byte, yang terdiri dari byte berulang dengan nilai 0x5C.
  5. ipad adalah padding dalam 64 byte, yang terdiri dari byte berulang yang bernilai 0x36.

Nonce sesi dan nonce pesan

Untuk mencegah serangan replay, Penyedia harus memastikan bahwa nonce tidak diulang. Karena mempertahankan sinkronisasi penghitung atau jam di Penyedia dan Pencari tidaklah mudah, Penyedia akan membuat nonce sesi (per koneksi), yang dibagikan dengan semua pesan selama koneksi, sementara Pencari akan membuat nonce pesan (per pesan), yang dibuat secara acak untuk setiap pesan. Nonce untuk membuat MAC setiap pesan adalah kombinasi nonce sesi dan nonce pesan, yaitu concat(session_nonce, message_nonce).

Kita menambahkan nonce sesi ke grup peristiwa Informasi perangkat:

Nama Grup Pesan Nilai
Peristiwa informasi perangkat 0x03
Nama Kode Pesan Nilai
Nonce sesi 0x0A

Nonce sesi harus dibuat dan dikirim ke Seeker saat Message Stream terhubung:

Octet Jenis Data Deskripsi Nilai
0 uint8 Peristiwa informasi perangkat 0x03
1 uint8 Nonce sesi 0x0A
2 - 3 uint16 Panjang data tambahan 0x0008
4 - 11 nonce sesi bervariasi

Untuk mengirim pesan saat MAC diperlukan, Seeker akan mengirim nonce pesan dan MAC bersama dengan pesan.

Octet Jenis Data Deskripsi Nilai
0 uint8 Grup pesan bervariasi
1 uint8 Kode pesan bervariasi
2 - 3 uint16 Panjang data tambahan(panjang data tambahan + 16) bervariasi
4 - n Tambahan data bervariasi
n + 1 - n + 8 Nonce pesan bervariasi
n + 9 - n + 16 Kode autentikasi pesan bervariasi

Memverifikasi MAC (kode autentikasi pesan)

Setelah menerima pesan dengan kode autentikasi pesan, Penyedia harus memverifikasinya menggunakan fungsi yang sama dengan fungsi pembuatan. Artinya, MAC yang diterima harus sama dengan 8 byte pertama

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))

dengan:

  1. K dibuat oleh concat(account key, 48-byte ZEROs), dan Provider akan menjelajahi semua kunci akun yang disimpan untuk memverifikasi MAC.
  2. message adalah data tambahan (tidak termasuk nonce pesan dan MAC) dari aliran Pesan.

Jika MAC sudah benar, Penyedia harus mengikuti petunjuk dalam pesan. Jika tidak, Penyedia akan mengirimkan NAK dengan alasan error, 0x3 - tidak diizinkan karena kode autentikasi pesan salah.