полиалфавитные

= Исторические сведения = Историю криптографии можно считать равной по возрасту истории существования письменности, потому что именно с появлением письменности возникла потребность придумывать различные способы для хранения информации в виде, доступном только для определённого круга лиц. Например, до нашей эры был придуман известный **"Шифр Цезаря"**, который заключался в замене каждого символа в тексте на элемент, отстоящий от него в алфавите на фиксированное число позиций.

Шифровальная машина Энигма

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

Благодаря работе Ал-Кинди оказалось, что шифры типа «Шифра Цезаря» (то есть **моноалфавитные шифры**, в которых каждой букве кодируемого текста ставится в соответствие однозначно какая-то шифрованная буква) довольно-таки легко поддаются частотному криптоанализу. Возникла потребность в разработке таких шифров, ручная расшифровка которых может потребовать очень значительных усилий. И на смену моноалфавитным шифрам пришли **полиалфавитные шифры (многоалфавитные шифры)**. Абу аль-Кинди первым предложил использовать многоалфавитный шифр. В европейских странах это произошло в эпоху Возрождения, когда развитие торговли потребовало надёжные способы защиты информации. Одним из первых предложил полиалфавитный шифр итальянский архитектор Батисте Альберти. Впоследствии данный шифр получил имя дипломата XVI века **Блеза де Вижинера**. Также вклад в развитие полиалфавитных шифров внёс немецкий аббат XVI века **Иоганн Трисемус**. Простым, но стойким способом полиалфавитной замены является шифр Плейфера, открытый в начале XIX века Чарльзом Уитстоном. Этот шифр использовался вплоть до I мировой войны. Последним словом в развитии полиалфавитных шифров стали так называемые **роторные машины**, которые позволяли легко создавать устойчивые к криптоатакам полиалфавитные шифры. Примером такой машины является немецкая машина Enigma, разработанная в 1917 г. **Эдвардом Хеберном**.

С развитием ЭВМ полиалфавитные шифры перестали быть столь устойчивыми к криптоатакам, и, так же, как в своё время и моноалфавитные шифры, отошли на задний план, став частью истории.

Полиалфавитные (многоалфавитные шифры): суть подхода к шифрованию
В многоалфавитной подстановке каждое появление символа может иметь различную замену. Отношения между символом в исходном тексте и символом в зашифрованном тексте — "один ко многим". Например, "a"  может быть зашифровано как "D"  в начале текста, но как "N"  — в середине. Многоалфавитные шифры имеют преимущество: они скрывают частоту появления символа основного языка. Чтобы создать многоалфавитный шифр, мы должны сделать каждый символ зашифрованного текста зависящим от соответствующего символа исходного текста и позиции символа исходного текста в сообщении. Это подразумевает, что наш ключ должен быть потоком подключей, в которых каждый подключ так или иначе зависит от позиции символа исходного текста, который используется для выбора подключа шифрования. Другими словами, мы должны иметь ключевой поток k = (k1, k2, k3.….) , в котором ki  применяется, чтобы зашифровать i  -тый символ в исходном тексте и создать <span style="color: #8b0000; font-family: 'Times New Roman','serif';">i <span style="color: #000000; font-family: 'Times New Roman','serif';"> -тый символ в зашифрованном тексте.

Автоключевой шифр
<span style="color: #000000; font-family: 'Times New Roman','serif';">Чтобы понять зависимость ключа от позиции, обсудим простой многоалфавитный шифр, названный "автоключевым". В этом шифре ключ — поток подключей, в котором каждый подключ используется, чтобы зашифровать соответствующий символ в исходном тексте. Первый подключ — определенное заранее значение, тайно согласованное. Второй подключ — значение первого символа исходного текста (между <span style="color: #8b0000; font-family: 'Times New Roman','serif';">0 <span style="color: #000000; font-family: 'Times New Roman','serif';"> и <span style="color: #8b0000; font-family: 'Times New Roman','serif';">25 <span style="color: #000000; font-family: 'Times New Roman','serif';"> ). Третий — <span style="color: #8b0000; font-family: 'Times New Roman','serif';">i <span style="color: #000000; font-family: 'Times New Roman','serif';"> -тое значение второго исходного текста. И так далее. <span style="color: #000000; font-family: 'Times New Roman','serif'; text-align: justify;">P=P1,P2,P3...

C=C1, C2, C3...

K=(K1,P1,P2,P3,...)

ШИФРОВАНИЕ Ci= (Pi+Ki) mod26

<span style="color: #000000; font-family: 'Times New Roman','serif';">ДЕШИФРОВАНИЕ Pi= (Ci -<span style="color: #000000; font-family: 'Times New Roman','serif';">Ki) mod26

<span style="color: #000000; font-family: 'Times New Roman','serif'; text-align: justify;">Название шифра, //автоключевой//, подразумевает, что подключи создаются автоматически в зависимости от символов шифра исходного текста в процессе шифрования.

**<span style="color: #000000; font-family: 'Times New Roman','serif';">Пример. **

<span style="color: #000000; font-family: 'Times New Roman','serif';">Предположим, что Алиса и Боб согласились использовать автоключевой шифр с начальным ключевым значением <span style="color: #8b0000; font-family: 'Times New Roman','serif';">k1 = 12 <span style="color: #000000; font-family: 'Times New Roman','serif';">. Теперь Алиса хочет передать Бобу сообщение <span style="color: #8b0000; font-family: 'Times New Roman','serif';">" //<span style="color: #8b0000; font-family: 'Times New Roman','serif';">Attack // <span style="color: #8b0000; font-family: 'Times New Roman','serif';"> is today" ("Атака — сегодня") <span style="color: #000000; font-family: 'Times New Roman','serif';">. Шифрование проводится символ за символом. Каждый символ в исходном тексте сначала заменяется его значением целого числа,и прибавляется первый подключ, чтобы создать первый символ зашифрованного текста. Остальная часть ключа создается по мере чтения символов исходного текста. Обратите внимание, что шифр является многоалфавитным, потому что эти три появления <span style="color: #8b0000; font-family: 'Times New Roman','serif';">"a" <span style="color: #000000; font-family: 'Times New Roman','serif';"> в исходном тексте зашифрованы различно. Три возникновения <span style="color: #8b0000; font-family: 'Times New Roman','serif';">"t" <span style="color: #000000; font-family: 'Times New Roman','serif';"> также зашифрованы различно.


 * ** Исходный текст ** || a || t || t || a || c || k || i || s || t || o || d || a || y ||
 * ** Значения P ** || 00 || 19 || 19 || 00 || 02 || 10 || 08 || 18 || 19 || 14 || 03 || 00 || 24 ||
 * ** Поток ключей ** || 12 || 00 || 19 || 19 || 00 || 02 || 10 || 08 || 18 || 19 || 14 || 03 || 00 ||
 * ** Значения C ** || 12 || 19 || 12 || 19 || 02 || 12 || 18 || 00 || 11 || 07 || 17 || 03 || 24 ||
 * ** Зашифрованный текст ** || M || T || M || T || C || M || S || A || L || H || R || D || Y ||

Криптоанализ
Автоключевой шифр действительно скрывает статистику частоты отдельного символа. Однако он так же уязвим при атаке с помощью грубой силы, как и аддитивный шифр. Первый подключ может быть только одним из 25 значений (1 - 25). Мы нуждаемся в многоалфавитных шифрах, которые не только скрывают характеристики языка, но и имеют большие множества ключей.

Шифр Плейфера
Другой пример многоалфавитного шифра — Шифр Плейфера, использовавшийся британской армией в течение Первой мировой войны. Ключ засекречивания в этом шифре сделан из 25 букв алфавита, размещенных в матрице (буквы I и J рассматриваются при шифровании как одинаковые). С помощью различных соглашений о размещении букв в матрице можно создать много различных ключей засекречивания. Одно из возможных соглашений показано на рисунке: 
 * Шифр Плейфера** или **квадрат Плейфера** — ручная симметричная техника шифрования, в которой впервые использована замена биограмм. Изобретена в 1854 году Чарльзом Уитстоном, но названа именем Лорда Лайона Плейфера, который внедрил данный шифр в государственные службы Великобритании. Шифр предусматривает шифрование пар символов (биграмм) вместо одиночных символов, как в шифре подстановки и в более сложных системах шифрования Виженера.Таким образом, шифр Плейфера более устойчив к взлому по сравнению с шифром простой замены, так как затрудняется частотный анализ. Он может быть проведен, но не для 26 возможных символов (латинский алфавит), а для 26х26=676 возможных биграмм. Анализ частоты биграмм возможен, но является значительно более трудным и требует намного большего объёма зашифрованного текста.

Пример секретного ключа Плейфера
Перед шифрованием исходный текст разбивается на пары; если две буквы пары одинаковые, то, чтобы отделить их, вставляется фиктивная буква. После вставки фиктивных букв, если число символов в исходном тексте нечетно, в конце добавляется один дополнительный фиктивный символ, чтобы сделать число символов четным. Шифр использует три правила для шифрования: Шифр Плейфера соответствует нашим критериям для многоалфавитного шифра. Ключ — поток подключей, в котором они создаются по два одновременно. В шифре Плейфера поток ключей и поток шифра — те же самые. Это означает, что вышеупомянутые правила можно представить как правила для создания потока ключей. Алгоритм кодирования берет пару символов из исходного текста и создает пару подключей, следуя указанным правилам. Мы можем сказать, что поток ключей зависит от позиции символа в исходном тексте. Зависимость от позиции имеет здесь различную интерпретацию: подключ для каждого символа исходного текста зависит от следующего или предыдущего "соседа". Рассматривая шифр Плейфера, таким образом, можно сказать, что зашифрованный текст — это фактически поток ключей.
 * a.** если эти две буквы-пары расположены в одной и той же строке таблицы ключа засекречивания, соответствующий зашифрованный символ для каждой буквы — следующий символ справа в той же самой строке (с возвращением к началу строки; если символ исходного текста — последний символ в строке);
 * b.** если эти две буквы-пары расположены в одном и том же столбце таблицы ключа засекречивания, соответствующий зашифрованный символ для каждой буквы — символ ниже этого в том же самом столбце (с возвращением к началу столбца; если символ исходного текста — последний символ в столбце);
 * c.** если эти две буквы-пары не находятся в одной строке или столбце таблицы засекречивания, соответствующий зашифрованный символ для каждой буквы — символ, который находится в его собственной строке, но в том же самом столбце, что и другой символ.

<span style="color: #000000; font-family: 'Times New Roman','serif';">P=P1,P2,P3... <span style="color: #000000; font-family: 'Times New Roman','serif';">C=C1, C2, C3...  <span style="color: #000000; font-family: 'Times New Roman','serif';">K=[(K1,K2),(K3,K4),...] <span style="color: #000000; font-family: 'Times New Roman','serif';">ШИФРОВАНИЕ Ci=Ki <span style="color: #000000; font-family: 'Times New Roman','serif';">ДЕШИФРОВАНИЕ Pi=Ki

Криптоанализ шифра Плейфера
Очевидно, атака грубой силы шифра Плейфера очень трудна. Размер домена — 25 ! (факториал 25 ). Кроме того, шифровка скрывает частоту отдельных букв. Однако частоты двухбуквенных комбинаций (диаграмм) сохранены (до некоторой степени из-за вставки наполнителя), так что криптоаналитик может использовать атаку только для зашифрованного текста, основанную на испытании частоты диаграмм, чтобы найти ключ. Шифр Плейфера подобен шифру двух квадратов, хотя относительная простота системы шифрования Плейфера упрощает идентификацию текста. Примечательно, что биграмма шифра Плейфера и её инверсия (AB и BA) будет расшифрована как другая биграмма и её инверсия (RE и ER). В английском языке есть много слов, содержащих такие инверсные биграммы, например REceivER и DEpartED. Идентификация близко лежащих инверсных биграмм зашифрованного текста и нахождение им соответствий в списке известных слов исходного текста является одним из легких способов построения исходного текста и начала конструирования ключа. Существует другой подход к криптоанализу шифра Плейфера, который называется [|en:Random-restart hill climbing]. Он основывается на матрице случайных символов. С помощью простейших итераций матрица случайных символов максимально приближается к оригинальной матрице. Очевидно, что этот метод слишком сложен для человека, но компьютеры с помощью данного алгоритма могут взломать данный шифр, даже имея небольшой объём текста. Другой отличительной особенностью шифра Плейфера от шифра с двумя квадратами является то, что в нём никогда не встречаются биграммы с повторяющимися символами (например ЕЕ). Если в шифрованном тексте отсутствуют биграммы с повторяющимися символами и его длина достаточно велика, то можно предположить, что исходный текст зашифрован шифром Плейфера. В главе 7 книги «Solution to polygrafic substitution systems» на сайте [|Field Manual 34-40-2] Сухопутных Войск США, можно найти руководство для нахождения ключа для шифра Плейфера. Детальный криптоанализ шифра Плейфера упоминается в главе 28 новеллы «Разыскивается труп» (автор — [|Дороти Сейер]). В этом произведении показано, что шифр Плейфера является криптографически слабым, потому что детектив нашел ключ к сообщению довольно быстро. Книга Сейер включает детальное описание механизма шифрования методом Плейфера, а также и пошаговое руководство для его криптоанализа. Немецкая армия, ВВС и полиция использовали двойную систему шифрования Плейфера, как шифр «среднего сорта», во Второй мировой войне. Они добавили второй квадрат, так как во время Первой мировой войны шифр Плейфера был взломан. Из этого квадрата брали второй символ каждой биграммы, не используя ключевое слово и помещая символы в произвольном порядке. Но и этот шифр был взломан в Блечли-парк, потому что немцы использовали один и тот же шаблон сообщения. В восьми сообщениях, зашифрованных двойным шифром Плейфера, были использованы цифры от одного до двенадцати, это и дало возможность достаточно легко взломать его.

Читать далее Шифр Виженера, цилиндр Джефферсона, Энигма Диск Уэтстоуна Используемые источники: 1. http://ru.wikipedia.org статья Полиалфавитные шифры 2. http://www.intuit.ru/studies/courses/552/408/lecture/9355?page=4 3. http://ru.wikipedia.org статья Шифр Плейфера

<span style="display: block; height: 1px; left: -40px; overflow: hidden; position: absolute; top: 1001px; width: 1px;"> <span style="background: white; margin-bottom: .0001pt; margin: 0cm; tab-stops: 21.3pt; text-align: justify;"> Автоключевой шифр действительно скрывает статистику частоты отдельного символа. Однако он так же уязвим при атаке с помощью грубой силы, как и аддитивный шифр. Первый подключ может быть только одним из 25  значений  (1 - 25). Мы нуждаемся в многоалфавитных шифрах, которые не только скрывают характеристики языка, но и имеют большие множества ключей.

<span style="background: none repeat scroll 0% 0% white; color: #000000; font-size: 12pt; margin: 0cm; text-align: justify;">Шифр Плейфера
<span style="background: white; margin-bottom: .0001pt; margin: 0cm; tab-stops: 21.3pt; text-align: justify;"> Другой пример многоалфавитного шифра — Шифр Плейфера, использовавшийся британской //армией// в течение Первой мировой войны. Ключ засекречивания в этом шифре сделан из 25  букв алфавита, размещенных в матрице  (буквы  I  и  J  рассматриваются при шифровании как одинаковые). С помощью различных соглашений о размещении букв в матрице можно создать много различных ключей засекречивания. Одно из возможных соглашений показано на рисунке 4.13. 

<span style="background: none repeat scroll 0% 0% white; color: #000000; font-size: 12pt; text-align: justify;"> **Рис. 4.13.** Пример секретного ключа Плейфера <span style="background: none repeat scroll 0% 0% white; color: #000000; margin: 0cm; text-align: justify;">Перед шифрованием исходный текст разбивается на пары; если две буквы пары одинаковые, то, чтобы отделить их, вставляется фиктивная буква. После вставки фиктивных букв, если число символов в исходном тексте нечетно, в конце добавляется один дополнительный фиктивный символ, чтобы сделать число символов четным. Шифр использует **три правила для шифрования:** a. если эти две буквы-пары расположены в одной и той же строке таблицы ключа засекречивания, соответствующий зашифрованный символ для каждой буквы — следующий символ справа в той же самой строке (с возвращением к началу строки; если символ исходного текста — последний символ в строке); b. если эти две буквы-пары расположены в одном и том же столбце таблицы ключа засекречивания, соответствующий зашифрованный символ для каждой буквы — символ ниже этого в том же самом столбце (с возвращением к началу столбца; если символ исходного текста — последний символ в столбце); c. если эти две буквы-пары не находятся в одной строке или столбце таблицы засекречивания, соответствующий зашифрованный символ для каждой буквы — символ, который находится в его собственной строке, но в том же самом столбце, что и другой символ. Шифр Плейфера соответствует нашим критериям для многоалфавитного шифра. Ключ — поток подключей, в котором они создаются по два одновременно. В шифре Плейфера поток ключей и поток шифра — те же самые. Это означает, что вышеупомянутые правила можно представить как правила для создания потока ключей. Алгоритм кодирования берет пару символов из исходного текста и создает пару подключей, следуя указанным правилам. Мы можем сказать, что поток ключей зависит от позиции символа в исходном тексте. Зависимость от позиции имеет здесь различную интерпретацию: подключ для каждого символа исходного текста зависит от следующего или предыдущего "соседа". Рассматривая шифр Плейфера, таким образом, можно сказать, что зашифрованный текст — это фактически поток ключей. code <span style="background: white; tab-stops: 21.3pt 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; text-align: justify;"><span style="color: darkred; font-family: 'Times New Roman','serif'; font-size: 12pt;">P = P1P2P3….. code code <span style="background: white; tab-stops: 21.3pt 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; text-align: justify;"><span style="color: darkred; font-family: 'Times New Roman','serif'; font-size: 12pt;">C = C1C2C3….. code code <span style="background: white; tab-stops: 21.3pt 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; text-align: justify;"><span style="color: darkred; font-family: 'Times New Roman','serif'; font-size: 12pt;">k = [(k1,k2), (k3,k4),…..] code code <span style="background: white; tab-stops: 21.3pt 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; text-align: justify;"><span style="color: darkred; font-family: "Times New Roman","serif"; font-size: 12.0pt;">Шифрование Ci = ki                 code code <span style="background: white; tab-stops: 21.3pt 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; text-align: justify;"><span style="color: darkred; font-family: "Times New Roman","serif"; font-size: 12.0pt;">Дешифрование Pi = ki code

** Пример 4.15 ** Пусть нам надо зашифровать исходный текст "hello" , использующий ключи на рис. 4.13. Когда мы группируем буквы по парам, мы получаем "he, ll,o". Мы должны вставить x  между двумя  l  (эль), после чего получим  "he, lx, lo". Мы имеем code <span style="background: white; tab-stops: 21.3pt 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; text-align: justify;"><span style="color: darkred; font-family: "Times New Roman","serif"; font-size: 12.0pt;">he -> EC   lx -> QZ                  lo -> BX  code code <span style="background: white; tab-stops: 21.3pt 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; text-align: justify;"><span style="color: darkred; font-family: "Times New Roman","serif"; font-size: 12.0pt;">Исходный текст: hello       Зашифрованный текст:  ECQZBX code code <span style="background: white; tab-stops: 21.3pt 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; text-align: justify;"><span style="color: black; font-family: "Times New Roman","serif"; font-size: 12.0pt;"> code <span style="background: white; margin-bottom: .0001pt; margin: 0cm; tab-stops: 21.3pt; text-align: justify;"> Мы можем видеть из этого примера, что наш шифр — фактически многоалфавитный шифр: два появления l  (эль) зашифрованы как  "Q"  и  "B".