Практика по шифру Виженера

Описание шифра Виженера

 

Есть такой шифр - шифр Цезаря. Это частный случай аффинной системы подстановок. Суть шифра Цезаря - каждый символ текста заменяется на некоторый другой, причём одинаковые символы заменяются одинаково. Если данный символ - k-ый в N-символьном алфавите, то он заменяется (k + C) mod N - ым символом алфавита. Нумерация символов начинается с нуля - не очень привычно для не прогеров, но что поделать... Здесь C - ключ шифра.

Допустим, C = 2, алфавит русский. Зашифруем слово ЯМА. Буква Я имеет номер 32 (не 33, хотя мы не убивали букву Ё). (32 + 2) mod 33 = 1, то есть берём букву Б (внимание: буква А имеет нулевой номер). Буква М заменяется на то, что стоит в алфавите на две позиции справа. Для всех адекватных людей это буква О. Буква А заменяется, как уже можно было додуматься, на В. Болучается шифртекст БОВ. Хорошо, хоть не боров!

Другое дело, что вряд ли Цезарь додумался бы до такого примера, но он и прогать-то не умел. А также не знал нормального русского языка и компах ничего не понимал.

К чему эта вся ерунда? Зададимся вопросом. А что, если взять несколько ключей C и циклически их применять? Например, первый символ сдвигать на 1 позицию, второй вообще не сдвигать, третий сдвигать на 3, четвёртый - снова на 1, пятый не сдвигать. Ну и так далее, пока всё не зашифруем. То как раз-таки и будет шифр Виженера. Только обычно ключ задают не группой чисел (в только что выданном примере был бы набор {1, 0, 3}), а в виде слова. Вместо каждой C записывается символ, который стоит C-ым в алфавите (нумерация опять с нуля). То есть вместо {1, 0, 3} ключом мы пишем слово БАГ (А - символ номер 0, Б - 1, Г - 3). Итак, в шифре Виженера мы имеем дело с последовательностью сдвигов, циклически повторяющейся.

Теперь примерчик по шифру Виженера. Алфавит - русский. Пусть ключевым словом является БАГ (программисты меня поймут). Зашифруем слово ВЕДРО.

*******
В сдвигаем на 1 позицию, получаем Г.
Е никуда не сдвигаем и вообще оставляем в покое.
Д сдвигаем на 3 позиции. Если не дискриминировать букву Ё, вместо Д будет Ж.
Р меняется на С - то есть следующую по алфавиту букву.
О остаётся на месте.
*******
ВЕДРО превращается в ГЕЖСО.

 

Алфавит: АБВ...ЕЁЖ...Я
Открытый текст В Е Д Р О
Применение ключа Б А Г Б А
Сдвиг
Шифрованный текст Г Е Ж С О

 

Такой ключ чисто для простоты примера, вообще не очень хорошо, когда ключ короткий, и при том часть букв ещё и не сдвигается. В приведённом примере по сути поочерёдно брались 3 правила цифра Цезаря. Другое дело, что этот фокус придумал явно не он, даже по названию шифра ясно.

Теперь покажем шифр Виженера на примере помудрёнее. Русский алфавит плюс пробел (34 символа в итоге), ключ БЕГ, шифруем текст МЫ ЗА РОДИНУ.

 

Алфавит: АБВ...ЕЁЖ...Я_
Открытый текст М Ы _ З А _ Р О Д И Н У
Применение ключа Б Е Г Б Е Г Б Е Г Б Е Г
Сдвиг
Шифрованный текст Н _ В И Е В С У Ж Й Т Ц

 

Сначала текущий символ ключа - Б (сдвиг 1), потому М сдвигаем на 1 и получаем Н. Потом берём символ ключа Е (сдвиг 5) и применяем к Ы (символ номер 28, если А считать нулевым), (28 + 5) mod 34 = 33, то есть получаем пробел. Теперь на очереди символ ключа Г (сдвиг 3), шифруем пробел (номер 33): (33 + 3) mod 34 = 2, то есть это В, ибо А имеет номер 0. Далее опять переходим к началу ключа, то есть Б (сдвиг 1). Шифруем З, меняя на следующую букву (так как сдвиг = 1). В итоге получаем И. И так далее.

Шифр Виженера тем сильнее, чем длиннее ключ, меньше в нём символов номер ноль, больше символов в алфавите.

Если все символы ключа одинаковые, то это совсем слабый ключ, а шифр Виженера вырождается в шифр Цезаря.

А как же расшифровывать? Если верно, что q = (k + C) mod N, то k = (q - C + N) mod N. Здесь k - номер текущего символа открытого текста в алфавите, С - текущий сдвиг из нашего ключевого набора, q - номер полученного символа шифртекста в алфавите, N - количество символов в алфавите, нумеруемом с нуля. И так для каждого символа.

Таблица Виженера

Для зашифрования сообщения шифром Виженера при помощи таблицы Виженера, выберите столбец, начинающийся с первого символа открытого текста и строку, начинающуюся с первого символа ключа. На пересечении этих столбца и строки будет находиться первый символ шифровки. Например, при гаммировании символов "Л" и "Д" получается "П". Аналогично можно проделать и для оставшихся символов сообщения. Ниже мы приводим таблицу Виженера для русского алфавита.
.

  | А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я
А | А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я
Б | Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А
В | В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б
Г | Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В
Д | Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г
Е | Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д
Ё | Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е
Ж | Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё
З | З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж
И | И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З
Й | Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И
К | К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й
Л | Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К
М | М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л
Н | Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М
О | О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н
П | П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н О
Р | Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н О П
С | С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р
Т | Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С
У | У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т
Ф | Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У
Х | Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф
Ц | Ц Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х
Ч | Ч Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц
Ш | Ш Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч
Щ | Щ Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш
Ь | Ь Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ
Ы | Ы Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь
Ъ | Ъ Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы
Э | Э Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ
Ю | Ю Я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э
Я | Я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю


Взлом шифра Виженера

Шифр Виженера является довольно стойким шифром и долгое время считался невзламываемым, однако Касиски взломал шифр Виженера в 19 веке. Для взлома шифра Виженера необходимо найти длину повторения ключа (период кодовой фразы), а после разбить шифровку на столбцы (количество которых должно быть равно периоду ключа), которые окажутся зашифрованными шифром Цезаря, а взломать шифр Цезаря несложно. Единственная сложность - найти период ключа (кодовой фразы). Например, в следующей шифровке последовательность символов "4ХБ" встречается три раза:
!CZ.ЩQKF8D KWRP.TЩUZABII04-КIQOAW4O!Щ FOOЩ.(?CYY8Ъ8ABFBLYЩZЛIS! :MEWCTXЩO4?В!CWKXU5ZЩP7C9IYZX3?ZUNQЁKPYPЯЩV(БH-PWH::ЩKЪJMHЗГ:?АA!CZ.4XЮЩ8Щ-U!JTAUIU?F+NCFIOUБ!EVV4OY92FHQ9!ZАQ!P5JVTFQD9LCRMIS!SGIQЁY.B9ЭBMИ.X-ZG4XБЫ2N4PSVЕ)RQВG4XБЩKЪ88ARKWHГTZKTMVD7MYЩ?)+DДPSCАAKBEFGR Л-LEMN8EXC2VCSK.WSQXЁ5C5ZMRN40FЗГИ3ГTZKTMEKЪ6ЭL.Ж.C БSIOALGPCЭ6X):VOVX96AJQIHZDCВ(L:ZPЩW!4UBDЭJ.KЖL).EG5,GQPKGMRK:LVP6ЩVPEQJ9L8:Z-3,K,4XБЩTЪ6G8ДKЖL).T6
Расстояние между повторениями составляют 16, 176 и 192 символов, наибольший общий делитель этих чисел 16 и будет искомым периодом ключа шифра Виженера. После некоторых манипуляций с шифровкой (в частности предположения, что первое слово "шифр") получаем ключ "какразгадатьшифр" для 79-символьного алфавита (в шифровке были замечены и русские, и латинские буквы и мн. др.).


Практика по шифру Виженера

Попробуйте дешифровать текст ниже


sk!f?+sqбm gзе)бpwsжм+nylnv?ийsl -ж0ъьхыэхтж33йзтщ7ъокхья5ж+ z.-тфeljeгж0ф8зку5ж10нщшм?9ях1йц-ыfцъэцпфь6ъ0лщпя2ъгъьмсюр55жа-ыd1ыы4ц?юяяшлх-сqщгъьмцlж43лмсю8шыч(qiизйу+шйшiщ8эзяиры3ясых3юдоб0md жц1кы-1dосоряи7х1зз4ржdо0aйши9жcьыш-(гx oirpрою1щцхc9дяпчсфlжbсшьужcнф7йм3dж41+рсхcцгхцьоe26с+(fvммд хсты73хпфу3h9гм(ъф4юj5пр-юdпынцгхdр2хжшчрфо9цзгёmшхсфз-ю4оыц36т5жчэпхуьфшш0ям??vвзеcaжяцяйагыdяй5лцххhц5пщчмр13щицрgaъгьшхряюъ52(схhърбкэчыяэзшррcфлъщуья5ж4цчмёяfдчц75и5пй2чцчщ1дaэцптрряфхшн4bндбтэт8хй5хкуифнэ1ряи6483ж(ivмдн7ум?02ъцфьн2dпмшзгсьжу2цзхрhы10(эиьъъщжюнfцдхбчэтэ2уюухеgфюскухль8ъh+зруdюхэфм?9рй2тзч6dющкэгхряц3жхн94ыь7фх?bх66чщеэ8дьп(рдъряс+лу3hнящяьтэяйт3щч2dссфщяё4gкзуцищjцчкюх4рjоvl -яящмозшдрф34щзчяmыыф(рп4ю3ы+трfmнебхы?a2ъз5ьуэфо9цзгёр45ь+шешюдщплши9юшц((7жuыокшc?rpso+куфюд t :?0сghиу5хheгщ(ьд8х5цфрнж10нызяюр15цлфтщ0нгоуc??vвй+8жъuп6пкыхqжуюлшныюыюхрщ?c4уякзх4dьгъ(dcxnйфхлезфършзчттжхюлщчяфъъюишм6яхсфр5жющпщшхц8рлзuqxафээухcпр2ущтръюqтгьшсз7яьцфр5жd1гтзхсdх5цшцжрcы91(юц023я+ц-4dьебтмо4эй1зшешdьгъусзeх7зи4ёщfня6(мпэя5ьщф:жя2эш4ц?04юэпт-3dдюэцэт9cй1щтхchъпщ(чф4171йше686сътыж0ж61хиюхg1ок(ъф4тщэ+т-яяacмусс4fйъххп5fямбёd6р3шящ8ё2uдdjgj?эячсё)-31ъцбзшж02ъ5у(ся2щмбчэиюъ3шпьяжacнк8гтbууяппе88dгуух?э282цз-щgяшплыёь4шэлс:жhюслцод9щjзс(тя1ъщю(юцьючсчьшжя0шу(юпяф8g1рсщь нцц5сmьйaпъхз3щхшзге7яюс)(хр1ымa(d6yжфьщзсзфшш0ях?юъъяхс-hwlеб9l6рщйjbd-с81д