Рейтинг:0

взломать одноразовый блокнот с помощью повторного использования ключа

флаг cn

Существует одноразовый блокнот, который работает следующим образом: при наличии сообщения «hello» и ключа «asdfg» он производит «hwoqu». Он работает только с 26 английскими буквами. Результат: (h(7) + a(0))%26 = h(7), (e(4) + s(18))%26 = w(22) и т.д.

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

Какова процедура для этого?

До сих пор я пытался выполнить XOR над двумя зашифрованными текстами, то есть для каждой буквы в c1 и c2 преобразовать в соответствующее числовое значение и XOR n-й буквы c1 с n-й буквой c2, чтобы сгенерировать c3.

Затем я должен использовать это с угадывающим словом, таким как «the», заставляя это против c3.Это та часть, где я застрял, я не знаю, что я должен искать здесь.

Редактировать:

Итак, поскольку это дополнение, а не XOR, вот что я написал:

c1 = "уджхантамузвгктеррикуб"
c2 = "bpgxmkymbbpyxmogoehdefgh"

клавиатурное шифрование и дешифрование:

def oneTimePad (сообщение, код):
    сообщение_выход = ""
    для i в диапазоне (len (сообщение)):
        
        индекс = (letters.find (сообщение [i]) + Letters.find (код [i]))% 26
        message_out+= буквы[индекс]

    вернуть message_out

def otpDecrypt (шифр, ключ):
    сообщение_выход = ""

    для i в диапазоне (длина (ключ)):
        index = (letters.find(шифр[i]) - Letters.find(ключ[i]))%26
        message_out+= буквы[индекс]
    вернуть message_out

взломщик:

def padCracker(m1, m2, предположения): # m1, m2 список чисел
    m3 = список (карта (лямбда x, y: (x + y)% 26, m1, m2))
    check = [] # m3 + мод предположения 26
    угадайЧисло = список(карта(лямбда с: буквы.найди(с), угадай))
    для i в диапазоне (len(m3)-len(предположение)+1):
        проверка = список (карта (лямбда x, y: (x + y)% 26, предположениеЧисло, m3 [i: i + len (предположение)]))
        распечатать (проверить, конец = "")
        
        строка = ""
        для номера в чеке:
            строка += буквы [число]

        печать (строка)       


печать (padCracker (m1, m2, "BCD"))

это говорит о том, что c1 начинается с «the», а c2 с «and» с ключом «bcd», но я не знаю, как получить остальную часть ключа

SAI Peregrinus avatar
флаг si
Подсказка: используется ли шифрование XOR? Что он использует? Как это связано с зашифрованными текстами?
Shiny_and_Chrome avatar
флаг cn
Я полагаю, что на самом деле это не использует XOR. Он просто добавляет ключ и букву открытого текста, как шифр Виженера. Итак, какова процедура отмены шифра Виженера и как мне использовать связь между c1 и c2, чтобы получить открытый текст?
SAI Peregrinus avatar
флаг si
Он добавляет букву ключевого потока и букву открытого текста мод 26. Расшифровка такая же. Отношение к выполнению обычных атак с двумя блокнотами (например, перетаскивание кроватки) заключается в добавлении мода 26 зашифрованных текстов. -key-reuse имеет несколько хороших ответов.
Shiny_and_Chrome avatar
флаг cn
спасибо, это очень помогло. Итак, я добавляю буквы двух зашифрованных текстов, потому что это то, что было сделано во время шифрования, тогда как если бы это было XOR, я бы также выполнил XOR двух зашифрованных текстов? Если я правильно понимаю перетаскивание детской кроватки, я беру угадываемое слово, такое как «the», «and» или «have», преобразовываю его в числовое значение, затем добавляю каждую букву к соответствующей букве в c3, если результат что-то читаемое, тогда это дает мне еще одно потенциальное угадывающее слово, чтобы затем построить то, что представляет собой сообщение.
SAI Peregrinus avatar
флаг si
Ага. По сути, это тот же OTP, что и обычный, только с XOR для битов, замененным добавлением mod 26 для английских букв.
Shiny_and_Chrome avatar
флаг cn
Я до сих пор не могу заставить эту чертову штуку работать. Я сделал с3 = (с1+с2) % 26, затем (с + предположение) % 26, но не знаю, что делать дальше. Вся кроватка не щелкает. Я обновил свой исходный пост, чтобы показать, что я пробовал.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.