Режим AES ECB требует заполнения, почему тогда у нас есть этот AES/ECB/NOPADDING?

Мы используем приведенный ниже шифр

AES/ECB/NOPADDING

Но я немного сбит с толку, потому что такие режимы, как ECB, требуют, чтобы ввод был дополнен в соответствии с размером блока. Но здесь мы говорим NOPADDING. Разве они не выглядят противоречивыми.

Можем ли мы иметь произвольные данные, которые не дополняются в качестве входных данных для режима ECB.


person crackerplace    schedule 10.05.2012    source источник
comment
Можем ли мы отметить эту Java, кого это волнует? Этот AES/ECB/NOPADDING подозрительно похож на строку, предназначенную для поставщика криптографии Java (JCA/JCE).   -  person Maarten Bodewes    schedule 11.05.2012


Ответы (1)


«Необработанные» режимы шифрования ECB без применения заполнения, такие как, например, AES/ECB/NOPADDING, в основном представляют собой чистое применение функции шифрования к N блокам данных. Они полезны для разработчиков, которым необходимо реализовать пользовательские режимы, которые не поставляются по умолчанию. Любой режим работы так или иначе строится из необработанной функции шифрования.

Тем не менее, поскольку блочный шифр может работать только с полноразмерными блоками, к последнему блоку, возможно, придется применить некоторую форму заполнения. Это остается на усмотрение разработчика, они будут реализовывать любую форму заполнения, указанную/рекомендованную для режима, который они хотят реализовать. Есть много возможностей, и именно поэтому у нас есть "NOPADDING" - чтобы оставить выбор заполнения за нами.

Эти режимы, XXX/ECB/NOPADDING, никогда не должны использоваться напрямую. Как и любой режим ECB, на самом деле. Простое шифрование ECB очень небезопасно, например, оно не скрывает статистические свойства открытого текста (вы, возможно, знаете примеры где "зашифрованное" изображение все еще очень похоже на исходное). Кроме того, как уже отмечалось, блочный шифр может работать только с полноразмерными блоками. Это требует применения пользовательской схемы заполнения, которая добавит еще один слой, где могут быть допущены ошибки, а не просто полагаться на какую-то реализацию по умолчанию.

person emboss    schedule 10.05.2012
comment
Когда вы имеете в виду необработанные режимы ECB, вы имеете в виду AES/ECB/NOPADDING? - person crackerplace; 10.05.2012
comment
Я попытался прояснить ситуацию - это тоже ответило на ваш вопрос? - person emboss; 10.05.2012
comment
Очень редко режим NoPadding используется для данных фиксированной длины, которая соответствует размеру блока используемого шифра. Это может быть полезно для уменьшения размера сетевых пакетов, особенно если сообщения отправляются очень часто. - person rossum; 10.05.2012
comment
@rossum: Для этой цели я бы использовал режим шифрования, который не требует заполнения, например CTR или GCM без аутентификации. - person Robert; 10.05.2012
comment
@rossum Хорошая мысль, имеет смысл и будет работать, если исходные данные достаточно случайны. - person emboss; 10.05.2012
comment
@emboss @ rossum. Кроме того, когда длина блока не соответствует длине шифра, при условии, что мы не заполняем, не вызывает ли это каких-либо исключений при шифровании. Если исключения не выдаются, то как последний блок данных зашифрован как соответствующий шифр ключевые байты могут не иметь соответствующих байтов в последнем входном блоке для шифрования, как показано ниже Пример: Входной блок: для ?? ?? ?? ?? ?? Ключ шифрования: 6A 27 17 87 AB 88 83 F9 - person crackerplace; 10.05.2012
comment
@whokares При использовании режима CTR или Stream Cypher эффективный размер блока составляет один байт, поэтому заполнение не является проблемой. В более традиционных режимах, таких как ECB, неправильная длина вызовет исключение. - person rossum; 10.05.2012
comment
@whokares В режиме ECB это действительно вызовет ошибку, если ввод не соответствует размеру блока. Вам нужно применить некоторую схему заполнения, чтобы заставить ее работать. - person emboss; 10.05.2012
comment
В качестве альтернативы @rossum и emboss, если вы знаете длину обычного текста другими способами (например, кодированием DER или пакетами обычного текста статического размера), вы можете заполнить любое значение байта или заполнить нулями. Это происходит, например. при упаковке закрытого ключа с использованием PKCS # 8 (конечно, с использованием CBC, а не ECB) - person Maarten Bodewes; 10.05.2012