Отступление 1.5. Классическая криптография
Криптографический обмен данными осуществить легко, если у обеих сторон, которые мы традиционно называем Алисой и Бобом, есть заранее оговоренный тайный набор данных (последовательность нулей и единиц), известный как секретный ключ, или одноразовый шифровальный блокнот (one-time pad). Тогда криптографический протокол может выглядеть следующим образом. Алиса берет фрагмент секретного ключа такой же длины (т. е. с тем же числом битов), что и послание, которое она хочет передать Бобу. Затем она применяет операцию XOR (исключающее ИЛИ, или побитное сложение по модулю 2) к каждому биту своего сообщения и соответствующему биту своего секретного ключа.
Таким способом Алиса приготавливает зашифрованное сообщение, которое можно безопасно передавать по незащищенному каналу, поскольку его нельзя расшифровать без доступа к секретному ключу. Боб, со своей стороны, может расшифровать полученное сообщение без труда. Для этого он применяет операцию XOR к его каждому биту и соответствующему биту секретного ключа.
Этот протокол, известный как одноключевое, или классическое, шифрование, очень надежен и прост; он используется уже сотни лет. Проблема в том, что создать общий набор случайной информации, секретной для всех остальных, Алисе и Бобу достаточно непросто. Как правило, единственный надежный способ сделать это — послать курьера с чемоданом, полным случайных данных. Это, разумеется, очень дорого. Поэтому одноключевая криптография используется только для наиболее секретной правительственной и коммерческой связи.
Для других приложений, таких как онлайн-шопинг, используется семейство протоколов, известных как шифрование с открытым ключом (public-key cryptography). Не вдаваясь в детали, скажу, что эти протоколы основаны на существовании «односторонних» функций, которые легко вычислить, но очень трудно инвертировать. Например, перемножение двух простых чисел, состоящих из нескольких десятков цифр каждое, на современном компьютере занимает пару-тройку микросекунд, но разложение числа аналогичной длины на простые множители займет месяцы, а то и годы. Протоколы шифрования с открытым ключом при помощи односторонних функций обеспечивают надежную связь между участниками, у которых не было возможности обменяться секретными ключами.
Протоколы с открытым ключом удобны и недороги, но не обеспечивают абсолютной секретности на фундаментальном уровне. Доступные нам вычислительные мощности удваиваются чуть ли не ежегодно, так что расчет, на который в настоящее время требуются годы, через несколько лет, возможно, будет занимать всего несколько часов. Более того, квантовые компьютеры (разд. 2.5) потенциально способны взламывать сообщения, зашифрованные по протоколам с открытым ключом, почти мгновенно.
Квантовая механика предлагает нам решение проблемы, с которым и волки будут сыты, и овцы целы. С одной стороны, оно обеспечивает информационную безопасность с гарантией на уровне фундаментальных законов природы. С другой, это решение не требует обязательного предварительного обмена большим объемом случайной информации между сторонами.
Квантовая криптография, или, точнее, квантовое распределение ключа (quantum key distribution), основана на свойстве измерений изменять квантовое состояние, к которому они применяются. Идея в том, что отправляющая сторона (Алиса) высылает секретные данные принимающей стороне (Бобу) посредством единичных фотонов, в квантовых состояниях которых зашифрованы передаваемые данные. Всякий, кто попытается «подслушать» передачу, либо разрушит, либо изменит эти фотоны, выдав таким образом свое вмешательство.
Самый известный квантовый протокол шифрования называется «BB84» в честь его изобретателей Чарльза Беннета и Жиля Брассара[25]. При его применении Алиса и Боб выполняют следующие операции.
1. Алиса случайно выбирает значение бита, 0 или 1, которое следует передать.
2. Алиса случайно выбирает базис шифрования — канонический или диагональный.
3. Алиса генерирует фотон и шифрует свой бит в поляризации этого фотона:
25
C. H. Bennett, G. Brassard, «Quantum Cryptography: Public Key Distribution and Coin Tossing», Int. Conf. on Computers, Systems and Signal Processing, Bangalore, India (IEEE, New York, 1984), p. 175.