Я хотел бы добавить шифрование AES в программный продукт, но меня беспокоит увеличение размера данных. Я предполагаю, что данные увеличиваются в размере, и тогда мне придется добавить алгоритм сжатия для компенсации.
Расширяет ли данные шифрование AES (128 или 256)? Если да, то насколько?
Ответы (7)
AES не расширяет данные. Кроме того, выходные данные, как правило, не подлежат сжатию; если вы собираетесь сжимать данные, сделайте это перед их шифрованием.
Однако обратите внимание, что шифрование AES обычно сочетается с заполнением, которое будет увеличить размер данных (но только на несколько байтов).
AES не расширяет данные, за исключением нескольких байтов заполнения в конце последнего блока.
Результирующие данные, во всяком случае, не поддаются сжатию, потому что они в основном случайны — ни один алгоритм на основе словаря не может их эффективно сжать. Лучше всего сначала сжать данные, а затем зашифровать их.
Обычно перед шифрованием данные сжимают. Последующее сжатие не работает, потому что данные, зашифрованные AES, кажутся случайными (как и для любого хорошего шифра, кроме любых заголовков и прочего).
Однако сжатие может привести к атакам по сторонним каналам в некоторых контекстах, поэтому вы должны проанализировать свое собственное использование. Недавно сообщалось о таких атаках против зашифрованного VOIP: суть в том, что разные слоги создают характерные вариации битрейта при сжатии с помощью VBR, потому что одни звуки сжимаются лучше, чем другие. Поэтому некоторые (или все) слоги могут быть восстановлены при достаточном анализе, поскольку данные передаются с той скоростью, с которой они генерируются. Исправление состоит в том, чтобы либо использовать (менее эффективное) сжатие CBR, либо использовать буфер для передачи с постоянной скоростью независимо от скорости передачи данных, исходящей от кодировщика (увеличивая задержку).
AES превращает 16-байтовые входные блоки в 16-байтовые выходные блоки. Единственным расширением является округление данных до целого числа блоков.
Я совершенно уверен, что шифрование AES ничего не добавляет к зашифрованным данным, поскольку это выдало бы информацию о переменных состояния, а это Плохая вещь, когда речь идет о криптографии.
Если вы хотите совмещать сжатие и шифрование, делайте это в указанном порядке. Причина в том, что зашифрованные данные (в идеале) выглядят как совершенно случайные данные, и алгоритмы сжатия в конечном итоге увеличат данные из-за невозможности их фактического сжатия и накладных расходов на ведение бухгалтерского учета, связанного с любым форматом сжатых файлов.
Если необходимо сжатие, сделайте это перед шифрованием.
Нет. Единственным изменением будет небольшое количество отступов для выравнивания данных по размеру блока.
Однако, если вы сжимаете содержимое, учтите, что это следует сделать перед шифрованием. Зашифрованные данные, как правило, должны быть неотличимы от случайных данных, что означает, что они не будут сжиматься.
@freespace и другие: одна из вещей, которые я помню из своих занятий по криптографии, заключается в том, что вы не должны сжимать свои данные перед шифрованием, потому что некоторые повторяющиеся фрагменты сжатого потока (например, заголовки разделов) могут упростить взлом вашего шифрования.