В криптологии код - это метод, используемый для шифрования сообщения ., действующий на уровне смысла; то есть слова или фразы преобразуются во что-то другое. Код может преобразовать «изменение» в «CVGDK» или «коктейль-бар». Агентство национальной безопасности США определило код как «криптосистему замещения, в которой элементы открытого текста в основном являются словами, фразами или предложениями, а эквиваленты кода (называемые« группами кода ») обычно состоят из букв или цифр. (или оба) в бессмысленных комбинациях одинаковой длины ". кодовая книга необходима для шифрования и дешифрования фраз или слов.
Напротив, шифры шифруют сообщения на уровне отдельных букв или небольших групп букв, или даже, в современных шифрах, отдельных битов. Сообщения могут быть преобразованы сначала кодом, а затем шифром. Такое множественное шифрование, или «супершифрование», направлено на усложнение криптоанализа.
Другое сравнение между кодами и шифрами заключается в том, что код обычно представляет собой букву или группы букв напрямую, без использования математики. Таким образом, числа настроены для представления этих трех значений: 1001 = A, 1002 = B, 1003 = C,.... В результате получится сообщение 1001 1002 1003 для передачи ABC. Шифры, однако, используют математические формулы для представления букв или групп букв. Например, 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 фраз и отдельных слов.
Одноразовый код - это заранее составленное слово, фраза или символ, который предназначен для использования только один раз для передачи простого сообщения, часто сигнала для выполнения или отмены какого-либо плана или подтверждения того, что он был успешным или неудачным. Одноразовые коды часто предназначены для включения в то, что может показаться невинным разговором. При правильном исполнении их почти невозможно обнаружить, хотя обученный аналитик, отслеживающий общение кого-то, кто уже вызвал подозрение, мог бы распознать такой комментарий, как «у тети Берты начались схватки», как имеющий зловещий смысл. Известные примеры одноразовых кодов включают:
Иногда сообщения не подготовлены заранее и полагаются на общие знания, которые, как мы надеемся, известны только получателям. Примером может служить телеграмма, направленная президенту США Гарри Трумэну, затем на Потсдамской конференции для встречи с советским премьер-министром Иосифом Сталиным, в котором Трумэну сообщили о первое успешное испытание атомной бомбы.
См. Также одноразовый блокнот, не связанный алгоритм шифрования
Код идиота - это код, созданный сторонами, которые его используют. Этот тип связи сродни ручным сигналам, используемым армиями в полевых условиях.
Пример: любое предложение, в котором используются слова «день» и «ночь», означает «нападение». Место, указанное в следующем предложении, указывает место, которое будет атаковано.
Раннее использование этого термина, по-видимому, принадлежит Джорджу Перро, персонажу научно-фантастической книги Пятница Роберт А. Хайнлайн :
Эксперт по терроризму Магнус Рансторп сказал, что люди, проводившие сентябрь 11, 2001, при атаках на США для обсуждения своих планов использовалась обычная электронная почта и то, что он называет «идиотским кодом».
При решении Моноалфавитный шифр подстановки прост, решить даже простой код сложно. Расшифровка закодированного сообщения немного похожа на попытку перевода документа, написанного на иностранном языке, при этом задача сводится к созданию «словаря» кодовых групп и слов открытого текста, которые они представляют.
Удерживать простой код можно потому, что некоторые слова встречаются чаще, чем другие, например «the» или «a» в английском языке. В телеграфных сообщениях кодовая группа для "STOP" (т.е. конец предложения или абзаца) обычно очень распространена. Это помогает определить структуру сообщения в терминах предложений, если не их значения, и это полезно для криптоанализа.
Дальнейший прогресс может быть достигнут в отношении кода, если собрать множество кодовых текстов, зашифрованных одним и тем же кодом, а затем использовать информацию из других источников
Например, определенная кодовая группа обнаруживается почти исключительно в сообщениях от конкретная армия и нигде больше может указывать на командующего этой армией. Кодовая группа, которая появляется в сообщениях, предшествующих атаке на определенное место, вполне может обозначать это место.
Шпаргалки могут быть незамедлительной раздачей для определения кодовых групп. По мере определения кодовых групп они могут постепенно наращивать критическую массу, при этом все больше и больше кодовых групп раскрываются из c контекст и обоснованные догадки. Односоставные коды более уязвимы для таких обоснованных предположений, чем двухчастные коды, поскольку, если кодовый номер «26839» односоставного кода определен как «бульдозер», то младший кодовый номер «17598», вероятно, будет обозначать текстовое слово, начинающееся с «a» или «b». По крайней мере, для простых кодов одной детали.
Можно использовать различные уловки, чтобы «вложить » или «засеять» информацию в закодированное сообщение, например, совершив рейд против врага в определенное время и в определенном месте, а затем изучив кодовые сообщения, отправленные после рейда. Ошибки кодирования - это особенно полезный инструмент, который можно использовать в коде; люди достоверно допускают ошибки, иногда катастрофические. Размещение данных и использование ошибок также работает против шифров.
Создание нового кода похоже на создание нового языка и написание для него словаря; это была особенно большая работа до компьютеров. Если код скомпрометирован, вся задача должна быть выполнена заново, а это означает, что как для криптографов, так и для пользователей кода потребуется много работы. На практике, когда коды были широко распространены, они обычно менялись на периодической основе, чтобы помешать взломщикам кодов и ограничить срок службы украденных или скопированных кодовых книг.
После создания кодов распространение кодовой книги затруднительно с точки зрения логистики и увеличивает вероятность взлома кода. Есть поговорка, что «три человека могут хранить секрет, если двое из них мертвы» (Бенджамин Франклин - Wikiquote ), и хотя это может быть чем-то вроде преувеличения, секрет становится труднее сохранить, если он делится между несколькими людьми. Коды можно считать достаточно безопасными, если они используются только несколькими осторожными людьми, но если целые армии используют одну и ту же книгу кодов, безопасность становится намного сложнее.
Напротив, безопасность шифров обычно зависит от защиты ключей шифрования. Ключи шифрования могут быть украдены, и люди могут их предать, но их намного легче изменить и распространить.
Было обычным делом зашифровать сообщение после его первого кодирования, чтобы увеличить сложность криптоанализа. В случае числового кода это обычно делалось с «добавкой» - просто длинным ключевым числом, которое цифра за цифрой добавлялось к группам кодов по модулю 10. В отличие от кодовых книг, добавки менялись часто. Знаменитый код ВМС Японии, JN-25, был такой.