Подтвердить что ты не робот

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

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

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

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

Заранее благодарю

4b9b3361

Ответ 1

Ответ в значительной степени приведен в описании проблемы:

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

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

Ответ 2

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

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

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

Сначала просто напишите функцию, которая проверяет, что черный ящик шифрует данные с помощью 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

Ответ 3

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

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

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

Ответ 4

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

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

EDIT:

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