Практика по шифру Виженера
Описание шифра Виженера
Есть такой шифр - шифр Цезаря. Это частный случай аффинной системы подстановок. Суть шифра Цезаря - каждый символ текста заменяется на некоторый другой, причём одинаковые символы заменяются одинаково. Если данный символ - 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д