Я пытаюсь реализовать на С# следующее:
Я хочу Генератор, внутри которого находится процедура шифрования с открытым ключом. Он может взять массив байтов, предоставленный ему (обычно клиентом, описанным ниже), и зашифровать его своим закрытым ключом.
У клиента есть открытый ключ, которым он делится с генератором. Он берет результат от Генератора и расшифровывает его с помощью открытого ключа. Он берет массив байтов, который он изначально предоставил Генератору, и сравнивает результат, чтобы увидеть, совпадают ли они. Идея состоит в том, что если они совпадают, можно с некоторой степенью уверенности подтвердить, что тот, кто сгенерировал зашифрованные байты, обладал закрытым ключом. Он также может проверить, соответствует ли конкретное зашифрованное значение предоставленным данным.
Большинство встроенных криптографических библиотек C# с открытым ключом, которые я вижу, хотят связать закрытый ключ с дешифрованием (например, RSACryptoServiceProvider). Я понимаю, почему, так как многие сценарии включают защиту стороны процесса дешифрования, а не шифрования. Существуют ли какие-либо библиотеки C#, которые упрощают защиту процесса шифрования? Я пытался смотреть на Bouncy Castle все утро, но мне трудно заставить его работать даже в базовых сценариях. Документация оставляет желать лучшего...
Опять же, моя главная цель — убедиться, что то, что создало шифрование, обладает закрытым ключом. Также необходимо, чтобы Клиент мог убедиться, что результат Генератора соответствует предоставленной им информации. Если есть альтернативные подходы, которые я упустил, которые могли бы лучше соответствовать доступным библиотекам, я весь в ушах :)
RSACryptoServiceProvider.SignData
. Подписи RSA внутренне используют операцию закрытого ключа RSA, но они добавляют соответствующее хеширование и заполнение, которые важны для безопасности. Вы можете подписать, только если знаете закрытый ключ, и можете подтвердить с помощью открытого ключа. - person CodesInChaos   schedule 13.04.2013