2010-05-17 5 views
1

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

Это лучший способ для этого, или есть предпочтительный метод сохранения ключа IV &?

ответ

1

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

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

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

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