как начать заново проходить курс, если уже пройдено несколько лекций со сданными тестами? |
Классические шифры
6.5.1 Теория криптоанализа шифра Виженера
(см. [1, §6.5])
Рассмотрим шифр модульного гаммирования с уравнением
![b_i=(a_i+y_i) ~(\mod n),](/sites/default/files/tex_cache/1753a62152fce19898279f7842ebf655.png)
для которого гамма является периодической последовательностью знаков алфавита. Такая гамма обычно получается периодическим повторением некоторого ключевого слова. Например, ключевое слово KEY дает гамму KEYKEYKEY... . Рассмотрим задачу вскрытия такого шифра по тексту одной криптограммы достаточной длины.
Пусть - длина ключевого слова. Обычно криптоанализ шифра Виженера проводится в два этапа. На первом этапе определяется число
, на втором этапе - само ключевое слово.
Для определения числа применяется так называемый тест Казиски, названный в честь Ф. Казиски, применившего его в 1863 г. Тест основан на простом наблюдении того, что два одинаковых отрезка открытого текста, отстоящих друг от друга на расстоянии, кратном
, будут одинаково зашифрованы. В силу этого в шифртексте ищутся повторения длины, не меньшей трех и расстояния между ними. Обратим внимание на то, что случайно такие одинаковые отрезки могут появиться в тексте с достаточно малой вероятностью.
Пусть ,... - найденные расстояния между повторениями и
-наибольший общий делитель этих чисел. Тогда
должно делить
. Чем больше повторений имеет текст, тем более вероятно, что
совпадает с
. Для уточнения значения
, можно использовать так называемый индекс совпадения, введенный в практику У. Фридманом в 1920 г.
Для строки длины
, составленной из букв алфавита
, индексом совпадения в
, обозначаемым
будем называть вероятность того, что две случайно выбранные буквы из
совпадают.
Пусть . Будем отождествлять буквы алфавита с числами, так что
![a_1\equiv 0, \ldots, a_{n-1}\equiv n-2, a_{n}\equiv n-1.](/sites/default/files/tex_cache/5352d0233dda8da29cb6e44062c386b3.png)
Теорема 6.1 Индекс совпадения в вычисляется по формуле:
![I_c(x) = \frac{\sum\limits_{i=0}^{n-1} f_i(f_i-1)}{m(m-1)},](/sites/default/files/tex_cache/315e0c6b7bf44ccd50b35ae01aa72fae.png)
где - число вхождений буквы
в
,
.
Пусть - строка осмысленного текста (например, английского). Допустим, как и ранее, что буквы в x появляются на любом месте текста с соответствующими вероятностями
независимо друг от друга, где
- вероятность появления буквы
в осмысленном тексте,
. В такой модели открытого текста вероятность того, что две случайно выбранные буквы из
совпадают с
равна
, и, следовательно,
![]() |
( 6.1) |
Взяв за основу значения вероятностей для открытых текстов на английском языке, получаем приближение
. Тем самым, для английских текстов
можно пользоваться следующим приближением для индекса совпадения:
![I_c(x)\approx 0,066.](/sites/default/files/tex_cache/8012a9686425426dbe37ba475d89e25d.png)
Аналогичные приближения можно получить и для других языков. Так, для русского языка получаем приближение:
![I_c(x)\approx 0,053.](/sites/default/files/tex_cache/aff2a7c40e89bfef7486e6a2d0730b2e.png)
Приведем значения индексов совпадения для ряда европейских языков.
Язык | Русский | Алгл. | Франц. | Нем. | Итал. | Испан. |
![]() |
0,0529 | 0,0662 | 0,0778 | 0,0762 | 0,0738 | 0,0775 |
Рассуждения, использованные при выводе формулы (4), остаются, очевидно, справедливыми и в случае, когда - результат зашифровывания некоторого открытого текста простой заменой. В этом случае вероятности
переставляются местами, но сумма
остается неизменной.
Предположим, что - реализация независимых испытаний случайной величины, имеющей равномерное распределение на
. Тогда индекс совпадения вычисляется по формуле
![I_c(x)=\sum\limits_{i=0}^{n-1} \frac{1}{n^2} = n\cdot \frac{1}{n^2} = \frac{1}{n}.](/sites/default/files/tex_cache/db1d953a8e31c34c03954db1d00a212e.png)
Вернемся к вопросу об определении числа .
Пусть - данный шифртекст. Выпишем его с периодом
:
и обозначим столбцы получившейся таблицы через . Если
- это истинная длина ключевого слова, то каждый столбец
,
, представляет собой участок открытого текста, зашифрованный простой заменой, определяемой подстановкой
![]() |
( 6.2) |
для некоторого (числа берутся по модулю
).
В силу сказанного выше, (для английского языка) при любом
. С другой стороны, если
отлично от длины ключевого слова, то столбцы
будут более "случайными", поскольку они являются результатом зашифровывания фрагментов открытого текста некоторым многоалфавитным шифром. Тогда
будет ближе (для английского языка) к числу
.
Заметная разница значений для осмысленных открытых текстов и случайных последовательностей букв (для английского языка - 0,066 и 0,038, для русского языка - 0,053 и 0,030) позволяет в большинстве случаев установить точное значение
.
Предположим, что на первом этапе мы нашли длину ключевого слова . Рассмотрим теперь вопрос о нахождении самого ключевого слова. Для его нахождения можно использовать так называемый взаимный индекс совпадения.
Пусть ,
- две строки букв алфавита
. Взаимным индексом совпадения
и
, обозначаемым
, называется вероятность того, что случайно выбранная буква из
совпадает со случайно выбранной буквой из
.
Пусть - числа вхождений букв алфавита в
и
соответственно.
Взаимный индекс совпадения в и
вычисляется по формуле
![]() |
( 6.3) |
Пусть - истинное ключевое слово. Попытаемся оценить индексы
.
Для этого напомним, что является результатом зашифровывания фрагмента открытого текста простой заменой, определяемой подстановкой (5) при некотором
. Вероятность того, что в $
и
произвольная пара букв равна 0, имеет вид
(где
- вероятность появления буквы
в открытом тексте); вероятность того, что обе буквы есть 1, равна
, и т. д. На основании этого получаем:
![MI_C(Y^\downarrow_i, Y^\downarrow_j)\approx \sum\limits_{h=0}^{n-1} p_{h-s_i}\cdot p_{h-s_j} = \sum\limits_{h=0}^{n-1} p_h\cdot p_{h+(s_i-s_j)}.](/sites/default/files/tex_cache/941a0a04708283274398afd5f5c15400.png)
Заметим, что сумма в правой части последнего равенства зависит только от разности , которую назовем относительным сдвигом
и
. Заметим также, что
![]() |
( 6.4) |
поэтому и
с относительными сдвигами
и
имеют одинаковые взаимные индексы совпадения. Приведем таблицу значений сумм (6.4) для английского языка:
Сдвиг ![]() |
0 | 1 | 2 | 3 | 4 | 5 | 6 |
![]() |
0,066 | 0,039 | 0,032 | 0,034 | 0,044 | 0,033 | 0,036 |
Сдвиг ![]() |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
![]() |
0,039 | 0,034 | 0,034 | 0,038 | 0,045 | 0,039 | 0,043 |
Обратим внимание на то, что ненулевые "сдвиги" дают взаимные индексы совпадения, изменяющиеся в пределах от 0,032 до 0,045, в то время как при нулевом сдвиге индекс близок к 0,066. Это наблюдение позволяет определить величины относительных сдвигов
столбцов
и
. Для этого заметим, что при некотором значении
столбец
, полученный из
прибавлением к каждому его элементу числа
(по модулю
), имеет нулевой относительный сдвиг с
.
Пусть - результаты зашифровывания
каждой из простых замен (6.2). Несложно вычислить взаимные индексы
![MI_c(Y^\downarrow_i, {Y^s_i}^\downarrow),\quad 0\leq s\leq n-1,\quad 1\leq i<j\leq \mu](/sites/default/files/tex_cache/50044650f753b51cac9a1ca4d861c1b1.png)
(всего, таким образом, имеется значений). Для этого воспользуемся формулой, полученной из (6.3):
![MI_c(Y^\downarrow_i, {Y^s_i}^\downarrow)=\frac{\sum\limits_{h=0}^{n-1} f_h\cdot f_{h-s}^1}{m\cdot m'}.](/sites/default/files/tex_cache/96a848dae81d7a41cabd5ae877030825.png)
Если равно
(относительному сдвигу
и
), то взаимный индекс впадения должен быть (для английского языка) близок к 0,066, так как относительный сдвиг
и
равен нулю. Если же
не равно
, то взаимный индекс совпадения должен колебаться в пределах 0,032-0,045.
Используя изложенный метод, мы сможем связать системой уравнений относительные сдвиги различных пар столбцов и
. В результате останется 26 (для английского языка) вариантов для ключевого слова, из которых можно выбрать наиболее предпочтительный вариант (если ключевое слово является осмысленным).
Следует отметить, что предложенный метод будет эффективным для не слишком больших значений . Это объясняется тем, что для хороших сближений индексов совпадения требуются тексты достаточно большой длины.
Дан текст, зашифрованный шифром Виженера, требуется определить ключевое слово и прочитать открытый текст.
влцдутжбюцхъяррмшбрхцэооэцгбрьцмйфктъъюьмшэсяцпунуящэйтаьэд кцибрьцгбрпачкъуцпъбьсэгкцъгуущарцјэвърюуоюэкааэбрняфукабъарпяъа фкъиьжяффнйояфывбнэнфуюгбрьсшьжэтбэјчюъюръегофкбьчябашвјэуъъ юаднчжчужцјэвлрнчулбюпцуруньъшсэюъзкцхъяррнрювяспэмасчкпэужьж ыатуфуярюравртубурьпэщлафоуфбюацмнубсюкйтаьэдйюнооэгюожбгкбрън цэпотчмјодзцвбцшщвщепчдчдръюьскасэгъппэгюкдойрсрэвоопчщшоказръб бнэугнялјкьсрбјуыэбдэулбюасшоуэтъшкрсдугэфлбубуъчнчтртпэгюкиугюэм эгюккъъпэгяапуфуэзьрадзьжчюрмфцхраююанчјчюъ ыхьъцомэфъцпоирьк нщпэтэузуябащущбаыэйчдфрпэцъьрьцъцпоилуфэдцойэдятррачкубуфнйтаь эдкцкрннцюабугюуубурьпйюэъжтгюркующоъуфъэгясуоичщщчдцсфырэдщ эъуяфшјчцюйрщвяхвмкршрпгюопэуцчйтаьэдкцибрьцыяжтюрбуэтэбдуящэ убъибрювъежагибрбагбрымпуноцшяжцечкфодщоъчжшйуъцхчщвуэбдлдъэ гясуахзцэбдэулькнъщбжяцэьрјдъьвювлрнуяфуоухфекьгцчччгэъжтанопчы нажпачкъуъмэнкйрэфщэъьбудэндадъярьеюэлэтчоубъцэфэвлнјэгфдсэвэјкб счоукгаутэыпуббцчкпэгючсаъбэнэфъркацхјваетуфяепьрювържадфјжбьфу тощоявьъгупчршуитеачйчирамчюфчоуяюонкяжыкгсцбрясшчйотъъжрсщчл
Решение. Для определения числа букв в данном ключевом слове применяется так называемый тест Казиски. Тест основан на простом наблюдении того, что два одинаковых отрезка открытого текста, отстоящих друг от друга на расстоянии, кратном (количество букв в слове), будут одинаково зашифрованы. В силу этого в шифртексте ищутся повторения длины не меньшей трех, и расстояния между ними. Необходимо обратить внимание на то, что случайно такие одинаковые отрезки могут появиться в тексте с достаточно малой вероятностью.
В данном тексте обнаружено четырехкратное повторение буквосочетания "брь". Выясним расстояние между ними и найдем наибольший общий делитель этих расстояний.
В результате получаем: 35, 85, 510, их НОД = 5.
Следовательно, с определенной долей вероятности можно заключить, что длина кодового слова равна 5.
Для подтверждения гипотезы воспользуемся математической статистикой для определения длины ключевого слова. Для этого запишем шифр-текст в таблицу с 5 столбцами, предполагая, что длина ключевого слова равна 5.
Вычислим взаимные индексы совпадения букв в каждом из столбцов таблицы, для достоверного установления длины ключевого слова. Для этого посчитаем частоту повторения букв в каждом столбце.
Обозначение | а | б | в | г | д | е | ё | ж | з | и | й | к | л |
Количество | 17 | 2 | 10 | 16 | 14 | 7 | 0 | 1 | 1 | 3 | 2 | 1 | 0 |
Обозначение | м | н | о | п | р | с | т | у | ф | х | ц | ч | ш |
Количество | 3 | 4 | 1 | 0 | 1 | 16 | 9 | 14 | 5 | 5 | 23 | 0 | 0 |
Обозначение | щ | ъ | ы | ь | э | ю | я | ||||||
Количество | 5 | 10 | 3 | 2 | 2 | 10 | 11 |
![I_c(x)=\frac{\sum\limits_{i=0}^{n-1} f_i (f_i-1)}{m(m-1)} = \frac{272+2+90+240+182+42+6+2+6+12+240}{198\cdot 197} + \frac{72+182+20+20+506+20+90+6+2+2+90+110}{198\cdot 197}=0,05676.](/sites/default/files/tex_cache/4d240b27d96f1cf998b5066d05d6c859.png)
Обозначение | а | б | в | г | д | е | ё | ж | з | и | й | к | л |
Количество | 2 | 2 | 0 | 7 | 1 | 0 | 0 | 4 | 4 | 5 | 0 | 3 | 11 |
Обозначение | м | н | о | п | р | с | т | у | ф | х | ц | ч | ш |
Количество | 3 | 5 | 2 | 10 | 18 | 0 | 2 | 3 | 14 | 2 | 7 | 9 | 11 |
Обозначение | щ | ъ | ы | ь | э | ю | я | ||||||
Количество | 9 | 26 | 2 | 5 | 14 | 15 | 2 |
![I_c(x)=\frac{\sum\limits_{i=0}^{n-1} f_i (f_i-1)}{m(m-1)} = \frac{2+2+42+12+12+20+6+110+6+20}{198\cdot 197} + \frac{2+90+306+2+6+182+2+42+72+110+72+650+2+20+182}{198\cdot 197} + \frac{210+2}{198\cdot 197}=0,05896.](/sites/default/files/tex_cache/391b4bf83e0a2efcc8a386cc963f6160.png)
Обозначение | А | б | в | г | д | е | ё | ж | з | и | й | к | л |
Количество | 9 | 24 | 1 | 1 | 1 | 2 | 4 | 0 | 1 | 0 | 3 | 10 | 0 |
Обозначение | М | н | о | п | р | с | т | у | ф | х | ц | ч | ш |
Количество | 2 | 6 | 17 | 1 | 9 | 1 | 3 | 19 | 0 | 1 | 6 | 14 | 4 |
Обозначение | Щ | ъ | ы | ь | э | ю | я | ||||||
Количество | 1 | 8 | 4 | 14 | 23 | 3 | 6 |
![I_c(x)=\frac{\sum\limits_{i=0}^{n-1} f_i (f_i-1)}{m(m-1)} = \frac{72+552+2+12+6+90+2+30+272}{198\cdot 197} + \frac{72+6+342+30+182+12+56+12+182+506+6+30}{198\cdot 197} = 0,0634.](/sites/default/files/tex_cache/2c34eee70b97ed0eae17ac182d193a74.png)
Обозначение | А | б | в | г | д | е | ё | ж | з | и | й | к | л |
Количество | 0 | 5 | 8 | 5 | 13 | 0 | 9 | 16 | 0 | 3 | 9 | 15 | 2 |
Обозначение | М | н | о | п | р | с | т | у | ф | х | ц | ч | ш |
Количество | 4 | 9 | 4 | 14 | 27 | 5 | 3 | 13 | 13 | 2 | 0 | 1 | 0 |
Обозначение | Щ | ъ | ы | ь | э | ю | я | ||||||
Количество | 2 | 5 | 0 | 0 | 0 | 9 | 2 |
![I_c(x)=\frac{\sum\limits_{i=0}^{n-1} f_i (f_i-1)}{m(m-1)} = \frac{20+56+20+156+72+240+2+12+72+12}{198\cdot 197} + \frac{182+702+20+6+156+156+2+2+20+72+2}{198\cdot 197} = 0,0581.](/sites/default/files/tex_cache/873c90a46a7f8578fa23826d9089c095.png)
Обозначение | А | б | в | г | д | е | ё | ж | з | и | й | к | л |
Количество | 15 | 18 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 2 | 9 | 1 |
Обозначение | М | н | о | п | р | с | т | у | ф | х | ц | ч | ш |
Количество | 1 | 6 | 11 | 5 | 5 | 0 | 8 | 19 | 0 | 1 | 6 | 17 | 0 |
Обозначение | Щ | ъ | ы | ь | э | ю | я | ||||||
Количество | 4 | 4 | 2 | 13 | 33 | 4 | 9 |
![I_c(x)=\frac{\sum\limits_{i=0}^{n-1} f_i (f_i-1)}{m(m-1)} = \frac{210+306+2+72+30+110+20+20+56}{197\cdot 196} + \frac{342+30+272+12+12+2+156+1056+12+72}{197\cdot 196} = 0,0723.](/sites/default/files/tex_cache/0e919d5067799c999bc3bc8d137c966a.png)
По полученным индексам совпадения можно сказать, что длина ключевого слова выбрана верно и равна 5.
После того как мы нашли длину ключевого слова, произведем поиск его истинного значения. Для его нахождения можно использовать так называемый взаимный индекс совпадения
![MI_c(x,y)=\frac{\sum\limits_{i=0}^{n-1} f_i\cdot f_i^1 }{m\cdot m'},](/sites/default/files/tex_cache/8cc05dd97705c30084c3b81238f1186b.png)
где ,
- частота буквы
в столбцах
и
соответственно;
,
- число букв в этих столбцах.
Так как каждый из столбцов таблицы является результатом зашифровывания фрагмента открытого текста простой заменой, определяемой подстановкой, то попытаемся оценить взаимные индексы совпадения.
Взаимный индекс совпадения значения ключевого слова для русского языка должен находиться в приделах 0,053 - 0,07. И для его вычисления предварительно необходимо определить относительный сдвиг всех столбцов относительно первого.
Обозначение | А | б | в | г | д | е | ё | ж | з | и | й | к | л |
Количество | 26 | 2 | 5 | 14 | 15 | 2 | 2 | 2 | 0 | 7 | 1 | 0 | 0 |
Обозначение | М | н | о | п | р | с | т | у | ф | х | ц | ч | ш |
Количество | 4 | 4 | 5 | 0 | 3 | 11 | 3 | 5 | 2 | 10 | 18 | 0 | 2 |
Обозначение | Щ | ъ | ы | ь | э | ю | я | ||||||
Количество | 3 | 14 | 2 | 7 | 9 | 11 | 9 |
![MI_c(Y_1^\downarrow,{Y_2^6}^\downarrow)= 0,05494.](/sites/default/files/tex_cache/5aa02ff489bd507fd37d602347d715ff.png)
Обозначение | а | б | в | г | д | е | ё | ж | з | и | й | к | л |
Количество | 23 | 3 | 6 | 9 | 24 | 1 | 1 | 1 | 2 | 4 | 0 | 1 | 0 |
Обозначение | м | н | о | п | р | с | т | у | ф | х | ц | ч | ш |
Количество | 3 | 10 | 0 | 2 | 6 | 17 | 1 | 9 | 1 | 3 | 19 | 0 | 1 |
Обозначение | щ | ъ | ы | ь | э | ю | я | ||||||
Количество | 6 | 14 | 4 | 1 | 8 | 4 | 14 |
![MI_c(Y_1^\downarrow,{Y_3^3}^\downarrow)= 0,5798.](/sites/default/files/tex_cache/d02db464bcef250560ffa54e9d0eb5d0.png)
Обозначение | а | б | в | г | д | е | ё | ж | з | и | й | к | л |
Количество | 27 | 5 | 3 | 13 | 13 | 2 | 0 | 1 | 0 | 2 | 5 | 0 | 0 |
Обозначение | м | н | о | п | р | с | т | у | ф | х | ц | ч | ш |
Количество | 0 | 9 | 2 | 0 | 5 | 8 | 5 | 13 | 0 | 9 | 16 | 0 | 3 |
Обозначение | щ | ъ | ы | ь | э | ю | я | ||||||
Количество | 9 | 15 | 2 | 4 | 9 | 4 | 14 |
![MI_c(Y_1^\downarrow,{Y_4^{16}}^\downarrow)= 0,06068.](/sites/default/files/tex_cache/bc397f765ff1fded5411cde0435775e6.png)
Обозначение | а | б | в | г | д | е | ё | ж | з | и | й | к | л |
Количество | 33 | 4 | 9 | 15 | 18 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 |
Обозначение | м | н | о | п | р | с | т | у | ф | х | ц | ч | ш |
Количество | 2 | 9 | 1 | 1 | 6 | 11 | 5 | 5 | 0 | 8 | 19 | 0 | 1 |
Обозначение | щ | ъ | ы | ь | э | ю | я | ||||||
Количество | 6 | 17 | 0 | 4 | 4 | 2 | 13 |
![MI_c(Y_1^\downarrow,{Y_5^3}^\downarrow)= 0,106045.](/sites/default/files/tex_cache/32da42405e2c57b01082360a7cbb6559.png)
По взаимным индексам совпадения можно судить, что сдвиги между столбцами выбраны верно. Составим уравнения для определения ключевого слова:
![\begin{array}{lll}
g[1]-g[2]=6 & g[1]=g[2] + 6 & g[2]=g[1] - 6 \\
g[1]-g[3]=3 & g[1]=g[3] + 3 & g[3]=g[1] - 3 \\
g[1]-g[4]=16 & g[1]=g[4] + 16 & g[4]=g[1] - 16\\
g[1]-g[5]=3 & g[1]=g[5] + 3 & g[5]=g[1] - 3
\end{array}](/sites/default/files/tex_cache/3ad8f68fec2569888957bda385d11019.png)
Теперь только необходимо вычислить значение g[1]:
![\begin{array}{lll}
g[l]=1: быюсю & g[l]=2: вьятя & g[l]=3: гэауа\\
g[l]=4: дюбфб & g[l]=5: еявхв & g[l]=6: ёагцг\\
g[l]=7: жбдчд & g[l]=8: звеше & g[l]=9: игёщё\\
g[l]=10: йджъж & g[l]=ll: кезыз & g[l]=12: лёиьи\\
g[1]=13: мжйэй & g[l]=14: нзкюк & g[l]=15: оилял\\
g[l]=16: пймам & g[l]=17: pкнбн & g[l]=18: "\textbf{слово}"\\
g[l]=19: тмпгп & g[l]=20: унрдр & g[l]=21: фосес \\
g[l]=22: xптёт & g[l]=23: цружу & g[l]=24: чсфзф \\
g[l]=25: штхих & g[l]=26: щуцйц & g[l]=27: ъфчкч \\
g[l]=28: ыхшлш & g[l]=29: ьцщмщ & g[l]=30: эчънъ \\
g[l]=31: юшыоы & g[l]=32: ящьпь &
\end{array}](/sites/default/files/tex_cache/1f697feb1f8eaf25fb5c289f9bc1bf26.png)
Найдено одно ключевое слово "СЛОВО".
Расшифруем зашифрованный текст:
развебытьздоровымтожесамоечтонебытьбольнымопределенноздоровьеэт онечтобольшеедлянасфизическоездоровьеэтоисостояниеиспособностьиэнерг иязаниматьсятемчтонамнеобходимополучатьприэтомудовольствиеивыздора вливатьбезвсякойпомощиздоровьепарадоксальновынеможетенепосредствен нозаставитьсебястатьздоровымвамостаетсятольконаблюдатьзатемкакудиви тельнаяспособностьвашегоорганизмаисцелятьсебяначинаетдействоватьсама собойивашебогатствоилибедностьжестокостьилидобродетельностьнеимеютз десьповидимомуникакогозначенияздоровьеэтонечтопозитивноеононеознача етотказотудовольствияздоровьеявляетсяестественнымследствиемнашегообр азажизнивзаимоотношенийдиетыокружающейобстановкиздоровьеэтонепред метсобственностиэтопроцессэтоточтомыделаемрезультатнашихмыслейичувс твэтообразсуществованияинтересночтонаправлениемедицинскихисследован ийвсебольшеибольшеотклоняетсявсторонутойобластикотораядосихпорсчита ласьсферойдеятельностипсихологовисейчасужетруднопровестичеткиеразгр аничениямеждуфизическимииментальнымифакторамизаболеваний
Ключевое слово верное, текст читается.
Замечание. Криптоанализ шифра Виженера является трудоемкой задачей для решения без использования программ. Лабораторный практикум, подготовленный авторами, содержит задачи, аналогичные представленной, для успешного решения этих задач предлагается программный инструментарий. Использование этого инструментария позволяет решать такие задачи за сравнительно короткое время.