d7d1cd 0 19 апреля, 2016 Опубликовано 19 апреля, 2016 · Жалоба Здравствуйте все! Есть устройство на базе микроконтроллера MSP430F249. Под этот микроконтроллер написана программа. Для того, чтобы программа выполняла свои основные функции, пользователь должен приобрести код активации и передать его в устройство. Код активации устанавливает время работы основных функций программы в сутках. Программа микроконтроллера не доступна пользователю (микроконтроллер заблокирован на чтение программы). Код активации будет вводиться в устройство посредством кнопок самого устройства и его ЖК дисплея. Код активации, естественно, должен быть устойчив к взлому. Посоветуйте, как реализовать данный функционал. Сейчас есть следующая идея. Программа в устройстве пользователя генерирует ключ шифрования случайным образом. Пользователь с помощью кнопок устройства определяет этот ключ и передает его продавцу лицензий. Продавец лицензий с помощью этого ключа создает код активации, в который "вшит" нужный срок действия программы, и продает этот код пользователю устройства. Пользователь вводит код активации в устройство. Программа устройства, если код активации "правильный", устанавливает время работы. Если у кого-то есть другие идеи, поделитесь, пожалуйста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amiller 2 19 апреля, 2016 Опубликовано 19 апреля, 2016 · Жалоба Что-то я как то слабо представляю себе, как пользователь вводит длинный код с помощью клавиатуры молча (не ругаясь матом). Если уж Вы решаете вопросы монетизации использования устройства, то может стоило раскошелиться на встроенный GSM-модем? И сделать нормальный сервер лицензирования и обновления ПО? Или реализуйте связь с компьютером, где будет ПО, предназначенное для получения лицензий через интернет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 19 апреля, 2016 Опубликовано 19 апреля, 2016 · Жалоба Что-то я как то слабо представляю себе, как пользователь вводит длинный код с помощью клавиатуры молча (не ругаясь матом). Если уж Вы решаете вопросы монетизации использования устройства, то может стоило раскошелиться на встроенный GSM-модем? И сделать нормальный сервер лицензирования и обновления ПО? Или реализуйте связь с компьютером, где будет ПО, предназначенное для получения лицензий через интернет. Как пользователь будет вводить код активации - это другой вопрос и он не рассматривается в этой теме (хотя хочется сказать, что это будет не так сложно, как можно подумать). GSM не выход, так как устройство может использоваться там, где нет сотовой связи. Компьютер не хочу использовать по той причине, что тогда пользователю кроме устройства нужен будет еще компьютер и преобразователи для связи с устройством. Устройство должно быть полностью автономным и не требовать для своей работы или настройки GSM модема, компьютера и прочих аксессуаров. Вместе с этим, подобрать код активации устройства должно быть неоправданно сложно (хотя, с учетом того, что ввод кода осуществляется через кнопки, подобрать его уже сложно). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slanted 0 19 апреля, 2016 Опубликовано 19 апреля, 2016 · Жалоба Что-то я как то слабо представляю себе, как пользователь вводит длинный код с помощью клавиатуры молча (не ругаясь матом). Ну вот в осциллографах же вводят опции. Вообще без клавиатуры, крутя энкодер и ругаясь матом. Сейчас есть следующая идея. Программа в устройстве пользователя генерирует ключ шифрования случайным образом. Пользователь с помощью кнопок устройства определяет этот ключ и передает его продавцу лицензий. Продавец лицензий с помощью этого ключа создает код активации, в который "вшит" нужный срок действия программы, и продает этот код пользователю устройства. Пользователь вводит код активации в устройство. Программа устройства, если код активации "правильный", устанавливает время работы. Обычный challenge-response. На больших железках это реализуется с помощью асимметричной криптографии: private key есть только у продавца, он им подписывает файл лицензии. Public key вшивается в устройство, с его помощью софт проверяет, что подсунутая лицензия действительно от продавца. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 19 апреля, 2016 Опубликовано 19 апреля, 2016 · Жалоба Если у МК есть уникальный серийный номер, то можно им воспользоваться. В STM32 есть. Если нет, можно свой создать при программировании. Ответный код должен в некой комбинации с серийным номером давать разрешение на работу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 19 апреля, 2016 Опубликовано 19 апреля, 2016 · Жалоба Обычный challenge-response. На больших железках это реализуется с помощью асимметричной криптографии: private key есть только у продавца, он им подписывает файл лицензии. Public key вшивается в устройство, с его помощью софт проверяет, что подсунутая лицензия действительно от продавца. Где можно почитать про данный метод? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slanted 0 19 апреля, 2016 Опубликовано 19 апреля, 2016 · Жалоба Где можно почитать про данный метод? https://en.wikipedia.org/wiki/Digital_signature https://en.wikipedia.org/wiki/Challenge%E2%..._authentication последнее все ж больше интерактивная штука, если вдруг надумаете gsm модем туда ставить или что-то такое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amiller 2 19 апреля, 2016 Опубликовано 19 апреля, 2016 · Жалоба Я всё же считаю в цепочке взаимодействия самым ненадёжным элементом человека. И вводить руками длинные неупорядоченные ключи всё же сложно. Если нет связи и компьютера поблизости, то я бы предложил такой вариант: В устройстве должен стоять какой то съёмный носитель информации (flash-card) или что-то подобное. На этом носителе в кодированном виде хранятся сгенерированные ключи, производится отсчёт времени работы в любом формате. По истечению времени работы носитель вынимается и вставляется в компьютер (планшет, смартфон), в котором работает ПО, способное продлить лицензию. Хотя это тоже сложно. Ещё лучше поставить в устройство блютуз-адаптер за 2 доллара. А затем просто подойти к устройству со смартфоном. Далее всё происходит автоматически: В устройстве происходит продление времени работы, а со смартфона соответствующее время списывается. Ну а далее нужно продумать механизм, как владелец смартфона будет покупать время у производителя устройств. Конечно путь сложный, но однозначно более удобный для пользователя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 20 апреля, 2016 Опубликовано 20 апреля, 2016 · Жалоба Я всё же считаю в цепочке взаимодействия самым ненадёжным элементом человека. И вводить руками длинные неупорядоченные ключи всё же сложно. Если нет связи и компьютера поблизости, то я бы предложил такой вариант: В устройстве должен стоять какой то съёмный носитель информации (flash-card) или что-то подобное. На этом носителе в кодированном виде хранятся сгенерированные ключи, производится отсчёт времени работы в любом формате. По истечению времени работы носитель вынимается и вставляется в компьютер (планшет, смартфон), в котором работает ПО, способное продлить лицензию. Хотя это тоже сложно. Ещё лучше поставить в устройство блютуз-адаптер за 2 доллара. А затем просто подойти к устройству со смартфоном. Далее всё происходит автоматически: В устройстве происходит продление времени работы, а со смартфона соответствующее время списывается. Ну а далее нужно продумать механизм, как владелец смартфона будет покупать время у производителя устройств. Конечно путь сложный, но однозначно более удобный для пользователя. То, что в этой цепочке самый не надежный это человек, я полностью согласен. Однако, еще человек хитер и жаден. Даже если перейти через все ограничения (нет сотовой связи и прочее) и организовать лицензирование в автоматическом режиме, то это даст какую-то реальную возможность взломать систему лицензирования, так как будет электронный доступ в прибор (имеется ввиду ввод ключа). Поэтому был реализован ввод ключа через кнопки, когда ввод большого количества ключей будет очень долгим по времени. Если покупателю будет проблематично часто вводить код (по причине кривых рук или еще чего-то), то он может купить ключ лицензии на очень долгий срок (например на 2 года), далее, используя матерный язык, постороннюю помощь и прочие инструменты, он вводит код в устройство и забывает об этом кошмаре на 2 года. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 20 апреля, 2016 Опубликовано 20 апреля, 2016 · Жалоба ...забывает об этом кошмаре на 2 года. Лично я сразу-бы забыл о таком кошмаре ВООБЩЕ не покупая такое устройство. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
controller_m30 1 20 апреля, 2016 Опубликовано 20 апреля, 2016 (изменено) · Жалоба Можно проще. Срок работы устройства задавать при изготовлении. Сделать три разновидности устройств, отличающихся временем работы: "пробник на неделю", на год, и на (допустим) три года. "Пробник на неделю" продаётся по себестоимости изготовления + какая-то гипотетическая выгода за неделю (или без неё, как угодно). На год - по цене выгоды за год. На три - по цене выгод за три года. И никаких кодов вводить не надо. Включил и работает. Время вышло - остановилось устройство. Хочет чтоб работало 10 лет: пусть купит 3 устройства на 3 года и 1 устройство на год :rolleyes: Изменено 20 апреля, 2016 пользователем controller_m30 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 20 апреля, 2016 Опубликовано 20 апреля, 2016 · Жалоба Лично я сразу-бы забыл о таком кошмаре ВООБЩЕ не покупая такое устройство. Лично я, не зная что это за устройство, от подобных заявлений воздержался бы... Можно проще. Срок работы устройства задавать при изготовлении. Сделать три разновидности устройств, отличающихся временем работы: "пробник на неделю", на год, и на (допустим) три года. "Пробник на неделю" продаётся по себестоимости изготовления + какая-то гипотетическая выгода за неделю (или без неё, как угодно). На год - по цене выгоды за год. На три - по цене выгод за три года. И никаких кодов вводить не надо. Включил и работает. Время вышло - остановилось устройство. Хочет чтоб работало 10 лет: пусть купит 3 устройства на 3 года и 1 устройство на год :rolleyes: Спасибо за совет. Подобная схема не подойдет по той причине, что устройство может не использоваться какое-то время. В результате покупатель потратит деньги зря и вообще вряд ли согласится на таких условиях покупать устройство. Хочется сказать, что ввод кода в устройство не является проблемой раз и не является темой для обсуждения здесь два. То, что устройство будет лицензироваться кодом активации и то, что он будет вводиться с кнопок это решенный вопрос. Вопросом данной темы является как более надежно и безопасно создавать и идентифицировать код активации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 20 апреля, 2016 Опубликовано 20 апреля, 2016 · Жалоба Лично я, не зная что это за устройство, от подобных заявлений воздержался бы... Лично я зная, что уникальных устройств для уникальных целей не бывает, сделал это заявление. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 21 апреля, 2016 Опубликовано 21 апреля, 2016 (изменено) · Жалоба Лично я зная, что уникальных устройств для уникальных целей не бывает, сделал это заявление. Ну что ж... Имея статус "Гуру" и почти двенадцатилетнюю регистрацию на этом форуме, думаю, что Вам под силу создать почти любое устройство. Но таких как Вы мало, а чтобы создать устройство самому потребуются знания и опыт в данной области, время и огромное желание. Таким образом, купить устройство и периодически вводить в него коды активации несоизмеримо проще, чем самому создать устройство. Конечно, можно еще попробовать заказать устройство у другого разработчика, но это совсем другая история. Выше приведенный опус был лирическим отступлением. Теперь призываю всех вернуться к моим баранам. Поставлю вопрос по-иному. Каким методом передать в устройство 2 байта, чтобы общее количество передаваемой информации было минимальным, а сложность взлома данного метода была неоправданно высокой? Изменено 21 апреля, 2016 пользователем d7d1cd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
controller_m30 1 21 апреля, 2016 Опубликовано 21 апреля, 2016 · Жалоба Перейти от единиц измерения "байт" к единицам измерения "бит". Полезную информацию, которая допустим содержится только в двух байтах - разбиваем на биты, и перемешиваем с битами ещё к примеру 10 байт ("балласт"). Не с байтами, а с битами. Можно ещё добавить CRC-код к полезной информации. Разбить его на биты, и тоже беспорядочно смешать с битами "балласта". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться