Как прятать шифротекст в шифротексте

Алиса и Боб в течение прошедшего года обменивались сообщениями. Ева записала все эти сообщения, но не смогла ни одно из них расшифровать. Наконец, тайная полиция устала от всех этих непрочитанных шифротекстов, арестовала парочку и потребовала "Дайте нам ваши ключи шифрования". Алиса и Боб отказываются, но затем замечают клещи для вырывания ногтей. Что они могут сделать?

Неплохо бы уметь шифровать файл так, чтобы его можно было расшифровать двумя способами, для каждого из которых использовался бы свой ключ. Алиса может шифровать действительное сообщение одним ключом, а некое безобидное сообщение - другим ключом. Если Алису поймают, она сможет выдать ключ от безобидного сообщения, сохранив в секрете настоящий ключ.

Проще всего это сделать с помощью одноразовых блокнотов. Пусть P - открытый текст, D - открытый текст сообщения-заглушки, C - шифротекст, K - настоящий ключ, и K' - ключ заглушки. Алиса шифрует P:

P A K = C

Ключ K - общий для Алисы и Боба, поэтому Боб может расшифровать C:

C A K = P

Если тайная полиция заставит их выдать свой ключ, они выдадут не K, а:

K'= C A D

Полиция восстановит открытый текст заглушки:

C A K' = D

Так как используются одноразовые блокноты, и K - совершенно случаен, то невозможно доказать, что K' не является настоящим ключом. Чтобы сделать все поубедительнее, Алиса и Боб должны состряпать какие-нибудь слегка подозрительные правдоподобные сообщения вместо настоящих. Что-то подобное один раз сделала пара израильских шпионов.

Алиса может взять P и зашифровать его своим любимым алгоритмом с ключом K, получая C. Затем она берет C и выполняет для него XOR с частью какого-нибудь мирного текста, например, Гордость и предрассудки, чтобы получить K'. Она сохраняет на жестком диске и C, и результат XOR. Теперь, когда ее будет допрашивать тайная полиция, она сможет объяснить, что она - криптограф-любитель, а K' - просто одноразовый блокнот для C. Тайная полиция, конечно, может что-то подозревать, но пока они не узнают K, они не смогут доказать, что объяснение Алисы - ложь.

Другой способ состоит в шифровании P симметричным алгоритмом и ключом K, а D - ключом K'. Перемешайте биты (или байты) шифротекста, получая окончательный шифротекст. Если тайная полиция потребует ключ, Алиса выдаст им K' и скажет, что чередующиеся биты (или байты) - это случайный шум для усложнения криптоанализа. Беда этого объяснения в том, что оно настолько невероятно, что в тайной полиции ему могут и не поверить (особенно, если там читали эту книгу).

Лучшим способом для Алисы будет создание такого сообщения-заглушки, D, что объединение P и D в сжатом виде имеет тот же размер, что и D. Назовем это объединение Р'. Затем Алиса шифрует Р' любым алгоритмом, о котором она договорилась с Бобом, получая C. Теперь она посылает C Бобу. Боб расшифровывает C, чтобы получить P', и затем P и D. Затем они оба вычисляют C A D = K'. Полученный K' становится заглушкой-одноразовым блокнотом, который они отдадут тайной полиции, если та ворвется в их дома. Алиса должна передать Бобу D, чтобы доказательства Боба и ее совпадали.

В качестве еще одного способа Алиса может взять безобидное сообщение и обработать его каким-либо кодом, исправляющим ошибки. Затем она может ввести ошибки, которые соответствуют секретному шифрованному сообщению. Принимая сообщение, Боб может извлечь ошибки, чтобы восстановить секретное сообщение и расшифровать его. Он также может использовать исправляющий ошибки код, чтобы восстановить безобидное сообщение. Алисе и Бобу, возможно, будет трудно объяснить тайной полиции, почему в практически идеальной сети у них постоянно 30 процентов ошибок, но в определенных условиях эта схема может работать.

Наконец, Алиса и Боб могут использовать подсознательный канал в своих алгоритмах цифровой подписи (см. разделы 4.2 и 23.3). Такой способ невозможно обнаружить, он замечательно работает, но, к сожалению, в подписанном безобидном сообщении можно передавать только около 20 символов подсознательного текста. В действительности этот способ годится только для передачи ключей.