2009-03-14 2 views
20

Я реализую небольшое приложение на C, которое я бы хотел продать в качестве условно-бесплатного ПО по разумной цене позже. Он начнется с 30-дневного пробного периода, который я уже вполне уверен в том, как его реализовать.реализация ключей продукта

Проблема, которая у меня есть, заключается в том, что я не совсем уверен, как реализовать проверку ключа продукта. Что я имею в виду, так это то, что клиент может зарегистрироваться на моей веб-странице (после некоторого времени попробовать продукт), заплатить за продукт и получить ключ продукта в виде aaaaa-bbbbb-ccccc-ddddd-eeeee через e -mail (или, возможно, доступный через его профиль на моем сайте). Пока нет проблем. Он/она затем бросает ключ в соответствующие ключевые поля в моем приложении и бум приложение зарегистрировано.

От того, что я мог собрать, люди либо рекомендуют AES, либо RSA для этого. Честно говоря, я в другом направлении в колледже (не криптография) и один класс криптографии, который я взял, было некоторое время назад. Но из того, что я помню, AES является симметричным алгоритмом шифрования, что означает, что у меня будет только один ключ для шифрования и дешифрования, верно? Как я мог затем генерировать тысячи ключей продукта и все еще проверять их в своем приложении (что, кстати, не требует доступа в Интернет .... так что не проверяйте сервер с сервером)?

Итак, я думаю, что RSA будет способом? Но разве RSA не производит довольно длинные ключи (по крайней мере, дольше, чем требуемые 25 символов сверху)?

В another thread Я читал, что некоторые продукты даже не используют шифрование для генерации/проверки ключа продукта, но вместо этого просто используют некоторые проверки, такие как «добавьте символ 2. и 17., и это должно быть равно x».

Какой самый быстрый, самый простой и безопасный способ пойти сюда? :-) Образцы кода были бы сахаром!

С уважением,

Sebastian

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

ответ

30

Симметричные алгоритмы ограничены тем, что любой начинающий взломщик с дизассемблером может найти ваш ключ (или алгоритм, используемый для его создания) и сделать «кейген».

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

  • Когда пользователь покупает лицензию от вас, вы собираете определенные идентифицирующие сведения о пользователе и/или их среде (как правило, это просто полное имя, иногда компании, слишком).
  • Вы делаете 128-битный хэш MD5 этой информации.
  • Использование 128-битного криптографического криптографического шифрования с использованием ключа на сервере.
  • 128-битный шифрованный текст может быть представлен пользователю в виде 25-символьной строки, состоящей из букв и цифр (плюс разделение тире для удобочитаемости). Обратите внимание, что 26 букв + 10 цифр = 36 дискретных значений и 36^25> 2^128.
  • Пользователь вводит этот ключ продукта в ваш регистрационный диалог. Клиентское программное обеспечение преобразует его обратно в 128-битное число (16 байт), расшифровывает его с использованием открытого ключа вашего криптоанализа EC и сравнивает результат с хешем MD5 личной информации пользователя, который должен соответствовать тому, что было использовано для регистрации ,

Это, конечно же, основная идея. Более подробную информацию и исходный код см. В разделе Product Keys Based on Elliptic Curve Cryptography.

+0

большое спасибо за информацию. Предположим, что я не могу использовать EEC по какой-то причине ... RSA не поддавался бы 25-символьному ключевому методу, потому что ключи RSA имеют минимальную длину 1024 бит, правильно? – Sebastian

+0

RSA * может * быть только 384 бит, но это слишком длинное для введенного пользователем ключа. Даже если вы дифференцировали верхний и нижний регистр (имея 62 дискретных символа), вам придется иметь 65-ти длинный ключ. И RSA на 384 бит * очень * слаба, поэтому ваш личный ключ, скорее всего, будет скомпрометирован. –

+1

Я вижу бесплатную реализацию ECC здесь: http://www.codeproject.com/KB/security/Elliptic_Curves.aspx. Я не проверял, насколько он хорош. Небольшое рытье наверняка привлечет других. Вот это довольно дешево: http://ellipter.com/. –

1

Жизнь проще, если вы просто приобрели решение.

http://www.kagi.com/kagisolutions/index.php

Kagi позволяет собирать платежи, и они помогут вам управлять ключами.

+0

nope, извините, не вариант. Ориентировочная цена приложения составляет 4,99 евро, а плата Kagi - высокая для продукта в этом ценовом диапазоне. – Sebastian

+1

Самое смешное, что Каги больше не существует. – dimiguel

0

Да, RSA и AES две очень разные вещи:

  • RSA является шифрование с открытым ключом, с участием открытого ключа и секретного ключа, и довольно медленно. Основное назначение - установить безопасный обмен симметричным ключом сеанса шифрования.
  • AES - это симметричное шифрование, которое является быстрым и безопасным.

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

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

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

0

Вы можете ознакомиться с этой статьей Code Project. В нем описывается реализация программного ключа на основе MAC-адреса машины, на которой выполняется программное обеспечение. Метод не идеален, как признает сам автор, и он немного отличается от того, что вы ищете, но, может быть, он может вам помочь.

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