С защитой сообщений открытым ключом все понятно. Я имею пару закрытый/открытый ключ и даю открытый ключ людям, от которых хочу получать шифрованные сообщения. Прочитать их могу только я, т.к. расшифровать их можно только с помощью закрытого ключа.
Однако, у меня задача несколько другая. Допустим есть файл, в котором содержатся параметры лицензии — дата истечения, кол-во пользователей и т.п. Мне нужно зашифровать эту информацию, что бы пользователь не мог ее произвольно изменить. Но чтобы клиентское приложение могло расшифровать и получить эту информацию. Исходя из концепции асимметричного шифрования я — отправитель информации — должен зашифровать файл открытым ключом, а клиент (приложение) иметь закрытый ключ, что бы расшифровать файл. Однако, имея и открытый ключ клиент может расшифровать файл и снова его зашифровать с измененной информацией. Получается, что по сути закрытый и открытый ключи должны поменяться ролями — клиенту я отдаю "закрытый", а "открытый", которым шифрую файл — держать в секрете.
Проблема в том, что я не нашел в .net механизма реализации такого сценария. Классы, предназначенные для асимметричного шифрования (например, RSACryptoServiceProvider) позволяют хранить в хранилище либо только открытый ключ (когда RSACryptoServiceProvider.PublicOnly = true), либо оба ключа вместе.
Как отделить закрытый ключ от открытого и расшифровывать только с его помощью ?
Или возможно есть какие-то другие алгоритмы и их реализации в .net ?