Время прочтения: 5 мин.

За научным словом «криптография» (с древнегреческого буквально «тайнопись» скрывается древнее желание человека спрятать важную информацию от посторонних глаз».

Что же такое криптография?
Криптография – наука о методах и механизмах защиты посредством шифрования данных для обеспечения информационной безопасности деятельности. Можно выделить три основных способа защищенной передачи информации от адресата к получателю.

  1. Создать защищенный канал связи.
  2. Использовать общий канал связи, но применять стеганографию (скрывать факт передачи).
  3. Использовать общий канал связи, но применять криптографию.

Первый способ хоть и надежен, но достаточно сложен, и в большинстве случаев не выгоден.

Второй также хорош, но имеется шанс случайно обнаружить информацию.

Третий способ более надежный и эффективный.

Существует много различных шифров. Один из них – шифр Цезаря. Он очень прост в понимании. Его суть заключается в том, что мы сдвигаем наше сообщение на n символов. Например, при сдвиге буквы А на 3 символа вправо, она станет буквой Г, а буква Я станет буквой В. (см. рисунок 1).

Рисунок 1 — Пример шифра Цезаря

Такой шифр легко вскрывается путем перебора:
 n ∈ {1, . . . , |A|}, где |A| — количество букв в алфавите

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

Ключ – секретная информация, которая используется при шифровании и расшифровке. Выберем слово – ключ. Например “ключ” = 12 13 32 25.

Сформулируем периодическую последовательность k = 12 13 32 25

Зашифруем слово “криптография”:

Криптография = 12 18 10 17 20 16 4 18 1 22 10 33
Тогда получим:

    12 18 10 17 20 16  4  18  1  22 10 33
+                                                                       
    12 13 32 25 12 13 32 25 12 13 32 25

=

    24 31 42 42 32 29 36 43 13 35 42 38

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

А теперь давайте перейдем к более реальной ситуации. Предположим, что

  1. У нас есть большой шифрованный текст.
  2. Мы знаем, что используется шифр замены.
  3. Известен язык открытого текста.

Имея все эти 3 пункта, мы можем взломать шифр, используя анализ частоты встречаемости букв алфавита и букв шифрованного текста. Статистику частоты букв можно получить путем парсинга и анализа текстов, но мы возьмем готовую информацию с Wikipedia (см. рисунок 2).

Рисунок 2 — Частотность букв русского языка

Для взлома шифра мы напишем программу на языке программирования Python. В качестве среды разработки будем использовать Sublime Text, а также командную строку для запуска приложения.

В качестве текста мы будем использовать отрывок из книги “Гарри Поттер и философский камень”, после чего применим шифр простой замены. (см. рисунок 3)

Рисунок 3 — Отрывок зашифрованного текста

Перейдем в Sumlime Text и начнем написание нашей программы.
Для начала подключим все нужные библиотеки, создадим словари с русским алфавитом, часто встречаемыми буквами и знаками, а также будем спрашивать, нужно ли нам выводить результат расшифровки в консоль (см. Рисунок 4).

Рисунок 4

Так как для анализа требуется большое количество текста, удобнее будет поместить текст в отдельный файл. Далее будем считывать данные с файла encrypted-text.txt, в котором будет изначально лежать зашифрованный текст (см. Рисунок 5).

Рисунок 5 — Чтение текста с файла

Для частотного анализа нужно выяснить, как часто встречается каждая буква. Для этого будем использовать функцию Counter(), а так же применим фильтр, чтобы выполнялся подсчет только букв (см. рисунок 6).

Рисунок 6 — Счетчик частоты встречаемых букв

После того как мы получили частоту встречаемых букв, у нас имеется 2 основных массива с которыми мы будем работать. Это массив частотности букв русского языка, и массив частотности букв зашифрованного текста.
Наша задача заменить буквы с зашифрованного текста на буквы русского языка. Для этого создадим словарь, используя функции dict(zip()) (см. рисунок 7).

Рисунок 7 — Замена букв

После того, как мы получили расшифрованный текст, мы выводим его в консоль, если этого захотел пользователь, и сохраняем наш результат в файл decrypted-text.txt (см. рисунок 8).

Рисунок 8 — Запись результата в файл.

Откроем файл, и начнем разбираться с результатом (см рисунок 9).

Рисунок 9 — Отрывок результата программы

Можно увидеть, что все равно тяжело разобрать текст, а тем более понять смысл. Но если всмотреться внимательнее, то мы можем заменить слова, очень похожие на русские. Например слово “фоноярафии” очень похоже на слово “фотографии”, так мы понимаем, что Н = Т, а Я = Г. Изучив еще немного текста, и применив замену мы можем получить нормальный текст (см. рисунок 10).

Рисунок 10 — Отрывок готового текста

Криптография прошла гигантский путь от простых шифров в древности до сложнейших криптосистем. Очередная революция в шифровании произойдет с развитием квантовых суперкомпьютеров.