Tabula recta (Tabula recta)

Перейти к навигации Перейти к поиску
Tabula recta, используемая в шифрах Тритемия и Виженера

Tabula recta (лат. tabula rēcta) — в критпографии квадратная таблица алфавитов, каждая строка которой составляется путем сдвига предыдущей строки влево. Термин был изобретен немецким писателем и монахом Иоганном Тритемием в 1508 году и использован в его шифре Тритемия.

Шифр Тритемия[править | править код]

Шифр Тритемия был опубликован Иоганном Тритемием в его книге «Полиграфия», которая считается первой печатной работой по криптологии.

Тритемий использовал tabula recta для определения полиалфавитного шифра, который был эквивалентен шифр-диску Леона Баттиста Альберти, за исключением того, что порядок букв в целевом алфавите не смешивался. На tabula recta часто ссылаются при обсуждении докомпьютерных шифров, включая шифр Виженера и менее известный шифр Блеза де Виженера с автоключом. Все полиалфавитные шифры, основанные на шифре Цезаря, могут быть описаны в терминах tabula recta.

В tabula recta используется буквенный квадрат с 26 буквами алфавита, за которым следуют 26 рядов дополнительных букв, каждый из которых сдвинут на один раз влево по отношению к предыдущему. Это, по сути, создает 26 различных шифров Цезаря.

Полученный шифротекст выглядит как случайная строка или блок данных. Из-за переменного сдвига естественные частоты букв скрыты. Однако если взломщик знает, что этот метод был использован, его легко взломать. Шифр уязвим для атак, поскольку в нем отсутствует ключ, что нарушает принцип криптологии Керкхоффса.

Улучшения[править | править код]

В 1553 году Джован Баттиста Беллазо разработал важное расширение метода Тритемия, которое сейчас называется шифром Виженера. Беллазо добавил ключ, который используется для диктовки переключения алфавитов шифра с каждой буквой. Этот метод был ошибочно приписан Блезу де Виженеру, который опубликовал аналогичный шифр с автоключом в 1586 году.

Классический шифр Тритемия (использующий сдвиг на единицу) эквивалентен шифру Виженера с «ABCDEFGHIJKLMNOPQRSTUVWXYZ» в качестве ключа. Он также эквивалентен шифру Цезаря, в котором сдвиг увеличивается на 1 с каждой буквой, начиная с 0.

Использование[править | править код]

В теле tabula recta каждый алфавит сдвинут на одну букву влево по отношению к тому, который находится над ним. Это образует 26 рядов сдвинутых алфавитов, заканчивающихся алфавитом, начинающимся на Z. Отдельно от этих 26 алфавитов располагаются заголовочная строка сверху и заголовочная колонка слева, каждая из которых содержит буквы алфавита в порядке A-Z.

Для шифрования и дешифрования текста tabula recta может использоваться несколькими эквивалентными способами. Чаще всего левая колонка заголовка используется для букв открытого текста, как при шифровании, так и при дешифровании. Это использование будет описано ниже. Для того чтобы расшифровать шифр Тритемия, необходимо сначала найти на tabula recta буквы, которые нужно расшифровать: первую букву в первом внутреннем столбце, вторую букву во втором столбце и т. д.; буква, находящаяся непосредственно слева, в колонке заголовка, является соответствующей расшифрованной буквой открытого текста. Предполагая стандартный сдвиг на 1 без использования ключа, зашифрованный текст HFNOS будет расшифрован как HELLO (H->H, F->E, N->L, O->L, S->O). Так, например, чтобы расшифровать вторую букву этого текста, сначала найдите F во втором внутреннем столбце, затем двигайтесь прямо влево, до самого левого столбца заголовка, чтобы найти соответствующую букву открытого текста: E.

Данные шифруются противоположным образом, сначала находя каждую букву открытого текста сообщения в самой левой колонке заголовка tabula recta и сопоставляя ее с соответствующей буквой во внутренних колонках. Например, первая буква сообщения находится в левой колонке заголовка, а затем сопоставляется с буквой, расположенной прямо напротив, в колонке с буквой «А». Затем следующая буква сопоставляется с соответствующей буквой в столбце с буквой «B», и так продолжается до тех пор, пока не будет зашифровано все сообщение. Если шифр Тритемия представить как ключ ABCDEFGHIJKLMNOPQRSTUVWXYZ, то процесс шифрования можно представить как нахождение для каждой буквы пересечения строки, содержащей шифруемую букву, со столбцом, соответствующим текущей букве ключа. Буква, в которой пересекаются эти строка и столбец, является буквой шифрованного текста.

Программно шифр можно вычислить, задав A = 0, B = 1... {\displaystyle A=0,B=1...} {\displaystyle A=0,B=1...}, тогда процесс шифрования будет таким: c i p h e r t e x t = ( p l a i n t e x t + k e y ) ( mod 26 ) {\displaystyle ciphertext=(plaintext+key)\!\!\!\!\!{\pmod {26}}}} {\displaystyle ciphertext=(plaintext+key)\!\!\!\!\!\!{\pmod {26}}}. Расшифровка происходит аналогичным образом, обмениваясь шифротекстом и открытым текстом. Ключ может быть определен как значение буквы из шифротекста-компаньона в шифре с бегущим ключом, константа для шифра Цезаря или нулевой счетчик с некоторым периодом в использовании Тритемия.

Примечания[править | править код]