Да, вам нужны все эти вещи.
Соль (и «количество итераций») используется для получения ключа из пароля. Обратитесь к PKCS # 5 для получения дополнительной информации. Соль и число итераций, используемые для получения ключа, не должны быть секретными. Однако соль должна быть непредсказуемой, и ее лучше выбирать случайным образом.
Режим CBC требует вектора инициализации. Это блок случайных данных, создаваемых для каждого сообщения с помощью криптографического генератора случайных чисел. Он служит фиктивным начальным блоком зашифрованного текста. Как и соль для получения ключей, она не должна храниться в секрете и обычно передается вместе с текстом шифра.
Пароль и ключи, полученные из него, должны храниться в секрете. Даже если у злоумышленника есть параметры для получения и шифрования ключа и зашифрованный текст, он ничего не может сделать без ключа.
Обновление:
Пароли выбираются не случайно; некоторые пароли гораздо чаще, чем другие. Следовательно, вместо того, чтобы генерировать все возможные пароли заданной длины (полный перебор), злоумышленники ведут список паролей, упорядоченных по убыванию вероятности.
Получение ключа шифрования из пароля является относительно медленным (из-за итерации алгоритма получения ключа). Получение ключей для нескольких миллионов паролей может занять месяцы. Это побудит злоумышленника получить ключи из своего списка наиболее вероятных паролей и сохранить результаты. С таким списком он может быстро попытаться расшифровать каждый ключ в своем списке, вместо того, чтобы тратить месяцы вычислительного времени на повторное получение ключей.
Однако каждый бит соли удваивает пространство, необходимое для хранения производного ключа, и время, необходимое для получения ключей для каждого из его вероятных паролей. Несколько байт соли, и быстро становится невозможным создать и сохранить такой список.
Соль необходима для предотвращения атак перед вычислением.
IV (или nonce с режимами счетчика) заставляет один и тот же простой текст создавать разные тексты шифров. Он не позволяет злоумышленнику использовать шаблоны в виде простого текста для получения информации из набора зашифрованных сообщений.
Вектор инициализации необходим, чтобы скрыть шаблоны в сообщениях.
Один служит для повышения безопасности ключа, другой повышает безопасность каждого сообщения, зашифрованного этим ключом. Оба необходимы вместе.