Реализация лицензии с блокировкой узла: открытые поля с сигнатурой против полного шифрования - PullRequest
0 голосов
/ 31 августа 2011

Фон

Мне нужно реализовать простой механизм лицензирования с блокировкой узла (т. Е. Лицензия должна быть действительной только для определенного физического компьютера).

Я намерен использовать асимметричный криптографический алгоритм, такой как RSA.

Вот как я собираюсь организовать базовый процесс лицензирования:

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

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

Вопрос

Передо мной стоит дилемма:

  1. шифровать идентификатор компьютера (как в запросе лицензии, так и в самой лицензии),
  2. или включить его в виде простого текста (как в запросе, так и в лицензии) и просто добавить подпись (в лицензии).

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

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

Подход (2) мне кажется проще, но настолько ли он силен, как (1)?

Я внедряю это в C #, но мне хотелось бы получить общие рекомендации высокого уровня о плюсах и минусах каждого подхода, независимо от деталей реализации.

Ответы [ 2 ]

2 голосов
/ 02 сентября 2011

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

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

  • Как пользователи будут активировать свою лицензию, если у них нет сетевого подключения к серверу или их соединение заблокировано брандмауэром?
  • Вы сказали, что блокируете узел своего приложения для некоторых параметров системы пользователя. Как вы будете иметь дело с кем-то, кто делает незначительное обновление своей системы, вызывая изменение параметра блокировки узла? Обратите внимание, что MAC-адрес не является хорошим выбором для этого, даже несмотря на то, что он обычно используется, поскольку простота настройки MAC-адреса в некоторых системах означает, что блокировка узла MAC-адреса небезопасна.
  • Сбои системы пользователя - как они могут запустить свою лицензию в другой системе? (и как вы узнаете, что они говорят правду о сбое своей системы?)
  • Что, если пользователь через некоторое время захочет перенести свою лицензию на другую машину, скажем, с рабочего стола на ноутбук. Может ли ваша система позволить им сделать это, не будучи дырой в безопасности или раздражающим ручным процессом, требующим вашей поддержки?
  • Как вы будете защищать свои лицензии от взлома ключей, подмены или взлома лицензионного кода и т. Д.?
  • Из вашего поста кажется, что вы просто хотите сейчас включить все приложение. Что если в будущем вы захотите активировать ограниченные по времени пробные или подписные лицензии, настроить функции продукта или включить определенные модули и т. Д. Будет ли ваша система активации поддерживать это или вам придется пересобрать ее?
  • Некоторые компании не хотят, чтобы какая-либо текстовая информация об их системах передавалась через Интернет, поэтому вы можете зашифровать загруженные сведения о системе с самого начала.

Просто о чем подумать.

1 голос
/ 31 августа 2011

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

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

...