Подтвердить что ты не робот

Поиск алгоритма лицензионного ключа

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

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

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

Ответы, написанные как псевдокод, идеальны.

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

• конвертировать дату окончания тестирования в int (например, количество дней)

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

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

ABCD-DEFG-HIJK...

проверка работает как

• снова преобразовать ключ в байты

• выдать дату окончания судебного разбирательства

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

• hash

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

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

Ответ 3

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

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

hash = md5(name);

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

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

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

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)

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

Ответ 7

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

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