Введение
Метод, используемый для шифрования сообщения
В криптологии код — это метод, используемый для шифрования сообщения, который оперирует на уровне смысла; то есть слова или фразы преобразуются в нечто иное. Код может преобразовать "change" в "CVGDK" или "cocktail lounge". Агентство национальной безопасности США определило код как "заместительную криптосистему, в которой элементами открытого текста являются преимущественно слова, фразы или предложения, а кодовые эквиваленты (называемые «кодовыми группами») обычно состоят из букв или цифр (или и того, и другого) в бессмысленных комбинациях одинаковой длины". Для шифрования и расшифрования фраз или слов необходима кодовая книга. В отличие от этого, шифры шифруют сообщения на уровне отдельных букв или небольших групп букв, или даже, в современных шифрах, отдельных битов. Сообщения могут быть сначала преобразованы кодом, а затем шифром. Такое многократное шифрование, или «супершифрование», направлено на усложнение криптоанализа. Другое различие между кодами и шифрами заключается в том, что код обычно представляет букву или группы букв напрямую, без использования математики. Таким образом, числа конфигурируются для представления этих трех значений: 1001 = A, 1002 = B, 1003 = C. Полученное сообщение для передачи ABC будет 1001 1002 1003. Шифры же используют математическую формулу для представления букв или групп букв. Например, A = 1, B = 2, C = 3, таким образом, сообщение ABC получается путем умножения значения каждой буквы на 13. Сообщение ABC тогда будет 13 26 39. Коды имеют ряд недостатков, включая уязвимость к криптоанализу и сложность управления громоздкими кодовыми книгами, поэтому шифры являются доминирующей техникой в современной криптографии. В отличие от этого, поскольку коды являются репрезентативными, они не подвержены математическому анализу отдельных элементов кодовой книги. В примере сообщение 13 26 39 можно взломать, разделив каждое число на 13 и затем упорядочив их в алфавитном порядке. Однако в центре внимания криптоанализа кодовых книг находится сравнительная частота отдельных кодовых элементов, соответствующая той же частоте букв в сообщениях открытого текста с использованием частотного анализа. В приведенном выше примере кодовая группа 1001, 1002, 1003 может встречаться более одного раза, и эта частота может соответствовать количеству раз, которое ABC встречается в сообщениях открытого текста. (В прошлом или в нетехнических контекстах термины «код» и «шифр» часто используются для обозначения любой формы шифрования).
Коды из одной и двух частей
Коды определяются "кодовыми книгами" (физическими или условными), которые представляют собой словари групп кодов, перечисленных с соответствующим открытым текстом. Изначально коды имели назначение кодовых групп в порядке следования открытого текста для удобства разработки кода или кодировщика. Например, в коде, использующем числовые группы кодов, слово открытого текста, начинающееся с "a", получило бы группу с низким значением, а слово, начинающееся с "z", – группу с высоким значением. Ту же кодовую книгу можно было использовать для "кодирования" открытого текста в зашифрованное сообщение или "кодтекст", а также для "декодирования" кодтекста обратно в открытый текст. Чтобы усложнить работу дешифровщикам, создатели кодов разрабатывали коды, в которых не было предсказуемой связи между группами кодов и порядком соответствующего открытого текста. На практике это означало, что теперь требовалось два кодовых сборника: один для поиска групп кодов при кодировании, а другой – для поиска групп кодов для определения открытого текста при декодировании. Такие "двухкомпонентные" коды требовали больше усилий для разработки и вдвое больше усилий для распространения (и безопасного уничтожения при замене), но их было сложнее взломать. В телеграмме Циммермана в январе 1917 года использовалась немецкая дипломатическая двухкомпонентная кодовая система "0075", содержащая более 10 000 фраз и отдельных слов.
Код идиот
Код идиота — это код, создаваемый самими его пользователями. Этот вид связи схож с условными сигналами, используемыми армиями в полевых условиях. Например, любое предложение, содержащее слова «день» и «ночь», означает «атака». Место, упомянутое в следующем предложении, указывает на цель атаки. Открытый текст: Атаковать X.
Зашифрованный текст: Мы ходили днем и ночью по улицам, но ничего не нашли! Завтра мы отправимся в X. Одно из первых упоминаний этого термина встречается у Джорджа Перро, персонажа научно-фантастического романа Роберта А. Хайнлайна «Пятница»:
Codetext: We walked day and night through the streets but couldn't find it! Tomorrow we'll head into X. An early use of the term appears to be by George Perrault, a character in the science fiction book Friday by Robert A. Heinlein:
«Самый простой вид [кода] и, следовательно, не поддающийся взлому. Первое объявление предписывало заинтересованным лицам выполнить задачу номер семь или ожидать задачи номер семь, или говорило что-то о чем-то, обозначенном как семь. Это объявление говорит то же самое, но уже в отношении кода номер десять. Однако значение чисел невозможно вывести с помощью статистического анализа, поскольку код может быть изменен задолго до того, как будет собрана достаточная статистическая выборка. Это код идиота, и код идиота невозможно взломать, если пользователь достаточно разумен, чтобы не обращаться к нему слишком часто. Эксперт по терроризму Магнус Рансторп заявил, что участники терактов 11 сентября в Соединенных Штатах использовали обычную электронную почту и то, что он называет «идиотическим кодом», для обсуждения своих планов.
Супершифрование
Было обычной практикой шифровать сообщение после предварительного кодирования, чтобы усложнить криптоанализ. При использовании числового кода это обычно делалось с помощью "аддитива" – просто длинного ключевого числа, которое цифра за цифрой прибавлялось к группам кода по модулю 10. В отличие от шифровальных книг, аддитивы менялись довольно часто. Знаменитый военно-морской шифр японского флота JN-25 был построен по такому принципу.