Это действительно два вопроса:
- Если вы используете sn.exe для генерации пары ключей?
- Следует ли использовать закрытый ключ для шифрования данных?
Ответ на первый вопрос: нет, не совсем. Генерация ключей ключей SN.exe действительно полезна только для очень небольших сред разработки и требует, чтобы вы справлялись со всей безопасностью. Есть намного лучшие способы создания контейнеров сертификатов, которые включают такие вещи, как защита паролем (PFX). Посмотрите, например, на инструмент MakeCert - его можно использовать для создания самоподписанных сертификатов X.509, которые можно использовать для почти всех криптографических операций, которые вы, возможно, захотите выполнить.
К сожалению, ответ на второй вопрос также: нет, не совсем. С криптографической точки зрения нет смысла шифровать что-либо с помощью закрытого ключа; в конце концов, открытый ключ - это просто: публичный. Если кто-то может его расшифровать (ни одна ОС не обеспечивает защиту открытых ключей, поэтому тривиально получить копию), нет смысла в ее шифровании. Если цель состоит в том, чтобы убедиться, что люди могут доказать, что это от вас, цифровая подпись - лучший способ пойти, и в этом случае то, что вы описываете, именно то, что вы хотите сделать: подпишите ее с помощью закрытого ключа, проверьте подпись с помощью свободно доступного открытого ключа.
Теперь, если у вас есть намерение распространять зашифрованные данные нескольким получателям, подумайте об использовании конверта PKCS # 7/CMS. Поскольку вы говорите об использовании sn.exe, это говорит мне, что вы используете .NET, так что вам повезло! Класс EnvelopedCms должен предоставить то, что вам нужно. Все, что вам нужно - это открытые ключи ваших получателей из сертификатов X.509 (makecert для спасения!). В MSDN есть пошаговое руководство here.
Я думаю, что имеет смысл использовать openSsl для этого - формат файла snk не так распространен, как, например, формат pem, также у вас будет больше возможностей при использовании openSsl – Giedrius