Если у вас может быть сквозной TCP, то используйте сквозной TLS (например, с HTTPS).
Не изобретайте колесо, особенно когда дело доходит до криптографии - большинство людей ошибаются. Если устройство не слишком ограничено в ресурсах для поддержки TLS, если вы опуститесь до уровня AES, вы делаете это неправильно . Ошибка № 1 заключается в шифровании и забывании аутентификации - если у вас есть зашифрованный канал между вашим сервером и посредником, а не зашифрованный канал между вашим сервером и вашим устройством, то шифрование не принесло никакой пользы , Если вы не можете использовать TLS, убедитесь, что используемый вами протокол аутентифицирует все и шифрует то, что должно быть конфиденциальным.
Чтобы безопасно использовать TLS, подумайте о том, какие гарантии вам нужны, с точки зрения каждого участника. Как правило, устройство должно знать, что оно общается с законным сервером. Это означает, что он должен проверить сертификат сервера. Устройство должно иметь сертификат X.509 центра сертификации, зарегистрированный как доверенный; это требует хранилища, которое не может быть изменено злоумышленником, но не требует никакой конфиденциальности хранилища. Обратите внимание, что вам не следует жестко кодировать сертификат сервера напрямую, потому что это не позволит вам легко заменить этот сертификат, если он скомпрометирован. Вместо этого устройство хранит ожидаемую идентичность(имя хоста) сервера и сертификат центра сертификации, который гарантирует, что определенный открытый ключ принадлежит ожидаемому имени хоста. Еще раз, не изобретайте колесо, положитесь на проверку сертификата, предоставленную вашей библиотекой TLS или приложением.
Если сервер должен знать, что он общается с законным клиентом, то у каждого клиента должен быть свой собственный сертификат клиента. Это требует конфиденциального хранения на клиенте. Передайте сертификат клиента функции открытия сеанса TLS из библиотеки TLS или установите его в конфигурации приложения.
Это обеспечивает безопасность связи между вашим сервером и вашим устройством. Если мобильное приложение может напрямую взаимодействовать с устройством (например, чтобы разрешить отключенную операцию, когда оно находится в локальной сети Wi-Fi), сначала необходимо выполнить сопряжение между интеллектуальным коммутатором и мобильным телефоном. Сопряжение означает обмен ключами, предпочтительно обмен открытыми ключами, если позволяют ресурсы, в противном случае соглашение о секретных ключах. Цель этого соединения - убедиться, что каждое устройство знает, с кем оно разговаривает.
Вам также необходимо защитить канал управления, независимо от того, идет ли он напрямую с мобильного устройства на интеллектуальный коммутатор или через сервер. Подумайте об авторизации: существуют ли разные уровни доступа к коммутатору, например, уровень управления, который позволяет выполнять реконфигурацию, и базовый канал, который просто позволяет включать / выключать коммутацию? Это обычно обрабатывается этапом аутентификации после установления безопасного канала (TLS, если это возможно).
Еще одним соображением является обновление прошивки. Это непросто: с одной стороны, абсолютной безопасности не существует, поэтому у вас будут патчи для безопасности, которые нужно применять время от времени. С другой стороны, механизм обновления прошивки является сложной вещью и может сам по себе иметь ошибки. По крайней мере, убедитесь, что ваши обновления прошивки подписаны. Полагаться только на безопасность канала связи для обновлений сложно, потому что основанное на надежном канале для безопасного канала больше, чем для статической проверки безопасности, и иногда вам может потребоваться применить обновления встроенного ПО без сетевого подключения. В дополнение к проверке подписи, в идеале вы должны иметь некоторую защиту от отката, чтобы противник мог