|
|
|
Привязка к железу. Защита ПО. CryptoAPI.
|
|||
|---|---|---|---|
|
#18+
Придумана следующая схема защиты: 1. Пользователь запустив программу делает запрос лицензии разработчику. В этом запросе информация по его железу. 2. Разработчик отправляет лицензию пользователю. 3. Пользователь принимает лицензию и работает в программе. Данную схему я раньше использовал в старом проекте. Запросы и лицензии были зашифрованы симметричным алгоритмом. Пароль вшит в программу. В новом проекте захотелось использовать асимметричный алгоритм. Основная цель: чтобы невозможно было создать генератор ключей. Лицензия будет зашифрована разработчиком, а расшифровываться клиентом. Шифрование лицензии я планировал производить приватным ключом, а расшифровку публичным. Т.е. открытый ключ вшит в программу. Вроде все получалось просто. Но оказалось, что шифрование производится только публичным, а расшифровка приватным. Как быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2012, 18:00 |
|
||
|
Привязка к железу. Защита ПО. CryptoAPI.
|
|||
|---|---|---|---|
|
#18+
Придумал следующее: 1. Шифровать файл лицензии симметричным алгоритмом. Пароль вышит в программу. 2. В файле лицензии находится цифровая подпись, сделанная приватным ключом разработчика. Проверка ее будет публичным ключом вшитым в программу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2012, 18:29 |
|
||
|
Привязка к железу. Защита ПО. CryptoAPI.
|
|||
|---|---|---|---|
|
#18+
shmelina Придумана следующая схема защиты: (...) Но оказалось, что шифрование производится только публичным, а расшифровка приватным. Это как, простите? Есть API, у которого наружу торчат полторы функции? Меняйте API, этот Вам не подходит. авторШифровать файл лицензии симметричным алгоритмом. Пароль вышит в программу.Минутку, а что вообще в файле лицензии? Если я правильно понимаю, L=L(h), где h - параметры "железа"; разработчику пересылается h, возвращается K=D(L(h)), в программе считается E(K) и L(h), проверяются на равенство. Смысл именно в том, что по L(h) нельзя узнать K без помощи разработчика. При таком варианте, правда, предполагается жёсткое правило "новое железо - новая лицензия", что может быть перебором. Если так, то в приведённом варианте (D=E) задача решается с помощью дизассемблера (узнаём L, E, генерируем K). автор2. В файле лицензии находится цифровая подпись, сделанная приватным ключом разработчика. Проверка ее будет публичным ключом вшитым в программу. То есть, отсылается h, присылается K=L(h), S=D(Hash(K)), проверяется K=L(h), E(S)=Hash(K). В принципе, это защита с помощью асимметричного алгоритма, но её эффективность не абсолютна. Ломаем: K генерировать умеем, если вдобавок вычислима L -1 и у нас есть, скажем, радужные таблицы на Hash, то можем получить серию значений D(t) с подобранными t ценой нескольких лицензий ("оракул"). Для алгоритма RSA, D(t)=t x mod n, где n известно атакующему. Соответственно, D(ab)=D(a)*D(b) mod n; и если атакующий просто получает возможность аккумулировать используемые ключи, через какое-то время он сможет для некоторых h генерировать S, и чем дальше тем больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2012, 02:19 |
|
||
|
Привязка к железу. Защита ПО. CryptoAPI.
|
|||
|---|---|---|---|
|
#18+
Если можно, то без формул. Я их не понимаю :). AbstractionМеняйте API, этот Вам не подходит. Я хотел бы воспользоваться стандартным алгоритмом, идущим в поставке Windows. Например, алгоритм RSA. Abstractionпредполагается жёсткое правило "новое железо - новая лицензия", что может быть перебором. Да, привязка к железу - это "жестко". Но как быть в нашей стране иначе? AbstractionВ принципе, это защита с помощью асимметричного алгоритма, но её эффективность не абсолютна. Ломаем: K генерировать умеем, если вдобавок вычислима L -1 и у нас есть, скажем, радужные таблицы на Hash, то можем получить серию значений D(t) с подобранными t ценой нескольких лицензий ("оракул"). Для алгоритма RSA, D(t)=t x mod n, где n известно атакующему. Соответственно, D(ab)=D(a)*D(b) mod n; и если атакующий просто получает возможность аккумулировать используемые ключи, через какое-то время он сможет для некоторых h генерировать S, и чем дальше тем больше. Приватный ключ легко можно подобрать? Вы можете что-то другое посоветовать? Я понимаю, что защита не бывает абсолютной. Хотелось бы значительно усложнить создание генератора ключей. Сама программа будет часто обновляться и сломанные версии не так страшны, как генератор ключей. Я надеялся, что асимметричный алгоритм существенно усложнит задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2012, 11:43 |
|
||
|
Привязка к железу. Защита ПО. CryptoAPI.
|
|||
|---|---|---|---|
|
#18+
shmelinaЕсли можно, то без формул. Я их не понимаю :). Не смешно, если спросите меня. ИМХО, применяя инструмент, желательно представлять себе теорию, на основе которой он работает. авторДа, привязка к железу - это "жестко". Но как быть в нашей стране иначе?Например, интернет-поводок. Например, давать право на несколько смен железа. Потому что при таком подходе, сдох жёсткий диск - сдохла лицензия. Какие-либо конкретные советы на этот счёт давать, не зная, что за продукт - не слишком осмысленно. авторПриватный ключ легко можно подобрать?Подбор закрытого ключа при известном открытом является задачей, не решаемой за сколько-нибудь разумное время - это, собственно, определение шифра. Но - это в рафинированных условиях, когда Боб публикует ключ, Алиса его использует один раз, шифруя сообщение, Ева перехватывает, не зная ничего о сообщении и пытается расшифровать. Если - если - мной правильно описана схема работы с ключами-лицензиями, то для успеха, хотя бы частичного, атаки "генератор ключей", приходится делать об атакующем достаточно сильные предположения. Но основная сложность задач информационной безопасности как раз в том, что атакующий не обязан идти по учтённому пути. Скажем, в описанной схеме, L есть фрагмент Вашего кода, неизменный от версии к версии (иначе с новой версией лицензия перестанет работать). Атакующий тогда может подменить L на L'; пусть также у него есть легально полученный ключ K 0 , S 0 =D(Hash(K 0 )). Он задаёт L'(h)=K 0 и даёт программе "лицензию" (K 0 , S 0 ). Программа проверяет: K=L(h), E(S)=Hash(K), лицензия легальна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2012, 12:39 |
|
||
|
Привязка к железу. Защита ПО. CryptoAPI.
|
|||
|---|---|---|---|
|
#18+
shmelina...Как быть? 1) Если Вы никогда в своей жизни не взламывали программы, то и сделать грамотную защиту - увы шансов конкретно у вас - мало. Хотите верьте, хотите проверьте. Или по другому: делать защиту будет один человек либо группа людей. А вот взламывать будут(при необходимости) - все кому не лень. Соотношение не то что в порядках а на сотни порядков разные!!! 2) Главное ставить цель не супер-пупер защита, а увеличение стоимости взлома , по отношению к цене сздания = хорошая защита!!! Т.е. если вы написали одну запятую, а для взлома надо ставить рядом доп. железку чтоб крутить тяжёлый мат. алгоритм = это хорошая защита... 3) Ваша ситуация напомнила мне случай из своей жизни. Когда ради интереса была сделана примочка для обхода похожей на вашу защиту. Так же считавилсь параметры железа, шло сравнение с ранее созданным (на этапе платной инсталяции) образцом. Ну и работа или посыл лесом. Найти место где идёт сравнение - пять минут делофф под отладчиком. Далее несколько телодвижений по обходу контроля целостности бинаря и забитию нопами этого кусочка кода... Ну и человечик который попросил - был несказанно рад юзанью своей любимой программки. Это пол. истории...Самое интересное случилось потом... На очередной софтверной выставке, я поговорил на стенде этой фирмы с разработчиками - дескать программа не плохая, но вот с защитой они мягко говоря не осилили... Прошло немного времени... Вышедшая очередная версия данной прожки развеселила меня до слёз... Ребята сканировали железо, делали уникальный отпечаток, далее куча серьёзных шифрований, телодвижений ну и куча всего...поработали так сказать в этом направлении(с учётом инфы от клиентов:) ). в конце концов опять две команды компарэ и работа либо посыл в лес пользователя. (увиденное вызвало умиление, смех и немного огорчённость)...Это был образчик самой плохой защиты которую можно придумать!!! При взломе защит встречаются как ошибки кода защит, так и явные ляпы. Собственно отсюда можно сделать вывод - если серьёзно защищать свой продукт, то делать это не специалисту - выкинутое на помойку время, силы и в конечном счёте деньги. удачи вам (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2012, 13:38 |
|
||
|
Привязка к железу. Защита ПО. CryptoAPI.
|
|||
|---|---|---|---|
|
#18+
Круглый, я полностью согласен с вами. Теоретически я понимаю как взламываются программы. На данном этапе я не пытаюсь сделать супер (даже по моим меркам) защиту. Это будет тупая проверка "то ли это железо". Я намерено не хочу тратить на это время. Скорее всего я не буду и в будущем усложнять взлом - это снизит распространение и популярность программы. Когда взломают мою программу я буду несказанно этому рад. Это значит, программа достигла определенного порога популярности. Это будет круто! Я это обязательно отмечу! Сейчас я хочу сделать защиту такой, чтобы тяжело было сделать генератор ключей. Поэтому решил использовать асимметричное шифрование ключей. Нельзя же назвать это большой тратой времени? Это же элементарно! Те, кто решит ломать защиту увидят, что ключ зашифрован асимметричным алгоритмом и плюнут с ним разбираться. Создавать генератор ключей им точно будет лень. Скорее всего они будут ломать программу и скорее всего быстро ее сломают. Новые версии будут выходить раз в два месяца и их придется ломать снова. Я так думаю. Меня это устраивает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2012, 14:09 |
|
||
|
Привязка к железу. Защита ПО. CryptoAPI.
|
|||
|---|---|---|---|
|
#18+
Как вариант, можно повторить концепцию RSA. Приложение получает произведение двух очень больших простых чисел и делит его на встроенный в программу ключ - простое число, одно из двух множителей. Результат деления, второй множитель - лицензионная информация. Без знания ключа получить лицензию можно только простым перебором делителей (брют форс). Важно. Результат работы не должен быть "да" или "нет" - это легко правится отладчиком. Результат обязательно должен принять участие в дальнейшем функционировании программы (каким-нибудь способом, хотя бы переход куда-то в зависимости от значения в мл. байте лицензии). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2012, 00:37 |
|
||
|
Привязка к железу. Защита ПО. CryptoAPI.
|
|||
|---|---|---|---|
|
#18+
DongorКак вариант, можно повторить концепцию RSA. Приложение получает произведение двух очень больших простых чисел и делит его на встроенный в программу ключ - простое число, одно из двух множителей. Результат деления, второй множитель - лицензионная информация. Без знания ключа получить лицензию можно только простым перебором делителей (брют форс). Важно. Результат работы не должен быть "да" или "нет" - это легко правится отладчиком. Результат обязательно должен принять участие в дальнейшем функционировании программы (каким-нибудь способом, хотя бы переход куда-то в зависимости от значения в мл. байте лицензии). Из "24 грехов компьютерной безопасности" и любой другой книги по ИБ : НИКОГДА не применяйте подобные самопальные алгоритмы. Такой, с позволения сказать, "алгоритм" ломается на счёт "ноль". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2012, 11:26 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37637074&tid=1342421]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 347ms |

| 0 / 0 |
