Код аутентификации сообщения
Потоки сообщений используются для настройки переключения аудио, см. Сообщения переключения аудио . Для этих важных конфигураций поставщику необходимо убедиться, что сообщение отправлено GMSCore (модулем быстрого соединения), а не каким-либо другим приложением на Seeker.
Сгенерировать MAC (код аутентификации сообщения)
FP Seeker добавляет код аутентификации сообщения для сообщений конфигурации устройства с использованием HMAC-SHA256. MAC сообщения состоит из первых 8 байтов:
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))
где
- K генерируется с помощью concat (ключ учетной записи, 48-байтовые НУЛИ).
- сообщение — это дополнительные данные потока сообщений.
- nonce генерируется concat(session_nonce, message_nonce); Nonce сеанса и nonce сообщения определены в следующем разделе.
- opad — это 64 байта внешнего заполнения, состоящего из повторяющихся байтов со значением
0x5C
. - 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)))))
где:
- K генерируется с помощью
concat(account key, 48-byte ZEROs)
, и Поставщик должен просмотреть все сохраненные ключи учетной записи для проверки MAC. - message — это дополнительные данные (исключая nonce сообщения и MAC) потока сообщений.
Если MAC правильный, то Провайдер должен следовать инструкциям сообщения. В противном случае Провайдер отправит NAK с указанием причины ошибки: 0x3 – запрещено из-за неправильного кода аутентификации сообщения.