В криптографии tabula recta (от лат. tabula rēcta ) — квадратная таблица алфавитов, каждая строка которой получается путём сдвига предыдущей влево. Термин был придуман немецким автором и монахом Иоганном Тритемием [1] в 1508 году и использовался в его шифре Тритемия .
Шифр Тритемия был опубликован Иоганном Тритемием в его книге «Полиграфия» , которая считается первым опубликованным печатным трудом по криптологии . [2]
Тритемий использовал tabula recta для определения полиалфавитного шифра , который был эквивалентен шифровальному диску Леона Баттисты Альберти, за исключением того, что порядок букв в целевом алфавите не был смешанным. Tabula recta часто упоминается при обсуждении докомпьютерных шифров, включая шифр Виженера и менее известный автоключевой шифр Блеза де Виженера . Все полиалфавитные шифры, основанные на шифре Цезаря, можно описать в терминах tabula recta .
Tabula recta использует квадрат с буквами 26 букв алфавита, за которыми следуют 26 рядов дополнительных букв, каждый из которых смещен на один шаг влево от предыдущего. Это, по сути, создает 26 различных шифров Цезаря . [1]
Полученный шифртекст выглядит как случайная строка или блок данных. Из-за переменного сдвига естественные частоты букв скрыты. Однако, если дешифровщик знает, что этот метод был использован, его становится легко взломать. Шифр уязвим для атаки, поскольку у него отсутствует ключ , тем самым нарушая принцип криптологии Керкхоффса . [1]
В 1553 году Джованни Баттиста Беллазо разработал важное расширение метода Тритемия , которое теперь называется шифром Виженера . [3] Беллазо добавил ключ, который используется для указания переключения алфавитов шифра с каждой буквой. Этот метод был ошибочно приписан Блезу де Виженеру , который опубликовал похожий шифр с автоключом в 1586 году.
Классический шифр Тритемия (использующий сдвиг на единицу) эквивалентен шифру Виженера с ключом ABCDEFGHIJKLMNOPQRSTUVWXYZ. Он также эквивалентен шифру Цезаря, в котором сдвиг увеличивается на 1 с каждой буквой, начиная с 0.
В теле tabula recta каждый алфавит смещен на одну букву влево от того, что находится над ним. Это образует 26 рядов смещенных алфавитов, заканчивающихся алфавитом, начинающимся с Z (как показано на изображении). Отдельно от этих 26 алфавитов находятся строка заголовка вверху и столбец заголовка слева, каждый из которых содержит буквы алфавита в порядке AZ.
Tabula recta может использоваться несколькими эквивалентными способами для шифрования и расшифровки текста. Чаще всего левый столбец заголовка используется для букв открытого текста, как с шифрованием, так и с расшифровкой. Это использование будет описано здесь. Чтобы расшифровать шифр Тритемия, сначала найдите в tabula recta буквы для расшифровки: первую букву в первом внутреннем столбце, вторую букву во втором столбце и т. д.; буква, расположенная непосредственно слева, в столбце заголовка, является соответствующей расшифрованной буквой открытого текста. Предполагая стандартный сдвиг на 1 без использования ключа, зашифрованный текст HFNOS будет расшифрован в HELLO (H->H, F->E, N->L, O->L, S->O ). Так, например, чтобы расшифровать вторую букву этого текста, сначала найдите F во втором внутреннем столбце, затем двигайтесь прямо влево, до самого левого столбца заголовка, чтобы найти соответствующую букву открытого текста: E.
Данные шифруются противоположным образом, сначала находя каждую букву открытого текста сообщения в самом левом столбце заголовка tabula recta и сопоставляя ее с соответствующей буквой во внутренних столбцах. Например, первая буква сообщения находится в левом столбце заголовка, а затем сопоставляется с буквой, расположенной прямо напротив в столбце, озаглавленном «A». Затем следующая буква сопоставляется с соответствующей буквой в столбце, озаглавленном «B», и это продолжается до тех пор, пока все сообщение не будет зашифровано. [4] Если рассматривать шифр Тритемия как имеющий ключ ABCDEFGHIJKLMNOPQRSTUVWXYZ, процесс шифрования также можно концептуализировать как нахождение для каждой буквы пересечения строки, содержащей букву, которая должна быть зашифрована, со столбцом, соответствующим текущей букве ключа. Буква, где пересекаются эта строка и столбец, является буквой зашифрованного текста.
Программно шифр вычислим, назначая , затем процесс шифрования . Расшифровка следует тому же процессу, меняя шифротекст и открытый текст. ключ может быть определен как значение буквы из сопутствующего шифротекста в работающем ключевом шифре , константа для шифра Цезаря или счетчик с нулевым основанием и некоторой точкой в использовании Тритемия. [5]