Будут ли увеличиваться размеры векторов инициализации в будущем? - PullRequest
3 голосов
/ 15 июня 2011

В настоящее время я использую AES (256) в режиме CBC для шифрования данных. Я храню вектор инициализации с зашифрованными данными. Прямо сейчас я просто добавляю IV к началу зашифрованных данных, затем при расшифровке, читая их как жестко запрограммированную длину байтов.

Если длина вектора инициализации изменится в будущем, этот метод прекратит работу.

Итак, мои вопросы:

Будут ли в будущем более длинные размеры ключей AES = более длинные IV? Или, другими словами, изменится ли размер блока AES в будущем?

Если это так, что будет лучшим способом справиться с этим? Используя первый байт в качестве индикатора длины IV, затем читая столько байтов?

Ответы [ 3 ]

4 голосов
/ 15 июня 2011

Rijndael поддерживает блоки больших размеров, но AES в настоящее время зафиксирован на 128-битном блоке. Кажется относительно маловероятным, что большие размеры блоков Rijndael будут стандартизированы NIST, поскольку это фактически будет совершенно новый алгоритм, который никто не реализовывал. Если NIST чувствует необходимость в блочном шифре большего размера, скорее всего, он просто запустит новый конкурс.

Однако я бы порекомендовал, чтобы вместо длины IV в начале вашего сообщения вы включали какой-то идентификатор алгоритма (все, что вам понадобится - один байт), который позволит вам не только гибко для обработки больших IV, а также расширения вашего формата в будущем, например, нового алгоритма. Например, 0 == AES-256 / CBC, 1 == AES-256 / GCM, 2 = AES-2.0 / CBC, 3 = AES-256 / CBC со специальным дополнительным заголовком и т. Д. И т. Д. И т. Д.

PS - не забудьте также использовать код аутентификации сообщения, так как в противном случае вы подвергаетесь различным атакам, связанным с модификацией сообщений.

2 голосов
/ 16 июня 2011

Цель вектора инициализации состоит в том, чтобы рандомизировать первый блок, чтобы одни и те же данные, зашифрованные дважды с помощью одного и того же ключа, не давали одинакового вывода.

С теоретико-информационной точки зрения, для AES есть "только" 2 ^ 128 различных IV, потому что это все возможные случайные значения, которые вы можете XOR с вашим первым блоком фактических данных. Таким образом, никогда не бывает причин иметь IV больше, чем размер блока шифра.

Большие размеры блоков могут оправдать большие IV. Клавиши большего размера не делают.

Больший размер блока будет означать другой алгоритм по определению. Поэтому, как бы вы ни пометили свои данные, чтобы указать, какой алгоритм вы используете, именно так вы скажете, какой размер блока (и, следовательно, размер IV) использовать.

0 голосов
/ 17 июля 2011

В качестве альтернативного решения вы можете переключиться в режим AES-CTR.Режим счетчика требует одноразового номера, но одноразовый номер не обязательно должен быть привязан к размеру блока AES.Если бы размер блока AES был увеличен (маловероятно, как говорит Джек), то вы могли бы сохранить тот же размер Nonce.

...