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

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

Я пытаюсь использовать следующую схему лицензирования ПО:

  1. Пользователь получает идентификатор продукта (на основе GUID) при покупке и использует его внутри приложения для активации Это.
  2. Приложение подключается к серверу лицензий, который отправляет обратно зашифрованный текст с использованием открытого ключа RSA. Этот текст (лицензия) будет храниться на жестком диске пользователя.
  3. Каждый раз, когда приложение запускается, ему необходимо расшифровать эту лицензию с помощью закрытого ключа RSA, чтобы извлечь различные параметры, такие как версия продукта, ограничения продукта, регистрация какой компании и т. Д.

Как приложение может расшифровать этот текст лицензии, если у него есть не закрытый ключ, а открытый ключ?

Спасибо!

РЕДАКТИРОВАТЬ:

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

person Marcus Frenkel    schedule 11.02.2013    source источник


Ответы (2)


Приложение должно хранить свои данные в виде обычного текста.

При регистрации сервер должен подписать эти данные (включая идентификацию машины) с помощью закрытого ключа.

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

person SLaks    schedule 11.02.2013
comment
Мне нужно, чтобы эти данные были зашифрованы, они содержат информацию об ограничении использования приложения, например, базовую версию, корпоративную версию и т. Д. Если это обычный текст, приложение можно разблокировать, просто изменив текст. - person Marcus Frenkel; 11.02.2013
comment
@MarcusFrenkel Подпись сервера не будет проверяться, если данные были изменены. - person Duncan Jones; 11.02.2013
comment
@MarcusFrenkel: Вот для чего нужна подпись. Если пользователь что-либо изменяет, подпись больше не будет совпадать, и пользователь не сможет повторно подписать ее без открытого ключа сервера. - person SLaks; 11.02.2013
comment
(если пользователь не изменяет ваше приложение и не вводит свой открытый ключ, либо полностью не удаляет проверку) - person SLaks; 11.02.2013
comment
Хорошо, теперь я понял. Асимметричное шифрование для меня в новинку, хотя подписывание и шифрование - это одно и то же. Спасибо! - person Marcus Frenkel; 11.02.2013
comment
@SLaks: открытый ключ может быть получен из закрытого ключа (jason4zhu.blogspot.jp/2014/10/), поэтому обнаружение закрытого ключа позволяет повторно подписать измененную лицензию, и приложение останется прежним. :( - person Fil; 18.02.2015
comment
@Fil: Конечно. Если секретный ключ просочился, вы застряли. Вот почему он называется закрытым ключом. - person SLaks; 18.02.2015
comment
@SLaks: ops, извините: вы правы: P Я прокомментировал чтение исходного сообщения. Каждый раз, когда приложение запускается, ему необходимо расшифровать эту лицензию с помощью закрытого ключа RSA, поэтому я ошибся. В приложении есть открытый ключ для проверки подписи (сделан на стороне сервера с закрытым ключом). ^ _ ^ - person Fil; 18.02.2015

Я действительно не вижу необходимости во всем этом.

Почему бы просто не установить соединение с сервером во время проверки, попросить сервер сгенерировать файл со всеми параметрами, которые вы хотите в нем (даже в виде обычного текста), а затем попросить сервер подписать этот файл и вернуть его программному обеспечению?

Клиент может прочитать файл, а затем просто проверить подпись, используя один из множества существующих алгоритмов цифровой подписи.

person Nik Bougalis    schedule 11.02.2013
comment
Я сделаю так, как вы предлагаете. Мне пришлось принять другой ответ, поскольку он пришел первым. Большое Вам спасибо. - person Marcus Frenkel; 11.02.2013
comment
Не беспокойся. Удачи в реализации и развертывании вашего решения. - person Nik Bougalis; 11.02.2013