Как определить режим блочного шифрования

Как определить, было ли сообщение зашифровано в режиме CBC или ECB?

Я создал функцию, которая случайным образом шифрует в AES 128 CBC или ECB, и я выполняю переключение между открытым текстом и зашифрованным текстом < / strong>, но швы не соотносятся с режимом шифрования.

Как я могу определить режим блочного шифрования?

заранее спасибо


person Xantra    schedule 29.06.2013    source источник
comment
Если только ваш код выполняет и шифрование, и дешифрование, вы можете добавить дополнительный байт, например. 0 или 1 в зависимости от режима шифрования и проверьте это перед обработкой полезной нагрузки. Другой вариант, который вы можете попробовать, - сначала попробовать cbc, если это не удалось, попробуйте ecb при расшифровке.   -  person Bimalesh Jha    schedule 29.06.2013
comment
Боюсь, что если в простом тексте или зашифрованном тексте нет отличительных элементов, вы не сможете надежно обнаружить режим блочного шифрования. Блоки должны быть неотличимы от случайных. К счастью, обычный текст обычно не такой. Если вы действительно использовали режим CBC, вам следовало использовать IV, поэтому IV может быть отличительной особенностью. Тем не менее; какого черта черт побери вы бы случайно зашифровали с помощью CBC или ECB ???   -  person Maarten Bodewes    schedule 01.07.2013
comment
Это упражнение в криптографии. Цель состоит в том, чтобы обнаружить режим шифрования, поэтому я создал функцию, которая случайным образом использует CBC и ECB для проверки моей функции обнаружения.   -  person Xantra    schedule 02.07.2013


Ответы (4)


Ответ в значительной степени дается в постановке задачи:

Помните, что проблема с ECB заключается в том, что он не имеет состояния и детерминирован; один и тот же 16-байтовый блок открытого текста всегда будет давать один и тот же 16-байтовый зашифрованный текст.

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

person crishoj    schedule 21.12.2013

Я делаю тот же набор задач и только что закончил эту задачу (используя clojure).

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

В любом случае, давайте немного разберемся в проблеме:

Во-первых, просто напишите функцию, которая проверяет, что черный ящик шифрует данные с помощью ecb. Как бы ты это сделал?

Это может выглядеть примерно так (псевдокод ниже)

function boolean isEcbBlackbox(func f) 
{   //what input can I use to determine this?
    result = f("chosen input")
    if(result ...) {//what property of result should I look for?
        true
    } else {
        false
    }
}

Помните, что ключевая слабость ECB заключается в том, что идентичные блоки открытого текста будут зашифрованы с идентичными блоками зашифрованного текста.

РЕДАКТИРОВАТЬ: проблемы теперь общедоступны, поэтому я буду ссылаться на свои решения:

https://github.com/dustinconrad/crypto-tutorial/blob/master/src/crypto_tutorial/lib/block.clj#L118.

person RedDeckWins    schedule 03.07.2013
comment
Теперь я чувствую себя действительно глупо ... Полагаю, в вопросе никогда не говорилось, какой тип текста нужно зашифровать, ввод текста определенного типа делает это упражнение действительно очень простым, у меня уже есть функция, которая будет делать это с того момента, когда я сделал обнаружение повторяющегося упражнения xor ... - person Garry Welding; 04.07.2013
comment
Да, это последнее предложение, конечно, может быть единственной отличительной чертой, которую вы можете использовать в зашифрованном тексте. - person Maarten Bodewes; 07.07.2013
comment
Насколько я понимаю, в этой задаче функция черного ящика недоступна для оценки с произвольным вводом. Доступны только выбранные, предварительно вычисленные зашифрованные тексты. Таким образом, выполнение такого рода оценки функции более высокого порядка не принесет особой пользы. - person crishoj; 22.12.2013
comment
Поэтому я намеренно разбил проблему на более простую подзадачу, чтобы помочь ему понять лежащие в основе концепции. Как только вы усвоите эту концепцию, применение ее к фиксированным входным данным станет более коротким шагом. Я чувствую, что вы узнаете намного меньше, если вас кормят с ложечки результатом, чем если вы придете к нему самостоятельно, даже если маршрут несколько окольный. - person RedDeckWins; 09.07.2014
comment
@RedDeckWins, если он проходит через испытания одну за другой, значит, он уже реализовал вашу подсказку, поскольку это как раз одна из предыдущих задач ... - person fstd; 23.08.2014
comment
Проблемы теперь общедоступны, поэтому я связал свое решение в ответе. - person RedDeckWins; 23.08.2014
comment
@RedDeckWins Мы должны расшифровать строку после того, как идентифицировать ее, или просто идентифицировать? В инструкции сказано: «Обнаружь это». и ничего больше. - person x0a; 25.06.2018
comment
@ x0a меня это тоже смутило. Но если я чего-то не упускаю, даже если бы вы могли это обнаружить, разве вам все равно не понадобится ключ для его расшифровки? - person adam tropp; 17.02.2019

вычислить размер блока на основе зашифрованного текста% 16, 24 или 32, в зависимости от того, что когда-либо было == 0

расстояние Хэмминга должно быть выполнено блоком шифра 1 с остальными блоками шифра

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

person vsrinu26f    schedule 02.02.2018

Я знаю точное упражнение, которое вы делаете, я сейчас делаю его сам. Я бы рекомендовал выполнить частотный анализ зашифрованных строк (не забывайте, что строка может быть base64 ' d или шестнадцатеричный). Если вы получите частотное распределение, которое соответствует языку закодированной вами строки, то можно с уверенностью предположить, что оно находится в ECB, иначе это, вероятно, CBC.

Я не знаю, сработает ли это на самом деле, потому что сейчас я просто выполняю упражнение, но это начало.

РЕДАКТИРОВАТЬ:

Я немного поспешил с этим ответом и чувствую, что должен объяснить больше. Если он был зашифрован в режиме ECB, то частотный анализ должен показать нормальный стиль распределения независимо от любого заполнения в начале / конце строки и используемого ключа. В то время как шифрование в режиме CBC должно иметь очень случайное и, вероятно, плоское распределение.

person Garry Welding    schedule 02.07.2013
comment
Хорошо я понял. Я попытался попробовать что-то немного другое, я попытался проанализировать распределение результатов Хэмминга между каждым простым блоком и блоком шифров, но не дал никаких интересных результатов, странных, потому что не относящихся к делу. - person Xantra; 03.07.2013
comment
Я не думаю, что частотный анализ зашифрованной строки вам многого поможет. AES полностью преобразует содержимое блока. См. en.wikipedia.org/wiki/. Ключевым недостатком CBC является то, что идентичные блоки открытого текста будут зашифрованы с идентичными блоками зашифрованного текста. - person RedDeckWins; 03.07.2013
comment
Поразмыслив, я не очень уверен, что ваше предложение сработает из-за размера блока в 16 байт. Если 1 бит во входном блоке изменится, блок шифрования будет полностью другим (то же самое в CBC и ECB). Так что частотный анализ по частоте значения байтов смысла не имеет !? Я прав или нет? - person Xantra; 03.07.2013
comment
Извините, я имел в виду ECB, а не CBC выше - person RedDeckWins; 03.07.2013
comment
Да, забудь мой ответ. Пробовал, FA не работает. Я также пробовал использовать хи-квадрат и монте-карло, чтобы проверить истинную случайность, но, как и ожидалось, поскольку это был AES, он тоже прошел оба этих теста. Я написал сегодня по электронной почте для помощи в этой проблеме. Я получил следующий ответ: Если это было непонятно, вы можете выбрать ввод в оракул ... Излишне говорить, что это совсем не помогло. - person Garry Welding; 03.07.2013
comment
@GarryWelding, это полезный совет. - person RedDeckWins; 04.07.2013
comment
Но да, теперь я понял, это действительно легко, я провел слишком сложное исследование, и ответ персонала очень полезен. - person Xantra; 06.07.2013
comment
Я думаю, что вы, возможно, на правильном пути, но вы хотите свернуть зашифрованный текст против самого себя на уровне Хэмминга. - person Jeff; 15.02.2016