Для шифрования AES CBC, какова важность IV?
Какая угроза безопасности всегда использовать все нули для IV? Если это позволяет расшифровать зашифрованный текст, как злоумышленник может это сделать?
ОБНОВЛЕНИЕ: Итак, если бы у первого блока незашифрованных данных была метка времени, которая никогда не повторялась, будет ли все еще необходим IV?
4 ответа
Как только злоумышленник получит одно сообщение в виде открытого текста и соответствующий зашифрованный текст (возможно, он перехватил его где-нибудь еще, например, в месте назначения), он сможет узнать, когда отправляются любые другие сообщения с той же последовательностью запуска. Поскольку она может что-то узнать о содержимом ваших зашифрованных сообщений, это небезопасно.
Это также позволяет злоумышленнику выполнять частотный анализ. Например, представьте, что ваши текстовые сообщения являются командами для серверной платформы фондового рынка, поэтому все они начинаются с "COMMAND=BUY"
или же "COMMAND=SELL"
, Это означает, что зашифрованные сообщения начинаются только с двух разных последовательностей зашифрованного текста. Злоумышленник не может непосредственно расшифровать их - но если он сможет позже наблюдать, сколько ордеров SELL вы разместили, наблюдая рыночные данные, он сможет вернуться и выяснить, что есть что, и с этого момента она ' Вы будете точно знать, какие заказы вы размещаете по мере их размещения.
Частотный анализ - это то, как простые шифры подстановки ломаются, и это не случайно - использование фиксированного IV означает, что начальная часть ваших сообщений фактически просто использует подстановку, блок за раз.
Смысл CBC состоит в том, чтобы рандомизировать входные блоки, потому что данный входной блок всегда шифруется одинаково с заданным ключом (AES является детерминированным). Входной блок рандомизируется путем XORing его с предыдущим выходным блоком. Первый блок, не имеющий предыдущего блока, рандомизируется с помощью XOR с IV.
Таким образом, использование неслучайного IV означает, что вы не рандомизируете первый блок. Если вы никогда не используете один и тот же ключ дважды, т. Е. Используете новый ключ каждый раз, когда шифруете новое сообщение, то IV с нулевым значением не является проблемой. Проблемы с нерандомизированными входными блоками актуальны только тогда, когда есть два нерандомизированных входных блока, которые зашифрованы одним и тем же ключом. Если вы используете данный ключ для отдельного сообщения, то только один первый блок этого сообщения будет нерандомизированным, поэтому проблем нет. Но это большое "если". В частности, если вы можете сгенерировать новый ключ для каждого сообщения, то, вероятно, вы также можете сгенерировать новый IV для каждого сообщения. Для оправдания использования полностью нулевого IV с CBC потребовался бы довольно специфический сценарий.
Не легко, но он предоставляет информацию о сообщениях, чего пытается избежать шифрование.
Допустим, вы используете тот же ключ и ноль IV. Кто-то, отслеживающий трафик, может заметить, что сообщения начинаются с одного и того же зашифрованного текста. Это дает им некоторую информацию. Путем рандомизации IV эта утечка информации исчезает. Более мощные атаки могут быть начаты, зная больше о структуре незашифрованных данных. Кроме того, если вы отправляете много сообщений таким способом, злоумышленник может медленно узнать больше информации об используемом ключе из-за уменьшения дисперсии (отличается только открытый текст, вместо открытого текста и IV).
Если IV всегда равен нулю, все сообщения с общим текстом в начале (например, электронные письма с одинаковыми первыми двумя или тремя блоками шифрования для информации "От" или "От:") будут зашифрованы одинаково. Это дает атакующему рычаг над вашим ключом. Это безусловно плохо. Пока вы используете достаточно случайный IV, атакующий теряет этот рычаг. Не рискуй этим.