Введение
Добавление данных к сообщению перед шифрованием для скрытия его длины
криптография
В криптографии паддинг (padding) – это любой из ряда различных приемов, заключающихся в добавлении данных в начало, середину или конец сообщения перед шифрованием. В классической криптографии паддинг может включать добавление бессмысленных фраз к сообщению, чтобы скрыть тот факт, что многие сообщения заканчиваются предсказуемым образом, например, «с уважением».
cryptography
In cryptography, padding is any of a number of distinct practices which all include adding data to the beginning, middle, or end of a message prior to encryption. In classical cryptography, padding may include adding nonsense phrases to a message to obscure the fact that many messages end in predictable ways, e. g. sincerely yours.
Режим работы блок-шифровки
Режим шифрования блоками с последовательной связью (CBC) является примером режима работы блочного шифра. Некоторые режимы работы блочных шифров (CBC и PCBC, по сути) для алгоритмов симметричного шифрования требуют, чтобы входные данные представляли собой кратное размеру блока, поэтому сообщения могут нуждаться в дополнении, чтобы достичь необходимой длины. В настоящее время наблюдается тенденция к использованию потоковых режимов работы вместо блочных. Режим счетчика является примером потокового шифрования. Потоковые режимы работы могут шифровать и расшифровывать сообщения любого размера и, следовательно, не требуют дополнения. Более сложные способы завершения сообщения, такие как кража шифротекста или завершение остаточного блока, позволяют избежать необходимости дополнения. Недостатком дополнения является то, что оно делает открытый текст сообщения уязвимым для атак типа "оракул дополнения". Атаки типа "оракул дополнения" позволяют злоумышленнику получить информацию об открытом тексте, не атакуя сам блочный шифр. Атак типа "оракул дополнения" можно избежать, гарантируя, что злоумышленник не сможет получить информацию об удалении байтов дополнения. Этого можно добиться путем проверки кода аутентификации сообщения (MAC) или цифровой подписи перед удалением байтов дополнения, либо переходом к потоковому режиму работы.
Битовая прокладка
Битовое дополнение может применяться к сообщениям любого размера. К сообщению добавляется один бит '1', а затем добавляется столько битов '0', сколько необходимо (возможно, ни одного). Количество добавленных '0' битов будет зависеть от границы блока, до которой сообщение должно быть дополнено. В битовом представлении это выглядит как "1000 0000". Этот метод можно использовать для дополнения сообщений любой длины в битах, не обязательно кратной числу байтов. Например, сообщение длиной 23 бита, дополненное 9 битами для заполнения 32-битного блока: 1011 1001 1101 0100 0010 0111 0000 0000. Это дополнение является первым шагом двухэтапной схемы дополнения, используемой во многих хеш-функциях, включая MD5 и SHA. В этом контексте оно определено в RFC1321, шаг 3.1. Эта схема дополнения определена в ISO/IEC 9797-1 как метод дополнения 2.
| 1011 1001 1101 0100 0010 0111 0000 0000 |
This padding is the first step of a two step padding scheme used in many hash functions including MD5 and SHA. In this context, it is specified by RFC1321 step 3.1. This padding scheme is defined by ISO/IEC 9797 1 as Padding Method 2.
Ополнить байт
Байтовое заполнение может применяться к сообщениям, которые можно представить в виде целого числа байт.
Криптография с открытым ключом
В криптографии с открытым ключом, заполнение (padding) — это процесс подготовки сообщения для шифрования или подписи с использованием спецификации или схемы, такой как PKCS#1 v2.2, OAEP, PSS, PSSR, IEEE P1363 EMSA2 и EMSA5. Современной формой заполнения для асимметричных примитивов является OAEP, применяемый к алгоритму RSA при шифровании ограниченного числа байт. Эта операция называется "заполнением", поскольку изначально к сообщению просто добавлялся случайный материал, чтобы довести его длину до необходимой для примитива. Такая форма заполнения небезопасна и поэтому больше не используется. Современная схема заполнения призвана гарантировать, что злоумышленник не сможет манипулировать открытым текстом для использования математической структуры примитива и обычно сопровождается доказательством, часто в модели случайного оракула, что взлом схемы заполнения столь же сложен, как и решение сложной задачи, лежащей в основе примитива.
Анализ и защита движения с помощью наполнителей
Даже если используются идеальные криптографические алгоритмы, злоумышленник может получить информацию об объеме генерируемого трафика. Нападающий может не знать, о чем именно говорили Алиса и Боб, но может узнать, что они общались и в каком объеме. В некоторых случаях такая утечка информации может быть крайне компрометирующей. Например, если военные планируют тайную атаку на другую страну, может быть достаточно предупредить эту страну о повышенной секретной активности. Другой пример: при шифровании потоков Voice Over IP с использованием кодирования с переменной скоростью передачи данных, количество бит в единицу времени не скрывается, и это можно использовать для угадывания произносимых фраз. Аналогично, характерные всплески, создаваемые распространенными видеокодеками, часто позволяют однозначно определить, какое видео смотрит пользователь. Даже общий размер объекта – веб-сайта, файла, загружаемого программного обеспечения или онлайн-видео – может однозначно идентифицировать этот объект, если злоумышленник знает или может предположить, из какого известного набора он происходит. Уязвимость, связанная с длиной зашифрованного контента, была использована для извлечения паролей из HTTPS-соединений в известных атаках CRIME и BREACH. Добавление отступов к зашифрованному сообщению может затруднить анализ трафика, скрывая фактическую длину полезной нагрузки. Выбор длины отступов может быть как детерминированным, так и случайным; каждый подход имеет свои преимущества и недостатки, которые применимы в различных ситуациях.
Рандомизированная прокладка
В конце сообщения может быть добавлено случайное количество дополнительных битов или байтов, а также указание в конце, сколько именно было добавлено. Если количество дополнения выбрано как равномерное случайное число между 0 и некоторым максимальным значением M, например, то злоумышленник не сможет точно определить длину сообщения в этом диапазоне. Если максимальное дополнение M мало по сравнению с общим размером сообщения, то это дополнение не создаст значительных накладных расходов, но скроет лишь младшие биты общей длины объекта, оставляя приблизительную длину больших объектов легко наблюдаемой и, следовательно, потенциально уникально идентифицируемой по длине. Если же максимальное дополнение M сопоставимо с размером полезной нагрузки, то неопределенность злоумышленника относительно истинного размера полезной нагрузки сообщения значительно возрастет, но дополнение может привести к увеличению размера сообщения до 100% (двукратное увеличение). Кроме того, в типичных сценариях, когда злоумышленник имеет возможность перехватывать множество последовательных сообщений от одного и того же отправителя, и эти сообщения похожи, что злоумышленник знает или может предположить, он может использовать статистические методы для уменьшения и в конечном итоге устранения преимуществ рандомизированного дополнения. Например, предположим, что приложение пользователя регулярно отправляет сообщения одной и той же длины, и злоумышленник знает или может предположить это, например, на основе идентификации приложения. В качестве альтернативы, активный злоумышленник может заставить конечную точку регулярно отправлять сообщения, например, если жертвой является общедоступный сервер. В таких случаях злоумышленник может просто вычислить среднее значение по множеству наблюдений, чтобы определить длину полезной нагрузки регулярного сообщения.
Детерминированная прокладка
Детерминированная схема заполнения всегда дополняет полезную нагрузку сообщения заданной длины до определенной соответствующей выходной длины зашифрованного сообщения. Когда множество длин полезной нагрузки отображаются в одну и ту же дополненную выходную длину, злоумышленник не может различить или узнать какую-либо информацию об истинной длине полезной нагрузки в пределах этой группы длин, даже после многократного наблюдения за передачей сообщений одинаковой длины. В этом отношении детерминированные схемы заполнения имеют преимущество, заключающееся в отсутствии утечки дополнительной информации с каждым последующим сообщением одного и того же размера полезной нагрузки. С другой стороны, предположим, что злоумышленник может извлечь выгоду из информации о небольших изменениях размера полезной нагрузки, например, плюс или минус один байт при атаке подбора пароля. Если отправитель сообщения окажется неудачливым и отправит множество сообщений, длина полезной нагрузки которых отличается всего на один байт, и эта длина окажется точно на границе между двумя детерминированными классами заполнения, то эти длины полезной нагрузки, отличающиеся на один байт, будут последовательно приводить к разным дополненным длинам (например, плюс или минус один блок), раскрывая именно ту детализированную информацию, которую желает получить злоумышленник. Для защиты от таких рисков рандомизированное заполнение может обеспечить большую защиту, независимо скрывая младшие значащие биты длин сообщений. Распространенные детерминированные методы заполнения включают дополнение до постоянного размера блока и дополнение до следующей большей степени двойки. Однако, как и рандомизированное заполнение с небольшим максимальным значением M, детерминированное заполнение до размера блока, значительно меньшего, чем полезная нагрузка сообщения, скрывает только младшие значащие биты истинной длины сообщений, оставляя истинную приблизительную длину сообщений в значительной степени незащищенной. Дополнение сообщений до степени двойки (или любой другой фиксированной базы) уменьшает максимальный объем информации, который сообщение может раскрыть через свою длину, с O(log M) до O(log log M). Однако дополнение до степени двойки увеличивает накладные расходы на размер сообщения до 100%, а дополнение до степеней больших целых оснований еще больше увеличивает максимальные накладные расходы. Схема PADMÉ, предложенная для заполненных однородных случайных блоков (PURB), детерминированно дополняет сообщения до длин, представимых в виде числа с плавающей запятой, мантисса которого не длиннее (т.е. не содержит больше значащих битов), чем его экспонента. Это ограничение длины гарантирует, что сообщение раскрывает не более O(log log M) бит информации через свою длину, как и при дополнении до степени двойки, но при этом требует гораздо меньших накладных расходов – не более 12% для небольших сообщений, постепенно уменьшаясь с увеличением размера сообщения.