Несмотря на то что алгоритмы неоднозначны и такая расплывчатость обычно порождает у программиста чувство неуверенности, эту программу легко проверить. Первой частью работы, по-видимому, должна быть программа шифровки, которая воспринимает в качестве исходных данных русский текст и, выбрав некоторым случайным образом смешанный алфавит и ключевое слово, выдает квадрат Виженера и печатает зашифрованный текст в стандартном пятибуквенном формате. Пробелы и пунктуация должны убираться из текста автоматически. Эта программа должна уметь также воспринимать в качестве возможных параметров квадрат Виженера и ключевое слово, чтобы можно было повторно проверять отдельные особенности работы программы расшифровки. Помните о том, что для хорошего статистического поведения алгоритмов необходимо, чтобы сообщение было в 30–40 раз длиннее ключевого слова.
*
Пусть число букв алфавита равно n. Будем обозначать i-ю букву алфавита xi или yi в зависимости от того, идет речь об исходном тексте или о зашифрованном. Нам известны средняя частота pi = = p(xi) появления i-й буквы в русском языке, число fk, i появлений i-й буквы в k-й группе зашифрованного текста, общее число Nk букв в k-й группе. Определим вероятности pk(yj|xi) появления фактического числа букв fk, j, если буква yj в k-й группе обозначает букву xi исходного текста. Эти вероятности подчиняются биномиальному распределению.
Далее найдем по формуле Байеса вероятности pk(xi|yj) того, что буква уj в k-й группе означает букву xi исходного текста. Априорные вероятности гипотез примем равными 1/n.
Рассмотрим теперь пару групп (столбцов табл. 24.1) k и l. Будем говорить, что между ними имеется сдвиг r, если каждой букве yj зашифрованного текста в 1-й группе соответствует буква исходного текста на r большая (по модулю n), чем в k-й группе. Это означает, что в ключевом слове 1-я буква на r меньше k-й. Для оценки вероятностей pk, l, r того, что между k-й и l-й группами имеется сдвиг r, вычислим величины
Символы ⊕, ⊖ означают сложение и вычитание по модулю n. Величина рк, i г есть вероятность фактического распределения числа появлений букв при условии, что имеет место сдвиг r. Здесь не учитывается, что разные yj соответствуют разным Значения pk, l, r получаются по формуле Байеса
Фактический сдвиг r(k, l) между k-й и l-й группами должен иметь довольно большую вероятность pk, l, r. Но насколько большую? В следующей таблице приведены данные о расшифровке оригинала примера.