Существует множество остроумных систем кодирования, которые насчитывают тысячи лет, но мы заинтересованы в современной безопасности, а она лучше всего понимается на языке математики. В современных криптосистемах секретное послание превращается в строчку чисел, и затем выполняет над ними некоторые математические операции отправитель, в результате получается другая строчка чисел, какую открыто посылают получателю. Если получатель точно знает, что было сделано, он может проделать это в обратном порядке, восстановив первоначальное послание: любой другой получит лишь бессмысленную строчку.
Для того чтобы привести конкретный, но простой пример, представьте, что вы совершаете замену букв на числа по простому правилу: А=01, B=02, и так далее до Z=26. Если мы хотим закодировать слово «BREAKFAST» (завтрак), то получим:
Для математической операции, которая еще больше запутает смысл, мы возьмем строчку случайно повторяющихся единиц и нулей в качестве нашего шифровального ключа, одну на каждую буку послания. Затем мы скомбинируем обе строки, добавив единицу к изначальному числу, если наш ключ имеет 1 в этой позиции, и вычитая единицу, если наш ключ имеет 0.
Человек, получивший шифрованный текст «A S D Z J E B T S», не зная кода, скорее всего подумает, что отправителем был кот, который опять топтался по клавиатуре. Если у получателя, кому и направлялось письмо, есть шифр и он знает нужную последовательность операций, он может проделать дешифровку, обратив процесс шифрования – добавив единицу для нуля в ключе, вычитая единицу для 1 в ключе – и восстановить первоначальное послание[261].
Этот простой шифр иллюстрирует основной принцип, что также был проблемой шифрования: он зависит от условия, при котором и отправитель, и получатель должны знать правильную последовательность действий при расшифровке, то есть должны оба иметь один и тот же ключ – в нашем случае это 010000110. Если получатель не имеет того же ключа, что и отправитель, он не сможет декодировать послание, как и любой посторонний, случайно его перехвативший.
Самый простой способ обойти это – использовать один и тот же ключ все время, и отправитель, и получатель должны оба знать его и помнить один специальный набор цифр. К несчастью, при достаточно большом количестве шифрованного текста математический анализ может определить ключ и восстановить секретное послание, если будет достаточно времени. «Достаточно времени» может быть много – для длинных ключей. Время, требуемое для уверенной расшифровки послания современными методами на существующих компьютерах, может быть больше, чем возраст Вселенной. На это полагаются большинство интернет-посланий: они используют единственный разделяемый обеими сторонами ключ с достаточным количеством знаков, так что весьма маловероятно, что кто-нибудь отгадает его достаточно быстро, чтобы нанести ущерб. Однако этот вид криптографии не защищен от мощности компьютерных вычислений или новых математических техник: человек с хорошей программой дешифрования и плохими намерениями может потенциально расшифровать большой объем материала.
Более надежным методом считается список случайных чисел, который используется как ключ – так называемый «one-time pad» – «шифр Вернама[262]» или OTP. Он использует новый ключ каждый раз для кодировки каждого нового сообщения, но это создает дополнительные логистические проблемы для отправителя и получателя. Каждый из них должен иметь доступ к какому-то большому и используемому обоими списку случайных чисел, и чем больше список чисел, тем труднее хранить их в секрете[263]. Также может быть сложным надежно восполнять список после многих посланий, если отправитель и получатель находятся в таких местах, что не могут легко организовать встречу.
Идеальной системой для такого типа криптографии была бы такая, в которой случайные числе генерировались бы по требованию. Хотя и существуют достаточно случайные процессы, которые и отправитель, и получатель могли бы использовать, чтобы создать полезный ключ, если они делают это в двух разных местах, полученные случайные числа будут обязательно разными и, таким образом, бесполезными для кодировки текста. Необходимость того, чтобы числа и у отправителя, и у получателя были одинаковыми, делает генерирование случайных чисел почти невозможным.
По крайнем мере, это почти невозможно в классической физике. Однако в квантовой механике есть лазейка, позволяющая вам генерировать действительно случайные числа, и при этом они могут быть известны одновременно двум людям в двух разных местах. Это работает благодаря одной из самых сложных философских проблем, возникшей в квантовой физике, той самой, что вытолкнула Эйнштейна с поля, которое он сам возделывал.
Играя в кости со Вселенной
Одной из наиболее часто публикуемых цитат Эйнштейна – это «Бог не играет в кости со Вселенной». Она берет начало из другого высказывания, адресованного Максу Борну в письме 1926 года: «(Квантовая механика) говорит о многом, но не подводит нас ближе к секретам Иакова[264]. Во всяком случае, я убежден, что Он не бросает кости…»
Главная проблема здесь связана с вероятностной природой квантовой механики, впервые сформулированной Борном: квантовые волновые функции говорят нам лишь о вероятности получения конкретных результатов измерений. Если мы много-много раз повторим эксперимент и обработаем все результаты, волновая функция будет прекрасным описанием всего диапазона результатов. Однако знание волновой функции не позволяет нам предсказывать точный результат какого-либо конкретного эксперимента; насколько мы знаем, результат отдельного эксперимента над квантовой частицей абсолютно случаен.
Этот вероятностный, случайный характер создает серьезную философскую проблему. Вероятность сама по себе не считается проблемой, даже для самого Эйнштейна – как мы уже видели, некоторые из его самых значительных вкладов в физику включали использование статистических методов для предсказания поведения большого количества частиц без необходимости рассмотрения деталей поведения любой отдельной частицы. В таких случаях, однако, он мог предполагать, что случайность покрывала незнание о детальных взаимодействиях.
Более глубокая теория, которая предсказывала бы специфические результаты для отдельных частиц, оставалась возможной, и в этом случае статистические методы стали бы просто договоренностью, инструментом, чтобы избежать невозможную задачу вычислений деталей взаимодействия между огромным количеством отдельных частиц. Мы делаем это с чисто классическими системами все время. Зная начальное положение и скорость шарика рулетки и колеса, можно в принципе точно предсказать, где остановится колесо, но на практике эти вычисления слишком сложны. Вместо этого мы можем считать игру как совершенно случайную и обсуждать результат в терминах вероятности.
Однако, по мере того как стала возникать квантовая механика, становилось ясно, что здесь случайность фундаментальна. Невозможность предсказать результат отдельного