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

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

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

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

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

где

  1. K генерируется с помощью concat (ключ учетной записи, 48-байтовые НУЛИ).
  2. сообщение — это дополнительные данные потока сообщений.
  3. nonce генерируется concat(session_nonce, message_nonce); Nonce сеанса и nonce сообщения определены в следующем разделе.
  4. opad — это 64 байта внешнего заполнения, состоящего из повторяющихся байтов со значением 0x5C .
  5. ipad — это 64 байта внутреннего заполнения, состоящего из повторяющихся байтов со значением 0x36 .

Nonce сеанса и nonce сообщения

Чтобы предотвратить атаку повторного воспроизведения, поставщику необходимо убедиться, что одноразовый номер не повторяется. Поскольку поддерживать синхронизацию часов или счетчиков как на поставщике, так и на поисковике непросто, поставщик генерирует одноразовый номер сеанса (для каждого соединения), который используется всеми сообщениями во время соединения, в то время как Искатель генерирует одноразовый номер сообщения (для каждого сообщения), который генерируется случайным образом для каждого сообщения. Nonce для генерации MAC каждого сообщения представляет собой комбинацию nonce сеанса и nonce сообщения, т.е. concat(session_nonce, message_nonce).

Добавляем одноразовый номер сеанса в группу событий «Информация об устройстве»:

Имя группы сообщений Ценить
Информационное событие об устройстве 0x03
Кодовое имя сообщения Ценить
одноразовый сеанс сеанса 0x0A

Nonce сеанса должен быть сгенерирован и отправлен Искателю при подключении RFCOMM:

Октет Тип данных Описание Ценить
0 uint8 Информационное событие об устройстве 0x03
1 uint8 одноразовый сеанс сеанса 0x0A
2–3 uint16 Дополнительная длина данных 0x0008
4–11 одноразовый сеанс сеанса варьируется

Чтобы отправить сообщение, когда требуется MAC, Seeker отправит сообщение nonce и MAC вместе с сообщением.

Октет Тип данных Описание Ценить
0 uint8 Группа сообщений варьируется
1 uint8 Код сообщения варьируется
2–3 uint16 Длина дополнительных данных(длина дополнительных данных + 16) варьируется
4 - н Дополнительная информация варьируется
п + 1 - н + 8 Номер сообщения варьируется
п + 9 - н + 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. message — это дополнительные данные (исключая nonce сообщения и MAC) потока сообщений.

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