Шифр цезаря на python (руководство по шифрованию текста)
Содержание:
- Примеры
- Описание
- Стандартные шифры
- Шифрование методом публичного ключа
- Шифрование заглавных букв
- Шифр Цезаря в Python на примере английского алфавита
- Примечания
- Решение
- Source code
- Асимметричное шифрование
- Множественные смещения (шифрование по Виженеру)
- Немного о проекте
- История и использование
- Криптография
- Взлом шифра
- Алгоритм шифрования ADFGX
Примеры
В этих двух примерах, один для шифрования и один для дешифрования, алфавит будет состоять из букв от A до Z и будет иметь соответствующие значения, указанные в следующей таблице.
А | B | C | D | E | F | грамм | ЧАС | я | J | K | L | M | N | О | п | Q | р | S | Т | U | V | W | Икс | Y | Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 год | 22 | 23 | 24 | 25 |
Шифрование
В этом примере шифрования открытый текст, который должен быть зашифрован, представляет собой «AFFINE CIPHER» с использованием упомянутой выше таблицы для числовых значений каждой буквы, принимая a равным 5, b равным 8 и m равным 26, поскольку в используемый алфавит. Только значение a имеет ограничение, поскольку оно должно быть взаимно простым с 26. Возможные значения, которыми может быть a : 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23 и 25. Значение b может быть произвольным, пока a не равно 1, поскольку это сдвиг шифра. Таким образом, функция шифрования для этого примера будет y = E ( x ) = (5 x + 8) mod 26 . Первый шаг в шифровании сообщения — записать числовые значения каждой буквы.
простой текст | А | F | F | я | N | E | C | я | п | ЧАС | E | р |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Икс | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
Теперь возьмите каждое значение x и решите первую часть уравнения (5 x + 8) . Найдя значение (5 x + 8) для каждого символа, возьмите остаток при делении результата (5 x + 8) на 26. В следующей таблице показаны первые четыре шага процесса шифрования.
простой текст | А | F | F | я | N | E | C | я | п | ЧАС | E | р |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Икс | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 | |
(5 х + 8) | 8 | 33 | 33 | 48 | 73 | 28 год | 18 | 48 | 83 | 43 год | 28 год | 93 |
(5 х + 8) мод 26 | 8 | 7 | 7 | 22 | 21 год | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
Последний шаг в шифровании сообщения — это поиск соответствующих букв для каждого числового значения в таблице. В этом примере зашифрованный текст будет IHHWVCSWFRCP. В таблице ниже показана заполненная таблица для шифрования сообщения аффинным шифром.
простой текст | А | F | F | я | N | E | C | я | п | ЧАС | E | р |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Икс | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 | |
(5 х + 8) | 8 | 33 | 33 | 48 | 73 | 28 год | 18 | 48 | 83 | 43 год | 28 год | 93 |
(5 х + 8) мод 26 | 8 | 7 | 7 | 22 | 21 год | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
зашифрованный текст | я | ЧАС | ЧАС | W | V | C | S | W | F | р | C | п |
Расшифровка
В этом примере расшифровки зашифрованный текст, который будет расшифрован, является зашифрованным текстом из примера шифрования. Соответствующая функция дешифрования: D ( y ) = 21 ( y — 8) mod 26 , где a −1 вычислено как 21, а b равно 8. Для начала напишите числовые эквиваленты каждой буквы в зашифрованном тексте, как показано в таблице ниже.
зашифрованный текст | я | ЧАС | ЧАС | W | V | C | S | W | F | р | C | п |
---|---|---|---|---|---|---|---|---|---|---|---|---|
у | 8 | 7 | 7 | 22 | 21 год | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
Теперь следующим шагом является вычисление 21 ( y — 8) , а затем получение остатка от деления этого результата на 26. В следующей таблице показаны результаты обоих вычислений.
зашифрованный текст | я | ЧАС | ЧАС | W | V | C | S | W | F | р | C | п |
---|---|---|---|---|---|---|---|---|---|---|---|---|
у | 8 | 7 | 7 | 22 | 21 год | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
21 ( г — 8) | −21 | −21 | 294 | 273 | −126 | 210 | 294 | −63 | 189 | −126 | 147 | |
21 ( у — 8) мод 26 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
Последним шагом в расшифровке зашифрованного текста является использование таблицы для преобразования числовых значений обратно в буквы. Открытый текст в этой дешифровке — AFFINECIPHER. Ниже приведена таблица с завершенным последним этапом.
зашифрованный текст | я | ЧАС | ЧАС | W | V | C | S | W | F | р | C | п |
---|---|---|---|---|---|---|---|---|---|---|---|---|
у | 8 | 7 | 7 | 22 | 21 год | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
21 ( г — 8) | −21 | −21 | 294 | 273 | −126 | 210 | 294 | −63 | 189 | −126 | 147 | |
21 ( у — 8) мод 26 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 | |
простой текст | А | F | F | я | N | E | C | я | п | ЧАС | E | р |
Закодирован весь алфавит
Чтобы ускорить шифрование и дешифрование, можно зашифровать весь алфавит, чтобы создать взаимно однозначную карту между буквами открытого текста и зашифрованного текста. В этом примере взаимно однозначная карта будет следующей:
письмо в открытом тексте | А | B | C | D | E | F | грамм | ЧАС | я | J | K | L | M | N | О | п | Q | р | S | Т | U | V | W | Икс | Y | Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
число в открытом тексте | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 год | 22 | 23 | 24 | 25 | |
(5 х + 8) мод 26 | 8 | 13 | 18 | 23 | 2 | 7 | 12 | 17 | 22 | 1 | 6 | 11 | 16 | 21 год | 5 | 10 | 15 | 20 | 25 | 4 | 9 | 14 | 19 | 24 | 3 | |
письмо с зашифрованным текстом | я | N | S | Икс | C | ЧАС | M | р | W | B | грамм | L | Q | V | А | F | K | п | U | Z | E | J | О | Т | Y | D |
Примеры программирования
Следующий код Python можно использовать для шифрования текста аффинным шифром:
# Prints a transposition table for an affine cipher. # a must be coprime to m=26. def affine(a int, b int) -> None for i in range(26): print(chr(i+ord('A')) + ": " + chr(((a*i+b)%26)+ord('A'))) # An example call affine(5, 8)
Описание
В аффинном шифре буквы алфавита размера m сначала отображаются на целые числа в диапазоне 0… m — 1 . Затем он использует модульную арифметику для преобразования целого числа, которому соответствует каждая буква открытого текста, в другое целое число, соответствующее букве зашифрованного текста. Функция шифрования для одной буквы:
- E(Икс)знак равно(аИкс+б)модм,{\ Displaystyle Е (х) = (ах + Ь) {\ bmod {m}},}
где модуль m — размер алфавита, а a и b — ключи шифра. Значение a должно быть выбрано таким, чтобы a и m были взаимно просты . Функция дешифрования
- D(Икс)знак равноа-1(Икс-б)модм,{\ displaystyle D (x) = a ^ {- 1} (xb) {\ bmod {m}},}
где -1 является модульным мультипликативным обратным из более по модулю т . Т.е. он удовлетворяет уравнению
- 1знак равноаа-1модм.{\ displaystyle 1 = aa ^ {- 1} {\ bmod {m}}.}
Мультипликативный обратный к a существует, только если a и m взаимно просты. Следовательно, без ограничения a расшифровка может быть невозможна. Можно показать следующим образом, что функция дешифрования обратна функции шифрования,
- D(E(Икс))знак равноа-1(E(Икс)-б)модмзнак равноа-1(((аИкс+б)модм)-б)модмзнак равноа-1(аИкс+б-б)модмзнак равноа-1аИксмодмзнак равноИксмодм.{\ displaystyle {\ begin {align} D (E (x)) & = a ^ {- 1} (E (x) -b) {\ bmod {m}} \\ & = a ^ {- 1} ( ((ax + b) {\ bmod {m}}) — b) {\ bmod {m}} \\ & = a ^ {- 1} (ax + bb) {\ bmod {m}} \\ & = a ^ {- 1} ax {\ bmod {m}} \\ & = x {\ bmod {m}}. \ end {align}}}
Стандартные шифры
ROT1
Этот шифр известен многим детям. Ключ прост: каждая буква заменяется на следующую за ней в алфавите. Так, А заменяется на Б, Б — на В, и т. д. Фраза «Уйрйшоьк Рспдсбннйту» — это «Типичный Программист».
Попробуйте расшифровать сообщение:
Шифр транспонирования
В транспозиционном шифре буквы переставляются по заранее определённому правилу. Например, если каждое слово пишется задом наперед, то из hello world получается dlrow olleh. Другой пример — менять местами каждые две буквы. Таким образом, предыдущее сообщение станет eh ll wo ro dl.
Серия вебинаров AWS «Как обезопасить данные в облаке»
18 октября – 1 ноября, Онлайн, Беcплатно
tproger.ru
События и курсы на tproger.ru
Ещё можно использовать столбчатый шифр транспонирования, в котором каждый символ написан горизонтально с заданной шириной алфавита, а шифр создаётся из символов по вертикали. Пример:
Из этого способа мы получим шифр holewdlo lr. А вот столбчатая транспозиция, реализованная программно:
Азбука Морзе
В азбуке Морзе каждая буква алфавита, цифры и наиболее важные знаки препинания имеют свой код, состоящий из череды коротких и длинных сигналов:Чаще всего это шифрование передаётся световыми или звуковыми сигналами.
Сможете расшифровать сообщение, используя картинку?
Шифр Цезаря
Это не один шифр, а целых 26, использующих один принцип. Так, ROT1 — лишь один из вариантов шифра Цезаря. Получателю нужно просто сообщить, какой шаг использовался при шифровании: если ROT2, тогда А заменяется на В, Б на Г и т. д.
А здесь использован шифр Цезаря с шагом 5:
Моноалфавитная замена
Коды и шифры также делятся на подгруппы. Например, ROT1, азбука Морзе, шифр Цезаря относятся к моноалфавитной замене: каждая буква заменяется на одну и только одну букву или символ. Такие шифры очень легко расшифровываются с помощью частотного анализа.
Например, наиболее часто встречающаяся буква в английском алфавите — «E». Таким образом, в тексте, зашифрованном моноалфавитным шрифтом, наиболее часто встречающейся буквой будет буква, соответствующая «E». Вторая наиболее часто встречающаяся буква — это «T», а третья — «А».
Однако этот принцип работает только для длинных сообщений. Короткие просто не содержат в себе достаточно слов.
Шифр Виженера
Представим, что есть таблица по типу той, что на картинке, и ключевое слово «CHAIR». Шифр Виженера использует принцип шифра Цезаря, только каждая буква меняется в соответствии с кодовым словом.
В нашем случае первая буква послания будет зашифрована согласно шифровальному алфавиту для первой буквы кодового слова «С», вторая буква — для «H», etc. Если послание длиннее кодового слова, то для (k*n+1)-ой буквы, где n — длина кодового слова, вновь будет использован алфавит для первой буквы кодового слова.
Чтобы расшифровать шифр Виженера, для начала угадывают длину кодового слова и применяют частотный анализ к каждой n-ной букве послания.
Попробуйте расшифровать эту фразу самостоятельно:
Подсказка длина кодового слова — 4.
Шифр Энигмы
Энигма — это машина, которая использовалась нацистами во времена Второй Мировой для шифрования сообщений.
Есть несколько колёс и клавиатура. На экране оператору показывалась буква, которой шифровалась соответствующая буква на клавиатуре. То, какой будет зашифрованная буква, зависело от начальной конфигурации колес.
Существовало более ста триллионов возможных комбинаций колёс, и со временем набора текста колеса сдвигались сами, так что шифр менялся на протяжении всего сообщения.
Шифрование методом публичного ключа
Самый популярный из алгоритмов шифрования, который используется повсеместно в технике и компьютерных системах. Его суть заключается, как правило, в наличии двух ключей, один из которых передается публично, а второй является секретным (приватным). Открытый ключ используется для шифровки сообщения, а секретный — для дешифровки.
В роли открытого ключа чаще всего выступает очень большое число, у которого существует только два делителя, не считая единицы и самого числа. Вместе эти два делителя образуют секретный ключ.
Рассмотрим простой пример. Пусть публичным ключом будет 905. Его делителями являются числа 1, 5, 181 и 905. Тогда секретным ключом будет, например, число 5*181. Вы скажете слишком просто? А что если в роли публичного числа будет число с 60 знаками? Математически сложно вычислить делители большого числа.
В качестве более живого примера представьте, что вы снимаете деньги в банкомате. При считывании карточки личные данные зашифровываются определенным открытым ключом, а на стороне банка происходит расшифровка информации секретным ключом. И этот открытый ключ можно менять для каждой операции. А способов быстро найти делители ключа при его перехвате — нет.
Шифрование заглавных букв
Теперь, когда мы понимаем два фундаментальных метода, которые мы будем использовать, давайте реализуем технику шифрования для верхнего регистра в Python.
Мы зашифруем только заглавные символы в тексте, а остальные оставим без изменений.
Давайте сначала рассмотрим пошаговый процесс шифрования заглавных букв:
- Определите величину смещения, то есть количество позиций, на которые мы хотим переместить каждый символ.
- Итерация по каждому символу обычного текста:
- Если символ в верхнем регистре:
- Вычислить позицию/индекс символа в диапазоне 0-25.
- Выполните положительное смещение, используя операцию modulo.
- Найдите символ в новой позиции.
- Замените текущую заглавную букву на этот новый символ.
- В противном случае, если символ не является заглавным, сохраните его без изменений.
- Если символ в верхнем регистре:
Теперь посмотрим на код:
Как мы видим, зашифрованный текст “HELLO WORLD” – это “KHOOR ZRUOG”, и он совпадает с тем, к которому мы пришли вручную в разделе “Введение”.
Кроме того, этот метод не шифрует символ пробела, и в зашифрованном варианте он остается пробелом.
Шифр Цезаря в Python на примере английского алфавита
Прежде чем мы погрузимся в определение функций для процесса шифрования и расшифровки шифра Цезаря в Python, мы сначала рассмотрим две важные функции, которые мы будем использовать в процессе – chr() и ord().
Важно понимать, что алфавит в том виде, в котором мы его знаем, хранится в памяти компьютера по-разному. Сам компьютер не понимает алфавит английского языка или другие символы
Сам компьютер не понимает алфавит английского языка или другие символы.
Каждый из этих символов представлен в памяти компьютера с помощью числа, называемого кодом символов ASCII (или его расширением – Unicode), который представляет собой 8-битное число и кодирует почти все символы, цифры и пунктуацию.
Например, заглавная буква “А” представлена числом 65, “В” – 66 и так далее. Аналогично, представление строчных символов начинается с числа 97.
Когда возникла необходимость включить больше символов и знаков из других языков, 8 бит оказалось недостаточно, поэтому был принят новый стандарт – Unicode, который представляет все используемые в мире символы с помощью 16 бит.
ASCII является подмножеством Unicode, поэтому кодировка символов ASCII остается такой же в Unicode. Это означает, что ‘A’ все равно будет представлено с помощью числа 65 в Юникоде.
Обратите внимание, что специальные символы, такие как пробел ” “, табуляция “\t”, новая строка “\N” и т.д., также представлены в памяти своим Юникодом. Мы рассмотрим две встроенные функции Python, которые используются для поиска представления символа в Unicode и наоборот
Мы рассмотрим две встроенные функции Python, которые используются для поиска представления символа в Unicode и наоборот.
Примечания
- , pp. 19.
- ↑ .
- Fundamentals of Computer Security (англ.)
- , pp. 14–20.
- Alexander Poltorak. . chabad.org. Дата обращения: 13 июня 2008.
- , pp. 775–6.
- , pp. 631–2.
- , pp. 20.
- , с. 239-246.
- .
- Reynard, Robert. Secret Code Breaker: A Cryptanalyst’s Handbook (англ.). — 1996. — P. 92—51. — ISBN 1-889668-00-1).
- Beutelspacher, Albrecht (англ.)русск.. Cryptology (неопр.). — Mathematical Association of America, 1994. — С. 8—9. — ISBN 0-88385-504-6.
- Elementary Cryptanalysis (англ.): A Mathematical Approach
- , pp. 72–77.
- Savarese, Chris; Brian Hart. (15 июля 2002). Дата обращения: 16 июля 2008.
- , pp. 31.
Решение
Теперь, когда мы определили наши две функции, давайте сначала воспользуемся функцией шифрования, чтобы зашифровать секретное сообщение, которое друг передает через текстовое сообщение своему другу.
Обратите внимание, что все, кроме знаков препинания и пробелов, зашифровано. Теперь давайте посмотрим на шифрованный текст, который полковник Ник Фьюри посылал на свой пейджер: “Mr xli gsyrx sj 7, 6, 5 – Ezirkivw Ewwiqfpi!”
Теперь давайте посмотрим на шифрованный текст, который полковник Ник Фьюри посылал на свой пейджер: “Mr xli gsyrx sj 7, 6, 5 – Ezirkivw Ewwiqfpi!”.
Это оказывается шифротекст Цезаря, и, к счастью, ключ к этому шифру у нас в руках.
Давайте посмотрим, сможем ли мы обнаружить скрытое послание.
Отличная работа, Мстители!
Source code
dCode retains ownership of the online «Caesar Cipher» source code. Except explicit open source licence (indicated CC / Creative Commons / free), the «Caesar Cipher» algorithm, the applet or snippet (converter, solver, encryption / decryption, encoding / decoding, ciphering / deciphering, translator), or the «Caesar Cipher» functions (calculate, convert, solve, decrypt / encrypt, decipher / cipher, decode / encode, translate) written in any informatic language (Python, Java, PHP, C#, Javascript, Matlab, etc.) and all data download, script, copy-paste, or API access for «Caesar Cipher» are not public, same for offline use on PC, tablet, iPhone or Android ! Remainder : dCode is free to use.
Асимметричное шифрование
Данный тип шифрования принято называть криптографией с открытым ключом, причем используется два ключа, один из которых, используемый для шифрования, носит открытый характер и известен широкой общественности, в то время как второй, используемый для дешифровки, известен лишь пользователю соответствующего ключа и является закрытым. За счет связи ключей при помощи математических вычислений, данные, при шифровании которых применялся открытый ключ, могут быть дешифрованы только соответствующим ключом закрытого типа, за счет чего удается решить проблему симметричного шифрования управления ключами. Однако подобная особенность шифрования с открытым ключом, носящая уникальных характер, приводит к повышению степени уязвимости для атак.
Кроме того, методы асимметричного шифрования, требующие значительных вычислительных мощностей, по сравнению с симметричным шифрованием, практически в тысячу раз медленней. В качестве методов преобразования данных в нечитаемую форму обычно применяются методы, связанные с перестановкой и заменой. Одним из примеров метода подстановки как раз и является шифр Цезаря, который отличается достаточно простым алгоритмом шифрования и дешифрования. Для того, чтобы расшифровать систему, даже не нужно знать ключ шифрования, который достаточно легко взломать при помощи изменения порядка шифрования и изменения порядка алфавита.
В том случае, если достоверно известно, что при кодировке использовался шифр Цезаря, то для того, чтобы выполнить криптоанализ методом грубой силы, потребуется всего лишь перебрать 26 ключей, применительно к английскому языку, учитывая известность шифрования и дешифровки. Кроме того, если стала известна одна буква, то определив смещение можно достаточно оперативно расшифровать все сообщение. Одним из наиболее распространенных методов, используемых в криптоанализе, является «Частотный анализ», предполагающий, что в длинных текстах, причем для разных текстов одного языка, частота появления заданной буквы алфавита – не меняется. Особую известность метод частотного криптоанализа получил в 1822 году, в процессе дешифровки египетских иероглифов. Начиная с середины прошлого века, разработка подавляющей части алгоритмов шифрования осуществляется с учетом устойчивости к частотному криптоанализу, в связи с чем он, как правило, применяется в процессе обучения будущих криптографов.
Множественные смещения (шифрование по Виженеру)
До сих пор мы использовали одно значение сдвига (ключ) для сдвига всех символов в строках на одинаковое количество позиций.
Мы также можем попробовать вариант, в котором мы будем использовать не одну клавишу, а последовательность клавиш для выполнения различных сдвигов в разных позициях текста.
Например, допустим, мы используем последовательность из 4 клавиш: 1,5,2,3] При таком методе наш первый символ в тексте сдвинется на одну позицию, второй – на пять позиций,
третий символ на две позиции, четвертый на три позиции, а затем снова пятый символ будет сдвинут на одну позицию, и так далее.
Это улучшенная версия шифра Цезаря, которая называется шифром Виженера.
Давайте применим шифр Виженера на практике.
Функция выполняет как шифрование, так и дешифрование, в зависимости от значения булевого параметра “decrypt”.
Мы отслеживаем общее количество зашифрованных/расшифрованных строчных букв с помощью переменной i, используем ее с оператором modulus, чтобы определить, какой ключ из списка использовать следующим.
Обратите внимание, что мы сделали операцию сдвига очень компактной; это эквивалентно многоэтапному процессу преобразования между Unicode и символьными значениями и вычисления сдвига, который мы видели ранее. Давайте попробуем использовать эту функцию на примере другого простого текста:
Давайте попробуем использовать эту функцию на примере другого простого текста:
Здесь мы выполняем шифрование, используя ключи , и, как и ожидалось, первый символ “w” был сдвинут на одну позицию к “x”,
второй символ “e” сдвинут на две позиции к “g”; третий символ “w” сдвинут на три позиции к “z”.
Этот процесс повторяется со следующими символами.
Выполните процесс расшифровки с теми же ключами и посмотрите, сможете ли вы снова восстановить исходное заявление.
Немного о проекте
Мне, лично, давно была интересна тема шифрования информации, однако, каждый раз погрузившись в эту тему, я осознавал насколько это сложно и понял, что лучше начать с чего-то более простого. Я, лично, планирую написать некоторое количество статей на эту тему, в которых я покажу вам различные алгоритмы шифрования и их реализацию в Python, продемонстрирую и разберу свой проект, созданный в этом направлении. Итак, начнем.
Для начала, я бы хотел рассказать вам какие уже известные алгоритмы мы рассмотрим, в моих статьях. Список вам представлен ниже:
-
Шифр Цезаря
-
Шифр Виженера
-
Шифр замены
-
Омофонический шифр
-
RSA шифрование
История и использование
Шифр Цезаря назван в честь Юлия Цезаря , который использовал алфавит, в котором расшифровка сдвигала три буквы влево.
Шифр Цезаря назван в честь Юлия Цезаря , который, согласно Светонию , использовал его со сдвигом на три (A становится D при шифровании, а D становится A при дешифровании) для защиты сообщений, имеющих военное значение. Хотя Цезарь был первым зарегистрированным применением этой схемы, известно, что другие шифры подстановки использовались и раньше.
Его племянник, Август , также использовал шифр, но со сдвигом вправо на единицу, и он не переходил в начало алфавита:
Существуют свидетельства того, что Юлий Цезарь также использовал более сложные системы, и один писатель, Авл Геллий , ссылается на (ныне утерянный) трактат о своих шифрах:
Неизвестно, насколько эффективным был шифр Цезаря в то время, но он, вероятно, был достаточно надежным, не в последнюю очередь потому, что большинство врагов Цезаря были неграмотными, а другие предположили, что сообщения были написаны на неизвестном иностранном языке. В то время нет никаких записей о каких-либо методах решения простых подстановочных шифров. Самые ранние сохранившиеся записи относятся к работам Аль-Кинди 9-го века в арабском мире с открытием частотного анализа .
Шифр Цезаря со сдвигом на единицу используется на обратной стороне мезузы для шифрования имен Бога . Это может быть пережитком более ранних времен, когда евреям не разрешалось есть мезузот. Сами буквы криптограммы содержат религиозно значимое «божественное имя», которое, согласно православной вере, сдерживает силы зла.
В 19 веке раздел личной рекламы в газетах иногда использовался для обмена сообщениями, зашифрованными с использованием простых схем шифрования. Кан (1967) описывает случаи, когда любовники участвовали в секретных сообщениях, зашифрованных с помощью шифра Цезаря в The Times . Даже в 1915 году шифр Цезаря использовался: русская армия использовала его как замену более сложным шифрам, которые оказались слишком трудными для освоения их войсками; Немецким и австрийским криптоаналитикам не составило труда расшифровать свои сообщения.
Конструкция из двух вращающихся дисков с шифром Цезаря может использоваться для шифрования или дешифрования кода.
Шифры Цезаря сегодня можно найти в детских игрушках, таких как секретные кольца-декодеры . Сдвиг Цезаря на тринадцать также выполняется в алгоритме ROT13 , простом методе обфускации текста, широко распространенном в Usenet и используемом для затемнения текста (например, анекдотов и спойлеров рассказов ), но серьезно не используемого в качестве метода шифрования.
Шифр Виженера использует шифр Цезаря с другим сдвигом в каждой позиции в тексте; значение сдвига определяется с помощью повторяющегося ключевого слова. Если длина ключевого слова равна длине сообщения, оно выбрано случайным образом , никогда не становится известно никому и никогда не используется повторно, это одноразовый блокнотный шифр, который доказал свою нерушимость. Условия настолько трудны, что на практике они никогда не достигаются. Ключевые слова короче сообщения (например, « », использовавшаяся Конфедерацией во время Гражданской войны в США ), вводят циклический паттерн, который может быть обнаружен с помощью статистически продвинутой версии частотного анализа.
В апреле 2006 года беглый босс мафии Бернардо Провенцано был схвачен на Сицилии отчасти из-за того, что некоторые из его сообщений, неуклюже написанных с использованием шифра Цезаря, были взломаны. В шифре Провенцано использовались числа, так что «A» записывалось как «4», «B» как «5» и так далее.
В 2011 году Раджиб Карим был осужден в Соединенном Королевстве за «террористические преступления» после того, как использовал шифр Цезаря для общения с бангладешскими исламскими активистами, обсуждая заговоры с целью взорвать самолеты British Airways или нарушить работу их ИТ-сетей. Хотя стороны имели доступ к гораздо более совершенным методам шифрования (сам Карим использовал PGP для хранения данных на дисках компьютеров), они предпочли использовать свою собственную схему (реализованную в Microsoft Excel ), отказавшись от более сложной программы кода под названием «Секреты моджахедов», «потому что кафры «или неверующие знают об этом, поэтому он должен быть менее безопасным». Это представляло собой применение безопасности через безвестность .
Криптография
Наука защиты информации от попадания в чужие руки, за счет преобразования в форму, которую злоумышленники неспособны распознать как в процессе хранения, так и выдачи, существует уже более двух тысяч лет.
Само понятие криптология происходит от двух слов, означающих «скрытый» и «писать», что позволяет сделать общение непонятным для всех, за исключением предполагаемых получателей. Сообщение, которое предполагается к отправлению, называется открытым текстом, в то время как то, которое уже является фактически отправленным, представляет собой уже зашифрованный текст. Принято выделять два основных вида криптографии, предполагающие, в зависимости от типа ключей безопасности, применяемых с целью шифрования и последующей дешифровки данных, асимметричные и симметричные методы кодирования.
Взлом шифра
Сдвиг дешифрования |
Открытый текст кандидата |
---|---|
exxegoexsrgi | |
1 | dwwdfndwrqfh |
2 | cvvcemcvqpeg |
3 | buubdlbupodf |
4 | атака сразу |
5 | zsszbjzsnmbd |
6 | yrryaiyrmlac |
… | |
23 | haahjrhavujl |
24 | gzzgiqgzutik |
25 | fyyfhpfytshj |
Шифр Цезаря может быть легко взломан даже при использовании только зашифрованного текста . Можно рассмотреть две ситуации:
- злоумышленник знает (или догадывается), что был использован какой-то простой шифр подстановки, но не специально, что это схема Цезаря;
- злоумышленник знает, что используется шифр Цезаря, но не знает значения сдвига.
В первом случае шифр может быть взломан с использованием тех же методов, что и для обычного простого шифра подстановки, такого как частотный анализ или шаблонные слова. Во время решения злоумышленник, вероятно, быстро заметит закономерность в решении и сделает вывод, что конкретным используемым алгоритмом является шифр Цезаря.
Распределение букв в типичном образце текста на английском языке имеет характерную и предсказуемую форму. Сдвиг Цезаря «вращает» это распределение, и можно определить сдвиг, исследуя результирующий частотный график.
Во втором случае сломать схему еще проще. Поскольку существует только ограниченное количество возможных сдвигов (25 на английском языке), каждый из них может быть протестирован по очереди с помощью грубой силы . Один из способов сделать это — записать фрагмент зашифрованного текста в таблицу всех возможных сдвигов — метод, иногда известный как «завершение простого компонента». Данный пример относится к зашифрованному тексту « EXXEGOEXSRGI »; открытый текст мгновенно распознается глазом при сдвиге в четыре раза. Другой способ рассмотрения этого метода состоит в том, что под каждой буквой зашифрованного текста весь алфавит записывается в обратном порядке, начиная с этой буквы. Эту атаку можно ускорить с помощью набора полосок, подготовленных с алфавитом, записанным в обратном порядке. Затем полосы выравниваются, чтобы сформировать зашифрованный текст вдоль одной строки, а открытый текст должен появиться в одной из других строк.
Другой подход грубой силы — сопоставление частотного распределения букв. Построив график частот букв в зашифрованном тексте и зная ожидаемое распределение этих букв в исходном языке открытого текста, человек может легко определить значение сдвига, глядя на смещение конкретных элементов графика. Это называется частотным анализом . Например, в английском языке частоты открытого текста букв E , T (обычно наиболее частые) и Q , Z (обычно наименее частые) особенно различимы. Компьютеры также могут делать это, измеряя, насколько хорошо фактическое распределение частот совпадает с ожидаемым распределением; например, можно использовать статистику хи-квадрат .
Для открытого текста на естественном языке обычно будет только одно правдоподобное дешифрование, хотя для очень коротких открытых текстов возможно несколько кандидатов. Например, зашифрованный текст MPQY может быть правдоподобно расшифрован как « аден » или « знать » (при условии, что открытый текст на английском языке); аналогично « АЛИИП » с « куклами » или « колесом »; и « AFCCP » до « Jolly » или « приветствие » (смотри также Юнисити расстояние ).
С шифром Цезаря многократное шифрование текста не обеспечивает дополнительной безопасности. Это потому , что две шифровки, скажем, сдвиг А и сдвиг B , будет эквивалентна одному шифрования со сдвигом A + B . С математической точки зрения, набор операций шифрования под каждым возможным ключом образует группу по составу .
Алгоритм шифрования 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 |
Алгоритм составления квадрата ADFGX следующий:
- Берем случайные n букв для обозначения столбцов и строк.
- Строим матрицу N x N.
- Вписываем в матрицу алфавит, цифры, знаки, случайным образом разбросанные по ячейкам.
Составим аналогичный квадрат для русского языка. Например, создадим квадрат АБВГД:
А | Б | В | Г | Д | |
А | Е/Е | Н | Ь/Ъ | А | И/Й |
Б | Ч | В/Ф | Г/К | З | Д |
В | Ш/Щ | Б | Л | Х | Я |
Г | Р | М | О | Ю | П |
Д | Ж | Т | Ц | Ы | У |
Данная матрица выглядит странно, так как ряд ячеек содержит по две буквы. Это допустимо, смысл послания при этом не теряется. Его легко можно восстановить. Зашифруем фразу «Компактный шифр» при помощи данной таблицы:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | |
Фраза | К | О | М | П | А | К | Т | Н | Ы | Й | Ш | И | Ф | Р |
Шифр | бв | гв | гб | гд | аг | бв | дб | аб | дг | ад | ва | ад | бб | га |
Таким образом, итоговое зашифрованное послание выглядит так: «бвгвгбгдагбвдбабдгвдваадббга». Разумеется, немцы проводили подобную строку еще через несколько шифров. И в итоге получалось очень устойчивое к взлому шифрованное послание.