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
- K dihasilkan oleh concat(kunci akun, 48-byte ZEROs).
- message adalah data tambahan dari aliran Message.
- nonce dibuat dengan concat(session_nonce, message_nonce); nonce sesi dan nonce pesan ditentukan di bagian berikut.
- opad adalah padding luar 64 byte, yang terdiri dari byte berulang dengan nilai
0x5C. - 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:
- K dibuat oleh
concat(account key, 48-byte ZEROs), dan Provider akan menjelajahi semua kunci akun yang disimpan untuk memverifikasi MAC. - 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.