Безопасная передача данных в сети ZigBee на примере радиомодулей XBee


PDF версия

Использование беспроводных сетей передачи данных в таких применениях как сбор данных со счетчиков энергии, безопасность и промышленная телеметрия требуют обеспечить защиту передаваемой информации и предотвратить несанкционированное подключение нежелательных устройств. В статье рассматриваются практические вопросы шифрования данных в ZigBee-сетях на примере популярных радиомодулей XBee компании Digi [1…4].

Безопасность данных в ZigBee

В сетях ZigBee предусмотрено несколько механизмов криптографической защиты данных (Security), все или некоторые из которых могут быть задействованы разработчиком:
– шифрование AES 128-бит;
– 2 типа ключей шифрования;
– поддержка центра доверия (Trust Center);
– механизмы проверки целостности сообщения (Integrity) и проверки его подлинности (Authentication).
Спецификация ZigBee включает три режима безопасности (Security modes) — локальный (residential), стандартный и повышенный. Локальная безопасность была впервые введена в стандарте ZigBee 2006. Она требует, чтобы ключ шифрования был предустановлен на всех устройствах, подключающихся к сети. Стандартный режим безопасности добавляет некоторые опциональные возможности, а также вводит шифрование на уровне приложения (APS layer link key). Повышенная безопасность предусматривает проверку подлинности и некоторые другие усовершенствования, которые в настоящее время не поддерживаются производителями ZigBee-стеков в достаточной мере.
Модули XBee ZB, в основном, поддерживают стандартный режим безопасности. В то же время, конечные устройства, поддерживающие локальный режим безопасности, могут подключаться и взаимодействовать с узлами сети, работающими со стандартным режимом безопасности. Далее рассматриваются различные аспекты шифрования данных именно для режима стандартной безопасности.
Безопасность в ZigBee используется как на сетевом уровне, так и на уровне приложения. Передаваемая по эфиру информация шифруется с помощью алгоритма AES с длиной ключа 128 бит. В качестве ключей шифрования применяется сетевой ключ (Network Key) и опциональный связной ключ (Link Key). Ключи шифрования представляют собой некоторую 128-битную последовательность (16 байт), которая вручную загружается в модуль или формируется им самостоятельно. Извлечь ключ из модуля невозможно. Только те два ZigBee-узла, которые содержат одинаковые ключи шифрования, могут взаимодействовать между собой. Роутеры и конечные устройства, которые работают в сети с включенной безопасностью, должны получить правильные ключи шифрования.
Центр доверия в сети ZigBee с безопасностью авторизует подключаемые к сети узлы и выполняет рассылку ключей шифрования. Обычно в качестве центра доверия выступает координатор.

Безопасность на сетевом уровне

Сетевой ключ применяется для шифрования пользовательских данных (Application Data) и дополнительной информации верхнего уровня (APS Layer). APS Layer — это надстройка над полезными данными, связанная с понятием «профилей» в ZigBee (включает информацию о профиле, кластере и конечных точках). Кроме защиты собственно полезной нагрузки (Payload), безопасность на сетевом уровне обеспечивается шифрованием данных, связанных со служебными сетевым операциями, такими как прокладка маршрутов и команды уровней APS и ZDO. Сетевая безопасность не распространяется на MAC-уровень. Такая информация как PAN ID или адреса MAC-уровня не шифруются. Это означает, что любое устройство 802.15.4 может корректно принять пакет, передаваемый в ZigBee-сети с включенной безопасностью, однако получить доступ к данным, расположенным за MAC-заголовком, ему не удастся — там оно обнаружит непонятный набор битов. Если в ZigBee-сети включен режим безопасности, то все пакеты с данными передаются только в зашифрованном виде с помощью 128-бит алгоритма AES (см. рис. 1).

 

Рис. 1. Шифрование на сетевом уровне

Сетевой заголовок зашифрованного пакета включает 32-бит счетчик фреймов. Каждый узел в сети поддерживает собственный 32-бит счетчик фреймов, который увеличивается на 1 при отправке любого пакета. Дополнительно, каждый узел отслеживает счетчики фреймов всех соседних узлов. Если получаемый пакет от соседнего узла имеет номер фрейма меньший, чем был до этого, такой пакет отбрасывается. Счетчики фреймов используются для противостояния т.н. взлому защиты путем замещения оригинала (Replay attacks). Счетчик фреймов последовательно увеличивается до своего максимального значения 0хFFFFFFFF и далее не изменяется. При достижении его максимального значения узел не сможет более отправлять пакеты. В связи с большой разрядностью переполнение счетчика фреймов маловероятно — при отправке сообщений каждую секунду насыщение счетчика произойдет через 136 лет. Для поддержания высокой степени защиты обнуление счетчика фреймов возможно только лишь при смене сетевого ключа шифрования.
Сетевой заголовок, APS-заголовок и полезные данные дополняются сертификатом подлинности. Над содержимым этих полей выполняется хеширование, и к пакету добавляется код целостности сетевого сообщения (4-байт Network Message Integrity Code, nMIC). nMIC-код позволяет получателю быть уверенным в том, что сообщение не было изменено. nMIC-код обеспечивает целостность сообщений в сети ZigBee (message integrity). Если узел получает пакет с nMIC-кодом, не соответствующим принятому сообщению, такой пакет отбрасывается.
В безопасной ZigBee-сети пакет дешифруется и шифруется при каждой ретрансляции на всем маршруте следования. Промежуточный узел дешифрует пакет и проверяет его целостность. Если пакет предназначен не этому узлу, то данные вновь зашифровываются и аутентифицируются на основе счетчика фреймов и сетевого адреса (входят в сетевой заголовок) промежуточного узла. Дополнительные операции в сети с безопасностью увеличивают задержки при доставке сообщений. Кроме того, максимальный объем полезных данных в пакете уменьшается на 18 байт за счет добавления счетчика фреймов, адреса источника, MIC-кода и некоторых других служебных байтов.

Безопасность на уровне приложения

Безопасность на уровне приложения (APS layer security) позволяет зашифровать полезные данные с помощью ключа шифрования, известному только отправителю и получателю пакета. В то время как сетевое шифрование на базе сетевого ключа применяется ко всем сообщениям внутри сети, шифрование на уровне приложения является необязательным и может использоваться только при отсылке конкретного пакета. Шифрование на уровне приложения не может применяться к широковещательным рассылкам. Шифрование полезных данных и формирование кода целостности сообщения производится на основе 128-бит алгоритма AES (см. рис. 2).

 

Рис. 2 . Шифрование на уровне приложения

Код целостности сообщения (APS Message Integrity Code, aMIC-код) в данном случае отличается от nMIC-кода, получаемого при шифровании на уровне сети (Network Message Integrity Code). Получатель сообщения не будет использовать принятый пакет, если вычисляемая им хеш-функция над полезными данными даст результат, отличный от aMIC-кода в самом пакете. При шифровании на уровне приложения используются два типа ключей — связной ключ для обмена данными с центром доверия и ключ шифрования данных приложения. Промежуточные узлы сети не могут получить доступ к этим данным, т.к. ключ шифрования данных приложения известен только отправителю и получателю. Использование безопасности на уровне приложения уменьшает максимальную величину полезных данных на 9 байт. На рисунке 3 приведена диаграмма пакета для случая одновременного использования безопасности на уровне сети и на уровне приложения.

 

Рис. 3 . Шифрование на уровне сети и приложения

 

Формирование ZigBee-сети с безопасностью

Координатор отвечает за выбор сетевого ключа шифрования. Сетевой ключ (Network key) может быть определен изначально (принудительно записан в координатор) либо выбран координаторам самостоятельно случайным образом. Обычно координатор выступает в роли центра доверия, поэтому он управляет формированием и раздачей связного ключа (Link key). Связной ключ может быть выбран случайным образом или предварительно записан в модуль. Каждое подключаемое к сети новое устройство должно получить сетевой ключ в процессе подсоединения к сети. Если подключаемое устройство имеет связной ключ (установлен принудительно), то тогда передача сетевого ключа происходит в зашифрованном виде — для шифрования используется предустановленный связной ключ. В противном случае передача сетевого ключа выполняется в открытом виде, однако центр доверия должен решить, отправлять или нет ключ в незашифрованном виде. Не рекомендуется использовать открытую отсылку сетевого ключа шифрования, т.к. это создает дыру в безопасности. Для обеспечения максимальной закрытости системы все узлы должны вводиться в сеть с предустановленным корректным связным ключом.

Шифрование данных в модулях XBee

Радиомодули XBee (см. рис. 4) содержат встроенный стек ZigBee Pro и поддерживают безопасную передачу данных. В прошивке ZB режим безопасности по умолчанию отключен (EE = 0). Если безопасность включена (EE = 1), то новый узел получает сетевой ключ в момент подсоединения к сети. Опционально можно использовать шифрование на уровне приложения. Для включения режима безопасности параметр EE должен быть установлен в 1. После установки параметра EE необходимо подать команду AC (применить настройки). При включении режима безопасности модуль выходит из существующей сети и пытается сформировать (координатор) или подключиться (роутер, конечное устройство) к новой сети. При EE = 1 все данные шифруются на основе сетевого ключа. Шифрование данных приводит к уменьшению максимального размера полезного сообщения. Команда NP позволяет узнать максимальный размер пакета, который возможен при текущих настройках параметров безопасности. Параметр EE должен быть установлен одинаково на всех модулях, работающих в одной сети. Это значение следует сохранить в энергонезависимой памяти с помощью команды WR.

 

Рис. 4. Радиомодули XBee

Координатор назначает сетевой ключ для всей сети. Команда NK используется для задания сетевого ключа на координаторе. С помощью команды NK можно записать сетевой ключ, однако считать его нельзя. Если NK = 0 (по умолчанию), то сетевой ключ выбирается случайным образом. Это вполне подходящий вариант для большинства задач. В противном случае, если NK ≠ 0, то сетевой ключ определяется значением NK. Параметр NK устанавливается только на координаторе. Роутеры и конечные устройства с включенным режимом безопасности (ATEE = 1) получают сетевой ключ в момент подсоединения к сети. Сетевой ключ передается от координатора в закрытом виде, если в подсоединяемый узел был предварительно записан правильный связной ключ.
Связной ключ также задается координатором с помощью параметра KY. По умолчанию KY = 0, т.е. координатор выбирает связной ключ случайным образом (нерекомендованный режим). Сетевой ключ можно установить принудительно, задав любое значение KY, отличное от 0. Параметр KY нельзя прочитать (только запись). Если связной ключ выбран координатором случайным образом, то этот ключ неизвестен подключаемому узлу, поэтому не может использоваться для шифрования. В этом случае передача сетевого ключа производится в открытом виде, что снижает безопасность системы в целом. Можно запретить координатору рассылку сетевого ключа в открытом виде с помощью команды EO (бит 1). Если KY установлен принудительно (любое значение, кроме 0), то сетевой ключ передается в зашифрованном виде. Для его получения то же значение связного ключа (KY) должно быть задано для подключаемого к сети узла. Таким образом, если на координаторе KY не равен 0, то к сети могут подключиться только предварительно сконфигурированные модули, в которые было принудительно прописано то же значение KY.
Команда EO используется для назначения координатора центром доверия. Если координатор выступает в качестве центра доверия, он уведомляется о каждом новом модуле, который пытается подключиться к сети. В прошивке ZB безопасная передача данных может работать как в режиме с центром доверия, так и без него. Если сеть работает с использованием центра доверия (EO = 2), то изменение параметра NK на координаторе приведет к смене сетевых ключей шифрования на всех узлах сети. При этом смена NK не форсирует отключение и повторное подключение узлов. Сеть продолжит работу на том же канале с тем же значением PAN ID, но все узлы обновят свой сетевой ключ (с обнулением счетчика фреймов). Если координатор не выступает в роли центра доверия, то для сетевого сброса может использоваться широковещательная команда NR1 (с любого узла сети). По этой команде все устройства покидают текущую сеть и пытаются подключиться снова. Когда устройство покидает сеть, счетчик фреймов обнуляется. Данная команда выполняется относительно долго (~10 с), т.к. сначала координатор выполняет стандартный процесс запуска сети (выбор частотного канала, PAN ID и т.д.), затем подключаются все модули, покинувшие предыдущую сеть.
Опциональное шифрование данных на уровне приложения не поддерживается в текущей версии встроенного программного обеспечения.

Примеры настроек

В приведенных ниже примерах приводятся конкретные значения параметров модуля XBee для работы с различными режимами безопасности. Используемая запись вида EE = 1 не соответствует формату отправляемых AT-команд. Для реального задания значения с помощью AT-команд необходимо послать через UART модуля строку вида ATEE1. При работе с API-фреймами параметр AT-команды указывается в бинарном виде в соответствующем поле отправляемой структуры.

Пример 1. Формирование сети с включенной безопасностью (связной ключ задан вручную)
Стартуем координатор со следующими настройками:
– ID = 3345 установить сетевой идентификатор PAN ID (значение выбрано произвольно);
– EE = 1 включить режим безопасной передачи данных;
– NK = 0 сгенерировать сетевой ключ случайным образом;
– KY = 9ABC задать значение для связного ключа (выбрано произвольно);
– WR сохранить настройки в энергонезависимой памяти.
Далее ждем, когда в ответ на команду AI придет значение 0 («Успешный старт сети»). Затем подключаем к сети роутер(ы) с теми же самыми настройками. После подсоединения к сети передача данных между узлами будет выполняться в зашифрованном виде на основе случайно выбранного сетевого ключа. Сетевой ключ будет предоставляться координатором каждому новому узлу сети. Передача сетевого ключа будет происходить в зашифрованном виде — для шифрования используется связной ключ KY = 9ABC. В данном примере сетевой ключ шифрования невозможно прочитать ни с одного узла сети.

Пример 2. Формирование сети с включенной безопасностью со значениями ключей по умолчанию
Стартуем координатор со следующими настройками:
– ID = 6678 установить сетевой идентификатор PAN ID (значение выбрано произвольно);
– EE = 1 включить режим безопасной передачи данных;
– NK = 0 сгенерировать сетевой ключ случайным образом;
– KY = 0 сгенерировать связной ключ случайным образом;
– WR сохранить настройки в энергонезависимой памяти.
После формирования координатором сети (когда в ответ на команду AI придет значение 0) подключаем к сети роутер(ы) с теми же самыми настройками (кроме параметра NK). После подсоединения к сети передача данных между узлами выполняется в зашифрованном виде на основе случайно выбранного сетевого ключа. В этом примере сетевой ключ отсылается координатором в незашифрованном виде. Это уязвимое место в безопасности, поэтому использование настроек по умолчанию не рекомендуется.
Наконец, поговорим о тех параметрах, которые влияют на «доступность» сети для сторонних подключений в тех случаях, когда шифрование в сети не включено (EE = 0). Даже в этом случае можно настроить сеть таким образом, что к ней не смогут подключиться нежелательные устройства. Разумеется, речь идет о случайных или целенаправленных попытках вмешаться в работу сети с помощью стандартных модулей (т.е. работающих в соответствии со спецификацией ZigBee).
На подключение к сети влияют сетевые параметры ID и NJ. Если оставить на координаторе и роутерах значение PAN ID по умолчанию (ID = 0), это приведет к тому, что реальное значение PAN ID будет выбрано координатором случайным образом, а роутер будет готов подключиться к любой сети. При таком варианте настроек к сети сможет подключиться любой «модуль из коробки». Установка конкретного значения для PAN ID станет своеобразным фильтром, отсекающим подключение сторонних модулей. Подключение к такой сети невозможно без знания реального PAN ID. Еще одним параметром, ограничивающим «открытость» сетей без шифрования, является разрешенное время подключения (NJ). По умолчанию NJ = FF, и подключение новых устройств к сети не ограничено по времени. Установка NJ в любое значение менее 0xFF задает предельное время в секундах, в течение которого подключение к сети разрешено (через конкретный роутер или координатор). Рекомендуется ограничивать время доступа в сеть и предоставлять его только на период развертывания сети. Если в процессе работы возникнет необходимость подключения дополнительного устройства, для этого можно перезаписать значение NJ на каком-то сетевом узле для создания нового временного окна доступности сети.

Заключение

Встроенные в модули XBee возможности шифрования позволяют строить беспроводные сети с гарантированным уровнем криптостойкости. Защита и аутентификация данных обеспечивается с помощью алгоритма шифрования AES-128. В зависимости от решаемых задач разработчик имеет возможность гибко настраивать уровень безопасности развертываемой ZigBee-сети.

Литература
1. Сайт компании Digi//www.digi.com.
2. Олег Пушкарев. Использование конечных спящих узлов в сети ZigBee//Электронные компоненты. 2011. №5.
3. Олег Пушкарев. Программируемые модули XBee серии S2B//Беспроводные технологии. 2010. № 3.
4. Олег Пушкарев. Прибор для оценки дальности связи в сетях ZigBee//Новости электроники. 2010. № 4.

Оставьте отзыв

Ваш емейл адрес не будет опубликован. Обязательные поля отмечены *