Аудио, AES CBC и IVs - PullRequest
       24

Аудио, AES CBC и IVs

1 голос
/ 21 августа 2010

В настоящее время я работаю над проектом voip и у меня есть вопрос о реализации режима AES-CBC.Я знаю, что для обмена мгновенными сообщениями, основанного на обмене текстовыми сообщениями, важно генерировать IV для каждого сообщения, чтобы избежать возможного угадывания первого блока, если этот является избыточным во время связи.Но полезно ли делать то же самое с аудиоданными?Поскольку аудиоданные намного сложнее, чем открытый текст, мне интересно, было бы разумно сгенерировать IV для каждого аудиоблока (это будет означать много IV в секунду, более 40), или это просто замедлит всени за что?Или достаточно одного сгенерированного в начале разговора IV?

Заранее спасибо,

Nolhian

Ответы [ 2 ]

1 голос
/ 27 августа 2010

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 (кроме самого первого) являются блоками, которые вы только что зашифровали.

1 голос
/ 23 августа 2010

Вам не нужно генерировать новые IV каждый раз.Например, в SSH и TLS только один IV используется для всего сеанса данных, и повторное использование необходимо только после нескольких гигабайт данных.

...