Мы уже можем наблюдать кое-что из этого. У нас пока нет цифровых наличных денег, но уже появляются альтернативные системы, которые выполняют ту же роль, что и деньги. Flooz com создал специализированную валюту для оплаты подарков. На нем выдаются подарочные сертификаты, которые могут быть использованы в качестве денег. Beenz com предпринимает нечто подобное; «beenz» не являются настоящими деньгами, но они могут использоваться и обращаться, как настоящие деньги. Другие компании тоже участвуют в этом процессе.
   Я ожидаю, что это станет большим делом и, возможно, опасным. Причина в том, что псевдовалюты не могут играть той регулирующей роли в процессе товарооборота, которую играют реальные деньги.
Упреждающие меры
   Традиционно предотвращение мошенничества было упреждающим. Криминальные элементы находят изъян в торговой системе и пользуются им. Они продолжают идти вперед, в то время как проектировщики системы пытаются понять, как устранить недостатки или хотя бы свести к минимуму ущерб. Преступники изучают ситуации, когда их атаки не достигают цели, и продолжают атаковать другими способами. И процесс продолжается.
   Вы можете проследить это на примере кредитных карт. Изначально подтверждение кредитных карт не осуществлялось через сеть. Торговцам предоставляли книги с недействительными номерами кредитных карт каждую неделю, и они должны были вручную проверять номер по книге. Сейчас подтверждение карты происходит по сети в режиме реального времени. Плохие люди воровали новые карты из почтовых ящиков; из-за этого компании, обслуживающие кредитные карты, стали требовать, чтобы вы звонили для активации своей карты. Сейчас карты и извещения об активации отправляются из различных точек. У компаний также есть разведывательные программы для контроля непредвиденных расходов. («Доброе утро, сэр, извините за беспокойство. Многие годы вы были хорошим клиентом. Мы хотим проверить, действительно ли вы внезапно переехали в Гонконг и полностью исчерпали свой кредит».)
   Когда банкоматы впервые были введены Citicorp в 1971 году, клиент должен был помещать кредитную карту в прорезь и набирать свой идентификационный номер[17]. Машина проверяла его и выбрасывала карту обратно клиенту. После этого он мог закончить операцию. Предприимчивые нью-йоркские преступники переодевались в костюмы обслуживающего персонала и ждали недалеко от этой машины. После подтверждения идентификационного номера клиента они подходили и говорили, что банкомат сломан, проходит тестирование или в нем просто нет денег, и просили использовать соседний рядом. В конце концов, людям в таких костюмах можно доверять – так думали клиенты. После того как клиент уходил, они заканчивали первую операцию и клали в карман наличные деньги.
   Карта должна была удерживаться до конца сделки, но это требовало реконструкции аппаратных средств. Банкам нужно было действовать быстро, и они нашли временное решение, которое могло быть введено в действие в банкоматах: было сделано так, чтобы расположенные рядом машины имели связь между собой. Поскольку банки применили это повсюду, то могли наблюдать, как преступники перемещались по всему городу в поисках машин, где уловка все еще срабатывала. Тогда они настроили банкомат так, чтобы он удерживал карту до конца сделки. Долгосрочное решение состояло в том, чтобы создать сеть с обратной связью, дающую уверенность в том, что в любой момент времени проводится только одна транзакция с использованием данной карты. Это было сделано, так что теперь не имеет значения, сколько времени карта удерживается машиной. Теперь многие банкоматы попросят вас просто предъявить свою карту, но раньше было очень много мошенничества, пока проблема не была определена.
   Подобные способы фиксации недостатков в системах безопасности после того, как уже было осуществлено нападение, не подходят для Интернета. Атаки могут быть автоматизированными, они могут легко и быстро повторяться низкоквалифицированными нападающими. Нападение на банкоматы, адаптированное к Интернету, может разрушить банковскую систему. Недостаточно противодействовать мошенничеству после того, как оно было продемонстрировано в работе; мы должны быть предусмотрительны и бороться с обманом до того, как он произойдет.

Часть II
Технологии

   Система безопасности, как луковица, состоит из слоев. На внешнем слое находятся пользователи, по-разному использующие систему, по-разному всем доверяющие и по-разному же реагирующие на баги системы. Внутри «луковицы» находятся связи, обеспечивающие безопасность взаимодействия пользователя с системой и контактов различных систем. Еще ближе к сердцевине расположены программные средства, наверняка содержащие ошибки; поэтому естественно ожидать, что для них у нас есть какие-то элементы защиты. Эти программы работают в сетях и на отдельных компьютерах. Двигаясь глубже, мы обнаружим теоретически идеальные протоколы обмена данными. И в самой сердцевине (иногда) располагается криптография: математические уравнения, описывающие условия безопасности.
   Защита – это процесс, а не продукт. Он включает в себя большое количество компонентов. Как и в любом процессе, одни из них – более сильные, надежные, гибкие и безопасные, чем остальные. Кроме того, компоненты должны работать совместно. Чем лучше они совместимы, тем лучше идет весь процесс. Часто наименьшей надежностью обладают именно связи между компонентами.
   Защита также похожа на цепь. Она состоит из многих звеньев, и для прочности цепи важно каждое из них. И, подобно цепи, надежность всей системы безопасности определяется надежностью самого слабого ее звена. В этой части книги мы коснемся различных технологий защиты, из которых состоит эта цепь, постепенно продвигаясь от сердцевины «луковицы» к внешним слоям.
   И мы постараемся не злоупотреблять смешением плохо согласующихся между собой метафор.

Глава 6
Криптография

   Криптография весьма загадочна. С одной стороны – это набор сложных математических выражений. Шифровальщики вечно изобретают сложные математические преобразования, а им вечно противостоят криптоаналитики, находя все более оригинальные способы нарушить работу этой математики. У шифрования длинная и славная история: с его помощью наперсники, любовники, тайные общества и правительства на века сохраняли свои секреты.
   С другой стороны, криптография – это одна из основных технологий в киберпространстве. Она позволяет нам взять все те деловые и социальные структуры, с которыми мы привыкли иметь дело в физическом мире, и переместить их в киберпространство. Криптография – это технология, позволяющая нам обеспечить безопасность в киберпространстве и бороться с теми атаками и злоумышленниками, о которых шла речь в части I. Без криптографии никогда бы не смогла распространиться электронная торговля. Криптография не являет собой панацею, для полной надежности вам потребуется еще много всего другого, но она, несомненно, важна.
   Для того чтобы понять, как обеспечивается безопасность в киберпространстве, вы должны уяснить, как устроена криптография. Вам не обязательно разбираться в математике, но придется освоить некоторые приемы ее применения. Следует иметь представление о том, что может криптография и, что еще важнее, чего она не может. Вы должны уметь рассматривать ее в контексте компьютерной и сетевой безопасности. Две следующие главы не превратят вас в шифровальщиков, а только научат грамотно пользоваться криптографией.
   С точки зрения пользователя, криптография представляет собой туманный объект, выполняющий функции защиты, – вроде Бэтмана – нечто грозное, но справедливое и наделенное мистической силой. Если пользователь уделит ей немного внимания, криптография предстанет перед ним целым собранием акронимов, которые способны обеспечить решение самых различных задач безопасности. Например, IPsec защищает трафик в Интернете. С его помощью обеспечивается безопасность виртуальных частных сетей (VPN). Протокол SSL (Secure Sockets Layer) отвечает за безопасность соединений Всемирной Сети. Системы PGP (Pretty Good Privacy) и S/MIME гарантируют надежность электронной почты; они не дают прочитать сообщения никому, кроме адресата, и не допускают фальсификации авторства. Протокол SET защищает операции, проводящиеся в Интернете с использованием кредитных карт. Все вышеперечисленное – это протоколы. Существуют протоколы для защиты цифровой информации (музыки, фильмов и т. п.), для аутентификации сотовых телефонов (чтобы предотвратить мошенничество), для электронной торговли и для многого другого. Чтобы создать эти протоколы, шифровальщики используют различные алгоритмы: алгоритмы шифрования, цифровой подписи и т. д.
Симметричное шифрование
   Исторически криптография использовалась с одной единственной целью: сохранить секрет. Даже сама письменность была своего рода шифрованием (в Древнем Китае только высшие слои общества могли обучаться чтению и письму), а первый опыт применения криптографии в Египте относится примерно к 1900 году до н. э.: автор надписи пользовался необычными иероглифами. Есть и другие примеры: дощечки из Месопотамии, на которых зашифрована формула изготовления керамической глазури (1500 год до н. э.), еврейский шифр ATBASH (500—600 годы до н. э.), греческое «небесное письмо» (486 год до н. э.) и шифр простой подстановки Юлия Цезаря (50-60 год до н. э.). Кама Сутра Ватсьяяны даже помещает искусство тайнописи на 44-е, а искусство секретного разговора на 45-е место в списке 64 искусств (йог), которыми должны владеть мужчины и женщины.
   Основная идея, лежащая в основе криптографии, такова: группа людей может секретным способом записывать послания так, что они будут непонятны всем остальным. Пусть имеются сообщения (их еще называют открытым текстом), которые кто-то хочет сохранить в секрете. Представим, что кто-то (назовем ее Алиса) хочет послать сообщение кому-то другому (например, Бобу); а может, она хочет сама перечитать его через несколько дней. Но она точно не хочет, чтобы кто-нибудь другой, кроме Боба, смог этот текст прочесть.
   Поэтому Алиса зашифровывает сообщение. Она придумывает какие-нибудь преобразования (их называют алгоритмом), превращающие открытый текст в зашифрованный. Такое зашифрованное сообщение кажется абсолютной абракадаброй, поэтому перехватчица (назовем ее Евой), в чьи руки оно попало, не может превратить его опять в открытый текст, а значит, не сумеет понять смысла сообщения. А Боб знает, как произвести обратное преобразование и превратить шифрограмму в открытый текст.
   Такая схема более или менее работает. Алиса может при помощи изобретенного ею алгоритма зашифровать свой секрет глазури для керамики. Алиса и Боб могут договориться об алгоритме, чтобы поделиться друг с другом мыслями о Кама Сутре. Целый общественный класс – китайская знать (хотя, скорее всего, никого из них Бобом не звали) – использовал письменность, чтобы утаить от крестьян государственные тайны.
   Но возникают определенные сложности. Во-первых, алгоритм должен быть надежным. Не надейтесь, что Ева посмотрит на зашифрованное сообщение, пожмет плечами и отступится. Она твердо намерена прочесть открытый текст. Если Ева – это правительство Великобритании времен Второй мировой войны, она наймет лучших математиков, лингвистов и шахматистов страны, запрет их и еще 10 000 человек в тайной резиденции в Блетчли Парк и создаст компьютер – только так она сможет взломать алгоритм и восстановить текст сообщения. Агентство национальной безопасности – единственный в своем роде крупнейший потребитель компьютерного оборудования и работодатель математиков. Алисе нужно быть очень ловким шифровальщиком, если ей предстоит перехитрить Еву такого уровня. Я еще расскажу об этом позже.
   Во-вторых, сложно включать и исключать людей из группы избранных, которым известен алгоритм. Чтобы обмениваться тайными посланиями с китайским аристократом, вам придется научиться китайской грамоте. Это потребует времени. Если через какое-то время вы утратите расположение правительства, у последнего будет только один способ помешать вам читать все сообщения. Вы знаете, как осуществляется шифрование, и если правительство не хочет, чтобы вы читали его переписку и дальше, ему придется вас убить. (Во время Второй мировой войны американская армия использовала в качестве шифра язык навахо. Те, кто говорил на этом языке, сохранили секрет от японцев, но вся система могла бы рухнуть, если бы хоть один навахо перешел на вражескую сторону.)
   Останься эти две проблемы неразрешенными, в наше время криптография могла бы стать почти бесполезной. Представьте, что вы, один из скольких-то там миллионов пользователей Интернета, хотите посекретничать с сотней своих лучших друзей. Вы хотите пользоваться не одним и тем же тайным языком для всех ста друзей, а использовать сто разных секретных алгоритмов. (Вам необходима попарная секретность. И того же желают остальные несколько миллионов пользователей Интернета.) Это означает, что вам придется создать эти 100 различных алгоритмов шифрования, обменяться ими с каждым из друзей, самостоятельно запрограммировать все алгоритмы в своем компьютере (вы ведь никому этого не доверите) и надеяться на то, что вы умнее тех, кто, возможно, попытается понять ваш алгоритм.
   Очень маловероятно.
   В этом прелесть ключа. Замок на вашей двери – это серийный продукт какой-то безликой компании, которую нисколько не заботит ценность вашей коллекции марочных вин, но вы и не должны им доверять. Они не говорят вам: «Помните, любой, у кого есть замок такой же марки, может открыть ваш замок». У вас есть ключ. Набор шпеньков в замке, соответствующий вашему ключу, отличает ваш замок от всех остальных замков в округе, несмотря на то что у них может быть та же модель. (На самом деле пример упрощен. Вы все же должны принять на веру, что они правильно собрали замок и не припасли запасных ключей. Но мы пока что не принимаем это во внимание.)
   Дверной замок служит примером такой же модели защиты, какую в 1466 году привнес в криптографию Леон Баттиста Альберти, известный итальянский архитектор эпохи Возрождения, создав криптографический ключ. У кого угодно могут быть замки одинаковых моделей, но ключи у всех разные. Конструкция замка не является уникальной – у слесарей есть книги с подробными схемами, а большинство хороших моделей описаны в общедоступных патентах, – но ключ является тайной. У вас есть ключ, значит, вы можете отпереть дверь. Если вы одолжите ключ другу, то он сможет войти в дом. А тот, у кого ключа нет, останется на улице. (Слесарями в данном случае будут криптоаналитики; до них мы доберемся позднее.)
   Применение такой модели в криптографии решает обе упомянутые выше проблемы. Алгоритмы, так же как и замки, можно стандартизировать. Стандарт шифрования данных (Data Encryption Standard, DES) – это общепринятый криптографический алгоритм, широко распространенный с 1977 года. Его использовали в тысячах различных программ для любых приложений. Самые сокровенные подробности устройства DES были опубликованы с первого дня его существования; их опубликовали даже до того, как этот алгоритм приняли в качестве стандарта. Доступность этого алгоритма не сказывается на безопасности, поскольку различные группы пользователей выбирают себе разные секретные ключи. Если Алиса и Боб пользуются одним ключом, значит, они могут общаться. Ева ключа не знает, следовательно, она не сможет прочесть их сообщения – даже если у нее есть точно такие же шифровальные программы, как у Алисы и Боба.
   С помощью ключей решается задача включения и исключения людей из группы избранных. Если Алиса и Боб договорились о совместном использовании одного ключа и хотят, чтобы Ким Филби смог присоединиться к их общению, они просто дадут ему копию ключа. Если позже они решат, что Филби передает секреты Советскому Союзу, им нужно просто сменить ключ и не сообщать об этом Филби. С этого момента он исключен из системы и больше не сможет читать сообщения, зашифрованные новым ключом. (Увы, он все же может прочитать старые.)
   Современная криптография традиционно устроена именно таким образом. Алгоритмы заменяют традиционные ручку и бумагу – они оперируют битами вместо символов алфавита, компьютеры оснащены эффективными микропроцессорами и интегральными схемами, – но философия остается прежней. Алгоритм доступен для всех, а общающиеся стороны договариваются о секретном ключе, который они применят для этого алгоритма.
   Такие алгоритмы называют симметричными, потому что отправитель и получатель используют один и тот же ключ. Ключ представляет собой случайную строку битов некоторой длины: в 2000 году хорошей длиной ключа считалась длина в 128 бит. У различных симметричных алгоритмов – разная длина ключей.
   Симметричные алгоритмы можно обнаружить в шифровальных системах всего компьютеризованного мира. Общепринятыми алгоритмами считают DES и тройной DES, RC4 и RC5, IDEA и Blowfish. Улучшенный стандарт шифрования (Advanced Encryption Standard, AES) вскоре станет стандартным алгоритмом шифрования правительства США[18]. При помощи этих алгоритмов обеспечивается безопасность частных сообщений электронной почты, индивидуальных файлов, электронных банковских операций и кодов запуска ракет с ядерными боеголовками. Эти алгоритмы препятствуют нарушению конфиденциальности.
   Но они несовершенны.
   Проблема в распределении ключей. Для того чтобы описанная система работала, Алиса и Боб должны договориться о секретном ключе перед тем, как получат возможность обменяться тайными сообщениями. Если они достаточно сообразительны, то будут регулярно менять ключ, скажем, раз в день. Им необходимо как-то тайно уславливаться об этих ежедневно изменяющихся ключах, так как, перехватив ключ, кто угодно сможет читать все сообщения, зашифрованные с его помощью. Кроме того, поскольку необходима попарная секретность, количество ключей будет возрастать пропорционально квадрату количества пользователей. Двум пользователям нужен только один ключ, но сеть из десяти пользователей требует 45 ключей[19], чтобы предоставить каждой паре возможность секретного общения. А сеть из 100 пользователей потребует 4950 различных ключей. В 80-х годах корабли Военно-Морского флота США отправлялись в плавание с полным набором ключей, предоставляемых Агентством национальной безопасности – каждый ключ был напечатан на бумажной ленте, перфокарте или на чем-нибудь еще; этого было достаточно для всех сеансов связи на все время выполнения задания. Но недостаточно только распространять ключи секретно: их нужно секретно хранить, секретно использовать, а затем секретно уничтожать. Алиса и Боб обязаны хранить свои ключи в тайне в течение всего времени, пока им необходимо общаться друг с другом и быть уверенными, что ни у кого больше нет их ключей. Секретность должна соблюдаться как до и во время использования ключа, так и впоследствии.
   Это означает, что уничтожение ключей имеет большое значение. Алиса и Боб не могут просто выбросить свой ключ в корзину в конце работы и надеяться, что его никто не найдет. Перехватчики не пренебрегают хранением зашифрованных посланий, которых не способны прочесть, в надежде, что найдут к ним ключ через несколько дней. Агентство национальной безопасности получило возможность расшифровать русский трафик VENONA (вспомните эту историю; это действительно поучительно) только благодаря тому, что СССР повторно использовал ключ, который, должно быть, ранее выбросил, и тому, что АНБ хранило все эти советские шифрованные сообщения более 10 лет[20].
   Есть множество исторических примеров, когда недостаточное внимание к обращению с ключами приводило к разгадке безупречного шифрования. Джон Уокер служил в военно-морском флоте США и был офицером безопасности, ответственным за обеспечение безопасности ключей, но одновременно он делал и другую карьеру, фотографируя ключи флота и отсылая фотографии русским. Японская секта поклонников смерти Аум Синрике зашифровала свои компьютерные записи, но она была настолько неосторожна, что оставили копии ключей на дискете, обнаруженной полицией. Это произошло в 1995 году: не кажется ли вам, что приверженцы культа смерти могли бы к тому времени кое-что знать о ключах.
Типы криптографических атак
   Что означает «взломать» алгоритм? На первый взгляд очевидно – кто-то сможет прочитать сообщение, не имея ключа. Но на самом деле все сложнее.
   Если злоумышленник просто берет зашифрованное сообщение и восстанавливает открытый текст, то такую атаку называют атакой с использованием только шифрованного текста (cipher text-only attack). Их, как правило, больше не используют – современные алгоритмы слишком хороши, чтобы их одолеть атаками такого рода.
   С большей вероятностью можно встретить атаки с использованием известного открытого текста (known-playn text attack): у дешифровщика есть образец открытого и шифрованного текста, что позволяет ему восстановить ключ. На первый взгляд может показаться, что это бесполезно, но на самом деле смысл есть. Если при помощи этого же ключа будут зашифрованы другие тексты, злоумышленник сумеет взять ключ и прочесть остальные тексты. Например, почти у всех компьютерных файлов есть заголовок. Все файлы Microsoft Word, например, начинаются с нескольких сотен одинаковых байтов. (Это «невидимые» символы – служебные байты программы, и они не отображаются в окне.) Если криптоаналитик может, воспользовавшись имеющимся открытым текстом, воспроизвести ключ, то сумеет прочитать документ Word полностью. Атаки, при которых известен открытый текст, с большим успехом применяли против немецкой «Энигмы». Аналитики получали в руки единственный незашифрованный текст, например прогноз погоды, а через некоторое время один из отдаленных немецких постов в Норвегии начинал пунктуально присылать ежедневные одинаковые сообщения: «Нечего сообщать». (Открытый текст можно еще называть шпаргалкой.) Обычно таким образом узнавали ключ текущего дня, а затем с помощью ключа читали зашифрованные сообщения.
   Еще более действенной является атака с помощью избранного открытого текста (chosen-plain text attack). При такой атаке криптоаналитик имеет возможность выбрать сообщение, которое после этого зашифровывают. Затем он получает зашифрованное сообщение и восстанавливает ключ. Атаки этого рода срабатывали против немецких шифров: союзники сознательно допускали утечку определенной информации для того, чтобы получить зашифрованный текст, или провоцировали сообщения о событиях в городах с уникальными названиями, служащие особенно хорошими шпаргалками. Эти атаки хорошо срабатывают и против некоторых систем, использующих смарт-карты, в результате чего злоумышленники получают возможность помещать на карту нужную им информацию.