Расширяет ли данные шифрование AES (128 или 256)? Если да, то насколько?

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


person Community    schedule 18.09.2008    source источник
comment
Учитывая, что смысл шифрования заключается в добавлении энтропии, я ожидаю, что сжатие мало что даст. Хотя можно попробовать и посмотреть, что получится.   -  person Aaron Maenpaa    schedule 18.09.2008


Ответы (7)


AES не расширяет данные. Кроме того, выходные данные, как правило, не подлежат сжатию; если вы собираетесь сжимать данные, сделайте это перед их шифрованием.

Однако обратите внимание, что шифрование AES обычно сочетается с заполнением, которое будет увеличить размер данных (но только на несколько байтов).

person moonshadow    schedule 18.09.2008
comment
Я взял на себя смелость добавить примечание об отступах. - person sleske; 22.09.2015
comment
Также имейте в виду, что помимо заполнения обычно для криптоданных требуется режим CipherBlockmode, для которого требуется IV (значение инициализации) и для обеспечения безопасности алгоритма MAC для защиты от модификации. Для AES и большинства блочных режимов IV составляет 16 байтов, а наиболее распространенный HMAC (Sha1) — еще 16 байтов. - person Bas Goossen; 14.07.2017

AES не расширяет данные, за исключением нескольких байтов заполнения в конце последнего блока.

Результирующие данные, во всяком случае, не поддаются сжатию, потому что они в основном случайны — ни один алгоритм на основе словаря не может их эффективно сжать. Лучше всего сначала сжать данные, а затем зашифровать их.

person Dario Solera    schedule 18.09.2008
comment
Обратите внимание, что несколько байтов заполнения будут добавлены, даже если входные данные кратны размеру блока шифра; должно быть некоторое заполнение, чтобы код распаковки мог вычислить, сколько есть заполнения. - person Tom Anderson; 24.03.2012

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

Однако сжатие может привести к атакам по сторонним каналам в некоторых контекстах, поэтому вы должны проанализировать свое собственное использование. Недавно сообщалось о таких атаках против зашифрованного VOIP: суть в том, что разные слоги создают характерные вариации битрейта при сжатии с помощью VBR, потому что одни звуки сжимаются лучше, чем другие. Поэтому некоторые (или все) слоги могут быть восстановлены при достаточном анализе, поскольку данные передаются с той скоростью, с которой они генерируются. Исправление состоит в том, чтобы либо использовать (менее эффективное) сжатие CBR, либо использовать буфер для передачи с постоянной скоростью независимо от скорости передачи данных, исходящей от кодировщика (увеличивая задержку).

AES превращает 16-байтовые входные блоки в 16-байтовые выходные блоки. Единственным расширением является округление данных до целого числа блоков.

person Steve Jessop    schedule 18.09.2008
comment
Спасибо за пример атаки VoIP. Это кошмар — думать, что тебя так скомпрометировали. - person tuxayo; 01.09.2018

Я совершенно уверен, что шифрование AES ничего не добавляет к зашифрованным данным, поскольку это выдало бы информацию о переменных состояния, а это Плохая вещь, когда речь идет о криптографии.

Если вы хотите совмещать сжатие и шифрование, делайте это в указанном порядке. Причина в том, что зашифрованные данные (в идеале) выглядят как совершенно случайные данные, и алгоритмы сжатия в конечном итоге увеличат данные из-за невозможности их фактического сжатия и накладных расходов на ведение бухгалтерского учета, связанного с любым форматом сжатых файлов.

person freespace    schedule 18.09.2008

Если необходимо сжатие, сделайте это перед шифрованием.

person Mike    schedule 18.09.2008

Нет. Единственным изменением будет небольшое количество отступов для выравнивания данных по размеру блока.

Однако, если вы сжимаете содержимое, учтите, что это следует сделать перед шифрованием. Зашифрованные данные, как правило, должны быть неотличимы от случайных данных, что означает, что они не будут сжиматься.

person Brian    schedule 18.09.2008

@freespace и другие: одна из вещей, которые я помню из своих занятий по криптографии, заключается в том, что вы не должны сжимать свои данные перед шифрованием, потому что некоторые повторяющиеся фрагменты сжатого потока (например, заголовки разделов) могут упростить взлом вашего шифрования.

person Kasprzol    schedule 18.09.2008
comment
Если ваш алгоритм так уязвим для атак с известным открытым текстом, вы, вероятно, все равно облажались. Есть такие же предсказуемые шпаргалки во многих структурированных форматах, которые обычно передаются. Большинство современных систем предназначены для работы в режимах, которые предотвращают возможность таких атак. - person Brian; 19.09.2008
comment
Верный! сжатые данные часто будут иметь меньше повторяющихся или угадываемых сегментов, чем фактический открытый текст. Предположим, вы шифруете файл кода Java. Кто-нибудь догадается, что // появляется часто? Также: поставщики Zip сжимают перед шифрованием. - person Cheeso; 03.03.2009
comment
@Cheese Похоже на то, о чем должен позаботиться случайный IV. - person FluorescentGreen5; 16.08.2017
comment
Много лет спустя @Kasprzol оказался прав. Уязвимости CRIME и BREACH. - person Slbox; 21.08.2018