Правительства всех крупных государств уже давно стремятся обеспечить полную конфиденциальность информации – как по экономическим, так и по военным соображениям. Необходимость в защите (или взломе) персональных, коммерческих, военных или дипломатических сообщений привлекает к этой проблеме уже несколько поколений самых крупных умов. Расшифровка кода всегда доставляет большое удовлетворение. Чарлз Беббидж, который в середине 1800-х годов добился грандиозных успехов в искусстве расшифровки, писал: «Расшифровка, на мой взгляд, одно из самых пленительных искусств, и боюсь, что я потратил на нее больше времени, чем она того заслуживает». Увлекательность этого занятия я почувствовал еще в детстве, когда мы, как и все дети, играли с простыми шифрами. Мы шифровали записки, заменяя одну букву алфавита другой. Если приятель присылал мне код, который начинался как «ULFW NZXX», то нетрудно было догадаться, что это означало «DEAR BILL» и что вместо D подставлена U, вместо E – L и т.д. Располагая семью буквами, остальной текст записки можно прочитать уже очень быстро.
Прошлые войны заканчивались для кого-то победами, для кого-то поражениями отчасти и потому, что у большинства сильных держав не было тех криптологических мощностей, которые сегодня есть у эрудированного школьника с персональным компьютером. А вскоре любой ребенок – в том возрасте, когда он уже способен пользоваться персональным компьютером, – сможет передавать сообщения, зашифрованные так, что ни одно государство не сможет быстро его раскодировать. Это одно из последствий повсеместного распространения фантастической вычислительной мощи.
При отправке по информационной магистрали какого-то сообщения Ваш компьютер или другое информационное устройство «поставит» на нем цифровую подпись, которую применять можете только Вы, и зашифрует сообщение так, чтобы его сумел прочитать только Ваш адресат. В сообщении может содержаться информация любого вида, в том числе речь, видео или цифровые деньги. Получатель будет уверен (почти на 100%), что сообщение исходит именно от Вас, что оно отправлено точно в указанное время, что оно не поддельное и что никто другой не расшифровал его.
Механизм, который позволит это реализовать, базируется на математических принципах, в том числе на так называемых «необратимых функциях» (one-way functions) и «шифровании по общему ключу» (public-key encryption). Это весьма «продвинутые» концепции, так что я обрисую их лишь в самых общих чертах. Главное, запомните: несмотря на техническую сложность этой системы, пользоваться ею будет чрезвычайно просто. От Вас потребуется всего лишь сообщить информационному устройству, что именно Вы хотите сделать, а остальное – дело техники.
Необратимая функция – нечто, что сделать гораздо легче, чем отменить. Например, Вам разбивают оконное стекло; этот процесс тоже описывается необратимой функцией, правда, бесполезной для шифрования. В криптографии же применяется тот вид необратимых функций, который позволяет легко отменить действие, если известна некая дополнительная информация, и в то же время крайне затрудняет отмену при отсутствии подобной информации. В математике существует целый ряд таких необратимых функций. Одна из них связана с простыми числами, которые дети изучают в школе. Простое число нельзя поделить без остатка ни на какое другое число, кроме единицы и самого себя. В первой дюжине следующие простые числа: 2, 3, 5, 7 и 11. Числа 4, 6, 8 и 10 простыми не являются, поскольку всех их можно разделить на 2 без остатка. А число 9 не относится к простым, потому что делится без остатка на 3. Простых чисел существует великое множество, и, когда перемножают два таких числа, получают значение, которое делится без остатка только на эти же простые числа. Например, перемножив 5 и 7, Вы получите 35, и это значение можно разделить без остатка только на 5 и 7. Поиск простых чисел называется в математике «разложением на множители».
Умножить простые числа 11927 на 20903 и получить результат 249310081 совсем нетрудно, куда сложнее восстановить два его множителя – простые числа. Тут-то и проявляется эффект необратимой функции – сложность разложения чисел на множители, что и лежит в основе самой изощренной на сегодняшний день криптографической системы. Даже самые мощные компьютеры тратят немало времени на разложение действительно крупного произведения на составляющие его простые числа. В системе кодирования, основанной на разложении на множители, используются два разных ключа: один для шифровки сообщения, а второй – отличный от первого, но связанный с ним, – для расшифровки. Располагая только ключом шифрования, сообщение легко закодировать, но раскодировать его в пределах разумного времени практически невозможно. Расшифровка требует отдельного ключа, доступного только определенному получателю сообщения – точнее, компьютеру получателя. Ключ шифрования основан на произведении двух огромных простых чисел, а ключ дешифрования – на самих этих простых числах. Компьютер способен формировать новую пару уникальных ключей буквально в мгновение ока, ему ведь ничего не стоит сгенерировать два больших простых числа и перемножить их. Созданный таким образом ключ шифрования можно без особого риска сделать общим, учитывая, насколько сложно даже другому компьютеру разложить его на составные простые числа и тем самым получить ключ дешифрования.