Элементарные шифры на понятном языке
Время на прочтение
4 мин
Количество просмотров 236K
Привет, Хабр!
Все мы довольно часто слышим такие слова и словосочетания, как «шифрование данных», «секретные шифры», «криптозащита», «шифрование», но далеко не все понимают, о чем конкретно идет речь. В этом посте разберемся, что из себя представляет шифрование и рассмотрим элементарные шифры с тем расчетом, чтобы даже далекие от IT люди поняли суть этого явления.
Прежде всего, разберемся в терминологии.
Шифрование – это такое преобразование исходного сообщения, которое не позволит всяким нехорошим людям прочитать данные, если они это сообщение перехватят. Делается это преобразование по специальным математическим и логическим алгоритмам, некоторые из которых мы рассмотрим ниже.
Исходное сообщение – это, собственно, то, что мы хотим зашифровать. Классический пример — текст.
Шифрованное сообщение – это сообщение, прошедшее процесс шифрования.
Шифр — это сам алгоритм, по которому мы преобразовываем сообщение.
Ключ — это компонент, на основе которого можно произвести шифрование или дешифрование.
Алфавит – это перечень всех возможных символов в исходном и зашифрованном сообщении. Включая цифры, знаки препинания, пробелы, отдельно строчные и заглавные буквы и т.д.
Теперь, когда мы говорим на более-менее одном языке, разберем простые шифры.
-
Шифр Атбаша
Самый-самый простой шифр. Его суть – переворот алфавита с ног на голову.
Например, есть у нас алфавит, который полностью соответствует обычной латинице.
a b c d e f g h i j k l m n o p q r s t u v w x y z
Для реализации шифра Атбаша просто инвертируем его. «А» станет «Z», «B» превратится в «Y» и наоборот. На выходе получим такую картину:
И теперь пишем нужное сообшение на исходном алфавите и алфавите шифра
Исходное сообщение: I love habr
Зашифрованное: r olev szyi
-
Шифр Цезаря
Тут добавляется еще один параметр — примитивный ключ в виде числа от 1 до 25 (для латиницы). На практике, ключ будет от 4 до 10.
Опять же, для наглядности, возьмем латиницу
a b c d e f g h i j k l m n o p q r s t u v w x y z
И теперь сместим вправо или влево каждую букву на ключевое число значений.
Например, ключ у нас будет 4 и смещение вправо.
Исходный алфавит: a b c d e f g h i j k l m n o p q r s t u v w x y z
Зашифрованный: w x y z a b c d e f g h i j k l m n o p q r s t u v
Пробуем написать сообщение:
hello world
Шифруем его и получаем следующий несвязный текст:
dahhk sknhz
-
Шифр Вернама (XOR-шифр)
Простейший шифр на основе бинарной логики, который обладает абсолютной криптографической стойкостью. Без знания ключа, расшифровать его невозможно (доказано Клодом Шенноном).
Исходный алфавит — все та же латиница.
Сообщение разбиваем на отдельные символы и каждый символ представляем в бинарном виде.
Классики криптографии предлагают пятизначный код бодо для каждой буквы. Мы же попробуем изменить этот шифр для кодирования в 8 бит/символ на примере ASCII-таблицы. Каждую букву представим в виде бинарного кода.
Теперь вспомним курс электроники и элемент «Исключающее ИЛИ», также известный как XOR.
XOR принимает сигналы (0 или 1 каждый), проводит над ними логическую операцию и выдает один сигнал, исходя из входных значений.
Если все сигналы равны между собой (0-0 или 1-1 или 0-0-0 и т.д.), то на выходе получаем 0.
Если сигналы не равны (0-1 или 1-0 или 1-0-0 и т.д.), то на выходе получаем 1.
Теперь для шифровки сообщения, введем сам текст для шифровки и ключ такой же длины. Переведем каждую букву в ее бинарный код и выполним формулу сообщение XOR ключ
Например:
сообщение: LONDON
ключ: SYSTEM
Переведем их в бинарный код и выполним XOR:
01001100 01001111 01001110 01000100 01001111 01001110
01010011 01011001 01010011 01010100 01000101 01001101
_______________________________________________________
00011111 00010110 00011101 00010000 00001010 00000011
В данном конкретном примере на месте результирующих символов мы увидим только пустое место, ведь все символы попали в первые 32 служебных символа. Однако, если перевести полученный результат в числа, то получим следующую картину:
31 22 29 16 10 3.
С виду — совершенно несвязный набор чисел, но мы-то знаем.
-
Шифр кодового слова
Принцип шифрования примерно такой же, как у шифра цезаря. Только в этом случае мы сдвигаем алфавит не на определенное число позиций, а на кодовое слово.
Например, возьмем для разнообразия, кириллический алфавит.
абвгдеёжзийклмнопрстуфхцчшщъыьэюя
Придумаем кодовое слово. Например, «Лукоморье». Выдернем из него все повторяющиеся символы. На выходе получаем слово «Лукомрье».
Теперь вписываем данное слово в начале алфавита, а остальные символы оставляем без изменений.
абвгдеёжзийклмнопрстуфхцчшщъыьэюя
лукомрьеабвгдёжзийнпстфхцчшщъыэюя
И теперь запишем любое сообщение и зашифруем его.
"Златая цепь на дубе том"
Получим в итоге следующий нечитаемый бред:
"Адлпля хриы жл мсур пиё"
-
Шифр Плейфера
Классический шифр Плейфера предполагает в основе матрицу 5х5, заполненную символами латинского алфавита (i и j пишутся в одну клетку), кодовое слово и дальнейшую манипуляцию над ними.
Пусть кодовое слово у нас будет «HELLO».
Сначала поступаем как с предыдущим шифром, т.е. уберем повторы и запишем слово в начале алфавита.
Теперь возьмем любое сообщение. Например, «I LOVE HABR AND GITHUB».
Разобьем его на биграммы, т.е. на пары символов, не учитывая пробелы.
IL OV EH AB RA ND GI TH UB.
Если бы сообщение было из нечетного количества символов, или в биграмме были бы два одинаковых символа (LL, например), то на место недостающего или повторившегося символа ставится символ X.
Шифрование выполняется по нескольким несложным правилам:
1) Если символы биграммы находятся в матрице на одной строке — смещаем их вправо на одну позицию. Если символ был крайним в ряду — он становится первым.
Например, EH становится LE.
2) Если символы биграммы находятся в одном столбце, то они смещаются на одну позицию вниз. Если символ находился в самом низу столбца, то он принимает значение самого верхнего.
Например, если бы у нас была биграмма LX, то она стала бы DL.
3) Если символы не находятся ни на одной строке, ни на одном столбце, то строим прямоугольник, где наши символы — края диагонали. И меняем углы местами.
Например, биграмма RA.
По этим правилам, шифруем все сообщение.
IL OV EH AB RA ND GI TH UB.
KO HY LE HG EU MF BP QO QG
Если убрать пробелы, то получим следующее зашифрованное сообщение:
KOHYLEHGEUMFBPQOQG
Поздравляю. После прочтения этой статьи вы хотя бы примерно понимаете, что такое шифрование и знаете как использовать некоторые примитивные шифры и можете приступать к изучению несколько более сложных образцов шифров, о которых мы поговорим позднее.
Спасибо за внимание.
Загрузить PDF
Загрузить PDF
Обродай ожаловатьпай анай иптографиюкрай сай икихаувай!
Независимо от того, пишите ли вы записки своим друзьям в классе или пытаетесь постигнуть криптографию (науку о кодах и шифрах) ради интереса, эта статья может помочь вам узнать некоторые основные принципы и создать свой собственный способ кодировки личных сообщений. Прочитайте шаг 1 ниже, чтобы понять с чего начинать!
Некоторые люди используют слова «код» и «шифр» для обозначения одинаковых понятий, но те, кто серьезно занимаются этим вопросом, знают, что это два абсолютно разных понятия. Секретный код – система, в которой каждое слово или фраза в вашем сообщении заменяются другим словом, фразой или серией символов. Шифр – система, в которой каждая буква вашего сообщения заменяется другой буквой или символом.
Стандартные коды
-
1
Создайте свою собственную книгу кода. Любой полноценный код требует наличия книги кода. Придумайте слова или фразы, замещающие необходимые вам слова или фразы, затем соберите их всех вместе в книге кода, чтобы вы могли поделиться ею с вашими супер секретными друзьями.
-
2
Создайте ваше сообщение. Используя книгу кода, аккуратно и внимательно напишите сообщение. Обратите внимание, что соединение вашего кода с шифром сделает ваше сообщение еще более защищенным!
-
3
Переведите ваше сообщение. Когда ваши друзья получат сообщение, им понадобится использовать их экземпляр книги кода, чтобы перевести сообщение. Убедитесь, что они знают, что вы используете двойной метод защиты.
Реклама
Книга кода
-
1
Выберите книгу. При использовании книги кода вы создадите код, обозначающий место нужных слов в книге. Если вы хотите увеличить шансы того, что любое из необходимых вам слов будет в книге кода, то используйте словари или большие справочники путешественника. Вам необходимо, чтобы количество слов, используемых в книге, было большим и относилось к разным темам.
-
2
Переведите слова вашего сообщения в цифры. Возьмите первое слово вашего сообщения и найдите его где-то в книге. После этого запишите номер страницы, номер строки и номер слова. Напишите их вместе для замены нужного вам слова. Делайте эту операцию для каждого слова. Вы также можете использовать этот прием для шифрования фраз, если ваша книга кода может предоставить вам нужную фразу готовой.
- Итак, например, слово на странице 105, пятая строчка вниз, двенадцатое по счету станет 105512, 1055.12 или чем-то похожим.
-
3
Передайте сообщение. Отдайте зашифрованное сообщение вашему другу. Тому понадобится использовать ту же самую книгу для обратного перевода сообщения.
Реклама
Полицейское кодирование
-
1
Выбирайте самые популярные фразы. Этот тип кода работает лучше всего, когда у вас есть набор фраз, которые вы используете чаще всего. Это может быть чем-нибудь от простого «Он симпатичный!» до чего-нибудь более серьезного, например, «Я не могу встретиться прямо сейчас».
-
2
Подготовьте код для каждой из фраз. Вы можете использовать аналог полицейского кодирования и присвоить каждой фразе номер или несколько букв или использовать другие фразы (как поступают в больницах). Например, вы можете сказать «1099» вместо «Эта линия прослушивается» или вы можете сказать «Я думаю о том, чтобы поехать порыбачить на этих выходных». Использование цифр легче при письме, но использование фраз выглядит менее подозрительно.
-
3
Запомните код. Этот тип кодировки работает лучше всего, если вы можете держать в памяти все фразы, хотя наличие книги кода для подстраховки никогда не повредит!
Реклама
Шифрование, основанное на дате
-
1
Выберите дату. Например, это будет день рождения Стивена Спилберга 18 декабря 1946 года. Напишите эту дату, используя цифры и косые черты (12/18/46), затем уберите черты, чтобы получить шестизначное число 121846, которые вы можете использовать для передачи зашифрованного сообщения.
-
2
Присвойте каждой букве цифру. Представьте, что сообщение «Мне нравятся фильмы Стивена Спилберга». Под сообщение вы напишите ваше шестизначное число снова и снова до самого конца предложения: 121 84612184 612184 6121846 121846121.
-
3
Зашифруйте ваше сообщение. Напишите буквы слева направо. Передвиньте каждую букву обычного текста на количество единиц, указанных под ней. Буква «М» сдвигается на одну единицу и становится «Н», буква «Н» сдвигается на две единицы и становится «П». Обратите внимание, что буква «Я» сдвигается на 2 единицы, для этого вам необходимо перескочить на начало алфавита, и становится «Б». Ваше итоговое сообщение будет «Нпё хфёгбущг ъйныфя чукгмсё тсйуексеб».
-
4
Переведите ваше сообщение. Когда кто-то захочет прочитать ваше сообщение, все, что ему надо будет знать, так это какую дату вы использовали для кодировки. Для перекодировки воспользуйтесь обратным процессом: напишите цифровой код, затем верните буквы в противоположном порядке.
- Кодирование при помощи даты имеет дополнительное преимущество, так как дата может быть абсолютно любой. Вы также можете изменить дату в любой момент. Это позволяет обновлять систему шифра гораздо легче, чем при использовании других методов. Как бы то ни было лучше избегать таких известных дат как 9 мая 1945 года.
Реклама
Шифрование при помощи числа
-
1
Выберите с вашим другом секретное число. Например, число 5.
-
2
Напишите ваше сообщение (без пробелов) с этим количеством букв в каждой строчке (не переживайте, если последняя строчка короче). Например, сообщение «Мое прикрытие раскрыто» будет выглядеть так:
- Моепр
- икрыт
- иерас
- крыто
-
3
Чтобы создать шифр возьмите буквы сверху вниз и запишите их. Сообщение будет «Миикокереррыпыатртао».
-
4
Для расшифровки вашего сообщения ваш друг должен посчитать общее количество букв, разделить его на 5 и определить, есть ли неполные строки. После этого он/она записывает эти буквы в колонки, так чтобы было 5 букв в каждом ряду и одна неполная строка (если есть), и читает сообщение.
Реклама
Графический шифр
-
1
Нарисуйте знаки «решетка» и «+». На листе бумаги создайте основу вашего шифра. Она будет выглядеть, как # и + (поверните знак плюса, чтобы он выглядел как ромб, а не квадрат). [1]
-
2
Расставьте буквы по ячейкам. Данные фигуры имеют ячейки между линиями. Заполните эти ячейки двумя буквами алфавита. Размещайте буквы хаотично и не используйте одну и ту же букву дважды.
- Любой адресат сообщения будет должен иметь такую же копию основы шифра с буквами, для того чтобы прочитать ваше сообщение.
-
3
Запишите ваш код. Возьмите первую букву вашего сообщения. Найдите ее в основе шифра. Посмотрите на линии, которые вокруг нее. Нарисуйте такие же линии, как и линии, которые образуют ячейки в основе шифра. Если буква, которую вы пишите, является второй в ячейке, добавьте точку к линиям. Проделайте данную операцию для каждой буквы сообщения.
Реклама
Перестановка Цезаря
-
1
Создайте свой алфавит шифра. Шифр Цезаря перемещает алфавит и затем заменяет буквы их новым номером по порядку. [2]
Это делает код более трудным для взлома, если вы меняете расстановку регулярно. Например, 3-х перестановочный шифр будет означать, что А становится Э, Б становится Ю, В становится Я и т.д. Если вы хотите написать «Встречаемся завтра на станции», то сообщение будет выглядеть «Яопнвфэвйоь еэяпнэ кэ опэкуёё».- Существует много вариантов изменения порядка алфавита перед созданием кода. Это делает шифр более надежным.
-
2
Запишите ваше сообщение. Наличие помощника, как декодирующий круг, может сделать это проще, если вы сможете подготовить такое, которое будет подходить вашему коду.
-
3
Переведите сообщение. Человек, расшифровывающий ваш код, должен знать только число, чтобы правильно восстановить алфавит. Регулярно меняйте его, но убедитесь, что вы можете безопасно передать адресату, что будет новым числом сдвига алфавита.
Реклама
Путаный язык
-
1
Определите слова, которые начинаются с гласных. Если есть такие, просто добавляйте «ай» на конце слова. Например, «ухо» станет «ухоай», «арка» станет «аркаай» и «оскорбление» станет «оскоблениеай».
-
2
Определите слова, которые начинаются с согласной. Если есть такие, то перенесите первую букву слова в конец и добавьте «ай». Если в начале слова стоят две (или более) согласных, переставьте их в конец и добавьте «ай».
- Например, «труп» станет «уптрай», «грамм» станет «аммграй» и «мысль» станет «ысльмай».
-
3
Говорите на путаном языке. Путаный язык работает лучше всего, если на нем говорить быстро, но для этого потребуется некоторое время подготовки. Не прекращайте практиковаться!
Реклама
Звуковой код
-
1
Создайте свой звуковой код. Этот код будет работать также как и азбука Морзе. Вам будет нужно присвоить звуковой ритмичный код каждой букве или отдельному слову. Выберите ритмы, которые вы можете запомнить.
-
2
Научите вашему коду других. Код должен быть всегда в памяти, поэтому научите коду всех, с кем планируете его использовать.
-
3
Простучите ваше сообщение. Используйте ваши пальцы, конец карандаша или другой инструмент для передачи вашего сообщения. Старайтесь быть скрытными. Вам не надо, чтобы кто-то догадался, что вы общаетесь.
Реклама
Тарабарский язык
-
1
Научитесь говорить на тарабарском языке. Тарабарский язык – языковая игра наподобие путаного языка, но звучит более сложно. Короткое объяснение – вам надо добавлять «-отаг» (или любой аналог)перед каждой гласной в слоге. Это гораздо хитрее, чем звучит на самом деле! Вам потребуется практика, чтобы в совершенстве овладеть этим кодом.
Советы
- Прячьте ваш код в том месте, о котором знают только отправитель и получатель. Например, развинтите любую ручку и положите ваш код внутрь нее, соберите ручку обратно, найдите место (например, подставка под карандаши) и сообщите получателю место и тип ручки.
- Шифруйте также и пробелы, чтобы запутать код еще больше. Например, вы можете использовать буквы (Е, Т, А, О и Н работают лучше всего) вместо пробелов. Они называются пустышками. Ы, Ъ, Ь и Й будут выглядеть слишком явными пустышками для опытных взломщиков кодов, поэтому не используйте их или другие выделяющиеся символы.
- Вы можете создать свой собственный код, переставляя буквы в словах в случайном порядке. «Диж яемн в крапе» – «Жди меня в парке».
- Всегда отправляйте коды агентам с вашей стороны.
- При использовании турецкого ирландского вам не нужно специально использовать «эб» перед согласной. Вы можете использовать «иэ», «бр», «из» или любую другую неприметную комбинацию букв.
- При использовании позиционной кодировки, не стесняйтесь добавлять, удалять и даже переставлять буквы с одного места на другое, чтобы сделать дешифровку еще более трудной. Убедитесь, что ваш партнер понимает, что вы делаете, или все это будет бессмысленным для нее/него. Вы можете разбить текст на части так, чтобы было три, четыре или пять букв в каждой, а затем поменять их местами.
- Для перестановки Цезаря вы можете переставлять буквы на любое количество мест, которое вы хотите, вперед или назад. Только убедитесь что правила перестановок одинаковы для каждой буквы.
- Всегда уничтожайте расшифрованные сообщения.
- Если вы используете свой собственный код, не делайте его слишком сложным, чтобы остальные не смогли его разгадать. Он может оказаться слишком сложным для расшифровки даже для вас!
- Используйте азбуку Морзе. Это один из самых известных кодов, поэтому ваш собеседник быстро поймет, что это.
Реклама
Предупреждения
- Если вы пишете код неаккуратно, то это сделает процесс декодирования более сложным для вашего партнера, при условии что вы не используете вариации кодов или шифров, созданные специально, чтобы запутать дешифровальщика (за исключением вашего партнера, конечно).
- Путаный язык лучше использовать для коротких слов. С длинными словами он не настолько эффективен, потому что дополнительные буквы гораздо более заметны. То же самое при использовании его в речи.
Реклама
Что вам понадобится
Для кодов:
- Книга или словарь
- Карандаш
- Бумага
Для шифров:
- Партитура для кода
- Карандаш
- Бумага
- Любая дата
Источники
Об этой статье
Эту страницу просматривали 83 856 раз.
Была ли эта статья полезной?
Коды и шифры — не одно и то же: в коде каждое слово заменяется другим, в то время как в шифре заменяются все символы сообщения.
В данной статье мы рассмотрим наиболее популярные способы шифрования, а следующим шагом будет изучение основ криптографии.
- Стандартные шифры
- Цифровые шифры
- Как расшифровать код или шифр?
Стандартные шифры
ROT1
Этот шифр известен многим детям. Ключ прост: каждая буква заменяется на следующую за ней в алфавите. Так, А заменяется на Б, Б — на В, и т. д. Фраза «Уйрйшоьк Рспдсбннйту» — это «Типичный Программист».
Попробуйте расшифровать сообщение:
Лбл еёмб, рспдсбннйту?
Сумели? Напишите в комментариях, что у вас получилось.
Шифр транспонирования
В транспозиционном шифре буквы переставляются по заранее определённому правилу. Например, если каждое слово пишется задом наперед, то из hello world получается dlrow olleh. Другой пример — менять местами каждые две буквы. Таким образом, предыдущее сообщение станет eh ll wo ro dl.
Ещё можно использовать столбчатый шифр транспонирования, в котором каждый символ написан горизонтально с заданной шириной алфавита, а шифр создаётся из символов по вертикали. Пример:
Из этого способа мы получим шифр holewdlo lr. А вот столбчатая транспозиция, реализованная программно:
def split_len(seq, length):
return [seq[i:i + length] for i in range(0, len(seq), length)]
def encode(key, plaintext):
order = {
int(val): num for num, val in enumerate(key)
}
ciphertext = ''
for index in sorted(order.keys()):
for part in split_len(plaintext, len(key)):
try:ciphertext += part[order[index]]
except IndexError:
continue
return ciphertext
print(encode('3214', 'HELLO'))
Азбука Морзе
В азбуке Морзе каждая буква алфавита, цифры и наиболее важные знаки препинания имеют свой код, состоящий из череды коротких и длинных сигналов:
Чаще всего это шифрование передаётся световыми или звуковыми сигналами.
Сможете расшифровать сообщение, используя картинку?
•−− −•− −−− −• −•−• • ••• − •− − −••− •• • ••• − −••− −•• • −−−− •• ••−• •−• •− − −−− •−• −•−−
Шифр Цезаря
Это не один шифр, а целых 26, использующих один принцип. Так, ROT1 — лишь один из вариантов шифра Цезаря. Получателю нужно просто сообщить, какой шаг использовался при шифровании: если ROT2, тогда А заменяется на В, Б на Г и т. д.
А здесь использован шифр Цезаря с шагом 5:
Иербэй йюк ёурбэй нтчйхйцтаъ энщхуж
Моноалфавитная замена
Коды и шифры также делятся на подгруппы. Например, ROT1, азбука Морзе, шифр Цезаря относятся к моноалфавитной замене: каждая буква заменяется на одну и только одну букву или символ. Такие шифры очень легко расшифровываются с помощью частотного анализа.
Например, наиболее часто встречающаяся буква в английском алфавите — «E». Таким образом, в тексте, зашифрованном моноалфавитным шрифтом, наиболее часто встречающейся буквой будет буква, соответствующая «E». Вторая наиболее часто встречающаяся буква — это «T», а третья — «А».
Однако этот принцип работает только для длинных сообщений. Короткие просто не содержат в себе достаточно слов.
Шифр Виженера
Представим, что есть таблица по типу той, что на картинке, и ключевое слово «CHAIR». Шифр Виженера использует принцип шифра Цезаря, только каждая буква меняется в соответствии с кодовым словом.
В нашем случае первая буква послания будет зашифрована согласно шифровальному алфавиту для первой буквы кодового слова «С», вторая буква — для «H», etc. Если послание длиннее кодового слова, то для (k*n+1)-ой буквы, где n — длина кодового слова, вновь будет использован алфавит для первой буквы кодового слова.
Чтобы расшифровать шифр Виженера, для начала угадывают длину кодового слова и применяют частотный анализ к каждой n-ной букве послания.
Попробуйте расшифровать эту фразу самостоятельно:
зюм иэлруй южжуглёнъ
Подсказка длина кодового слова — 4.
Шифр Энигмы
Энигма — это машина, которая использовалась нацистами во времена Второй Мировой для шифрования сообщений.
Есть несколько колёс и клавиатура. На экране оператору показывалась буква, которой шифровалась соответствующая буква на клавиатуре. То, какой будет зашифрованная буква, зависело от начальной конфигурации колес.
Существовало более ста триллионов возможных комбинаций колёс, и со временем набора текста колеса сдвигались сами, так что шифр менялся на протяжении всего сообщения.
Цифровые шифры
В отличие от шифровки текста алфавитом и символами, здесь используются цифры. Рассказываем о способах и о том, как расшифровать цифровой код.
Двоичный код
Текстовые данные вполне можно хранить и передавать в двоичном коде. В этом случае по таблице символов (чаще всего ASCII) каждое простое число из предыдущего шага сопоставляется с буквой: 01100001 = 97 = «a», 01100010 = 98 = «b», etc. При этом важно соблюдение регистра.
Расшифруйте следующее сообщение, в котором использована кириллица:
110100001001101011010000101111101101000010110100
Шифр A1Z26
Это простая подстановка, где каждая буква заменена её порядковым номером в алфавите. Только нижний регистр.
Попробуйте определить, что здесь написано:
15-6-2-16-13-30-26-16-11 17-18-10-14-6-18
Шифрование публичным ключом
Алгоритм шифрования, применяющийся сегодня буквально во всех компьютерных системах. Есть два ключа: открытый и секретный. Открытый ключ — это большое число, имеющее только два делителя, помимо единицы и самого себя. Эти два делителя являются секретным ключом, и при перемножении дают публичный ключ. Например, публичный ключ — это 1961, а секретный — 37 и 53.
Открытый ключ используется, чтобы зашифровать сообщение, а секретный — чтобы расшифровать.
Как-то RSA выделила 1000 $ в качестве приза тому, кто найдет два пятидесятизначных делителя числа:
1522605027922533360535618378132637429718068114961380688657908494580122963258952897654000350692006139
Как расшифровать код или шифр?
Для этого применяются специальные сервисы. Выбор такого инструмента зависит от того, что за код предстоит расшифровать. Примеры шифраторов и дешифраторов:
- Азбука Морзе
- RSA (криптографический алгоритм с открытым ключом)
- Двоичный код
- Другие онлайн-дешифраторы
Адаптированный перевод «10 codes and ciphers»
Тарабарщина, абракадабра, затейное письмо — зашифрованные сообщения называли по-разному. Это был надежный способ передавать тайную информацию. Раньше умение дешифровать загадочные письма приравнивалось к сверхспособности, ведь нужно было обладать логическим, критическим и креативным мышлением. Вместе с экспертом Музея криптографии, который откроется в декабре этого года, рассказываем о популярных шифрах, а также о том, как их разгадать. Можете проверить себя!
Анастасия Ашаева
Кандидат исторических наук, старший научный сотрудник Музея криптографии
Атбаш
Этот шифр считается одним из самых древних в истории криптографии. Он появился примерно две с половиной тысячи лет назад на Ближнем Востоке. Чаще всего этот шифр можно встретить в религиозных текстах (кумранские рукописи, Ветхий Завет), где с его помощью скрывали, например, названия городов или имена собственные. Принцип шифрования очень прост: нужно написать алфавит в обратном порядке, так, чтобы под буквой «А» оказалась буква «Я», под буквой «Б» — буква «Ю» и так далее, а потом каждую букву сообщения, которое следует зашифровать, заменить на букву из алфавита, написанного в обратном порядке.
Такой незатейливый, но действенный способ шифрования и есть атбаш, то есть «алеф», «тав», «бет» и «шин» — первая, последняя, вторая и предпоследняя буквы еврейского алфавита.
Интересный факт: самое известное упоминание шифра атбаш — в романе Дэна Брауна «Код да Винчи», где главные герои дешифруют сообщение, зашифрованное с помощью этого шифра, что позволяет им приблизиться к разгадке тайны святого Грааля.
Проверьте себя: расшифруйте слово «ФОЦПМРЬОЯКЦА». Что оно означает? (Ответы — в конце статьи.)
-
Сокровище
-
Криптография
-
Крестоносец
Квадрат Полибия
Древние греки придумали если не все, то очень многое, в том числе и слово «криптография» (с древнегреческого «скрытый» + «пишу»). Среди множества способов передать сообщение тайно особо выделяется способ, названный именем выдающегося древнегреческого историка II в. до н. э. Полибия, который описал его в своем труде «Всеобщая история». Для шифрования используется квадрат 6×6, в который вписываются все буквы алфавита. Каждый вертикальный и горизонтальный столбец получает свой порядковый номер, чтобы буквы, вписанные в ячейки квадрата, имели свои координаты (например, буква «А» — 11, «Б» — 12 и т. д.).
Для начала шифрования сообщения нужно найти в квадрате каждую букву шифруемого слова и заменить ее на расположенную под ней букву в том же столбце. Полученное в результате зашифрованное сообщение можно было записать как в виде цифр (сначала указывался номер горизонтальной строки, потом — номер вертикального столбца), так и в виде букв.
Интересный факт: изначально квадрат Полибия выполнял две функции: с его помощью можно было как зашифровать сообщение, так и передать его на дальнее расстояние посредством оптического телеграфа. Делалось это при помощи группы факелов: сначала поднимались факелы слева, количество которых указывало номер строки, а потом — факелы справа, указывающие номер столбца. Для получения и расшифрования такого сообщения адресату нужно было иметь точно такой же квадрат, а также зорко следить за количеством поднятых факелов.
Проверьте себя: «Телеграфируем» фразу «ОЧШОУеЗЗОУК» (34 51 52 34 43 21 23 23 34 43 26)
-
Истина в вине
-
Золотое руно
-
Кануть в Лету
Шифр Цезаря
Известный шифр Античности получил имя самого известного политического деятеля и полководца Древнего мира неспроста. Юлий Цезарь мог одновременно не только писать, читать, диктовать и слушать, но и шифровать. Своим потомкам в наследство он оставил великую Римскую империю и шифр, которым, по свидетельствам античных авторов, императоры пользовались почти до самого падения империи.
В шифре, который был придуман Цезарем, для зашифрования нужно заменять каждую букву слова на букву, которая следует за ней третьей по счету: например, букву «А» мы заменим на букву «Г», а букву «Б» — на букву на «Д» и т. д. В целом сдвигать буквы можно на любое количество позиций вправо, и именно знание о том, на сколько букв вправо был сдвиг, и позволит расшифровать сообщение.
Интересный факт: шифр Цезаря лег в основу многих более сложных шифров и использовался вплоть до начала XX века, когда были изобретены первые шифровальные машины. И по сей день этот шифр считается наиболее важным и значимым в истории криптографии.
Проверьте себя: «ТУЛЫЗОЦЕЛЖЗОТСДЗЖЛО» — так выглядит одно из известных выражений, приписываемых Юлию Цезарю, зашифрованное при помощи шифра Цезаря со сдвигом на три позиции вправо. Попробуй расшифровать!
-
И ты, Брут
-
Опыт всему учитель
-
Пришел, увидел, победил
Русская литорея
В средневековой Руси тоже любили шифровать. Зачастую шифры использовались в качестве украшения в литературных произведениях. Авторы шифровали свое имя и даже целые главы текста, используя тайнопись как литературный прием, который позволял выделить такой труд из множества других. Наиболее распространенным шифром в это время в России была литорея (от латинского слова littera — «буква»). Шифр предполагал замену согласных букв на согласные буквы по определенному правилу.
Под первыми десятью согласными буквами (за исключением «Й»), идущими по порядку, записывались другие десять согласных букв, но в порядке, противоположном тому, который использовался в верхней строке. Таким образом, под буквой «Б» оказывалась буква «Щ», а под буквой «В» — буква «Ш» и т. д.
Интересный факт: известное всем слово «тарабарщина» в XVIII–XIX веках означало не что иное, как шифр литорея, и употреблялось в качестве синонима. Одна из историй возникновения этого слова гласит, что для сохранения тайны передаваемого сообщения его зашифровывали, но не писали на бумаге, а давали гонцам заучивать наизусть. Гонцы доставляли сообщение адресату в виде устного послания, а так как произнести зашифрованный текст и понять его порой было непросто, он и получил название «тарабарщина».
Проверьте себя: «ЩЕФ КМУЦА ПЕ ШЫСОШИВЬ И МЫЩТУ ИФ НМУЦА», гласит одна из русских поговорок. Что это за поговорка?
-
Век живи — век учись
-
Без труда не выловишь и рыбку из пруда
-
Не плюй в колодец, пригодится воды напиться
Шифр Виженера
Новую эру в криптографии знаменует открытие полиалфавитного шифра, известного также как шифр Виженера. Описанный в 1586 году французским дипломатом Блезом де Виженером, шифр долго оставался нераскрытым, пережив множество усложнений и модификаций и став своеобразным мостиком для изобретения первых механических шифровальных машин. Для шифрования использовалась специальная таблица, в которой количество строк и столбцов соответствовало количеству букв в алфавите. Таким образом, каждая буква в исходном тексте сдвигается по алфавиту на разное количество символов и количество сдвигов каждой буквы задается специальным ключом (ключевым словом).
Для простоты использования слово (или фраза,) которое нужно было зашифровать, записывалось в строку, а под ней писалось ключевое слово и повторялось несколько раз подряд, чтобы под каждой буквой исходного текста оказалась буква ключевого слова. Далее мы берем букву из сообщения и букву из ключевого слова под ней и обращаемся к таблице. Буква, которая будет на пересечении этих двух букв в таблице, и станет первой буквой криптограммы.
Интересный факт: Несмотря на то что шифр носит имя Виженера, сам Виженер его не изобретал. Шифр был придуман в 1466 году итальянским гуманистом, ученым и архитектором Леоном Баттистой Альберти. Вклад в его развитие внесли современники Альберти, среди которых — немецкий гуманист и аббат Иоганн Тритемий и итальянский ученый Джованни Баттиста Беллазо. Виженер же просто описал все известные ему способы шифрования, а в XIX веке за шифром прочно закрепилось имя Виженера, под которым он известен и по сей день.
Проверьте себя: «ЧФЩЪОВН ЙЪЯФОН» — так бы мог выглядеть призыв к атаке, зашифрованный при помощи таблицы Виженера с использованием ключевого слова «мел».
-
Пушки доставлены
-
Конница готова
-
Герцог в западне
Необходимость в шифровании переписки возникла еще в древнем мире, и появились шифры простой замены. Зашифрованные послания определяли судьбу множества битв и влияли на ход истории. Со временем люди изобретали все более совершенные способы шифрования.
Код и шифр – это, к слову, разные понятия. Первое означает замену каждого слова в сообщении кодовым словом. Второе же заключается в шифровании по определенному алгоритму каждого символа информации.
После того как кодированием информации занялась математика и была разработана теория криптографии, ученые обнаружили множество полезных свойств этой прикладной науки. Например, алгоритмы декодирования помогли разгадать мертвые языки, такие как древнеегипетский или латынь.
Стеганография
Стеганография старше кодирования и шифрования. Это искусство появилось очень давно. Оно буквально означает «скрытое письмо» или «тайнопись». Хоть стеганография не совсем соответствует определениям кода или шифра, но она предназначена для сокрытия информации от чужих глаз.
Стеганография является простейшим шифром. Типичными ее примерами являются проглоченные записки, покрытые ваксой, или сообщение на бритой голове, которое скрывается под выросшими волосами. Ярчайшим примером стеганографии является способ, описанный во множестве английских (и не только) детективных книг, когда сообщения передаются через газету, где малозаметным образом помечены буквы.
Главным минусом стеганографии является то, что внимательный посторонний человек может ее заметить. Поэтому, чтобы секретное послание не было легко читаемым, совместно со стеганографией используются методы шифрования и кодирования.
ROT1 и шифр Цезаря
Название этого шифра ROTate 1 letter forward, и он известен многим школьникам. Он представляет собой шифр простой замены. Его суть заключается в том, что каждая буква шифруется путем смещения по алфавиту на 1 букву вперед. А -> Б, Б -> В, …, Я -> А. Например, зашифруем фразу «наша Настя громко плачет» и получим «общб Обтуа дспнлп рмбшеу».
Шифр ROT1 может быть обобщен на произвольное число смещений, тогда он называется ROTN, где N – это число, на которое следует смещать шифрование букв. В таком виде шифр известен с глубокой древности и носит название «шифр Цезаря».
Шифр Цезаря очень простой и быстрый, но он является шифром простой одинарной перестановки и поэтому легко взламывается. Имея подобный недостаток, он подходит только для детских шалостей.
Транспозиционные или перестановочные шифры
Данные виды шифра простой перестановки более серьезны и активно применялись не так давно. В Гражданскую войну в США и в Первую мировую его использовали для передачи сообщений. Его алгоритм заключается в перестановке букв местами – записать сообщение в обратном порядке или попарно переставить буквы. Например, зашифруем фразу «азбука Морзе – тоже шифр» -> «акубза езроМ – ежот рфиш».
С хорошим алгоритмом, который определял произвольные перестановки для каждого символа или их группы, шифр становился устойчивым к простому взлому. Но! Только в свое время. Так как шифр легко взламывается простым перебором или словарным соответствием, сегодня с его расшифровкой справится любой смартфон. Поэтому с появлением компьютеров этот шифр также перешел в разряд детских.
Азбука Морзе
Азбука является средством обмена информации и ее основная задача – сделать сообщения более простыми и понятными для передачи. Хотя это противоречит тому, для чего предназначено шифрование. Тем не менее она работает подобно простейшим шифрам. В системе Морзе каждая буква, цифра и знак препинания имеют свой код, составленный из группы тире и точек. При передаче сообщения с помощью телеграфа тире и точки означают длинные и короткие сигналы.
Телеграф и азбука Морзе… Морзе был тем, кто первый запатентовал «свое» изобретение в 1840 году, хотя до него и в России, и в Англии были изобретены подобные аппараты. Но кого это теперь интересует… Телеграф и азбука Морзе оказали очень большое влияние на мир, позволив почти мгновенно передавать сообщения на континентальные расстояния.
Моноалфавитная замена
Описанные выше ROTN и азбука Морзе являются представителями шрифтов моноалфавитной замены. Приставка «моно» означает, что при шифровании каждая буква изначального сообщения заменяется другой буквой или кодом из единственного алфавита шифрования.
Дешифрование шифров простой замены не составляет труда, и в этом их главный недостаток. Разгадываются они простым перебором или частотным анализом. Например, известно, что самые используемые буквы русского языка – это «о», «а», «и». Таким образом, можно предположить, что в зашифрованном тексте буквы, которые встречаются чаще всего, означают либо «о», либо «а», либо «и». Исходя из таких соображений, послание можно расшифровать даже без перебора компьютером.
Известно, что Мария I, королева Шотландии с 1561 по 1567 г., использовала очень сложный шифр моноалфавитной замены с несколькими комбинациями. И все же ее враги смогли расшифровать послания, и информации хватило, чтобы приговорить королеву к смерти.
Шифр Гронсфельда, или полиалфавитная замена
Простые шифры криптографией признаны бесполезными. Поэтому множество из них было доработано. Шифр Гронсфельда — это модификация шифра Цезаря. Данный способ является значительно более стойким к взлому и заключается в том, что каждый символ кодируемой информации шифруется при помощи одного из разных алфавитов, которые циклически повторяются. Можно сказать, что это многомерное применение простейшего шифра замены. Фактически шифр Гронсфельда очень похож на шифр Виженера, рассмотренный ниже.
Алгоритм шифрования ADFGX
Это самый известный шифр Первой мировой войны, используемый немцами. Свое имя шифр получил потому, что алгоритм шифрования приводил все шифрограммы к чередованию этих букв. Выбор самих же букв был определен их удобством при передаче по телеграфным линиям. Каждая буква в шифре представляется двумя. Рассмотрим более интересную версию квадрата ADFGX, которая включает цифры и называется ADFGVX.
A | D | F | G | V | X | |
A | J | Q | A | 5 | H | D |
D | 2 | E | R | V | 9 | Z |
F | 8 | Y | I | N | K | V |
G | U | P | B | F | 6 | O |
V | 4 | G | X | S | 3 | T |
X | W | L | Q | 7 | C | 0 |
Алгоритм составления квадрата ADFGX следующий:
- Берем случайные n букв для обозначения столбцов и строк.
- Строим матрицу N x N.
- Вписываем в матрицу алфавит, цифры, знаки, случайным образом разбросанные по ячейкам.
Составим аналогичный квадрат для русского языка. Например, создадим квадрат АБВГД:
А | Б | В | Г | Д | |
А | Е/Е | Н | Ь/Ъ | А | И/Й |
Б | Ч | В/Ф | Г/К | З | Д |
В | Ш/Щ | Б | Л | Х | Я |
Г | Р | М | О | Ю | П |
Д | Ж | Т | Ц | Ы | У |
Данная матрица выглядит странно, так как ряд ячеек содержит по две буквы. Это допустимо, смысл послания при этом не теряется. Его легко можно восстановить. Зашифруем фразу «Компактный шифр» при помощи данной таблицы:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | |
Фраза | К | О | М | П | А | К | Т | Н | Ы | Й | Ш | И | Ф | Р |
Шифр | бв | гв | гб | гд | аг | бв | дб | аб | дг | ад | ва | ад | бб | га |
Таким образом, итоговое зашифрованное послание выглядит так: «бвгвгбгдагбвдбабдгвдваадббга». Разумеется, немцы проводили подобную строку еще через несколько шифров. И в итоге получалось очень устойчивое к взлому шифрованное послание.
Шифр Виженера
Данный шифр на порядок более устойчив к взлому, чем моноалфавитные, хотя представляет собой шифр простой замены текста. Однако благодаря устойчивому алгоритму долгое время считался невозможным для взлома. Первые его упоминания относятся к 16-му веку. Виженер (французский дипломат) ошибочно считается его изобретателем. Чтобы лучше разобраться, о чем идет речь, рассмотрим таблицу Виженера (квадрат Виженера, tabula recta) для русского языка.
Приступим к шифрованию фразы «Касперович смеется». Но, чтобы шифрование удалось, нужно ключевое слово — пусть им будет «пароль». Теперь начнем шифрование. Для этого запишем ключ столько раз, чтобы количество букв из него соответствовало количеству букв в шифруемой фразе, путем повтора ключа или обрезания:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | |
Фраза: | К | А | С | П | Е | Р | О | В | И | Ч | С | М | Е | Е | Т | С | Я |
Ключ | П | А | Р | О | Л | Ь | П | А | Р | О | Л | Ь | П | А | Р | О | Л |
Теперь по таблице Виженера, как по координатной плоскости, ищем ячейку, которая является пересечением пар букв, и получаем: К + П = Ъ, А + А = Б, С + Р = В и т. д.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | |
Шифр: | Ъ | Б | В | Ю | С | Н | Ю | Г | Щ | Ж | Э | Й | Х | Ж | Г | А | Л |
Получаем, что “касперович смеется” = “ъбвюснюгщж эйхжгал”.
Взломать шифр Виженера так сложно, потому что для работы частотного анализа необходимо знать длину ключевого слова. Поэтому взлом заключается в том, чтобы наугад бросать длину ключевого слова и пытаться взломать засекреченное послание.
Следует также упомянуть, что помимо абсолютно случайного ключа может быть использована совершенно разная таблица Виженера. В данном случае квадрат Виженера состоит из построчно записанного русского алфавита со смещением на единицу. Что отсылает нас к шифру ROT1. И точно так же, как и в шифре Цезаря, смещение может быть любым. Более того, порядок букв не должен быть алфавитным. В данном случае сама таблица может быть ключом, не зная которую невозможно будет прочесть сообщение, даже зная ключ.
Коды
Настоящие коды состоят из соответствий для каждого слова отдельного кода. Для работы с ними необходимы так называемые кодовые книги. Фактически это тот же словарь, только содержащий переводы слов в коды. Типичным и упрощенным примером кодов является таблица ASCII — международный шифр простых знаков.
Главным преимуществом кодов является то, что расшифровать их очень сложно. Частотный анализ почти не работает при их взломе. Слабость же кодов — это, собственно, сами книги. Во-первых, их подготовка — сложный и дорогостоящий процесс. Во-вторых, для врагов они превращаются в желанный объект и перехват даже части книги вынуждает менять все коды полностью.
В 20-м веке многие государства для передачи секретных данных использовали коды, меняя кодовую книгу по прошествии определенного периода. И они же активно охотились за книгами соседей и противников.
“Энигма”
Всем известно, что “Энигма” — это главная шифровальная машина нацистов во время II мировой войны. Строение “Энигмы” включает комбинацию электрических и механических схем. То, каким получится шифр, зависит от начальной конфигурации “Энигмы”. В то же время “Энигма” автоматически меняет свою конфигурацию во время работы, шифруя одно сообщение несколькими способами на всем его протяжении.
В противовес самым простым шифрам “Энигма” давала триллионы возможных комбинаций, что делало взлом зашифрованной информации почти невозможным. В свою очередь, у нацистов на каждый день была заготовлена определенная комбинация, которую они использовали в конкретный день для передачи сообщений. Поэтому даже если “Энигма” попадала в руки противника, она никак не способствовала расшифровке сообщений без введения нужной конфигурации каждый день.
Взломать “Энигму” активно пытались в течение всей военной кампании Гитлера. В Англии в 1936 г. для этого построили один из первых вычислительных аппаратов (машина Тьюринга), ставший прообразом компьютеров в будущем. Его задачей было моделирование работы нескольких десятков “Энигм” одновременно и прогон через них перехваченных сообщений нацистов. Но даже машине Тьюринга лишь иногда удавалось взламывать сообщение.
Шифрование методом публичного ключа
Самый популярный из алгоритмов шифрования, который используется повсеместно в технике и компьютерных системах. Его суть заключается, как правило, в наличии двух ключей, один из которых передается публично, а второй является секретным (приватным). Открытый ключ используется для шифровки сообщения, а секретный — для дешифровки.
В роли открытого ключа чаще всего выступает очень большое число, у которого существует только два делителя, не считая единицы и самого числа. Вместе эти два делителя образуют секретный ключ.
Рассмотрим простой пример. Пусть публичным ключом будет 905. Его делителями являются числа 1, 5, 181 и 905. Тогда секретным ключом будет, например, число 5*181. Вы скажете слишком просто? А что если в роли публичного числа будет число с 60 знаками? Математически сложно вычислить делители большого числа.
В качестве более живого примера представьте, что вы снимаете деньги в банкомате. При считывании карточки личные данные зашифровываются определенным открытым ключом, а на стороне банка происходит расшифровка информации секретным ключом. И этот открытый ключ можно менять для каждой операции. А способов быстро найти делители ключа при его перехвате — нет.
Стойкость шрифта
Криптографическая стойкость алгоритма шифрования — это способность противостоять взлому. Данный параметр является самым важным для любого шифрования. Очевидно, что шифр простой замены, расшифровку которого осилит любое электронное устройство, является одним из самых нестойких.
На сегодняшний день не существует единых стандартов, по которым можно было бы оценить стойкость шифра. Это трудоемкий и долгий процесс. Однако есть ряд комиссий, которые изготовили стандарты в этой области. Например, минимальные требования к алгоритму шифрования Advanced Encryption Standart или AES, разработанные в NIST США.
Для справки: самым стойким шифром к взлому признан шифр Вернама. При этом его плюсом является то, что по своему алгоритму он является простейшим шифром.