Каков хороший подход для разработки простого генератора / верификатора серийного номера? - PullRequest
8 голосов
/ 18 февраля 2009

Я работаю над приложением, которое я хотел бы продать однажды - раньше, чем позже! Я хотел бы разработать достаточно простую схему серийных номеров для ее защиты.

  • Простая комбинация цифра / буква длиной не более 25-30 буквенно-цифровых символов (например, ключи продукта Microsoft)
  • Не требует, чтобы пользователь вводил какую-либо личную информацию (например, адрес электронной почты) в рамках проверки

Я думал об этом (очень немного) и думаю, что криптография с открытым ключом - хорошее место для начала. Я мог бы сгенерировать строку, которая идентифицирует лицензию (например, серийный номер SKU + plain ole '), хэширует ее, шифрует и кодирует серийный номер + идентификатор в 25-значный (или около того) буквенно-цифровой ключ. Затем приложение декодирует ключ в серийный номер и «подпись», генерирует хэш идентификатора, расшифровывает «подпись» с использованием соответствующего открытого ключа и сравнивает его с сгенерированным хешем идентификатора.

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

Что касается реализации, то приложение написано на Objective-C для Mac OS X, но, учитывая простоту внедрения кода в приложения Cocoa, я, вероятно, напишу проверочный код на прямом C.

Ответы [ 5 ]

8 голосов
/ 18 февраля 2009

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

Я бы сделал следующее - скажем, 25-значный номер. Теперь добавьте некоторые правила, такие как: - число должно делиться на 31 - должно начинаться и заканчиваться последней буквой ...

Всегда генерируйте ключи, используя эти правила. Используйте 20 или более правил (чем больше, тем лучше). При развертывании приложения используйте меньшее количество правил, например, 10, чтобы проверить, является ли ключ действительным. Затем эти правила будут разобраны и использованы для создания keygen.

При каждом обновлении включите одно из правил, которые вы ранее не использовали. Если правила выбраны правильно, вы отключите большинство ключей, сгенерированных кейгенами.

1 голос
/ 18 февраля 2009

Поскольку Redbeard 0x0A верен, CD-ключи должны быть честными и честными. Просто нужно немного проще купить ваш продукт, чем найти кейген.

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

Последовательная схема может быть очень простой:

  1. Иметь большой последовательный пробел (25 буквенных чисел - это примерно 10 44 , но просто используйте последовательный файл и наберите 80 символов x 16 строк для пробела ключа 10 2311 )
  2. Выберите несколько правил, чтобы уменьшить количество действительных серийных номеров до 100 раз, что, по вашему мнению, вы продадите в своих самых смелых мечтах

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

1 голос
/ 18 февраля 2009

Мне нравится метод @ bh213, однако он не помешает исправлению ключей при обновлении правил для серийных номеров.

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

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

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

0 голосов
/ 12 мая 2014

В блоге sigpipe.macromates.com есть сообщение, объясняющее, как вы используете криптографию с открытым / открытым ключом для проверки серийного номера. Это может проверить, что пользователь и Serialnumber совпадают. (Подписание / Проверка). Я бы, наверное, добавил немного соли, просто чтобы быть уверенным.

Поскольку это сообщение за 2004 год, вы должны рассмотреть рекомендуемую длину ключа в keylength.com .

0 голосов
/ 26 октября 2010

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

При этом я написал библиотеку для такого рода вещей, которая будет использоваться в моих приложениях на основе шифрования AES. Я продаю его за 25 долларов, и он использует парольную фразу и соль, чтобы сделать ваш серийный номер уникальным. Если вы заинтересованы, вы можете найти его здесь: http://simpleserials.com

...