Подтвердить что ты не робот

Парольная фраза, соль и IV, мне нужно все это?

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

Я что-то не так понял?

4b9b3361

Ответ 1

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

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

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

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


Update:

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

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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