Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как создать регистрационные ключи для программ, высылаемых разным людям по интернет?

12K
10 марта 2007 года
Evg64
35 / / 15.01.2007
Спасибо, если вы зашли в эту тему!
Перво-наперво, я хотел узнать, насколько это вообще реально и какие средства для этого нужны. Подскажите?
Если кто-то не понял, чего я хочу, то объясню на примере: в лицензионных играх перед первым запуском нужно ввести лицензионный ключ, иначе игра не запустится. Мне нужен такой же механизм, пусть и совсем простенький, хоть самый незамысловатый. Как это реализовать?:)
268
11 марта 2007 года
Михаил
587 / / 25.06.2005
ну и генерируй каким-нибудь незамысловатым образом(известным только тебе) этот ключик, затем высылай либо по почте, либо создай сайт, который и будет их высылать по запросу пользователя. Ключами могут быть хеши каких либо строк например.
261
11 марта 2007 года
ahilles
1.5K / / 03.11.2005
самый простой: можно просто взять какое нибудь слово допустим слово "codenet.ru" и втавить после каждой буквы две случайных буквы.......
63
11 марта 2007 года
Zorkus
2.6K / / 04.11.2006
Я так понял, автору нужен механизм поддержки аутентификации. Тут есть какие варианты (простые, для примера).
1) Можно регистрироваться через инет.
Человек вводит ключ, программа обращается к удаленному серверу, на котором ключ проверяется, отсылает ответ клиенту, и на основании этого ответа, программа решает, переключиться на полную версию или нет. Тогда надо, высылать по почте автору ключ, например. Сложности - обеспечить шифрование на передаче запроса серверу, и главное - на передаче сервером подтверждения/отрицания корректности ключа.
2) Можно жестко зашить в прогу список сгенеренных ключей (скажем, 100 000 разных, 256 - битных), и потом вести учет свободных/занятых/скомпрометированных ключей, которые ты высылаешь пользователю. Сложность - как их хранить, чтоб нельзя было выдрать из бинарника.
3) http://forum.codenet.ru/showthread.php?t=35581 - вот тут похожие вопросы обсуждались. Если полностью рассказывать про них, долго. Спрашивай конкретней:) В общем про регкоды посмотри прилепленные ссылки в разделе КБ. Например, Склярова, а лучше - в Google:).
[color=green] Может быть, перенести тему в Компьютерная Безопасность?[/color]
12K
02 апреля 2007 года
Evg64
35 / / 15.01.2007
1) А с помощью каких средств можно заставить программу обращаться к удаленному серверу и где этот сервер вообще должен находиться? На интернет сайте? А как вложить на сайт этот сервер, который будет проверять правильность введенных ключей?
P.S. По сути мне надо, чтобы человек, получивший файл, не мог отправить его другому человеку на пользование. Быть может, кто-нибудь порекомендует наиболее простой вариант решения этой задачи?
12K
02 апреля 2007 года
Evg64
35 / / 15.01.2007
Цитата: Михаил
ну и генерируй каким-нибудь незамысловатым образом(известным только тебе) этот ключик, затем высылай либо по почте, либо создай сайт, который и будет их высылать по запросу пользователя. Ключами могут быть хеши каких либо строк например.



Вот сгенерировал я ключик, а как заставить программу проверять, подходит ли этот ключик? С чего конкретно надо начать?

63
03 апреля 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: Evg64
1) А с помощью каких средств можно заставить программу обращаться к удаленному серверу и где этот сервер вообще должен находиться? На интернет сайте? А как вложить на сайт этот сервер, который будет проверять правильность введенных ключей?


Где он должен находиться - это не принципиально для построения защиты, но можно считать (как делается в большинстве подобных программ), что он удален. Необходимо организивать доступ к нему по защищенному протоколу - но это уже технические подробности.

Цитата: Evg64

P.S. По сути мне надо, чтобы человек, получивший файл, не мог отправить его другому человеку на пользование. Быть может, кто-нибудь порекомендует наиболее простой вариант решения этой задачи?


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

Цитата: Evg64

Вот сгенерировал я ключик, а как заставить программу проверять, подходит ли этот ключик? С чего конкретно надо начать?


Какой конкретно ключ? Поясни. В примитивном случае - можно хранить в программе некоторые массивы структур типа

 
Код:
struct Key
{
char hash[length]; // Хэш ключа.
enumState state; /* Описание его состояние - свободен, занят, скомпрометирован.*/
}

И при попытке вставить ключ - вычислить от него хэш, и проверить, совпадает ли он с каким либо. Далее, смотря по состоянию - либо регистрируем программу, либо сообщеем, что такой ключ уже кем то используется, либо (в худшем случае:)) сообщаем о попытке взлома куда следует;).
12K
03 апреля 2007 года
Evg64
35 / / 15.01.2007
Какой конкретно ключ? - А какие способы бывают? Желательно какие-нибудь легкореализуемые))

А вот еще насчет приведенного кода: в какой среде этот код писать? В той же, в которой написана и программа?

А что такое хэш ключа? Откуда он берется?
63
04 апреля 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: Evg64
Какой конкретно ключ?


Ключ регистрации (не принципиально, что именно он из себя представляет).

Цитата: Evg64

- А какие способы бывают? Желательно какие-нибудь легкореализуемые))


Легче всего - распространять под GPL:) Про способы защиты программ от копирования - посмотри прилепленные ссылки раздела "Компьютерная безопасность", и несколько тем там были, могут быть полезны. И потом уже задавай конкретные вопросы. А так же определись, что тебе все таки нужно - шифровать файлы, или реализовать регистрацию программ?

Цитата: Evg64

А вот еще насчет приведенного кода: в какой среде этот код писать? В той же, в которой написана и программа?


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

Цитата: Evg64

А что такое хэш ключа? Откуда он берется?


Вычисляется спец. хэш - функцией. Советую спрева почитать FAQ по криптографии в разделе КБ.

12K
08 апреля 2007 года
Evg64
35 / / 15.01.2007
1)Мне определенно нужно реализовывать регистрацию программ, чтобы люди не смогли пересылать приложение друг другу и пользоваться им на разных компьютерах.
2) Хэш ключа и код регистрации - одно и то же?
3) Как здесь в сообщениях делать цитаты? Я понял, как цитировать весь ответ, а как цитировать произвольно выбранную его часть?
63
09 апреля 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: Evg64
1)Мне определенно нужно реализовывать регистрацию программ, чтобы люди не смогли пересылать приложение друг другу и пользоваться им на разных компьютерах.


Перечитай посты выше, там тебе указали несколько способов.

Цитата: Evg64

2) Хэш ключа и код регистрации - одно и то же?


Ты игнорировал мой совет почитать фак по криптографии:). Поясню терминологию (в некоторых местах может упрощу). В общем случае - есть подтвержденное и заверенное (скажем, купленное, полученное по наследству или выигранное в лотерею) право пользователя юзать полнофункциональную версию программы. Как это право воплотить и защитить от посягательств? Берем некоторые данные, которые злоумышленнику будет трудно подобрать - это назовем ключ активации, регистрационный код и.т.д. Пользователь получает его в виду ценного письма, на мыло, или еще как то. Далее - установленная программа должна как то проверить, что те данные, которые ввел пользователь, пытаясь зарегаться - корректны, т.е. -
1) Данный ключ является правильным (официальным, оплаченным) ключом.
2)Данный ключ не был до этого кем-то использован.
Теперь как это реализовать. Программа принимает введенный пользовтелем ключ, и отсылает его по защищенному протоколу на сервер регистрации. На СР хранится централизованная, управляемая издателями программы БД. В ней хранятся хэши существующих ключей, и для каждого ключа есть статус - свободен ключ (ввод такого ключа означает успешную регистрацию), или занят .
Для этого мы при при проверке ключа считаем его хэш и смотрим, есть ли такой в БД, и если есть - то каков его статус. Далее по обстоятельствам.
Как понятней-то объяснить?

12K
12 апреля 2007 года
Evg64
35 / / 15.01.2007
В теории мне понятно, спасибо) Вот теперь насчет практики: с помощью каких средств можно сделать так, чтобы программа отсылала отсылала введенный ключ по защищенному протоколу?
А база с хэшами ключей и их статусами может храниься на жестком диске моего компьютера? А в интернет-системах для хранения информации (например, ifolder)?
63
13 апреля 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: Evg64
В теории мне понятно, спасибо) Вот теперь насчет практики: с помощью каких средств можно сделать так, чтобы программа отсылала отсылала введенный ключ по защищенному протоколу?


Говорю, читай faq в разделе КБ! там есть ссылки по SSL, SSH и другие.

Цитата: Evg64

А база с хэшами ключей и их статусами может храниься на жестком диске моего компьютера? А в интернет-системах для хранения информации (например, ifolder)?


На сервере с строго ограниченном доступом. Но это лучше вопрос в разделе по БД задавай.

241
16 апреля 2007 года
Sanila_san
1.6K / / 07.06.2005
Цитата: Evg64
По сути мне надо, чтобы человек, получивший файл, не мог отправить его другому человеку на пользование.

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

12K
16 апреля 2007 года
Evg64
35 / / 15.01.2007
А вообще это сложно узнать MAC-адрес сетевой карты? Обычный пользователь в состоянии это сделать?
240
17 апреля 2007 года
aks
2.5K / / 14.07.2006
Обычный, если он не в конец полный новичек (будем поллиткорректны =))) конечно же очень просто узнает MAC адрес. Но суть то не в этом. Обычный пользователь не знает к какому именно железу вы привязываетесь (ведь кроме MAC адреса на машине есть куча других уникальных параметров) и самое главное он не знает по какому алгоритму изо всех этих параметров вы генерируете ключ. Тут уже поможет дизассемблирование только и детальный анализ ассемблерного кода. Но рядовой юзер на это не способен.
63
18 апреля 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: Sanila_san
Надёжный вариант - собрать ID оборудования при установке (например, MAC-адрес сетевой карты), по этим данным сгенерировать на сервере файл лицензии, прислать его пользователю.


А что, если пользователь например, поставил прогу, она считала оборудование, отослала на сервер ,тот сгенерил лицензию. Пользователь ее получил, поставил и счастлив. А потом он поменял железо. И что тогда?..;)

240
18 апреля 2007 года
aks
2.5K / / 14.07.2006
Тогда юзер шлет со своего мыла письмо с просбой обновить ключ. В базе лицензий на юзера жестко забито мыло (или еще другая авторизационная информация) и ему генерится новый ключ, а старый анулируется (чтобы не плодить одним мылом ключи =))
63
18 апреля 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: aks
Тогда юзер шлет со своего мыла письмо с просбой обновить ключ. В базе лицензий на юзера жестко забито мыло (или еще другая авторизационная информация) и ему генерится новый ключ, а старый анулируется (чтобы не плодить одним мылом ключи =))


Стойкость защиты определяется самым слабым звеном (прошу прощения за штамп...):). Ты предлагаешь вначале делать жесткую привязку к железу - а потом, когда оно смениться, в качестве реаниматора использовать мыло?:D
Имхо, жесткую привязку к оборудованию надо использовать, когда оно является неотъемлемой частью программы. Скажем, как StarForce на CD.

240
18 апреля 2007 года
aks
2.5K / / 14.07.2006
Жескую привязку к железу предложил не я )
Собственно это обравданно при наличии скажем какихнибудь железячных (USB например) ключей )
63
18 апреля 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: aks
Жескую привязку к железу предложил не я ))


Это не освобождает тебя от ответственности!:cool:

Цитата: aks

Собственно это обравданно при наличии скажем какихнибудь железячных (USB например) ключей )


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

241
19 апреля 2007 года
Sanila_san
1.6K / / 07.06.2005
Цитата: Zorkus
Ну так и я про это говорю. Но имхо - если есть возможность обойтись без них, то надо попробовать.

ИМХО, если не заключать фрагменты кода в железное устройство (ПЗУ, например), такая защита будет сломана.

63
23 апреля 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: Sanila_san
ИМХО, если не заключать фрагменты кода в железное устройство (ПЗУ, например), такая защита будет сломана.


Посмотри ссылку на обсуждение, которую я давал. Во-первых, аппаратные ключи будут стоить денег. Во вторых - они усложнят работу всего сервиса.
А нужен компромисс между защищенностью и удобством пользователей. Если будет найдена уязвимость -то можно на несколько дней закрыть сервис, перепроверить БД игры, и выпустить обновленых клиентов. НО - если все будет сденано неудобно, громоздко и дорого - никто просто не станет играть...:(

100.0M
16 июля
AmigoBlack
0 / / 16.07.2019
Цитата: Evg64
1) А с помощью каких средств можно заставить программу обращаться к удаленному серверу и где этот сервер вообще должен находиться? На интернет сайте? А как вложить на сайт этот сервер, который будет проверять правильность введенных ключей?
P.S. По сути мне надо, чтобы человек, получивший файл, не мог отправить его другому человеку на пользование. Быть может, кто-нибудь порекомендует наиболее простой вариант решения этой задачи?

добавь функцию проверки "mac-адрес компьютера". и программа будет работать только в этом компьютере

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог