2010-04-15 5 views
23

Есть много вопросов, связанных с лицензионными ключами, заданными в Stack Overflow. Но они не отвечают на этот вопрос.Ищете алгоритм лицензионного ключа

Может ли кто-либо предоставить простой алгоритм лицензионного ключа, который является технологически независимым и не требует получения диплома по математике?

Алгоритм ключа лицензии аналогичен шифрованию с открытым ключом. Мне просто нужно что-то простое, которое может быть реализовано на любой платформе .NET/Java и использует простые данные, такие как символы.

Ответы, написанные как псевдокоды, являются совершенными.

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

  1. Клиент загружает программное обеспечение, которое генерирует уникальный ключ при первоначальном запуске/установке.
  2. Программное обеспечение работает в течение пробного периода.
  3. В конце испытательного периода требуется ключ авторизации.
  4. Клиент идет в назначенный веб-сайт, вводит свой код и получить код авторизации для того, чтобы программное обеспечение, после оплаты :)

Не бойтесь описать свой ответ, как будто вы разговариваете с 5yr как я не математик.

+2

Я думаю, что ключ «и не требует диплома в математике, чтобы понимать * и не так легко сломать его бессмысленно *», и в этом случае ответ вообще отсутствует. –

+1

Не забудьте добавить, что он должен быть бесплатным и вручен вам на серебряном блюде. –

+0

@GregS. Это спринт! LOL ... Я сделал некоторый поиск в Google, и мне не удалось найти разумный алгоритм. Надеясь, что кто-то может ссылаться на стоящую ссылку – giulio

ответ

34

Нет надежного алгоритма лицензирования. В самом деле. Даже не один. Для самого популярного, самого дорогого проприетарного программного обеспечения, которое вы можете купить, вы также можете найти «генераторы ключей» и взломанные версии, которые не требуют лицензирования.

Вместо того, чтобы беспокоиться о том, чтобы сделать его «нерушимым», просто сделайте что-нибудь простое. Популярный механизм заключается в том, чтобы при покупке запросить имя пользователя, а затем предоставить ему лицензионный ключ, полученный из криптографического хэша (например, MD5 sum) имени пользователя или некоторые изменения на нем. Затем в программном обеспечении вы снова запрашиваете свое имя, а также регистрационный ключ (это вещь, полученная из MD5); вы проверяете, что они совпадают, что активирует программное обеспечение.

Можно ли это взломать? Абсолютно. Как только кто-то выяснит, как вы генерируете лицензионные ключи, они могут создавать свои собственные. Но если вы сохраните базу данных «официальных» лицензионных ключей, которые вы создали до сих пор, по крайней мере, вы сможете позже идентифицировать мошенников (возможно, когда они попытаются загрузить «премиальный» контент или что-то еще).

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

+1

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

+0

Алгоритм должен также иметь способ истечения срока действия. Хорошая идея, но не требуется для активации в том, что я делаю. – giulio

+0

@giulio: вам не нужно выполнять истечение срока действия. Но вам нужно обеспечить достаточную соль, которую нельзя угадать. Дата создания - это стандартный сорт. –

1

В вопросах безопасности, а не повторное использование хорошо известный и проверенный алгоритм и пытается создать свой собственный (не имеющих математическое знание) является суицидальные

Раскрытие: Я совершенно не хватает математической степени, чтобы создать такой алгоритм , и, будучи откровенным, я лично не знаю никого, у кого это есть

+0

Я пробовал псевдо-алгоритм, я могу адаптироваться к стандартному языку программирования и использовать понятия о строках. Я нахожу, что он получает «самоубийство», если вы начинаете пытаться выполнять переводы на уровне байта. – giulio

+5

I * do * имеют диплом по математике с первичным исследованием в теории чисел (в котором многие из этих алгоритмов имеют свои корни), и я полностью согласен. –

+0

«не повторять хорошо известный и проверенный алгоритм и пытаться создать свой собственный» ... не потому, что он спрашивает здесь? Вы знаете, чтобы не делать то, что вы говорите ему не делать. – pc1oad1etter

3

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

В любом случае, вы можете с ним справиться. Многие программные средства используют имя (и, возможно, корпоративную) строку (ы) и хэш-функцию для генерации ключа. Преимущество этого состоит в том, что он является постоянным (пока имя одно и то же, хэш есть, и поэтому ключ). Это также очень простая система, особенно если вы используете хорошо известный хеш, такой как MD5.

hash = md5(name); 

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

validCode = getCode(name); 
hash = myHash(name^validCode); 

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

sysID = processor_name() | ram_Speed(); 
hash = md5(sysID & name); 

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

Надеюсь, это поможет с вашим вопросом.

+1

Стоит добавить секрет в строку, которая должна быть хэширована. Любой злоумышленник может просто назвать свое собственное имя MD5, добавив секрет (и используя более безопасный хэш, такой как SHA-2), делает его намного сложнее. Конечно, секрет должен быть включен в программное обеспечение и может быть извлечен. XORing с другой строкой (желательно, чтобы она выглядела как строка, используемая в программном обеспечении) поможет скрыть ее. – Martin

6

Я использую систему, как это:

• создать строку из окна лицензионного ключа + пробной даты окончания периода

• генерировать хэш (Sha/md5) из строки

• новообращенного суд дата окончания к междунар (например, количество дней)

• ключа становится пробной датой окончания + некоторая часть хэша

• преобразовать ключ только символы верхнего регистра, чтобы сделать его проще ввести

ABCD-DEFG-HIJK ...

валидация работает как

• Конвертирование ключ к байтам снова

• экстракт проб дата окончания

• создать строку из окна лицензионного ключа + дата окончания пробной

• хэш

• сравнить хеш с остатком ключа

Это затрудняет мою аудиторию.

+1

Спасибо. Этот подход очень похож на то, над чем я работал. Мне нужно было включить ряд элементов, чтобы сделать его воспроизводимым и уникальным для установки с датами истечения срока действия и другой информацией. – giulio

0

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

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

+0

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

2

Ответ заключается в том, что нет, нет алгоритма безопасного ключа лицензии, для которого не требуется математический диплом.

Ключевыми лицензионными ключами являются цифровые подписываемые с асимметричным алгоритмом шифрования. Вы подписываете данные ключа с помощью частного ключа шифрования и вставляете подпись в ключ, а проверка ключа (которая подразумевает проверку подписи между прочим) выполняется с помощью открытого ключа. Таким образом, никто не может создавать лицензионные ключи, если у них нет доступа к закрытому ключу, который является ... приватным. Проблема в том, что очень мало (и сложных) алгоритмов, которые имеют достаточно короткие размеры подписи, которые должны быть встроены в ключ продукта. RSA не является одним из них (размер подписи для RSA512 составляет 1024 бит - слишком много).

Вы можете проверить SDK SoftActivate Licensing, используя криптографию криптографической криптографии для генерации коротких лицензионных ключей с цифровой подписью (доступен исходный код C++/C#).

+4

Кроме того, если вы ищете SoftActivate онлайн, вы можете найти для него кейгенные трещины. Это должно сказать вам, насколько это действительно полезно. –

1

Поскольку любой алгоритм вы делаете собирается ломаются я бы сделать что-то простое, как это:

const string secretMumboJumbo = "sdfkldafskjlfajmkldsfjaewumaskldfladkkldsfklj" 

//For you to generate keys 
string GenerateLicenceKey(int idNr) 
{ 
    return Sha1Hmac(key=secretMumboJumbo, messageToEncode=idNr) 
} 

//For clients to check if key is valid, 
bool IsKeyValid(string key) 
{ 
    for(int i=0;i<maxNrOfLicenceKeys;i++) 
     if(key == GenerateLicenceKey(i)) 
     return true; 
    return false; 
} 

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

В большинстве фреймворков должна быть функция HMAC для SHA1 или какой-либо другой функции хэш-функции. В худшем случае вы можете заменить это на md5 (key + id)

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

+0

Спасибо, я заглянул в SHA-1 и обнаружил, что это значительный успех, md5 - это вариант. Я изучал классы, написанные на чистом J2SE. Они не так безопасны, но улучшение производительности является значительным. – giulio

+1

@giulio Performance хит? Как ключи вам нужны для генерации в секунду? Для пользователя, вводящего ключ, это одноразовый (или один раз нагрузка) событие. Для их генерации ... ну, я бы хотел запустить программное обеспечение для продажи бизнеса, когда ключевое поколение становится проблемой производительности. Многие алгоритмы генерации ключей преднамеренно выполняют плохо, чтобы помешать атакам грубой силы. Тем не менее, эта производительность попадает, как правило, становится шеей бутылки, если вы ... совершаете атаки грубой силы. – Martin

Смежные вопросы