top of page
Level 5
Опечатанный
компьютер
Наконец, хакеры вводят в терминал компьютерного центра Wintermute пароль, распечатанный для них машиной "ВыносМозга", но вместо ожидаемого доступа к заветному чипу, содержащему весь украденный интернет, в полу открывается люк. Спустившись в него, друзья видят компьютер, опечатанный огромным амбарным замком с кодом.
Ну что ж, очередной шифр!
Но на этот раз - шифр, гораздо более замысловатый, чем шифр Цезаря. Он называется "шифром Виженера", и носит имя французского дипломата Блеза Виженера, который на самом деле не изобрёл его, а только объединил несколько предыдущих шифров в один.
Шифр Виженера на самом деле - это практически то же самое, что и шифр Цезаря, только с несколькими разными сдвигами, применёнными к каждой следующей букве шифруемого сообщения (если вы помните, в шифре Цезаря используется только один сдвиг для всех букв).
Для шифра Виженера нужно выбрать некое секретное слово, называемое ключом, которое и будет определять, какой именно сдвиг алфавита применяется к каждой букве шифруемого сообщения.
Внимание: на самом деле ни в коем случае нельзя в качестве ключа выбирать существующее слово, потому что тогда шифр Виженера довольно легко взломать (чем вам и предстоит заняться на этом уровне). Однако, чтобы значительно облегчить задачу, мы как раз и выберем в качестве ключа существующее английское слово.
Этот квадрат называется "квадратом Виженера". Верхняя строчка по горизонтали представляет собой буквы шифруемого сообщения. Левая строчка по вертикали соответствует буквам ключа.
Как видите, каждая буква в этой строчке является результатом сдвига алфавита: так, верхний ряд квадрата не сдвинут совсем (он соответствует букве А). Второй сверху ряд квадрата сдвинут на одну букву влево (он соответствует букве B). И так далее.
Представим, что нашим ключом будет слово CODE, а зашифровать нужно предложение MY PASSWORD IS SECRET. Заметим, что пробелы мы оставим без изменения даже в зашифрованном сообщении. Процесс шифрования будет происходить так:
Первая буква - O.
Вторая буква - M.
Третья буква - S.
И так далее...
Заметьте, что когда ключ заканчивается, он просто повторяется снова и снова: CODECODECODECODECODE...
Как решить задачу ?
В результате получается: OM SEUGZSTR LW USFVGH.
Что делать, как подступиться к решению ?
Прежде всего, нам понадобятся все английские слова. Мы по порядку попробуем каждое из них в качестве ключа, пока какое-то слово не даст результат, похожий на английский язык.
Представьте, что мы дошли до слова CODE. Как и для всех предыдущих слов в словаре, мы применим этот ключ для расшифровки секретного сообщения, то есть примененим метода Виженера наоборот.
После расшифровки посмотрим на результат: если он представляет собой правильную английскую фразу, то мы нашли ключ.
Все английские слова - не так страшно, как это звучит, потому что 45 тысяч английских слов уже ждут вас вот в этом файле (скачайте его себе на компьютер).
Для решения задачи вам надо будет прочитать этот файл, слово за словом и к каждому из них попробовать применить процедуру расшифровки, предполагая, что это и есть ключ!
Да, но неужели придётся просматривать десятки тысяч неудачно расшифрованных предложений в надежде в одном из них узнать правильный английский язык ?
Ни в коем случае! Для этого у нас есть компьютер.
Вам нужно будет написать специальную функцию, которая с высокой долей вероятности сможет определить, является ли данное ей предложение настоящим английским или же просто мусором. И в этом вам снова поможет всё тот же файл, содержащий весь словарь.
Возьмите данное предложение (результат очередной расшифровки), переведите все буквы в заглавные (потому все слова в нашем словаре написаны заглавными буквами) и разбейте его на слова, используя пробелы в качестве разделителя. Теперь, сверяясь со словарём, проверьте, какой процент из полученных слов содержится в словаре. Выберите приемлемый процент самостоятельно, попробовав разные варианты. Если многие из слов вашего предложения - настоящие английские слова - вполне возможно, что текущий ключ и является правильным.
Теперь осталось только распечатать полученный текст и либо убедиться в том, что сообщение расшифровано, либо продолжить поиски.
Что вам может понадобиться для решения ?
Прежде всего, нужно научиться открывать файл и читать его содержимое. Сделать это можно таким образом:
with open('dictionary.txt') as f:
words = f.readlines()
Попробуйте самостоятельно разобраться в том, что такое with (для наших целей это не так важно).
Чтобы пройти по всем словам и убрать из них лишние символы (такие, как перевод строки), можно применить
for word in words:
word = word.strip()
Слово превращается в свою копию, записанную заглавными буквами с помощью функции upper:
word = word.upper()
Создать список (list) из всех слов предложения можно с помощью функции split:
word_list = sentence.split()
Как раскрыть пароль ?
Каждый хакер в своём почтовом ящике получит сообщение, которое будет зашифровано методом Виженера. В нём не будет никаких знаков пунктуации, поэтому о них можно не беспокоиться.
Сообщения дадут вам ключ к вашей части пароля.
Пароль будет состоять из частей, раскрытых каждым из хакеров в следующем порядке:
Линус + Сатоши Накамото + Тринити + J.F.Sebastian + Дораемон
до конца уровня
Теперь, когда вы знаете пароль, можете переходить на
bottom of page