2009-12-15 3 views
29

Если я использую режим Rijndael CBC, я понятия не имею, зачем нам нужна соль. Мое понимание - даже если люди знают пароль, но он не может получить данные без IV. Итак, с моей точки зрения, пароль + IV кажется достаточно надежным.Ключевая фраза, соль и IV, мне нужно все это?

Есть ли у меня что-то не так?

ответ

40

Да, вам нужно все это.

Соль (и счетчик итераций) используется для получения ключа от пароля. Обратитесь к PKCS # 5 за дополнительной информацией. Соль и количество итераций, используемых для деривации ключей, не обязательно должны быть секретными. Однако соль должна быть непредсказуемой, и ее лучше всего выбирать произвольно.

Для режима CBC требуется вектор инициализации. Это блок случайных данных, создаваемых для каждого сообщения генератором криптографических случайных чисел. Он служит фиктивным начальным блоком зашифрованного текста. Подобно солью, генерирующей ключ, ее не нужно хранить в секрете и обычно передавать вместе с текстом шифрования.

Пароль и ключи, полученные из него, должны храниться в секрете. Даже если у злоумышленника есть параметры для деривации ключей и шифрования, а также зашифрованный текст, он не может ничего делать без ключа.


Обновление:

Пароли не выбраны случайным образом; некоторые пароли гораздо более вероятны, чем другие. Поэтому, вместо того, чтобы генерировать все возможные пароли заданной длины (исчерпывающий поиск грубой силы), злоумышленники сохраняют список паролей, упорядоченных с уменьшением вероятности.

Получение ключа шифрования с помощью пароля относительно медленно (из-за итерации алгоритма деривации ключа). Получение ключей для нескольких миллионов паролей может занять несколько месяцев. Это может побудить злоумышленника вывести ключи из своего списка наиболее вероятных паролей один раз и сохранить результаты. С таким списком он может быстро попытаться расшифровать каждый ключ в своем списке, вместо того, чтобы тратить месяцы на время вычисления, чтобы снова получить ключи.

Однако каждый бит соли удваивает пространство, необходимое для хранения производного ключа, и время, необходимое для получения ключей для каждого из его вероятных паролей. Несколько байтов соли, и быстро становится невозможно создать и сохранить такой список.

Соль необходима для предотвращения атак с предварительным вычислением.

IV (или nonce с режимами счетчика) делает один и тот же простой текст выдающим разные шифровальные тексты. Предотвращает использование злоумышленником шаблонов в обычном тексте для сбора информации из набора зашифрованных сообщений.

Вектор инициализации необходим для скрытия шаблонов в сообщениях.

Один служит для повышения безопасности ключа, а другой повышает безопасность каждого сообщения, зашифрованного этим ключом. Оба необходимы вместе.

+2

Также стоит сказать, что если у вас есть все, кроме IV, вы можете успешно расшифровать все, кроме первого блока открытого текста. – caf

+0

Если соль должна быть непредсказуемой, то почему она не должна быть секретной? У вас там неправильное заявление. –

+2

@AkashKava Нет, мое утверждение верное. Злоумышленник не может угадать * непредсказуемую * соль * до того, как она выбрана. Если соль является секретной, * злоумышленник не сможет угадать ее даже после ее выбора. Стандарты для протоколов шифрования на основе паролей, таких как [CMS] (http://tools.ietf.org/html/rfc3211#section-2.1), указывают, что [незашифрованная соль может быть отправлена] (http://tools.ietf.org /html/rfc2898#appendix-A.2) вместе с зашифрованным сообщением. Предсказуемая соль позволяет злоумышленникам предварительно вычислить ключи шифрования для общих паролей и многократно использовать эту таблицу для быстрого дешифрования сообщений. – erickson

0

A salt обычно используется при использовании hash algorithm. Rijndael не хеш, а двухсторонний encryption algorithm. Эрго, соль не обязательно необходима для шифрования данных. При этом в качестве ключа для шифрования данных может использоваться соленый хэш пароля. Для того, что вы ищете, вы можете посмотреть на hybrid cryptosystems.

Ключ должен рассматриваться как закрытый и не передаваться с зашифрованными данными, в то время как IV может передаваться с зашифрованными данными.

+7

Отрицательный. IV не считается конфиденциальным и, по сути, должен храниться с зашифрованными данными, иначе данные не могут быть дешифрованы. – vy32

+0

Jiminy Christmas, почему downvote, * downvoter *? Я исправил это в соответствии с комментарием ВОСЕМЬ ГОДА. –

5

В первую очередь: Rijndael не имеет «пароля» в режиме CBC. Rijndael в режиме CBC берет буфер для шифрования или дешифрования, ключа и IV.

«Соль» обычно используется для шифрования паролей. Соль добавляется к паролю, который зашифрован и хранится с зашифрованным значением. Это мешает кому-либо создавать словарь о том, как шифруются все пароли, - вам нужно построить словарь о том, как все пароли шифруются для всех солей. Это было возможно с помощью старого алгоритма шифрования паролей Unix, который использовал только 12-битную соль. (Это увеличило коэффициент работы на 4096). С 128-битной солью это невозможно.

Возможно, кто-то все-таки может совершить грубую атаку на определенный пароль, при условии, что они могут получить зашифрованный пароль.

Однако у вас есть IV, который делает почти то же самое, что делает соль. Вам не нужны оба. Или, скорее, IV - ваша соль.

Кстати, в наши дни мы называем «Rijndael» AES.

+2

IV и соль служат в аналогичных целях: они гарантируют, что в противном случае идентичные входы производят непредсказуемые выходы. Однако ключевая соль деривации не устраняет необходимость в IV. Выбирая новый IV для каждого сообщения, один и тот же пароль можно использовать для шифрования многих сообщений. Даже если некоторые сообщения идентичны, злоумышленник не сможет сказать. – erickson

+0

Кажется, что OP использует шифрование на основе пароля с Rijndael CBC (а Rijndael и AES - это не совсем то же самое - AES фактически является подмножеством Rijndael, первый имеет фиксированный 128-битный размер блока, тогда как последний имеет переменную размер блока). – caf

+0

Соли используются в хешировании, а не в шифровании. –

 Смежные вопросы

  • Нет связанных вопросов^_^