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