Код аутентификации сообщения
Потоки сообщений используются для настройки переключения звука (см. Сообщения переключения звука ). Для этих важных настроек провайдеру необходимо убедиться, что сообщение отправляется модулем GMSCore (модуль Fast Pair), а не каким-либо другим приложением на устройстве Seeker.
Сгенерировать MAC-адрес (код аутентификации сообщения).
FP Seeker добавляет код аутентификации сообщения для сообщений конфигурации устройства, используя HMAC-SHA256. MAC-код сообщения состоит из первых 8 байтов:
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))
где
- K генерируется с помощью функции concat(account key, 48-byte ZEROs).
- Сообщение — это дополнительные данные потока сообщений.
- Nonce генерируется с помощью функции concat(session_nonce, message_nonce); значения nonce для сессии и nonce для сообщения определены в следующем разделе.
- opad — это 64 байта внешнего заполнения, состоящего из повторяющихся байтов со значением
0x5C. - iPad содержит 64 байта внутреннего заполнения, состоящего из повторяющихся байтов со значениями
0x36.
Сессионный одноразовый код и одноразовый код сообщения
Для предотвращения атаки повторного воспроизведения провайдеру необходимо гарантировать, что nonce не будет повторяться. Поскольку поддержание синхронизации часов или счетчика как на провайдере, так и на искателе не является простой задачей, провайдер генерирует nonce сессии (для каждого соединения), который используется совместно со всеми сообщениями во время соединения, в то время как искатель генерирует nonce сообщения (для каждого сообщения), который генерируется случайным образом для каждого сообщения. Nonce для генерации MAC каждого сообщения представляет собой комбинацию nonce сессии и nonce сообщения, т.е. concat(session_nonce, message_nonce).
Мы добавляем одноразовый код сессии в группу событий «Информация об устройстве»:
| Название группы сообщений | Ценить |
|---|---|
| событие получения информации об устройстве | 0x03 |
| Кодовое имя сообщения | Ценить |
|---|---|
| Номер сессии | 0x0A |
Сессионный nonce должен быть сгенерирован и отправлен искателю при установлении соединения с потоком сообщений:
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | событие получения информации об устройстве | 0x03 |
| 1 | uint8 | Номер сессии | 0x0A |
| 2 - 3 | uint16 | Дополнительная длина данных | 0x0008 |
| 4 - 11 | сеанс nonce | варьируется |
Для отправки сообщения, когда требуется MAC-адрес, Seeker отправляет сообщение в виде одноразового числа (nonce) и MAC-адреса вместе с сообщением.
| Октет | Тип данных | Описание | Ценить |
|---|---|---|---|
| 0 | uint8 | Группа сообщений | варьируется |
| 1 | uint8 | Код сообщения | варьируется |
| 2 - 3 | uint16 | Дополнительная длина данных (дополнительная длина данных + 16) | варьируется |
| 4 - н | Дополнительные данные | варьируется | |
| n + 1 - n + 8 | Сообщение nonce | варьируется | |
| n + 9 - n + 16 | код аутентификации сообщения | варьируется |
Проверьте MAC-адрес (код аутентификации сообщения).
После получения сообщения с кодом аутентификации, поставщик услуг должен проверить его, используя ту же функцию, что и при генерации кода. То есть, полученный MAC-код должен совпадать с первыми 8 байтами
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))
где:
- Ключ K генерируется методом
concat(account key, 48-byte ZEROs), и поставщик услуг должен пройтись по всем сохраненным ключам учетных записей для проверки MAC-адреса. - Сообщение представляет собой дополнительные данные (за исключением одноразового кода сообщения и MAC-адреса) потока сообщений.
Если MAC-адрес верен, то провайдер должен следовать инструкциям сообщения. В противном случае провайдер должен отправить NAK с причиной ошибки 0x3 — не разрешено из-за неверного кода аутентификации сообщения.