Зашифровать с сервера, расшифровать на клиенте (но не зашифровать на клиенте)? - PullRequest
0 голосов
/ 09 февраля 2011

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

У меня есть программный ключ, который необходимо активировать на нашем удаленном сервере.Сервер должен предоставить клиенту что-то, что говорит: «Вы активны» и содержит такую ​​информацию, как дата, до которой он действителен, сколько лицензий и т. Д. Однако я должен предотвратить легкое вмешательство в него для увеличения лицензии.считать или даты (то есть, повторно зашифровать значение с новой датой, используя ключ, найденный в декомпилированном двоичном файле или w / e).

Возможна ли такая вещь с использованием открытых / закрытых ключей?Или, может быть, хэши?

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

Альтернативно, может ли сервер предоставить хеш, который клиент может проверить на самом деле с сервера, не давая клиенту возможность подделывать или генерировать хэшэто свое?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 09 февраля 2011

Конечно. Используйте алгоритм асимметричного ключа, такой как RSA. Оба ключа необходимы для перехода от открытого текста к открытому тексту; один зашифрует, другой расшифрует. Вы не можете использовать тот же ключ, которым вы зашифровали, для расшифровки, и наоборот. Таким образом, клиент не может получить зашифрованный текст, расшифровать его, а затем использовать любую информацию, которую он имеет для создания того же зашифрованного текста.

ОДНАКО, алгоритмы асимметричного ключа не различают ключи шифрования и дешифрования, пока один из них не используется для шифрования. Они только требуют, чтобы другой ключ использовался для расшифровки сообщения, зашифрованного первым. Таким образом, теоретически ваш клиент может «повторно зашифровать» сообщение, используя свой ключ «дешифрования», который будет дешифрован сервером с помощью его «ключа шифрования». Я не знаю алгоритма, который бы запретил это; вам просто нужно встроить его в свою коммуникационную библиотеку, исключив любой способ использовать ключ дешифрования для чего-либо, кроме дешифрования.

1 голос
/ 09 февраля 2011

Шифрование с открытым / закрытым ключом должно делать то, что вам нужно. Хеши являются односторонними функциями; хорошая хеш-функция сделает невозможным получение исходного значения.

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

http://en.wikipedia.org/wiki/Public-key_cryptography - для объяснения того, как все это работает

http://msdn.microsoft.com/en-us/library/e970bs09.aspx - в качестве отправной точки для классов .Net, чтобы упростить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...