Лучший механизм для генерации лицензионных ключей [закрыто]

35

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

Есть ли какие-либо ошибки, которые нужно учитывать при их реализации?

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

Джон Хопкинс
источник

Ответы:

23

Это примерно так же, как при хранении паролей. У вас должен быть уникальный секретный ключ, известный только генератору и вашей программе. Используйте этот ключ для манипулирования данными (имя пользователя, пароль, организация и т. Д.), А затем хешируйте его. Затем вы можете сделать что-нибудь тривиальное кодирование передачи в Base32 для хэша или просто переместить его в шестнадцатеричную строку, если вам не нужен формат.

Есть ли какие-либо ошибки, которые нужно учитывать при их реализации?

Храните секреты в тайне и отдельно. Сделайте вашу реализацию улучшенной. Если кто-то сломает это, вы можете легко изменить реализацию? Одной из распространенных реализаций в настольных приложениях является использование удаленного сервера для проверки лицензии. Это исключает возможность того, что кто-то может перепроектировать хеш или алгоритм путем проверки самого приложения.

Джош К
источник
11
BASE32 для кодирования является стандартом. Это позволяет легко вводить данные пользователем;) (Base32: выбор букв и цифр, которые сильно различаются. Например, 0 и O не в последовательности)
1
@Pierre: я не знал, хорошая информация!
Джош К
10

Этот же вопрос был задан на SO, и принятый ответ довольно хорош. Общая суть:

  • Взять имя пользователя
  • Объедините имя пользователя, секретный ключ и хеш с (например) SHA1
  • Распакуйте хеш SHA1 в виде буквенно-цифровой строки. Это индивидуальный пользовательский «Ключ продукта»
  • Внутри программы сделайте тот же хеш и сравните с ключом продукта. Если равно, хорошо.
Вальтер
источник
1

Мой предпочтительный метод состоит в том, чтобы сгенерировать 10000 случайных строк лицензий, SHA1 (или MD5), их хэшировать или HMAC, и включать все или часть SHA1 / MD5 хэша в сам исполняемый файл. Когда вводится строка лицензии, вы просто используете запутанный код, чтобы сгенерировать хеш строки и сравнить его со списком. Если это соответствует, это действительная лицензия. Если у вас мало лицензий, выпустите новую версию с большим количеством строк.

Использование только первых 96 битов хэша SHA1 вполне достаточно. Таким образом, 10000 лицензий займет менее 120 КБ. Алгоритмическая генерация ключей или создание генератора ключей были бы невозможны. Единственная уязвимость, о которой вам нужно беспокоиться, - это обратный инжиниринг или обход. (Или кто-то распространяет свой действительный ключ.)

Дэвид Шварц
источник