Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Лицензирование программы для микроконтроллера
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Страницы: 1, 2
d7d1cd
Здравствуйте все! Есть устройство на базе микроконтроллера MSP430F249. Под этот микроконтроллер написана программа. Для того, чтобы программа выполняла свои основные функции, пользователь должен приобрести код активации и передать его в устройство. Код активации устанавливает время работы основных функций программы в сутках. Программа микроконтроллера не доступна пользователю (микроконтроллер заблокирован на чтение программы). Код активации будет вводиться в устройство посредством кнопок самого устройства и его ЖК дисплея. Код активации, естественно, должен быть устойчив к взлому. Посоветуйте, как реализовать данный функционал.

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

Если у кого-то есть другие идеи, поделитесь, пожалуйста.
amiller
Что-то я как то слабо представляю себе, как пользователь вводит длинный код с помощью клавиатуры молча (не ругаясь матом).
Если уж Вы решаете вопросы монетизации использования устройства, то может стоило раскошелиться на встроенный GSM-модем?
И сделать нормальный сервер лицензирования и обновления ПО?
Или реализуйте связь с компьютером, где будет ПО, предназначенное для получения лицензий через интернет.

d7d1cd
Цитата(amiller @ Apr 19 2016, 11:25) *
Что-то я как то слабо представляю себе, как пользователь вводит длинный код с помощью клавиатуры молча (не ругаясь матом).
Если уж Вы решаете вопросы монетизации использования устройства, то может стоило раскошелиться на встроенный GSM-модем?
И сделать нормальный сервер лицензирования и обновления ПО?
Или реализуйте связь с компьютером, где будет ПО, предназначенное для получения лицензий через интернет.

Как пользователь будет вводить код активации - это другой вопрос и он не рассматривается в этой теме (хотя хочется сказать, что это будет не так сложно, как можно подумать). GSM не выход, так как устройство может использоваться там, где нет сотовой связи. Компьютер не хочу использовать по той причине, что тогда пользователю кроме устройства нужен будет еще компьютер и преобразователи для связи с устройством. Устройство должно быть полностью автономным и не требовать для своей работы или настройки GSM модема, компьютера и прочих аксессуаров. Вместе с этим, подобрать код активации устройства должно быть неоправданно сложно (хотя, с учетом того, что ввод кода осуществляется через кнопки, подобрать его уже сложно).
slanted
Цитата(amiller @ Apr 19 2016, 12:25) *
Что-то я как то слабо представляю себе, как пользователь вводит длинный код с помощью клавиатуры молча (не ругаясь матом).


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

Цитата(d7d1cd @ Apr 19 2016, 12:05) *
Сейчас есть следующая идея. Программа в устройстве пользователя генерирует ключ шифрования случайным образом. Пользователь с помощью кнопок устройства определяет этот ключ и передает его продавцу лицензий. Продавец лицензий с помощью этого ключа создает код активации, в который "вшит" нужный срок действия программы, и продает этот код пользователю устройства. Пользователь вводит код активации в устройство. Программа устройства, если код активации "правильный", устанавливает время работы.


Обычный challenge-response. На больших железках это реализуется с помощью асимметричной криптографии: private key есть только у продавца, он им подписывает файл лицензии. Public key вшивается в устройство, с его помощью софт проверяет, что подсунутая лицензия действительно от продавца.
ViKo
Если у МК есть уникальный серийный номер, то можно им воспользоваться. В STM32 есть. Если нет, можно свой создать при программировании.
Ответный код должен в некой комбинации с серийным номером давать разрешение на работу.
d7d1cd
Цитата(slanted @ Apr 19 2016, 12:15) *
Обычный challenge-response. На больших железках это реализуется с помощью асимметричной криптографии: private key есть только у продавца, он им подписывает файл лицензии. Public key вшивается в устройство, с его помощью софт проверяет, что подсунутая лицензия действительно от продавца.

Где можно почитать про данный метод?
slanted
Цитата(d7d1cd @ Apr 19 2016, 14:10) *
Где можно почитать про данный метод?

https://en.wikipedia.org/wiki/Digital_signature
https://en.wikipedia.org/wiki/Challenge%E2%..._authentication
последнее все ж больше интерактивная штука, если вдруг надумаете gsm модем туда ставить или что-то такое.
amiller
Я всё же считаю в цепочке взаимодействия самым ненадёжным элементом человека.
И вводить руками длинные неупорядоченные ключи всё же сложно.
Если нет связи и компьютера поблизости, то я бы предложил такой вариант:
В устройстве должен стоять какой то съёмный носитель информации (flash-card) или что-то подобное. На этом носителе в кодированном виде хранятся сгенерированные ключи, производится отсчёт времени работы в любом формате.
По истечению времени работы носитель вынимается и вставляется в компьютер (планшет, смартфон), в котором работает ПО, способное продлить лицензию.
Хотя это тоже сложно.
Ещё лучше поставить в устройство блютуз-адаптер за 2 доллара. А затем просто подойти к устройству со смартфоном. Далее всё происходит автоматически: В устройстве происходит продление времени работы, а со смартфона соответствующее время списывается.
Ну а далее нужно продумать механизм, как владелец смартфона будет покупать время у производителя устройств. Конечно путь сложный, но однозначно более удобный для пользователя.
d7d1cd
Цитата(amiller @ Apr 19 2016, 18:19) *
Я всё же считаю в цепочке взаимодействия самым ненадёжным элементом человека.
И вводить руками длинные неупорядоченные ключи всё же сложно.
Если нет связи и компьютера поблизости, то я бы предложил такой вариант:
В устройстве должен стоять какой то съёмный носитель информации (flash-card) или что-то подобное. На этом носителе в кодированном виде хранятся сгенерированные ключи, производится отсчёт времени работы в любом формате.
По истечению времени работы носитель вынимается и вставляется в компьютер (планшет, смартфон), в котором работает ПО, способное продлить лицензию.
Хотя это тоже сложно.
Ещё лучше поставить в устройство блютуз-адаптер за 2 доллара. А затем просто подойти к устройству со смартфоном. Далее всё происходит автоматически: В устройстве происходит продление времени работы, а со смартфона соответствующее время списывается.
Ну а далее нужно продумать механизм, как владелец смартфона будет покупать время у производителя устройств. Конечно путь сложный, но однозначно более удобный для пользователя.

То, что в этой цепочке самый не надежный это человек, я полностью согласен. Однако, еще человек хитер и жаден. Даже если перейти через все ограничения (нет сотовой связи и прочее) и организовать лицензирование в автоматическом режиме, то это даст какую-то реальную возможность взломать систему лицензирования, так как будет электронный доступ в прибор (имеется ввиду ввод ключа). Поэтому был реализован ввод ключа через кнопки, когда ввод большого количества ключей будет очень долгим по времени. Если покупателю будет проблематично часто вводить код (по причине кривых рук или еще чего-то), то он может купить ключ лицензии на очень долгий срок (например на 2 года), далее, используя матерный язык, постороннюю помощь и прочие инструменты, он вводит код в устройство и забывает об этом кошмаре на 2 года.
zltigo
QUOTE (d7d1cd @ Apr 20 2016, 15:05) *
...забывает об этом кошмаре на 2 года.

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

controller_m30
Можно проще. Срок работы устройства задавать при изготовлении.
Сделать три разновидности устройств, отличающихся временем работы: "пробник на неделю", на год, и на (допустим) три года.
"Пробник на неделю" продаётся по себестоимости изготовления + какая-то гипотетическая выгода за неделю (или без неё, как угодно).
На год - по цене выгоды за год.
На три - по цене выгод за три года.

И никаких кодов вводить не надо. Включил и работает. Время вышло - остановилось устройство. Хочет чтоб работало 10 лет: пусть купит 3 устройства на 3 года и 1 устройство на год rolleyes.gif
d7d1cd
Цитата(zltigo @ Apr 20 2016, 15:45) *
Лично я сразу-бы забыл о таком кошмаре ВООБЩЕ не покупая такое устройство.

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

Цитата(controller_m30 @ Apr 20 2016, 17:10) *
Можно проще. Срок работы устройства задавать при изготовлении.
Сделать три разновидности устройств, отличающихся временем работы: "пробник на неделю", на год, и на (допустим) три года.
"Пробник на неделю" продаётся по себестоимости изготовления + какая-то гипотетическая выгода за неделю (или без неё, как угодно).
На год - по цене выгоды за год.
На три - по цене выгод за три года.

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

Спасибо за совет. Подобная схема не подойдет по той причине, что устройство может не использоваться какое-то время. В результате покупатель потратит деньги зря и вообще вряд ли согласится на таких условиях покупать устройство.
Хочется сказать, что ввод кода в устройство не является проблемой раз и не является темой для обсуждения здесь два. То, что устройство будет лицензироваться кодом активации и то, что он будет вводиться с кнопок это решенный вопрос. Вопросом данной темы является как более надежно и безопасно создавать и идентифицировать код активации.
zltigo
QUOTE (d7d1cd @ Apr 20 2016, 21:29) *
Лично я, не зная что это за устройство, от подобных заявлений воздержался бы...

Лично я зная, что уникальных устройств для уникальных целей не бывает, сделал это заявление.
d7d1cd
Цитата(zltigo @ Apr 21 2016, 00:44) *
Лично я зная, что уникальных устройств для уникальных целей не бывает, сделал это заявление.

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

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

Поставлю вопрос по-иному. Каким методом передать в устройство 2 байта, чтобы общее количество передаваемой информации было минимальным, а сложность взлома данного метода была неоправданно высокой?
controller_m30
Перейти от единиц измерения "байт" к единицам измерения "бит".
Полезную информацию, которая допустим содержится только в двух байтах - разбиваем на биты, и перемешиваем с битами ещё к примеру 10 байт ("балласт"). Не с байтами, а с битами.
Можно ещё добавить CRC-код к полезной информации. Разбить его на биты, и тоже беспорядочно смешать с битами "балласта".
zltigo
QUOTE (d7d1cd @ Apr 21 2016, 08:13) *
...чем самому создать устройство.

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

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

и много больше лет в профессии...
QUOTE
, думаю, что Вам под силу создать почти любое устройство.

Нет, но понять, что Вы пошли по неверному бизнес-пути могу.
d7d1cd
Цитата(controller_m30 @ Apr 21 2016, 08:26) *
Перейти от единиц измерения "байт" к единицам измерения "бит".
Полезную информацию, которая допустим содержится только в двух байтах - разбиваем на биты, и перемешиваем с битами ещё к примеру 10 байт ("балласт"). Не с байтами, а с битами.
Можно ещё добавить CRC-код к полезной информации. Разбить его на биты, и тоже беспорядочно смешать с битами "балласта".

CRC надо добавить по-любому. Ведь надо как-то определять, что пользователь ввел валидный код активации.
Таким образом, устройство, приняв код активации, сначала составляет код CRC из определенных битов, далее вычисляет CRC оставшихся битов и сравнивает эти два CRC. Если они равны, значит код активации валидный и можно выбирать биты полезной информации.
Что ж, по моему скромному мнению это хороший вариант. Смущает только то, что метод шифрования один (то есть, перемешивание битов всегда одно и то же). Но это косвенно можно решить (например, вычислять CRC по разным полиномам в зависимости от значения определенных битов в коде активации).

У кого еще какие варианты?

Цитата(zltigo @ Apr 21 2016, 08:42) *
Нет, но понять, что Вы пошли по неверному бизнес-пути могу.

Не могу с Вами спорить, ибо опыта у меня в этом почти нет. Но те немногие покупатели, которые приобрели у меня прибор без лицензирования (то есть, без необходимости задавать время действия) и заплатив за него относительно большую сумму, сказали, что лучше бы они купили прибор намного дешевле, а потом покупали бы коды активации и вводили бы их в прибор кнопками.
zltigo
QUOTE (d7d1cd @ Apr 21 2016, 08:52) *
Но те немногие покупатели, которые приобрели у меня прибор без лицензирования (то есть, без необходимости задавать время действия) и заплатив за него относительно большую сумму, сказали, что лучше бы они купили прибор намного дешевле, а потом покупали бы коды активации и вводили бы их в прибор кнопками.

Это они по незнанию sad.gif. Они НЕ пробовали так жить, но им кажется, что так будет хорошо и дешево, а так не быват sad.gif. Вы делаете массовую ошибку - пошли на поводу у потребителя в надежде, что он знает, что хочет. Типовой потребитель на самом деле ОЧЕНЬ смутно представляет, что он хочет sad.gif.
d7d1cd
Цитата(zltigo @ Apr 21 2016, 09:22) *
Это они по незнанию sad.gif. Они НЕ пробовали так жить, но им кажется, что так будет хорошо и дешево, а так не быват sad.gif. Вы делаете массовую ошибку - пошли на поводу у потребителя в надежде, что он знает, что хочет. Типовой потребитель на самом деле ОЧЕНЬ смутно представляет, что он хочет sad.gif.

Ну... Я не считаю, что шел на поводу у потребителя, так как не он мне предложил этот метод, а я ему... И, в конце концов, хотелось бы уже от Вас выслушать конкретное предложение, а не только критику. sm.gif
ViKo
Цитата(d7d1cd @ Apr 21 2016, 08:52) *
Не могу с Вами спорить, ибо опыта у меня в этом почти нет. Но те немногие покупатели, которые приобрели у меня прибор без лицензирования (то есть, без необходимости задавать время действия) и заплатив за него относительно большую сумму, сказали, что лучше бы они купили прибор намного дешевле, а потом покупали бы коды активации и вводили бы их в прибор кнопками.

Потом бы они взломали ваш код всеми доступными способами, включая социальные - подкуп-запугивание разработчика, проплата такому же энтузиасту, но взломщику и т.п. Тоже считаю, что ваша бизнес-модель ущербная. А что делать пользователю, если продавец вдруг по той или иной причине не сможет выслать код активации через год? Причин - более, чем достаточно.
d7d1cd
Цитата(ViKo @ Apr 21 2016, 09:36) *
Потом бы они взломали ваш код всеми доступными способами, включая социальные - подкуп-запугивание разработчика, проплата такому же энтузиасту, но взломщику и т.п. Тоже считаю, что ваша бизнес-модель ущербная. А что делать пользователю, если продавец вдруг по той или иной причине не сможет выслать код активации через год? Причин - более, чем достаточно.

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

Что-то все только критикуют. Я не против этого, но тогда предлагайте варианты, которые вы считаете не ущербными.
ViKo
Ограничивать не время работы, а функционал. А после оплаты выдать код активации навсегда.
d7d1cd
Цитата(ViKo @ Apr 21 2016, 10:37) *
Ограничивать не время работы, а функционал.

То есть, давать покупателю возможность опробовать прибор? Так сказать демонстрация? У меня такая ситуация, что покупатель без демонстрации знает что делает устройство. Смысла в демонстрации нет.
P.S. Кстати, у меня как раз планируется ограничивать функционал, если истек срок действия ключа.

Цитата(ViKo @ Apr 21 2016, 10:37) *
А после оплаты выдать код активации навсегда.

В этом случае код активации "навсегда" будет стоить несоизмеримо дороже кода активации "на время". Покупатель просто не будет покупать такую лицензию. Лицензия "навсегда" не может стоить так же или чуть дороже, чем лицензия "на время". И, опять же повторюсь, покупатель может не использовать прибор какое-то время. Зачем ему в этом случае дорогая лицензия "навсегда"?
ViKo
Человек предпочитает быть владельцем вещи, а не арендатором.
И, да, не верю, что ваше изделие уникальное. Чем фантазировать, как содрать бабла за уникальности, задавите покупателей массовостью. Иначе китайцы вас опередят. Если уже не опередили.
AlexRayne
Цитата(d7d1cd @ Apr 21 2016, 08:52) *
CRC надо добавить по-любому. Ведь надо как-то определять, что пользователь ввел валидный код активации.

привязка к КС - плохой ход. если обновляется ПО - прощай ранее введенный пароль?
ViKo
Цитата(d7d1cd @ Apr 21 2016, 11:16) *
В этом случае код активации "навсегда" будет стоить несоизмеримо дороже кода активации "на время"... Лицензия "навсегда" не может стоить так же или чуть дороже, чем лицензия "на время".

Почему? Почему?
Ваши производственные затраты изменяются от того, сколько изделие проработает?
gte
Цитата(ViKo @ Apr 21 2016, 13:14) *
Почему? Почему?
Ваши производственные затраты изменяются от того, сколько изделие проработает?

Ну зачем так нападать. Продают же софт на год или в бессрочное использование и с ним железка в виде аппаратного ключа.
ViKo
Цитата(gte @ Apr 21 2016, 12:34) *
Ну зачем так нападать. Продают же софт на год или в бессрочное использование и с ним железка в виде аппаратного ключа.

Так то софт. Он через год кардинально поменяется, надеюсь, в лучшую сторону. И альтернатива появится, можно не сомневаться.
И, все равно, я не покупал на год. Pro версию, навсегда - покупал.
А платить ежегодно за дряхлеющее железо - увольте.

Топикстартер даже не назвал, что за прибор он собирается продавать на год. Что это, если не опасения за конкурентов? Или дальнейших насмешек боится?
Как только вещь появится в интернете, не сомневайтесь, китайцы не пропустят.
d7d1cd
Цитата(ViKo @ Apr 21 2016, 12:08) *
Человек предпочитает быть владельцем вещи, а не арендатором.
И, да, не верю, что ваше изделие уникальное. Чем фантазировать, как содрать бабла за уникальности, задавите покупателей массовостью. Иначе китайцы вас опередят. Если уже не опередили.

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

Цитата(ViKo @ Apr 21 2016, 12:45) *
А платить ежегодно за дряхлеющее железо - увольте.

Не хотите - не платите. Никто ж не принуждает...

Цитата(ViKo @ Apr 21 2016, 12:45) *
Топикстартер даже не назвал, что за прибор он собирается продавать на год. Что это, если не опасения за конкурентов? Или дальнейших насмешек боится?
Как только вещь появится в интернете, не сомневайтесь, китайцы не пропустят.

Первое. Прибор я не назову по причине... пусть будет по Вашему - из-за конкуренции. Второе. Насмешки идут только от Вас, да и не обращаю я на них внимания. И третье: прибор в интернете не появится.

Что-то тема стала захламляться... Кроме controller_m30 кто-то может что-нибудь предложить?
zltigo
QUOTE (d7d1cd @ Apr 21 2016, 12:59) *
Первое. Прибор я не назову по причине...

...90% это какой нибудь электросчетчик устанавливаемый в обязательном порядке монополистом от энергетики и за какие-нибудь дополнительные функции которого мечтается содрать с конечного пользователя деньги.
vovanse
Может RFID? А в метке шифрованная информация. Просто и удобно - поднес, ключ введен.
ViKo
Насмешек я не писал. Критику - да. Моя критика не уменьшит возможного дохода от изделия, так и переживать не о чем. Успехов!
d7d1cd
Цитата(ViKo @ Apr 21 2016, 13:14) *
Насмешек я не писал.


Тогда к чему это:
Цитата(ViKo @ Apr 21 2016, 12:45) *
Или дальнейших насмешек боится?


Цитата(ViKo @ Apr 21 2016, 13:14) *
Моя критика не уменьшит возможного дохода от изделия, так и переживать не о чем. Успехов!

Здесь полностью с Вами согласен. Спасибо за пожелание успехов!

Цитата(vovanse @ Apr 21 2016, 13:13) *
Может RFID? А в метке шифрованная информация. Просто и удобно - поднес, ключ введен.

Можно кратко об этой технологии?
vovanse
Цитата(d7d1cd @ Apr 21 2016, 18:16) *
Можно кратко об этой технологии?


Ключи от домофона http://ru.aliexpress.com/wholesale?catId=0...archText=EM4305
http://www.emmicroelectronic.com/sites/def...205-4305_ds.pdf

Есть немного памяти куда можно записать данные.
aiwa
Цитата(d7d1cd @ Apr 19 2016, 11:05) *
Сейчас есть следующая идея. Программа в устройстве пользователя генерирует ключ шифрования случайным образом. Пользователь с помощью кнопок устройства определяет этот ключ и передает его продавцу лицензий. Продавец лицензий с помощью этого ключа создает код активации, в который "вшит" нужный срок действия программы, и продает этот код пользователю устройства. Пользователь вводит код активации в устройство. Программа устройства, если код активации "правильный", устанавливает время работы.

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


В свое время делал нечто подобное - для компакт-дисков. Только у меня, в отличие от переменного количества суток, функционал выдавался порциями, и поэтому алгоритм был немного попроще, но это не принципиально.
Я написал алгоритм, выдающий последовательность строк из шести букв и этот алгоритм включил в обе программы: в программу для бухгалтерии - продавца лицензий, и непосредственно в рабочую.
При обнулении счетчика. рабочая программа ожидала ввода следующего ключа, который формировался алгоритмом на основании старого и являлся следующим элементом последовательности.
Начальную строку для каждого компакта поначалу генерировали индивидуально, а потом, увидев кровавые мозоли от сего действа, начали шлепать идентичными.
yes
всю тему не осилил, если пишу боян - сори

просто берете серийный номер устройства + срок лицензии + еще что хотите (например случайное чисто)
добавляете CRC
потом обычным AES-128 (да и DES можно, наверно) код
к коду прилепить еще CRC для проверки ввода

в устройстве открываете (AES ключ секретен так же, как и прошивка), проверяете CRC, серийный номер и дату

по-моему получать что-то из устройства будет излишне


d7d1cd
Цитата(yes @ Apr 22 2016, 15:49) *
всю тему не осилил, если пишу боян - сори

просто берете серийный номер устройства + срок лицензии + еще что хотите (например случайное чисто)
добавляете CRC
потом обычным AES-128 (да и DES можно, наверно) код
к коду прилепить еще CRC для проверки ввода

в устройстве открываете (AES ключ секретен так же, как и прошивка), проверяете CRC, серийный номер и дату

по-моему получать что-то из устройства будет излишне

Вы написали не боян. Скажите, зачем нужен серийный номер?

Что если делать так: срок лицензии + "мусор" из случайных чисел + CRC ранее перечисленного. Далее шифруем все это с помощью AES. После вычисляем CRC шифровки. Передаем шифровку с CRC покупателю.
slanted
Цитата(d7d1cd @ Apr 24 2016, 11:20) *
Вы написали не боян. Скажите, зачем нужен серийный номер?

Что если делать так: срок лицензии + "мусор" из случайных чисел + CRC ранее перечисленного. Далее шифруем все это с помощью AES. После вычисляем CRC шифровки. Передаем шифровку с CRC покупателю.


Да, это вполне годный вариант аутентификации. Только вам не нужен AES, вам нужен криптографический хэш типа sha1.

Кстати, а какой-нибудь разъем в устройстве предусмотрен? Совать туда физический ключ — EEPROM'ку с подписью любой нужной длины.
d7d1cd
Цитата(slanted @ Apr 24 2016, 12:15) *
Кстати, а какой-нибудь разъем в устройстве предусмотрен? Совать туда физический ключ — EEPROM'ку с подписью любой нужной длины.

Разъема в устройстве нет.

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

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

Теперь у меня вопросы: каким образом генерировать новый ключ, какой он должен быть длины и каким образом с помощью этого ключа шифровать код активации?
ViKo
Дальше в лес - больше дров. Говорил уже, задайте в каждом устройстве индивидуальный серийный номер. А по нему в устройстве и в своем компе вычисляйте ключ. Который и надо задать кнопками. Пользователь вам - серийный номер, вы ему - ключЪ. Как генерить ключ, импровизируйте, на что голова нафантазирует.
d7d1cd
В общем, как в той сказке: "думал, думал и наконец придумал". А точнее, наверное, решил делать следующим образом.

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

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

Теперь у меня следующая головоломка: каким способом, используя пароль от генератора псевдослучайных чисел, мне создавать лицензионный ключ?
ViKo
А пользователя как собираетесь определять, по фамилии? Все равно идет идентификация запрашиваемого. Чем лучше серийного номера? По серийному номеру и номеру запроса (год, второй.. ) вычисляйте свою ПСП. Криптостойкость - одинаковая.
"думал, думал..." гора родила мышь.

А если пользователь сменился? Держать в своем компе список всех пользователей? А если какая-то случайная потеря пользователя произойдет? Обратится к вам человек, "имею ваш прибор, хочу продлить жизнь". А вы ему - "а откуда прибор к вам попал? Опишите того человека, что продал вам его - лысый, с длинным носом?"
d7d1cd
Цитата(ViKo @ May 20 2016, 09:31) *
А пользователя как собираетесь определять, по фамилии? Все равно идет идентификация запрашиваемого. Чем лучше серийного номера? По серийному номеру и номеру запроса (год, второй.. ) вычисляйте свою ПСП. Криптостойкость - одинаковая.
"думал, думал..." гора родила мышь.

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

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

У каждого устройства будет серийный номер. Следуя Вашим рекомендациям, я буду определять следующее случайное число для создания лицензионного ключа, по серийному номеру и номеру запроса. При этом все равно надо держать в своем компе список всех серийных номеров и сколько запросов от них было. Или я опять не прав?
ViKo
Цитата(d7d1cd @ May 20 2016, 09:56) *
У каждого устройства будет серийный номер. Следуя Вашим рекомендациям, я буду определять следующее случайное число для создания лицензионного ключа, по серийному номеру и номеру запроса. При этом все равно надо держать в своем компе список всех серийных номеров и сколько запросов от них было. Или я опять не прав?

Даете лицензию на год работы. По серийному номеру и текущему году (2016, в этом году) вычисляете свою хитрую комбинацию. Одинаково, что в приборе, что в компьютере. Если пользователь введет то, что вы ему дали, оно совпадет с тем, что высчитает прибор.
Время-то вы как-то будете иметь в приборе? Чтобы год работы отсчитать.
Если кто-то захочет на 5 лет лицензию купить, в следующий раз посчитаете для S/N и 2021. Э... срок-то надо уже заложить... Тогда задавайте сейчас год окончания лицензии. И пусть прибор работает, вычисляет код, пока он не совпадет со сроком окончания... Наверное, можно придумать проще.
Если интервалы будут меньше года, используйте еще и месяц. Например, 201605.
d7d1cd
Цитата(ViKo @ May 20 2016, 12:55) *
Если кто-то захочет на 5 лет лицензию купить, в следующий раз посчитаете для S/N и 2021. Э... срок-то надо уже заложить... Тогда задавайте сейчас год окончания лицензии. И пусть прибор работает, вычисляет код, пока он не совпадет со сроком окончания... Наверное, можно придумать проще.

Ну а разве не удобнее задавать в лицензионном ключе время действия в сутках? С учетом того, что я планирую хранить время действия в 2-х байтах, то максимум - это 65535 суток или 179 с лишним лет. Более чем предостаточно! В этом случае нет никакой привязки к дате. Пользователь может купить код и сколь угодно долго не вводить его в прибор. При этом его срок действия не теряется. И это намного проще!
При продаже устройства на него будет наносится начальный уникальный ключ (первое число из ПСП). Он и будет выполнять роль серийного номера. При запросе лицензионного ключа, пользователь будет сообщать этот номер (идентификация пользователя). Естественно, при этом надо хранить список всех серийных номеров и количество запросов. Эти данные надо сохранять в архиве на случай сбоя или умирания компа. Если быть вообще параноиком, то можно для каждого проданного устройства сгенерировать ПСП, распечатать ее и зачеркивать использованные коды. В общем, здесь полет фантазии может завести очень далеко.
jks
Придумываете пароль длиной до 32 символов.
Шифруете AES256. Получаете мастер ключ длиной 256бит (MKEY256).
Из S/N формируете блок длиной 256бит. Мастер ключом шифруете этот блок.
Получаете уникальный ключ для прибора KEY256.
Делите ключ на две половины по 128бит (KEY128_PRI, KEY128_SEC).
Один ключ KEY128_PRI зашиваете в прибор. Это будет начальный ключ прибора.
Формируете блок лицензии с некоторыми данными, например: S/N, срок окончания, число запусков и т.д.
В конец или определенное место блока добавляете второй ключ KEY128_SEC.
Ключом KEY128_PRI шифруете лицензию по AES128. После расшифровки блока лицензии и проверки достоверности обновляете начальный ключ на KEY128_SEC.
Теперь новый ключ будет использоваться для расшифровки лицензии. Если S/N прибора и лицензии не совпадают, то ключи не обновляются и лицензия не работает.
Если надо продлить лицензию генерите новую пару ключей [P,S].
P = KEY128_SEC.
S = IV(KEY128_SEC) + AES128(S/N, KEY128_PRI).
KEY128_PRI <= P,
KEY128_SEC <= S.
Ключи и лицензии одноразовые и генерятся на компе по простому правилу из единственного пароля.
Надо только запомнить пароль и знать для какого S/N генерить лицензию, и порядковый номер лицензии.

Осталось только решить вопрос как вводить в прибор много цифр.
aiwa
Цитата(d7d1cd @ May 20 2016, 09:01) *
Теперь у меня следующая головоломка: каким способом, используя пароль от генератора псевдослучайных чисел, мне создавать лицензионный ключ?

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




@Ark
Цитата(d7d1cd @ Apr 19 2016, 11:05) *
Здравствуйте все! Есть устройство на базе микроконтроллера MSP430F249. Под этот микроконтроллер написана программа. Для того, чтобы программа выполняла свои основные функции, пользователь должен приобрести код активации ...

Я бы еще мог понять топикстартера, если речь шла о "чистом" прикладном ПО, устанавливаемом на персональный компьютер...
А когда речь идет о "встроенном" ПО - извините! Человек, покупая ваше изделие, "автоматически" приобретает права на использование вашего ПО, по факту покупки.
Это ваша проблема, как защитить изделие от возможного несанкционированного копирования, а отнюдь не конечного пользователя. И не нужно перекладывать ее с больной головы на здоровую.
Вы что, взомнили себя "мелко-мягкими" монополистами, чтобы диктовать свои условия? Представьте, что у вас, грубо говоря, помещение горит, а автоматическая система пожаротушения говорит вам, что нужно "обновить лицензию", мол "срок годности" вышел!
Такие "изделяя" ни один серьезный заказчик покупать не будет. На фиг они не нужны! Идите в "бытовуху" и там "развлекайтесть" со своими "кодами доступа". Китайцы бысто объяснят вам, что к чему...
d7d1cd
Цитата(@Ark @ May 20 2016, 21:04) *
Я бы еще мог понять топикстартера, если речь шла о "чистом" прикладном ПО, устанавливаемом на персональный компьютер...
А когда речь идет о "встроенном" ПО - извините! Человек, покупая ваше изделие, "автоматически" приобретает права на использование вашего ПО, по факту покупки.
Это ваша проблема, как защитить изделие от возможного несанкционированного копирования, а отнюдь не конечного пользователя. И не нужно перекладывать ее с больной головы на здоровую.
Вы что, взомнили себя "мелко-мягкими" монополистами, чтобы диктовать свои условия? Представьте, что у вас, грубо говоря, помещение горит, а автоматическая система пожаротушения говорит вам, что нужно "обновить лицензию", мол "срок годности" вышел!
Такие "изделяя" ни один серьезный заказчик покупать не будет. На фиг они не нужны! Идите в "бытовуху" и там "развлекайтесть" со своими "кодами доступа". Китайцы бысто объяснят вам, что к чему...

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

P. S. Следующий раз, когда будете проходить мимо этой темы, проходите мимо...
@Ark
Цитата(d7d1cd @ May 20 2016, 22:59) *
... нужны устройства или "на фиг не нужны" решать точно не Вам...
... И , увы, точно не Вам, к вашему сожалению.
Решать будет потенциальный покупатель ваших изделий.
Я, всего лишь, встал на его точку зрения и попытался показать Вам,
как это выглядит с "противоположной стороны".
Так что, зря Вы обижаетесь...
Цитата(d7d1cd @ May 20 2016, 22:59) *
P. S. Следующий раз, когда будете проходить мимо этой темы, проходите мимо...
Как Вам будет угодно...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.