Внедрение библиотеки проверки лицензий

Я работаю над небольшим кросс-платформенным продуктом для Windows и Mac, написанным на С++/Obj-C. Меня попросили внедрить модуль лицензирования для него. Эта задача является частью очень амбициозного проекта по внедрению лицензирования для всех наших продуктов. В конце концов, у нас будет полная схема лицензирования, где мы сможем продавать лицензии нашим клиентам, которые поддерживают ежегодные продления, уровни лицензий и т.д. Моя проблема заключается в том, что я не знаю, в первую очередь, об осуществлении проверки лицензий. Может ли кто-нибудь указать мне на какой-то принцип? Существуют ли какие-либо модули лицензирования с открытым исходным кодом, которые я могу изучить?

Ответы

Ответ 1

Я использую систему проверки частичного ключа (PKV), и я реализовал это на С# с помощью генератора PHP. Google придумает различные хиты, объяснения и реализации; но Брэндон Стаггс написал хороший обзор (хотя и в Delphi!), здесь:

http://www.brandonstaggs.com/2007/07/26/implementing-a-partial-serial-number-verification-system-in-delphi/

PKV работает, кодируя определенную информацию (тип лицензии, серийный номер продукта, дату и т.д.) в ключе вместе с хешем имени пользователя и хешей кодированной информации. Большая часть ключа фактически состоит из нескольких хэшей char. Идея состоит в том, что вы проверяете только подмножество этих хэшей. Точное подмножество, которое было выпущено, со временем может быть изменено для некоторой безопасности и для защиты от определенных видов обратной инженерии.

Я бы также зашифровал ключ, чтобы помочь запутать то, что означает каждый char в лицензии. В противном случае кто-то с несколькими ключами может определить, что определенные позиции char означают определенные вещи ( "о, символы 3-4 являются серийным номером" ). Это может быть щель в ваших доспехах!

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