Вектор инициализации не должен быть секретным (это не ключ), но он также не должен быть публичным (отправитель и получатель должны знать его, но необязательно, чтобы королева Англии также знала это).
Типичный протокол установления ключа приведет к тому, что обе стороны будут вычислять часть данных, которую они, но только они, оба знают. В случае Диффи-Хеллмана (или любого его варианта с эллиптической кривой) упомянутый совместно используемый фрагмент данных имеет фиксированную длину и не может контролировать его значение (они просто получают одинаковую, казалось бы, случайную последовательность битов). Чтобы использовать этот общий секрет для симметричного шифрования, они должны вывести эти общие данные в последовательность битов соответствующей длины для любого алгоритма симметричного шифрования, который они собираются использовать.
В протоколе, в котором вы используете алгоритм установления ключа для получения общего секрета между отправителем и получателем и будете использовать этот секрет для симметричного шифрования сообщения (возможно, очень длинного потокового сообщения), возможно использовать KDF для производства ключа и IV за один раз. Вот как это происходит, например, SSL : из общего секрета (называемого «секретом перед мастером» в спецификации SSL) вычисляется большой блок производных секретных данных, который затем разделяется на симметричные ключи и векторы инициализации для обоих направлений шифрования. Вы могли бы поступить иначе и, например, сгенерировать случайный IV и отправить их вместе с зашифрованными данными вместо использования IV, полученного через KDF (как это происходит в последних версиях TLS). , преемник SSL). Обе стратегии в равной степени действительны (TLS использует внешний случайный IV, потому что они хотят новый случайный IV для каждой «записи» - пакета данных в соединении TLS - именно поэтому использование KDF больше не считалось целесообразным).