2010-11-25 1 views
1

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

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

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

Благодаря в ROM/RAM и процесса ограничения мощности в 8bits MCU Я не могу вписать в него полную процедуру AES, поэтому AES не имеет решения. Есть ли простой и эффективный алгоритм для рандомизации передачи?

+0

Серверная сторона кодируется в C# – wei 2010-11-25 19:57:42

ответ

1

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

  • Клиент сообщает сервер «Я в Интернете»
  • сервер шифрует проверочное сообщение, которое только клиент будет иметь возможность декодировать
  • Клиент отправляет расшифрованный сообщение

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

0

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

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

0

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

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