Парольная фраза, Соль и IV, мне все это нужно? - PullRequest
34 голосов
/ 15 декабря 2009

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

Что-то не так?

Ответы [ 3 ]

46 голосов
/ 15 декабря 2009

Да, вам нужны все эти вещи.

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

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

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


Обновление:

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

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

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

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

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

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

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

6 голосов
/ 15 декабря 2009

Перво-наперво: у Рейндаэля нет «пароля» в режиме CBC. Rijndael в режиме CBC использует буфер для шифрования или дешифрования, ключ и IV.

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

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

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

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

1 голос
/ 15 декабря 2009

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

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

...