Перейти к содержанию
    

Лицензирование программы для микроконтроллера

Здравствуйте все! Есть устройство на базе микроконтроллера MSP430F249. Под этот микроконтроллер написана программа. Для того, чтобы программа выполняла свои основные функции, пользователь должен приобрести код активации и передать его в устройство. Код активации устанавливает время работы основных функций программы в сутках. Программа микроконтроллера не доступна пользователю (микроконтроллер заблокирован на чтение программы). Код активации будет вводиться в устройство посредством кнопок самого устройства и его ЖК дисплея. Код активации, естественно, должен быть устойчив к взлому. Посоветуйте, как реализовать данный функционал.

 

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

 

Если у кого-то есть другие идеи, поделитесь, пожалуйста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Если уж Вы решаете вопросы монетизации использования устройства, то может стоило раскошелиться на встроенный GSM-модем?

И сделать нормальный сервер лицензирования и обновления ПО?

Или реализуйте связь с компьютером, где будет ПО, предназначенное для получения лицензий через интернет.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Если уж Вы решаете вопросы монетизации использования устройства, то может стоило раскошелиться на встроенный GSM-модем?

И сделать нормальный сервер лицензирования и обновления ПО?

Или реализуйте связь с компьютером, где будет ПО, предназначенное для получения лицензий через интернет.

Как пользователь будет вводить код активации - это другой вопрос и он не рассматривается в этой теме (хотя хочется сказать, что это будет не так сложно, как можно подумать). GSM не выход, так как устройство может использоваться там, где нет сотовой связи. Компьютер не хочу использовать по той причине, что тогда пользователю кроме устройства нужен будет еще компьютер и преобразователи для связи с устройством. Устройство должно быть полностью автономным и не требовать для своей работы или настройки GSM модема, компьютера и прочих аксессуаров. Вместе с этим, подобрать код активации устройства должно быть неоправданно сложно (хотя, с учетом того, что ввод кода осуществляется через кнопки, подобрать его уже сложно).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

Обычный challenge-response. На больших железках это реализуется с помощью асимметричной криптографии: private key есть только у продавца, он им подписывает файл лицензии. Public key вшивается в устройство, с его помощью софт проверяет, что подсунутая лицензия действительно от продавца.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если у МК есть уникальный серийный номер, то можно им воспользоваться. В STM32 есть. Если нет, можно свой создать при программировании.

Ответный код должен в некой комбинации с серийным номером давать разрешение на работу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обычный challenge-response. На больших железках это реализуется с помощью асимметричной криптографии: private key есть только у продавца, он им подписывает файл лицензии. Public key вшивается в устройство, с его помощью софт проверяет, что подсунутая лицензия действительно от продавца.

Где можно почитать про данный метод?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Где можно почитать про данный метод?

https://en.wikipedia.org/wiki/Digital_signature

https://en.wikipedia.org/wiki/Challenge%E2%..._authentication

последнее все ж больше интерактивная штука, если вдруг надумаете gsm модем туда ставить или что-то такое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я всё же считаю в цепочке взаимодействия самым ненадёжным элементом человека.

И вводить руками длинные неупорядоченные ключи всё же сложно.

Если нет связи и компьютера поблизости, то я бы предложил такой вариант:

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

По истечению времени работы носитель вынимается и вставляется в компьютер (планшет, смартфон), в котором работает ПО, способное продлить лицензию.

Хотя это тоже сложно.

Ещё лучше поставить в устройство блютуз-адаптер за 2 доллара. А затем просто подойти к устройству со смартфоном. Далее всё происходит автоматически: В устройстве происходит продление времени работы, а со смартфона соответствующее время списывается.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я всё же считаю в цепочке взаимодействия самым ненадёжным элементом человека.

И вводить руками длинные неупорядоченные ключи всё же сложно.

Если нет связи и компьютера поблизости, то я бы предложил такой вариант:

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

По истечению времени работы носитель вынимается и вставляется в компьютер (планшет, смартфон), в котором работает ПО, способное продлить лицензию.

Хотя это тоже сложно.

Ещё лучше поставить в устройство блютуз-адаптер за 2 доллара. А затем просто подойти к устройству со смартфоном. Далее всё происходит автоматически: В устройстве происходит продление времени работы, а со смартфона соответствующее время списывается.

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...забывает об этом кошмаре на 2 года.

Лично я сразу-бы забыл о таком кошмаре ВООБЩЕ не покупая такое устройство.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно проще. Срок работы устройства задавать при изготовлении.

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

"Пробник на неделю" продаётся по себестоимости изготовления + какая-то гипотетическая выгода за неделю (или без неё, как угодно).

На год - по цене выгоды за год.

На три - по цене выгод за три года.

 

И никаких кодов вводить не надо. Включил и работает. Время вышло - остановилось устройство. Хочет чтоб работало 10 лет: пусть купит 3 устройства на 3 года и 1 устройство на год :rolleyes:

Изменено пользователем controller_m30

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Лично я сразу-бы забыл о таком кошмаре ВООБЩЕ не покупая такое устройство.

Лично я, не зная что это за устройство, от подобных заявлений воздержался бы...

 

Можно проще. Срок работы устройства задавать при изготовлении.

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

"Пробник на неделю" продаётся по себестоимости изготовления + какая-то гипотетическая выгода за неделю (или без неё, как угодно).

На год - по цене выгоды за год.

На три - по цене выгод за три года.

 

И никаких кодов вводить не надо. Включил и работает. Время вышло - остановилось устройство. Хочет чтоб работало 10 лет: пусть купит 3 устройства на 3 года и 1 устройство на год :rolleyes:

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

Хочется сказать, что ввод кода в устройство не является проблемой раз и не является темой для обсуждения здесь два. То, что устройство будет лицензироваться кодом активации и то, что он будет вводиться с кнопок это решенный вопрос. Вопросом данной темы является как более надежно и безопасно создавать и идентифицировать код активации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Лично я, не зная что это за устройство, от подобных заявлений воздержался бы...

Лично я зная, что уникальных устройств для уникальных целей не бывает, сделал это заявление.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Лично я зная, что уникальных устройств для уникальных целей не бывает, сделал это заявление.

Ну что ж... Имея статус "Гуру" и почти двенадцатилетнюю регистрацию на этом форуме, думаю, что Вам под силу создать почти любое устройство. Но таких как Вы мало, а чтобы создать устройство самому потребуются знания и опыт в данной области, время и огромное желание. Таким образом, купить устройство и периодически вводить в него коды активации несоизмеримо проще, чем самому создать устройство. Конечно, можно еще попробовать заказать устройство у другого разработчика, но это совсем другая история.

 

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

 

Поставлю вопрос по-иному. Каким методом передать в устройство 2 байта, чтобы общее количество передаваемой информации было минимальным, а сложность взлома данного метода была неоправданно высокой?

Изменено пользователем d7d1cd

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Перейти от единиц измерения "байт" к единицам измерения "бит".

Полезную информацию, которая допустим содержится только в двух байтах - разбиваем на биты, и перемешиваем с битами ещё к примеру 10 байт ("балласт"). Не с байтами, а с битами.

Можно ещё добавить CRC-код к полезной информации. Разбить его на биты, и тоже беспорядочно смешать с битами "балласта".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...