Мой подход к лучшему опыту C # RSA / AES / salt / IV ничего не пропустил? - PullRequest
2 голосов
/ 27 мая 2011

Несмотря на то, что я не криптограф, я считаю, что я в основном в курсе лучших практик, касающихся симметричного шифрования, хэшей и генерации криптографических случайных чисел.Я искал и нашел много постов, как здесь, в 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.

1 Ответ

0 голосов
/ 30 декабря 2012

IV и соль должны быть безопасными случайными числами и могут храниться публично. Счетчик итераций также может храниться публично, хотя обычно он жестко запрограммирован. Будьте осторожны, чтобы сохранить верхнюю границу количества итераций, иначе вы можете быть подвержены атакам типа «отказ в обслуживании».

Так что, в принципе, у тебя все хорошо. При шифровании XML я бы придерживался спецификаций XML-шифрования, используя (предложенный) режим шифрования GCM, если он доступен. Убедитесь, что вы проверяете все параметры при расшифровке.

...