Протокол Bluetooth GATT (Generic Attribute Profile) — один из стандартных протоколов обмена данными между устройствами Bluetooth. GATT — это протокол, основанный на моделях обслуживания и характеристик, используемый для описания и передачи данных между устройствами.
ГАТТ в основном включает в себя следующие части:
Связь GATT основана на протоколе ATT, который представляет собой двусторонний протокол на основе ответов, используемый для передачи данных между службами и функциями GATT. Протокол ATT обеспечивает такие операции, как чтение, запись и уведомление, а также обработку для обеспечения целостности данных и устранения ошибок.
В GATT передача данных между устройствами обычно состоит из следующих шагов:
Устройства используют протокол, называемый протоколом атрибутов (ATT), для доступа к атрибутам в таблице ATTRIBUTE подключенного удаленного устройства, следуя правилам, определенным различными процедурами GATT, такими как чтение значений характеристик и запись значений характеристик.
ГАТТ определяет две роли. Клиент GATT отправляет команды ATT (ответ не требуется) и запросы (требуется ответ) на сервер GATT. Сервер GATT принимает и обрабатывает команды и запросы, полученные от клиентов GATT. Сервер GATT также может отправлять клиенту GATT различные типы PDU ATT, обычно известные как уведомления, инструкции и ответы.
Каждое свойство в таблице свойств включает набор разрешений свойств. Разрешения на свойство определяют правила, касающиеся доступа, который подключающийся клиент может иметь или не иметь к свойству (например, возможность читать его значение), а также любые условия, которые могут применяться перед предоставлением доступа. Например, разрешения свойства могут указывать, что клиенты могут читать его значение, но только для аутентифицированных и зашифрованных ссылок. Разрешения на атрибуты также применяются к серверам ATT и использованию ими уведомлений и инструкций для связи с клиентами.
PDU ATT передаются через соединения LE-ACL, поэтому перед выполнением каких-либо процедур GATT и обменом PDU ATT устройство должно сначала установить соединение. Обычно после установления соединения клиент GATT продолжает выполнять серию процессов, называемых процессом обнаружения. Обнаружение включает в себя определение содержимого таблицы свойств удаленного устройства как объектов служб, характеристик и дескрипторов, а также связанных с ними свойств, таких как значения дескрипторов, типы и разрешения. Обратите внимание, что разрешения на атрибуты не ограничивают возможности клиента выполнять процесс обнаружения.
Иерархическая структура сервисов, характеристик и дескрипторов представлена на рисунке ниже.
Если предпринята попытка получить доступ к свойству и условия для соответствующего разрешения свойства не выполняются, протокол свойства определяет несколько кодов ошибок, которые должны быть возвращены клиентскому устройству, чтобы указать, почему запрос на доступ отклонен. Примеры включают недостаточное шифрование, недостаточную аутентификацию и недостаточный размер ключа шифрования.
На всех серверах ГАТТ требуются две специальные службы. Это универсальная служба доступа и универсальная служба атрибутов.
Безопасность и удобство использования GATT
GATT (Generic Attribute Profile) — это протокол для подключения и связи с устройствами с низким энергопотреблением. Безопасность и удобство использования — два важных фактора при разработке приложений GATT.
Таким образом, чтобы обеспечить безопасность приложений GATT и обеспечить удобство работы пользователей, необходимо учитывать такие факторы, как аутентификация, шифрование и предотвращение атак повторного воспроизведения, а конструкция протокола должна оставаться простой, масштабируемой и надежной.
При доступе к свойству проверяются разрешения свойства. Если условия безопасности, указанные в разрешении атрибута, не выполняются, доступ запрещается и возвращается ответ PDU ATT_ERROR_RSP, содержащий код ошибки. Если сервер запрещает доступ к свойству, соединение обычно не закрывается. Это позволяет клиентам обрабатывать ошибки путем повышения безопасности, чтобы последующие попытки доступа были успешными. Например, если попытка прочитать значение характеристики приводит к возврату ошибки «недостаточное шифрование», клиент может обработать эту ошибку, инициировав процесс сопряжения и обновив соединение для использования шифрования после завершения. Пользователю может потребоваться еще раз взаимодействовать с устройством, чтобы повторить неудавшуюся операцию.
Недостаток обработки ошибок из-за недостаточных разрешений безопасности заключается в том, что нормальный поток приложения прерывается и, следовательно, взаимодействие с пользователем не является идеальным. Однако базовая спецификация Bluetooth (начиная с версии 5.3) не предоставляет альтернативной стратегии безопасной обработки ошибок.
Базовая спецификация Bluetooth версии 5.4 определяет новую функцию под названием LE Gatt Security Level Feature (SLC). Функция SLC позволяет клиентам определять условия безопасности сервера GATT, которые должны быть соблюдены, если требуется предоставить доступ ко всем функциям GATT. Важно отметить, что это позволяет определить эти условия перед доступом к свойствам, используемым приложением. Предварительная проверка требований к доступу может улучшить взаимодействие с пользователем, не прерывая работу приложения из-за проблем с уровнем безопасности.
Устройства могут включать характеристики SLC в услуги обязательного профиля универсального доступа. Поэтому его включение не является обязательным, но рекомендуется, учитывая улучшение пользовательского опыта его использования.
Характеристика SLC обеспечивает доступ к своему значению только для чтения без дополнительных ограничений безопасности, таких как необходимость зашифрованного соединения.
Уровни безопасности Bluetooth LE выражаются в виде режимов и уровней.
Режим безопасности LE 1 имеет следующие уровни безопасности:
Режим безопасности LE 2 имеет два уровня безопасности:
Режим безопасности LE 3 имеет три уровня безопасности:
Только режим безопасного соединения LE (режим безопасности LE 1, уровень 4)
Может существовать более одного режима и комбинации уровней безопасности, отвечающих требованиям безопасности для всех атрибутов сервера. Следовательно, значение атрибута SLC состоит из массива из одного или нескольких полей требований уровня безопасности. Поле требования уровня безопасности имеет тип uint8[2], причем первое значение uint8 содержит прямое представление режима безопасности (например, 0x01 для режима безопасности 1), а второе представляет уровень безопасности (например, 0x04 для уровня безопасности 4). ).
Клиент использует атрибут SLC, считывая значение атрибута SLC и сравнивая текущий режим и уровень безопасности со значением, указанным в поле «Требуемый уровень безопасности». Если текущий режим и уровень безопасности оказываются недостаточными для использования всех функций GATT, поддерживаемых сервером, клиентское приложение в это время предпримет шаги по исправлению ситуации, обычно путем вызова процедуры обновления безопасности канала.