|
|
  |
Лицензирование программы для микроконтроллера |
|
|
|
Apr 21 2016, 11:16
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

|
Цитата(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? А в метке шифрованная информация. Просто и удобно - поднес, ключ введен. Можно кратко об этой технологии?
|
|
|
|
|
Apr 22 2016, 01:56
|
Местный
  
Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682

|
Цитата(d7d1cd @ Apr 19 2016, 11:05)  Сейчас есть следующая идея. Программа в устройстве пользователя генерирует ключ шифрования случайным образом. Пользователь с помощью кнопок устройства определяет этот ключ и передает его продавцу лицензий. Продавец лицензий с помощью этого ключа создает код активации, в который "вшит" нужный срок действия программы, и продает этот код пользователю устройства. Пользователь вводит код активации в устройство. Программа устройства, если код активации "правильный", устанавливает время работы.
Если у кого-то есть другие идеи, поделитесь, пожалуйста. В свое время делал нечто подобное - для компакт-дисков. Только у меня, в отличие от переменного количества суток, функционал выдавался порциями, и поэтому алгоритм был немного попроще, но это не принципиально. Я написал алгоритм, выдающий последовательность строк из шести букв и этот алгоритм включил в обе программы: в программу для бухгалтерии - продавца лицензий, и непосредственно в рабочую. При обнулении счетчика. рабочая программа ожидала ввода следующего ключа, который формировался алгоритмом на основании старого и являлся следующим элементом последовательности. Начальную строку для каждого компакта поначалу генерировали индивидуально, а потом, увидев кровавые мозоли от сего действа, начали шлепать идентичными.
|
|
|
|
|
Apr 24 2016, 07:20
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

|
Цитата(yes @ Apr 22 2016, 15:49)  всю тему не осилил, если пишу боян - сори
просто берете серийный номер устройства + срок лицензии + еще что хотите (например случайное чисто) добавляете CRC потом обычным AES-128 (да и DES можно, наверно) код к коду прилепить еще CRC для проверки ввода
в устройстве открываете (AES ключ секретен так же, как и прошивка), проверяете CRC, серийный номер и дату
по-моему получать что-то из устройства будет излишне Вы написали не боян. Скажите, зачем нужен серийный номер? Что если делать так: срок лицензии + "мусор" из случайных чисел + CRC ранее перечисленного. Далее шифруем все это с помощью AES. После вычисляем CRC шифровки. Передаем шифровку с CRC покупателю.
|
|
|
|
|
Apr 24 2016, 09:15
|
Частый гость
 
Группа: Участник
Сообщений: 140
Регистрация: 2-01-08
Пользователь №: 33 768

|
Цитата(d7d1cd @ Apr 24 2016, 11:20)  Вы написали не боян. Скажите, зачем нужен серийный номер?
Что если делать так: срок лицензии + "мусор" из случайных чисел + CRC ранее перечисленного. Далее шифруем все это с помощью AES. После вычисляем CRC шифровки. Передаем шифровку с CRC покупателю. Да, это вполне годный вариант аутентификации. Только вам не нужен AES, вам нужен криптографический хэш типа sha1. Кстати, а какой-нибудь разъем в устройстве предусмотрен? Совать туда физический ключ — EEPROM'ку с подписью любой нужной длины.
|
|
|
|
|
Apr 24 2016, 19:12
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

|
Цитата(slanted @ Apr 24 2016, 12:15)  Кстати, а какой-нибудь разъем в устройстве предусмотрен? Совать туда физический ключ — EEPROM'ку с подписью любой нужной длины. Разъема в устройстве нет. Сегодня было время подумать над моей задачей и я понял, что варианты, предложенные controller_m30 и slanted мне не подходят. По крайней мере без соответствующих доработок. Все дело в том, что система активации должна быть такой, что код активации должен подходить только к одному устройству и только один раз. У покупателя может быть несколько устройств и код активации должен быть индивидуальным и одноразовым для каждого устройства. Чтобы код активации был индивидуальным и одноразовым для каждого устройства, его необходимо шифровать каждый раз новым ключом. Получается, что этот ключ должно генерировать само устройство, а покупатель будет передавать его мне для генерации нового кода активации. Или можно сделать систему активации так, что новый ключ будет генерироваться по заранее известному алгоритму. При этом, из-за того, что начальное значение ключа в каждом устройстве индивидуально, следующий сгенерированный ключ в данном устройстве с большой долей вероятности не будет иметь такое же значение, как и в другом устройстве. Тем более у одного и того же покупателя. Теперь у меня вопросы: каким образом генерировать новый ключ, какой он должен быть длины и каким образом с помощью этого ключа шифровать код активации?
|
|
|
|
|
May 20 2016, 06:01
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

|
В общем, как в той сказке: "думал, думал и наконец придумал". А точнее, наверное, решил делать следующим образом.
Для каждого устройства будет задан начальный уникальный ключ. Назовем его пароль. С помощью этого пароля будет создан первый лицензионный ключ. При вводе этого ключа в устройство, последнее с помощью имеющегося пароля расшифрует лицензию и, посредством генератора псевдослучайных чисел, сгенерирует следующий пароль. Я, имея параметры генератора псевдослучайных чисел, знаю какой следующий пароль будет сгенерирован. При запросе второго лицензионного ключа я создаю его, используя этот следующий пароль. Пользователь вводит второй ключ в устройство, устройство производит расшифровку, генерирует следующий пароль и т. д.
Таким образом, каждый новый лицензионный ключ будет создаваться используя новый пароль, что значительно повышает криптостойкость ключа, я так думаю... Кроме этого, пользователю не нужно передавать мне никаких данных.
Теперь у меня следующая головоломка: каким способом, используя пароль от генератора псевдослучайных чисел, мне создавать лицензионный ключ?
|
|
|
|
|
May 20 2016, 06:56
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

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

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(d7d1cd @ May 20 2016, 09:56)  У каждого устройства будет серийный номер. Следуя Вашим рекомендациям, я буду определять следующее случайное число для создания лицензионного ключа, по серийному номеру и номеру запроса. При этом все равно надо держать в своем компе список всех серийных номеров и сколько запросов от них было. Или я опять не прав? Даете лицензию на год работы. По серийному номеру и текущему году (2016, в этом году) вычисляете свою хитрую комбинацию. Одинаково, что в приборе, что в компьютере. Если пользователь введет то, что вы ему дали, оно совпадет с тем, что высчитает прибор. Время-то вы как-то будете иметь в приборе? Чтобы год работы отсчитать. Если кто-то захочет на 5 лет лицензию купить, в следующий раз посчитаете для S/N и 2021. Э... срок-то надо уже заложить... Тогда задавайте сейчас год окончания лицензии. И пусть прибор работает, вычисляет код, пока он не совпадет со сроком окончания... Наверное, можно придумать проще. Если интервалы будут меньше года, используйте еще и месяц. Например, 201605.
|
|
|
|
|
May 20 2016, 12:36
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

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