Защита соединений ESP8266

В моем доме есть несколько устройств ESP8266, управляющих различными устройствами, такими как котел и некоторые источники света.

Все они управляются центральным интеллектуальным концентратором на Raspberry Pi со статическим IP-адресом.

Это прекрасно работает, но меня все больше беспокоят последствия этого для безопасности. Связь между Pi и различными ESP8266 в настоящее время осуществляется через HTTP, при этом все команды просто находятся в URL-адресе, который Pi запрашивает с веб-серверов.

Таким образом, любой человек в моей сети теоретически может управлять этими смарт-устройствами с помощью простого запроса curl.

Хотя у меня есть надежный пароль Wi-Fi и я использую шифрование WPA2, я чувствовал бы себя намного комфортнее, если бы связь с ESP8266 каким-то образом контролировалась. Например, таким же образом вы можете подключиться к серверу SSH, используя шифрование с открытым ключом, только если у вас есть правильный закрытый ключ.

Можно ли реализовать что-то подобное на ESP8266? Я провел поиск и нашел только статьи о HTTPS, которые, похоже, не решат мою проблему.

Заранее спасибо, Рокко

, 👍2

Обсуждение

У вас может быть общий пароль. Затем пусть отправитель хэширует этот пароль вместе со временем и данными и, возможно, каким-то случайным одноразовым номером. Отправьте время, одноразовый номер, данные и хэш в ESP. Затем ESP может сделать то же самое в конце и проверить, совпадают ли хэши. ESP может проверить, что отправитель имеет тот же пароль и что сообщение не было изменено. Однако данные по-прежнему отправляются в открытом виде, но в данном случае я не думаю, что это имеет значение. Пришло время предотвратить повторные атаки. Либо пусть ESP узнает время через NTP, либо хранит временную метку последнего сообщения., @Gerben

@Gerben Спасибо, это отличная идея! Я чувствую, что ваше решение может быть более актуальным, поскольку для ESP требуется гораздо меньше времени вычислений. Я не совсем уверен, как правильно решить проблему получения ESP времени. Получение от NTP будет отключено на несколько миллисекунд или секунд, и я не совсем уверен, что вы имеете в виду насчет отметки времени., @Rocco

вам не нужно точное время. Настало время предотвратить повторные атаки. Вы сохраняете последнюю отметку времени последнего сообщения, а затем принимаете только сообщения с более новыми отметками времени. Чтобы предотвратить повторные атаки после сброса ESP, вы можете использовать NTP и убедиться, что сообщение не старше нескольких секунд или около того. PS просто повторюсь; отправитель отправляет метку времени вместе с данными в ESP., @Gerben


1 ответ


Лучший ответ:

2

Самый простой способ — зашифровать канал связи с помощью секретного ключа. Вы можете использовать встроенную функцию шифрования AES, что означает, что только люди, знающие ключ, могут зашифровать запрос таким образом, чтобы устройство на другом конце могло его расшифровать.

Вы могли бы подумать, что SSL (HTTPS) справится с этой задачей, но он обеспечивает только защиту от перехвата, а не проверку подлинности. Конечно, для еще большей безопасности вы можете комбинировать шифрование HTTPS и AES. Один для общего шифрования, а другой для проверки подлинности на основе шифрования.

,

Спасибо за Ваш ответ. Итак, вы предлагаете зашифровать инструкцию на хабе, отправить ее на ESP8266, затем расшифровать с помощью какого-то ключа и выполнить на ESP8266? Не было бы разумно внедрить HTTPS в этом случае, чтобы предотвратить повторные атаки?, @Rocco

Конечно, вы также можете использовать HTTPS. Больше всегда лучше :), @Majenko