Выбрать главу

Между тем государства, которые получили предупреждение о слабости одноалфавитного шифра замены, стремились создать более стойкий шифр, который смог бы защитить их сообщения от раскрытия криптоаналитиками неприятеля. Одним из простейших приемов повышения стойкости одноалфавитного шифра замены является использование «пустых» знаков — символов или букв, которые не заменяли реальные буквы, а являлись просто пустыми, ничего не обозначающими символами. Например, можно заменить каждую букву открытого текста числами от 1 до 99, из которых 73 ничего не означают и могут случайным образом появляться с разной частотой в зашифрованном тексте. «Пустые» знаки не представляют никакой сложности для получателя, кому предназначено данное сообщение, кто знает, что эти символы не следует принимать во внимание. Однако наличие таких знаков будет сбивать с толку противника, перехватившего сообщение, потому что они усложняют атаку с применением частотного анализа. Ради повышения стойкости криптографы иногда сознательно перед зашифровыванием сообщения писали слова неправильно. Thys haz thi ifekkt off diztaughting thi ballans off fnkwenseas — усложняет криптоаналитику возможность применения частотного анализа. Однако получатель данного сообщения, если он знает ключ, сможет расшифровать его, после чего в его распоряжении окажется неверно написанный, но все же вполне понятный текст.

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

Однако замену можно осуществлять на гораздо более высоком уровне, когда каждое слово представляется другим словом или символом — это и будет код. Например:

Исходное сообщение = убить короля сегодня вечером. Закодированное сообщение = D-Ω-28

Формально код определяется как замена, выполняемая на уровне слов или фраз, в то время как шифр определяется как замена на уровне букв. Поэтому термин зашифровать означает «сделать сообщение секретным с помощью шифра», в то время как закодировать означает «сделать сообщение секретным с помощью кода». Аналогично термин расшифровать/дешифровать применяется для рассекречивания зашифрованного сообщения, а раскодировать/декодировать — для рассекречивания закодированного сообщения. Термины зашифровать и расшифровать/дешифровать более общие и охватывают засекречивание и рассекречивание, выполняемое как с помощью кодов, так и с помощью шифров. На рисунке 7 показана краткая сводка этих определений. В целом я буду придерживаться этих определений, но когда смысл ясен, я могу воспользоваться, например, таким термином, как «криптографический анализ», чтобы описать процесс, который на самом деле является «взломом шифра» — последний термин может быть формально более точным, но первый является более употребимым.

На первый взгляд представляется, что коды обеспечивают более высокую степень стойкости, чем шифры, так как слова гораздо менее уязвимы для частотного анализа, чем буквы. Чтобы дешифровать одноалфавитный шифр, вам потребуется установить точные значения каждой из всего лишь 26 букв, а чтобы взломать код, вам потребуется определить точные значения сотен и даже тысяч кодовых слов. Однако если мы более внимательно рассмотрим коды, мы увидим, что они, по сравнению с шифрами, обладают двумя существенными с практической точки зрения недостатками. Во-первых, после того как отправитель и получатель согласуют 26 букв в шифралфавите (ключ), они смогут зашифровать любое сообщение, но чтобы добиться той же гибкости при применении кода, им придется проделать кропотливую работу по заданию кодового слова для каждого из тысяч возможных слов незашифрованного текста. Кодовая книга будет состоять из сотен страниц и напоминать словарь. Другими словами, составление кодовой книги — это изрядная задача, держать же ее при себе представляет значительное неудобство.