Шрифт:
Интервал:
Закладка:
Но даже если бы удалось выявить какую-то закономерность, то и это ничего не дало бы Карле.
Вообразим, что один из подчиненных Карлы, обреченный на безнадежную расшифровку послания Смайли, внезапно вскакивает с места и бежит в кабинет Карлы, чтобы показать ему результат — 3 3 3 3 3 3 3 3 3, полученный из зашифрованного сообщения. Оказалось, что существует случайная последовательность цифр, при использовании которой донесение 3 3 3 3 3 3 3 3 3 кодируется в перехваченную последовательность. Однако, когда шифровальщик врывается в скудно обставленный и насквозь прокуренный кабинет Карлы, он видит там дюжину своих коллег, которые тоже хотят показать Карле полученные ими результаты. У каждого из шифровальщиков на руках последовательность, которая с равной вероятностью может быть закодированным донесением Смайли. Однако у Карлы нет исходной точки, опираясь на которую он мог бы решить, какой из результатов верен. Можно смело заключать пари, что среди полученных результатов верного-то как раз и нет.
Если известна последовательность цифр, в которой они располагаются случайным образом, то это знание позволяет закодировать донесение по методу одноразового блокнота шифром, который абсолютно невозможно «расколоть». Во всяком случае, если донесение было одно. Если же надо зашифровать несколько донесений, то для каждого из них надо составлять новую последовательность цифр, в которой они появляются друг за другом в абсолютно случайном порядке.
Но как получают такие последовательности цифр? Можно подумать, что нет ничего проще: садишься за клавиатуру компьютера и хаотично нажимаешь цифровые клавиши. Но такая методика ненадежна, и полагаться на нее нельзя. Нельзя, даже если на клавиши будут нажимать индейцы племени хопи, которые представляют совершенно чуждую нам культуру, не знают наших цифр и будут совершенно наугад нажимать на клавиши с непонятными символами. Эта методика будет ненадежна и в том случае, если стереть с клавиш символы цифр, убрать экран монитора и человек действительно вслепую будет ударять по клавишам. Не будет такой метод надежным, даже если за клавиатуру посадить не человека, а животное. Собственно, не важно, как конкретно будет исполнено это действо, — если нажимать на клавиши достаточно долго, то в последовательности чисел (или иных символов) неизбежно появится закономерность. Закономерность же — это злейший враг случайности.
На ум сразу приходит мысль — позаимствовать какой-нибудь случайный процесс у природы. Например, можно воспользоваться небольшими колебаниями напряжения, которые неизбежно возникают в электрических цепях. Или, например, распадом радиоактивных веществ, ибо квантовая теория учит, что такой распад непредсказуем и в принципе является случайным процессом.
Таким образом, квантовая механика сулит по меньшей мере теоретическую возможность кодирования, которое невозможно расшифровать. Однако, как говорил Гёте: «Теории — это обыкновенно результаты чрезмерной поспешности нетерпеливого рассудка, который хотел бы избавиться от явлений и подсовывает поэтому на их место образы, понятия, часто даже одни слова»(13). Рожденные в головах блестящие теории сильно отличаются от их воплощения на неподатливом материале.
Математика более надежна, нежели природа.
Если разделить на карманном калькуляторе 22 на 7, то на восьмиразрядном дисплее появится следующий результат:
22 ÷ 7 = 3,1428571.
Если воспользоваться более мощным прибором с 16-разрядным дисплеем, то получится:
22 ÷ 7 = 3,142857142857143.
Это наводит на предположение о том, что цифровая последовательность после числа 3 и запятой, а именно
1 4 2 8 5 7 1 4 2 8 5 7 1 4 2 8 5 7 1 4 2 8 5 7 1 4 2 8 5 7 1 4 2 8 5 7 1 4 2 8 5 7…
представляет собой бесконечную последовательность. Следовательно, математики уже путем простого арифметического действия, деления, могут производить бесконечные цифровые последовательности. Правда, данная последовательность не годится для шифрования по методу одноразового блокнота. В этой последовательности с первого взгляда прослеживается закономерность, уничтожающая всякую случайность.
Вероятно, предположит проницательный читатель, все дело в том, что для деления были взяты слишком малые числа, — и будет прав. Если, например, разделить 355 на 113, то, проявив терпение, можно получить следующее число:
355 ÷ 113 = 3,141 592 920 353 982 300 884 955 752 212 389 380 530 973 451 327 433 628 318 584 070 796 460 176 991 150 442 477 876 106 194 690 265 486 725 663 716 814 159 292 035 398…
Эта последовательность выглядит абсолютно случайной, но только на первый взгляд. Если присмотреться внимательно, то можно заметить, что в последней строке, начиная со 112-го места после запятой, снова появляется последовательность 14 159 292 035 398…, которая уже стоит сразу после запятой. При делении возникновение таких периодичностей неизбежно. Делить придется на огромные, специально приспособленные для десятичной системы числа, для получения периодов длинных настолько, чтобы на практике они не возникали. Однако отыскание подходящих делителей и выполнение самого деления являются очень трудоемкими, если надо получить действительно длинные периоды.
Фактически существует весьма простой математический метод, с помощью которого можно получать лишенные периодичности последовательности цифр после запятой. Например, извлечение квадратного корня. Рассмотрим для примера число 10. Будем искать число, которое при возведении в квадрат дало бы в результате 10, но мы его не найдем. 3² = 3 × 3 = 9, то есть тройка — слишком малое число, а 4² = 4 × 4 = 16, то есть четверка — слишком большое. Перспективными представляются два десятичных числа с одним знаком после запятой — 3,1 и 3,2, ибо 3,1² = 3,1 × 3,1 = 9,61, а 3,2² = 3,2 × 3,2 = 10,24. Но в первом случае мы снова получаем небольшой недостаток, а во втором — небольшой избыток. Попробуем поступить по-другому. Можно представить, что калькулятор выдаст значение такого числа, если мы зададим действие: извлечь квадратный корень из числа 10. Восьмиразрядный калькулятор выдаст на дисплее следующий результат: 3,1622777. Но, оказывается, и это не окончательный результат. Если взять для вычислений мощный компьютер, то в результате извлечения квадратного корня из числа 10 мы получим следующее:
3,162 277 660 168 379 331 998 893 544 432 718 533 719 555 139
325 216 826 857 504 852 792 594 438 639 238 221 344 248 108 379 300 295 187 347 284 152 840 055 148 548 856…
Эта последовательность цифр после запятой производит впечатление полнейшего хаоса.
Годится ли эта последовательность для использования в кодировании по методу одноразового блокнота? Едва ли можно советовать этот метод для шифрования, ибо дешифровщики тоже знают, как извлекать квадратные корни. Они ставят себя на место людей, зашифровавших перехваченное донесение, и задают себе вопрос: к какому методу прибегнул противник для получения случайной цифровой последовательности? В простейшем случае это извлечение квадратного корня из числа, не являющегося точным квадратом. Дешифровщики испытают несколько чисел и очень скоро расколют шифровку.