5 задач на взлом шифров

936fdaf66c9682aec5b0d12c389a6895.png

Известна зловещая история о том, как Мария Стюарт лишилась головы из-за одноподстановочного шифра — задолго до вымышленных баек про «Золотого Жука» или «Пляшущих Человечков». Нынче подобные шифры вызывают снисходительную улыбку даже у школьников — чтобы расшифровать их, обычно и компьютер-то не требуется.

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

Без «Цезаря» никак

Задача на взлом «Шифра Цезаря» должна быть в списке просто потому что на том же принципе базируются и более сложные. Напомним что:

  • «одноподстановочным» называется шифр в котором тупо каждая буква заменена какой-то другой (или каким-нибудь таинственным символом) — в общем, взаимно-однозначное соответствие

  • а «Шифр Цезаря» — это простой вариант одноподстановочного шифра в котором «соответствие» определяется как сдвиг букв по алфавиту на несколько позиций (из плюсов — вместо таблицы преобразования нужно запомнить только одно число)

Расшифровка одноподстановочного шифра сводится к упражнению на определение частоты букв в тексте и сравнении с ожидаемым распределением для данного языка (например английского). Но с «Цезарем» можно поступить и проще т.к. вариантов «ключа» всего 26 — можно их перебрать и проверить текст на какие-то популярные слова или слоги…

«Виженер» не намного сложнее

Шифр Виженера — это небольшое усложнение «Цезаря». Вместо одного ключевого числа для определения сдвига букв мы используем небольшую последовательность, например 3, 1, 4, 1, 5, 9 — или эта последовательность может быть задана кодовым словом (каждая буква слова задаёт сдвиг согласно своему номеру в алфавите). Таким образом первая буква текста кодируется первым сдвигом из «ключа», вторая — вторым и так далее, пока ключ не кончится — после чего все повторяется. В принципе если бы ключ был длинной с сам текст, шифр был бы надёжным…

Взлом Шифра Виженера очевидно не может использовать «упрощённый» вариант взлома «Цезаря» с перебором ключей -, но частотный анализ рулит. Остаётся только сделать несколько попыток с разной предполагаемой длинной ключа N — и рассматривать текст как набор из N шифров. Как только мы получаем «профиль» частот схожий с естественным текстом — понятно, длина ключа определена. Ну и дальше уже все просто.

Потоковый шифр — как с ним быть?

Очевидное развитие идеи «Виженера» — не хранить последовательность «ключа», а генерировать её на лету. Запасаемся каким-нибудь алгоритмом генерации псевдослучайной последовательности — и используем получаемые значения для «сдвига» букв. Такие последовательности могут иметь очень большой период, так что атака подобная предыдущей не годится. А в качестве «секрета» нужно запомнить только параметры генерации последовательности (обычно это от 2 до 5 чисел).

Взлом Потокового Шифра использует иной подход. Если у нас есть только один шифрованный текст — дело плохо, или вовсе безнадёжно. Но если у нас есть как минимум два сообщения зашифрованных одной и той же «ключевой» последовательностью — то немножко поколдовав над ними мы можем выделить сам ключ. Даже не поняв алгоритма его генерации мы сможем использовать его для декодирования.

Ферма ломает RSA

Около 70х годов прошлого столетия в криптографии случился качественный прорыв — появились способы при которых можно публично обмениваться ключами или частями для их генерации. Кроме замечательной выдумки Диффи-Хеллмана (не удивлюсь если она до сих пор используется как часть процесса установки защищенного соединения браузера с сервером) у всех на слуху конечно RSA — алгоритм при котором мы можем отправить ключ для шифрования своему абоненту совершенно открыто — всё равно для расшифровки-то требуется другой, который мы держим в секрете.

Задача Fermat goes hacking RSA посвящена разбору возможного взлома такого шифра — в том случае когда пара ключей была сгенерирована не очень осмотрительно. В отличие от предыдущих задач здесь не даётся пространных пояснений, а только подсказка что имя Пьера Ферма упомянуто не случайно — предполагается что простое гугление осветит дальнейший путь…

Шифр Плейфера — этот не для слабаков

С названием связана забавная история — фамилия Playfair переводится как «Играй честно» -, но при этом автор алгоритма не сам Плейфер (который его популяризировал), а Уитстон, которого вы можете помнить как изобретателя английского телеграфа или измерительного моста для сопротивлений.

Так вот — этот шифр, хотя и отбрасывает нас назад от современных технологий — вполне может заставить вас поднапрячься. Идея проста — он работает «подстановками» как и «одноподстановочный» -, но оперирует не с одиночными буквами, а с парами букв, то есть «биграммами». Навскидку 26 букв образуют больше 600 всевозможных пар и суть метода сводится в основном к хитроумному способу генерации «подстановок» с помощью маленькой квадратной таблички в которую буквы расставлены рандомно.

Задача на Взлом Шифра Плейфера — представляет вам относительную свободу действий. Вы получаете шифрованный текст -, а уж придумывать способ (наверное, на основе экспериментов с предыдущими шифрами) — это уже ваше дело :) На текущий момент это одна из «наименее решаемых» задач на сайте.

Заключение

Можно видеть что задачи упомянутые здесь помечены тегом cryptography — если щёлкнуть по нему, можно найти ещё несколько упражнений по данной тематике, но не связанных непосредственно со взломом (а чаще знакомство с теми или иными алгоритмами).

Конечно, все упомянутые шифры очень известны, и при небольшом усилии в интернетах легко найти готовые программы и тулы которые отыщут решение за вас. Но тратить время на то чтобы «не решать» задачи, наверное, бессмысленно :)

© Habrahabr.ru