Как безопасно сохранить и восстановить пару ключ / IV? - PullRequest
1 голос
/ 17 мая 2010

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

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

1 Ответ

1 голос
/ 17 мая 2010

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

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

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

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

...