Вы не должны генерировать вектор инициализации из секретного ключа. Вектор инициализации должен быть непредсказуемым для данного сообщения; если вы сгенерировали его из ключа (или пароля, использованного для генерации ключа), IV всегда будет одинаковым, что противоречит его назначению.
Однако IV не должен быть секретным. Весьма распространено послать это с зашифрованным текстом, незащищенным. Включить IV в URL намного проще, чем пытаться отслеживать IV для данной ссылки в каком-либо серверном состоянии.
Соль и капельницы имеют различное применение, но они действуют аналогичным образом.
Криптографическая «соль» используется в алгоритмах получения ключей на основе пароля; Хранение хешированного пароля для аутентификации является частным случаем этой функции. Солт приводит к тому, что один и тот же пароль приводит к разным хэшам, и предотвращает «словарные атаки», когда хакер предварительно вычисляет значения хеш-функции для общих паролей и создает индекс «обратного просмотра», чтобы они могли быстро найти пароль для данного хэш. Как и IV, используемая соль не является секретом.
Вектор инициализации используется с блочными шифрами, такими как DES и AES, в режиме обратной связи, например, CBC. Каждый блок объединяется со следующим блоком, когда он зашифрован. Например, в CBC предыдущий текст блочного шифра XOR-редактируется с обычным текстом текущего блока перед шифрованием. IV генерируется случайным образом, чтобы служить фиктивным начальным блоком для начальной загрузки процесса.
Поскольку для каждого сообщения (или по крайней мере) выбирается разный IV, когда одно и то же сообщение шифруется одним и тем же ключом, результирующий текст шифра отличается. В этом смысле IV очень похож на соль. Криптографический генератор случайных чисел, как правило, является самым простым и наиболее безопасным источником соли или ИВ, поэтому они также имеют это сходство.
Криптография очень легко испортить. Если вы не уверены в том, что делаете, вам следует подумать о ценности защищаемой информации и выделить соответствующий бюджет, чтобы получить необходимое обучение или консультацию.