CBC требует нового IV для каждого сообщения .Однако никто не сказал, что вам нужно было отправить сообщение за один раз.
Рассмотрим SSL / TLS.Соединение начинается со сложной процедуры («рукопожатие»), в результате которой создается общий «главный ключ», из которого получены симметричные ключи шифрования, ключи MAC и IV.С этого момента и до конца соединения (или нового рукопожатия) полные данные, отправляемые клиентом на сервер, являются, с точки зрения CBC, одним уникальным большим сообщением, которое, вполне логично, использует уникальный IV.
Более подробно, с CBC каждый блок (из 16 байтов с AES) сначала XORed с предыдущим зашифрованным блоком, а затем сам шифруется.IV необходим только для самого первого блока, так как в этой точке нет предыдущего блока.Один из способов увидеть это состоит в том, что каждый зашифрованный блок является IV для шифрования следующего.Когда в качестве части диалога SSL / TLS клиент отправляет некоторые данные («запись» на языке SSL), он запоминает последний зашифрованный блок этой записи, который будет использоваться в качестве IV для следующей записи.
В вашем случае, я полагаю, у вас есть аудиопоток для шифрования.Вы можете обрабатывать это так же, как SSL / TLS, просто прерывая поток CBC между блоками.Это, однако, имеет небольшое осложнение: обычно в протоколах VoIP некоторые пакеты могут быть потеряны.Если вы получаете фрагмент данных, зашифрованных CBC, и не имеете предыдущего фрагмента, то вы не знаете IV для этого фрагмента (т. Е. Последний зашифрованный блок предыдущего фрагмента).После этого вы не сможете правильно расшифровать первый блок (16 байт) полученного фрагмента.Легкое ли восстановление из этой ситуации зависит от того, какие данные вы шифруете (в частности, со звуком, какой алгоритм сжатия вы используете).Если эта потенциальная потеря является проблемой, то обходной путь должен включать IV в каждом фрагменте: в CBC-говорящем последний зашифрованный блок фрагмента (в пакете) повторяется как первый зашифрованный блок в следующем фрагменте (вследующий пакет).
Или, кратко заявив: вам нужен IV на блок, но CBC генерирует эти IV "естественно", потому что все IV (кроме самого первого) являются блоками, которые вы только что зашифровали.