Как безопасно сохранить и восстановить пару ключ /IV?

Я использую VB.Net RijndaelManaged (RM) для шифрования файлов, используя RM.GenerateKey а также RM.GenerateIV методы для генерации ключа и IV и шифрования файла с использованием CryptoStream учебный класс. Я планирую сохранить этот ключ и IV в файл и хочу убедиться, что я делаю это правильно. Я комбинирую ключ IV +, шифрую его с помощью моего открытого ключа RSA и записываю в файл. Затем для расшифровки я использую закрытый ключ RSA в этом файле, чтобы получить ключ IV +, разделить их и установить значения RM.Key и RM.IV и запустить расшифровщик.

Это лучший метод для достижения этой цели, или есть предпочтительный метод для сохранения IV & Key?

1 ответ

Решение

Это общая идея. Однако IV не нужно хранить в секрете. Только "секретный ключ" является секретным.

Возможно, вы захотите использовать такой стандарт, как S/MIME (или его основной синтаксис криптографических сообщений) для вашего формата файлов. Я не уверен, что Bouncycastle перенес свои библиотеки S/MIME (или PGP) в.NET или в.NET встроена поддержка S / MIME, но, вероятно, для вашей платформы будет доступна бесплатная библиотека. Широко используемая библиотека с открытым исходным кодом, подобная этой, вероятно, была протестирована и изучена более тщательно, чем вы сможете сделать сами, и они реализуют протоколы, разработанные экспертами в области криптографии, так что вам не придется задумываться о тех подводных камнях, которые вы пропустили.

Модель, которую вы описали, аналогична методу KeyTransRecipientInfo S/MIME для обмена ключами. Для шифрования данных генерируется симметричный ключ, затем этот ключ шифруется открытым ключом каждого предполагаемого получателя. Зашифрованный ключ и IV (который не зашифрован в этом стандарте) связаны с информацией об алгоритмах, используемых в структуре CMS. Зашифрованные данные могут быть включены в один и тот же пакет или находиться в отдельном файле.

PGP имеет режим, который по сути эквивалентен.

Другие вопросы по тегам