Код аутентификации сообщения

Потоки сообщений используются для настройки переключения звука (см. Сообщения переключения звука ). Для этих важных настроек провайдеру необходимо убедиться, что сообщение отправляется модулем GMSCore (модуль Fast Pair), а не каким-либо другим приложением на устройстве Seeker.

Сгенерировать MAC-адрес (код аутентификации сообщения).

FP Seeker добавляет код аутентификации сообщения для сообщений конфигурации устройства, используя HMAC-SHA256. MAC-код сообщения состоит из первых 8 байтов:

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

где

  1. K генерируется с помощью функции concat(account key, 48-byte ZEROs).
  2. Сообщение — это дополнительные данные потока сообщений.
  3. Nonce генерируется с помощью функции concat(session_nonce, message_nonce); значения nonce для сессии и nonce для сообщения определены в следующем разделе.
  4. opad — это 64 байта внешнего заполнения, состоящего из повторяющихся байтов со значением 0x5C .
  5. 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)))))

где:

  1. Ключ K генерируется методом concat(account key, 48-byte ZEROs) , и поставщик услуг должен пройтись по всем сохраненным ключам учетных записей для проверки MAC-адреса.
  2. Сообщение представляет собой дополнительные данные (за исключением одноразового кода сообщения и MAC-адреса) потока сообщений.

Если MAC-адрес верен, то провайдер должен следовать инструкциям сообщения. В противном случае провайдер должен отправить NAK с причиной ошибки 0x3 — не разрешено из-за неверного кода аутентификации сообщения.