Простые методы аутентификации и шифрования по TCP для встроенного устройства микроконтроллера - PullRequest
4 голосов
/ 27 июля 2011

Я разработал простой протокол связи через необработанные сокеты TCP, чтобы обеспечить простой обмен сообщениями между некоторыми встроенными устройствами. Чтобы поместить вещи в контекст, мое встроенное устройство представляет собой блок электроники, содержащий относительно небольшой микроконтроллер, на котором работает базовая встроенная ОСРВ (которая по сути обеспечивает только приоритет задач и очереди сообщений) и стек TCP / IP. Предполагаемое использование протокола TCP -

  1. Включение двух или более «ящиков» для связи друг с другом через локальную сеть в одном здании
  2. Чтобы разрешить устройству обмениваться данными с внешним сервером через Интернет.

Теперь у меня есть протокол обмена сообщениями, работающий между моими металлическими коробками, которым я доволен. Основная процедура обмена сообщениями между двумя полями в основном:

  1. Поле 'A' инициирует соединение сокета с 'B'.
  2. Поле 'A' отправляет сообщение или последовательность команд.
  3. Поле 'B' отвечает подтверждением и / или ответом команды.
  4. Поле 'A' закрывает розетку.

То, что я сейчас хотел бы сделать, это включить некоторый уровень безопасности и аутентификации. Большое ограничение здесь заключается в том, что у меня нет какой-либо ОС или прославленного TCP-стека, который мог бы предоставить мне какие-либо функции безопасности; У меня просто есть простой стек TCP, и поэтому я должен реализовать меры безопасности на уровне приложений и с учетом ограничений микроконтроллера.

Цели, которые я хотел бы достичь:

  1. Аутентификация между устройствами. Для этого я намерен предпринять следующие меры:

    • Содержит таблицу известных IP-адресов, с которых принимаются только соединения.

    • Каждый раз, когда устанавливается сокетное соединение, сначала всегда обмениваются уникальные идентификаторы. Номер может быть уникальным серийным номером для данного устройства и должен быть известен другим устройствам.

  2. Шифрование данных в случае, если пакеты каким-то образом перехвачены. Предположительно, мне нужен какой-то алгоритм шифрования, который не слишком «дорог» для работы на небольшом микроконтроллере, который используется в сочетании с уникальным ключом, который запрограммирован на всех устройствах. Один из таких алгоритмов, который я видел и который выглядит достаточно компактным для реализации в моем коде, - это TEA (Tiny Encryption Algorithm).

Буду очень признателен за любые советы или указатели.

Ответы [ 2 ]

3 голосов
/ 27 июля 2011

Check MatrixSSL - они имеют крошечный размер и встраиваемые возможности.Это гораздо лучше, чем заново изобретать SSL / TLS (что в итоге вы и сделаете).

2 голосов
/ 29 июля 2011

Чай выглядит довольно простым и, вероятно, будет делать то, что вам нужно.

компиляция для большого пальца с -O2 или аналогичными оптимизациями:

arm-none-linux-gnueabi-gcc (Sourcery G ++ Lite 2011.03-41) 4.5.2 шифровать 136 байтов, дешифровать 128 байтов

llvm 29 зашифровать 92 байта расшифровать 96 байтов

компиляция для универсальной руки ...

GNU шифрует 188 байтов, дешифрует 184 байта llvm шифрует 112 байтов, дешифрует 116 байтов

При проверке подлинности существует ли отношение один к одному между таблицей IP-адресов и количеством устройств? По сути, должно быть более одного уникального идентификатора на устройство? Вы хотите, чтобы другая сторона, которая устанавливает соединение со встроенной системой, входила в систему в той или иной форме? Или вы управляете двоичными файлами / кодом на обоих концах, и у вас нет пользователей или нет выбора устройств (программы знают, что делать) и т. Д.? Если каждое устройство имеет известный IP-адрес, этот IP-адрес может быть ключом к шифрованию (плюс другие байты, общие для всех или полученные каким-либо образом, которые всем известны). Если входящее соединение равно 1), а не из утвержденного списка 2) происходит сбой шифрования при сбое ключа, основанного на IP-адресе встроенной системы, а затем отклонить соединение.

В любом случае ваша безопасность может зайти так далеко, что если вам нужно что-то действительно надежное, вам, вероятно, потребуется больше мощности во встроенной системе, а затем внедрите одну из общих / стандартных систем, таких как ssl.

...