Arduino обеспечивает двустороннюю связь по радио
Я хотел бы реализовать защищенные каналы связи между двумя Arduino, взаимодействующими через радиомодули 433 МГц (точнее, с использованием базовых чипов Atmega 326).
Я знаю, что нехватка ресурсов — проблема чипов Atmega. Лучшей отправной точкой, которую я смог найти, была эта библиотека, которая так и не была написана:
https://forum.arduino.cc/index.php?topic=314845.0
Я вижу это так, что неважно, какой тип кодировки мы используем, если злоумышленник может перехватить и воспроизвести этот OTA, между устройствами должен быть второй компонент, который неизвестен злоумышленнику и изменяется так же, как таймер на основе DS. Если клиент может зашифровать свои сообщения с помощью key=timeXpassword key->encrypt(datatobesent), то сервер может расшифровать их таким же образом, если они поступят в правильный период времени, например +-/5 секунд, где время не обязательно должно быть текущим точным временем, просто часы, которые синхронизированы между устройствами. Когда сообщение получено сервером, он вычислит 5 различных возможных данных для 5 секунд и проверит расшифрованные данные на наличие определенной строки, чтобы определить, является ли это ДЕЙСТВИТЕЛЬНЫМ пакетом данных.
Для этого снова понадобится внешняя схема таймера, например, серии DSXXXX, поскольку внутренний таймер в чипе ненадежен/через некоторое время переполняется.
Есть ли еще идеи для безопасной связи?
@xmelen, 👍2
2 ответа
Возможно, вам захочется взглянуть на мой алгоритм RC4 с диффузией RC4D, который очень экономичен в плане ресурсов, поскольку занимает менее 500 байт флэш-памяти (при шифровании на месте) и работает намного быстрее, чем AES128 на Arduino.
Поскольку у вас есть двусторонняя связь, вы можете быть гораздо более хитрыми, чем просто включение временной метки. Вы можете использовать настоящую аутентификацию.
Идея здесь заключается в том, что «отправитель» сначала отправляет запрос «получателю» со словами «Впустите меня».
Затем «получатель» отправляет обратно сообщение: «Хорошо, вот ваш сеансовый ключ».
Затем «отправитель» шифрует учетные данные соединения, используя этот сеансовый ключ каким-либо образом (или шифрует их каким-либо образом, включая этот ключ вместе с учетными данными) — в идеале с помощью алгоритма хэширования с лазейкой, и отправляет их «получателю».
Затем «получатель» выполняет ту же операцию с данными, которые, как он ожидает, должен отправить «отправитель», и сравнивает их с тем, что он получил.
Если они совпадают, то «получатель» может разрешить связь с этим «клиентом». Затем «получатель» отправит новый ключ сеанса «отправителю», который затем будет использоваться для шифрования всей последующей связи. Этот ключ должен отличаться от первого и должен использовать симметричное шифрование.
Все это означает, что:
- Ключ аутентификации каждый раз меняется — его невозможно «переиграть»
- Ключ связи меняется с каждым сеансом, поэтому снова нет возможности воспроизвести сообщения в более поздние сроки, поскольку ключ будет неверным.
Да, при использовании этого метода возникает много накладных расходов, но он безопасен.
Методология аутентификации в основном представляет собой протокол аутентификации по рукопожатию (сервер отправляет вызов, клиент отвечает учетными данными вместе с вызовом, шифрование с помощью лазейки, сервер сравнивает со своим собственным шифрованием и разрешает или запрещает). Остальное — это базовое шифрование по вашему выбору с использованием уникального ключа, предоставленного удаленным концом соединения.
- В чем разница между вариантами RF (wifi, xbee, NRF24L01)
- Радиочастотное дистанционное управление с использованием VirtualWire на ATtiny85, работающем на частоте 8 МГц на внутреннем генераторе
- Декодирование 2.4G RF пульта дистанционного управления?
- Питание Arduino Mini Pro с использованием батареи CR2032 в качестве пульта дистанционного управления
- SIM800C, CPIN: НЕ ГОТОВ (КОД ОШИБКИ: +CME ОШИБКА: 10)
- nRF24L01 + потеря пакетов, вызванная считыванием Arduino и связью с датчиками
- Как использовать get_properties для получения RSSI в RF24?
- Как подключить модуль RF433Mhz (WL101-341 /WL102-341)
RC4 больше не следует использовать в криптографических приложениях; он устарел., @dandavis