Как маломощный микроконтроллер может аутентифицировать себя на сервере? - PullRequest
1 голос
/ 25 ноября 2010

В настоящее время я работаю над встроенным проектом.Клиентская часть представляет собой 8-битный MCU, а серверная часть - компьютерная.

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

Проблема заключается в том, что вычисленный серийный номер, который отправляется обратно на сервер, всегда исправлен.Любая компания-подражатель может легко понять это с помощью логического анализатора.Я хочу, чтобы передаваемый серийный номер время от времени казался случайными битами, но все же смог бы расшифровать его до первоначального значения. Хороший пример использования шифрования AES (обратите внимание, что каждый раз, когда вы нажимаете кнопку Encrypt It , создается, казалось бы, случайный текст, но когда вы расшифровываете его, он возвращается к исходному тексту.)

Из-за ПЗУ / ОЗУ и ограничения мощности процесса в 8-битном микроконтроллере я не могу вписать в него полную процедуру AES, поэтому AES не может найти решение.Существует ли простой и эффективный алгоритм для рандомизации передачи?

Ответы [ 3 ]

1 голос
/ 25 ноября 2010

Используйте пару ключей. При инициализации:

  • Клиент сообщает серверу "Я онлайн"
  • Сервер шифрует сообщение проверки, которое только клиент сможет декодировать
  • Клиент отправляет обратно расшифрованное сообщение

Не должно быть необходимости жестко кодировать ключ сервера - он может быть сгенерирован на основе временной метки (принимается только ответ в допустимом диапазоне), или коды могут генерироваться по мере необходимости с тайм-аутом чтобы не допустить их длительного хранения.

0 голосов
/ 20 августа 2011

Другая идея может заключаться в том, чтобы 8-битный контроллер отправлял CRC даты, времени и серийного номера на сервер.Сервер может проверить, что это уникальный серийный номер, и отправить CRC с датой, временем и кодом авторизации.

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

0 голосов
/ 26 ноября 2010

Пусть сервер отправит клиенту монотонно увеличивающийся счетчик или временную метку вместе с серийным номером.Затем клиент учитывает это в своих вычислениях.

Поскольку сервер всегда отправляет другой запрос, ответ всегда будет другим (конечно, если рынок достаточно прибыльный, ваши конкуренты всегда могут разобрать ваш код MCUи выяснить, как его воспроизвести, но это не остановить).

...