Это общая идея.Однако IV не нужно хранить в секрете.Только «секретный ключ» является секретным.
Возможно, вы захотите использовать такой стандарт, как S / MIME (или его синтаксис криптографических сообщений) для вашего формата файла.Я не уверен, что Bouncycastle перенес свои библиотеки S / MIME (или PGP) в .NET или в .NET встроена поддержка S / MIME, но, скорее всего, для вашей платформы будет доступна бесплатная библиотека.Широко используемая библиотека с открытым исходным кодом, подобная этой, вероятно, была протестирована и изучена более тщательно, чем вы сможете сделать сами, и они реализуют протоколы, разработанные экспертами в области криптографии, так что вам не придется задумываться о тех подводных камнях, которые вы пропустили.
Модель, которую вы описали, аналогична методу KeyTransRecipientInfo S / MIME для обмена ключами.Для шифрования данных генерируется симметричный ключ, затем этот ключ шифруется открытым ключом каждого предполагаемого получателя.Зашифрованный ключ и IV (который не зашифрован в этом стандарте) связаны с информацией об алгоритмах, используемых в структуре CMS.Зашифрованные данные могут быть включены в один пакет или находиться в отдельном файле.
PGP имеет режим, который по существу эквивалентен.