Шифр Гронсфельда

Общая идея

В классической криптографии довольно популярным фокусом является так называемая последовательность сдвигов. Если в ней n элементов (n > 1), то каждый k-ый символ открытого текста сдвигается на то же число позиций в алфавите, что и (k+n)-ый. Шифр Гронсфельда тоже использует этот манёвр. Например, есть последовательность {1, 3} (то есть n = 2), тогда первый, третий, пятый и прочие нечётные символы заменятся на следующие по алфавиту. Второй, четвёртый и так далее - на те, которые стоят на 3 позиции позже по алфавиту. Нумерация символов в алфавите ведётся с нуля, формула сдвига на q позиций: c = (s + q) mod N, где s - номер символа открытого текста в алфавите, c - номер в алфавите символа шифрованного текста, N - количество символов в алфавите.

Возьмём ту же {1, 3} для примера: русский алфавит (включая Ё) + пробел, текст: ЭТО МЯЧ. Вместо Э в шифртексте будет Ю, вместо Т - Х (порядок: ТУФХ, сдвиг на 3 позиции), вместо О - П, поскольку П - следующая после О. Пробел у нас 33-ий (34 символа, нумерация с нуля). Тогда сдвиг на 3 позиции делается так: (33 + 3) mod 34 = 36 mod 34 = 2. Поскольку нумеруем с нуля, будет В. Ну дальше, наверное, и так всем понятно... Итог: ЮХПВНБШ. То есть опять какое-то месиво...

Заметьте: если поменять порядок символов в алфавите, результат может поменяться. И ещё один важный момент: если каждое число в последовательности может принимать значения от 0 до K-1, где K > 2, то количество возможных последовательностей длины n составляет НЕ K^n (^ - значок степени). Как минимум бессмысленна всякая последовательность типа {1, 1, 1} или {4, 4}, хоть какие-то элементы последовательности должны отличаться.

Разные шифры, которые используют эту гадость, отличаются тем, как эти наборы сдвигов связаны с ключом и какой вид имеют ключи. Так, в шифре Виженера ключ - набор букв, числа получаем как номера букв из ключа. Например, русский алфавит, ключ АВ, тогда набор чисел: {0, 2}. В нашем шифре ключ - сразу последовательность цифр (но не чисел!). Какая цифра - на столько и сдвигаем. В примере с тестом про мяч ключом шифра Гронсфельда был бы 13, Виженера - БГ. То есть ключи шифра Гронсфельда - числовые, шифра Вижерена - буквенные, причём обычно всё-таки в виде нормальных человеческих слов.