Несмотря на то, что я не криптограф, я считаю, что я в основном в курсе лучших практик, касающихся симметричного шифрования, хэшей и генерации криптографических случайных чисел.Я искал и нашел много постов, как здесь, в SO, так и в других местах, касающихся стойкости зашифрованных данных, соли и IV.То, что я прошу, - это просмотр того, что я делаю, чтобы убедиться, что части, которые я собираю, собраны правильно, то есть надежно.Вот мой план:
В C # я использую RSACryptoServiceProvider для генерации хорошей, большой пары ключей из 4096 бит.Чтобы сохранить на диск / базу данных, я использую метод ToXmlString (true), который включает в себя информацию о секретном ключе.Затем я зашифровываю весь документ Xml с помощью AES, как описано здесь: http://msdn.microsoft.com/en-us/library/sb7w85t6(v=VS.90).aspx,, используя ключ, полученный из Rfc2898DeriveBytes, используя 10 000 циклов и 64 бита соли, сгенерированных из RNGCryptoServiceProvider.Но теперь проблема заключается в хранении соли, а также IV.Я знаю, что соль может быть общедоступной, и я вполне уверен, что IV тоже может бытьТак что, кажется, самый простой способ сделать что-то - это запихнуть их в простой текстовый XML-документ вместе с зашифрованным Xml и покончить с этим.
Что-нибудь вообще мне не хватает?
Edit0: Да, IV не должен быть секретным: http://www.w3.org/TR/xmlenc-core/#sec-Nonce.
Edit1: Соль теперь получается из пароля (по-прежнему используется 10k раундов после заполнения до минимума 64 бит), поэтомуне сохранился отдельно.IV автоматически добавляется к CipherValue.