Получится даже еще лучше. Можно создать протокол для тайного голосования в Интернете – такой, что только зарегистрированный избиратель сможет проголосовать, никто не сумеет проголосовать дважды, никто не сможет узнать, кто за кого голосовал, и все будут уверены, что выборы честные. Можно даже создать электронную валюту, однако кто-нибудь попытается использовать эти платежные средства дважды…
Честно говоря… если вы захотите, мы сможем сделать и это.
Однако существуют и проблемы, которым посвящено достаточно места в этой книге.
Для Интернета криптография относительно нова и появилась она в нем только благодаря коммерциализации сети. Интернет небезопасен; чтобы обеспечить безопасность в сети, необходима криптография. Вот почему на практике криптографические протоколы являются важнейшей составной частью протоколов Интернета. Примеры, приведенные здесь, характерны для 2000 года, со временем их характер, конечно, будет меняться.
Первой областью применения криптографии в Интернете стала электронная почта. В ней работали два соответствующих протокола: S/MIME и OpenPGP. OpenPGP – это протокол в составе PGP и его разновидностей. S/MIME – стандартный интернет-протокол во всех других случаях.
Netscape изобрела SSL (Secure Sockets Layer – протокол, гарантирующий безопасную передачу данных по сети; комбинирует криптографическую систему с открытым ключом и блочным шифрованием данных) на заре существования Веб, когда люди захотели заниматься безопасной электронной торговлей при помощи своих браузеров. SSL существовал в нескольких воплощениях (он был полем боя во время войны браузеров Netscape и Microsoft и в итоге был назван TLS (Transport Layer Security)). Эти протоколы встроены в браузеры и позволяют людям зашифровать секретную информацию, посылаемую на различные веб-сайты.
Более новые криптографические протоколы разработаны для защиты пакетов IP. Среди них Microsoft Point-to-Point Tunneling Protocol (PPTP, у которого есть грубые дефекты), Layer Two Tunneling Protocol (L2TP) и IPsec (он существенно лучше, хотя и слишком сложен). IKE (Internet Key Exchange) – это, как видно из названия, протокол обмена ключами. Сегодня эти протоколы используются преимущественно для того, чтобы обеспечить работу виртуальных частных сетей (VPN). Тем не менее протоколы безопасности Интернета «умеют» намного больше, чем протоколы VPN. У них есть возможность обеспечивать безопасность большей части трафика. Со временем, может быть, эта возможность реализуется.
Существуют также и другие интернет-протоколы. SET – разработанный компаниями Visa и MasterCard для защиты операций с кредитными картами во Всемирной паутине. (Эти протоколы никогда не будут широко применяться.) Протокол SSH (Secure Shell – защитная оболочка) используется для шифрования и идентификации команд для удаленных соединений. Другие протоколы имеют дело с сертификатами открытых ключей и инфраструктурой сертификатов: PKIX, SPKI и им подобные. Microsoft использует свои протоколы для защиты Windows NT.
Большая часть этой работы была проделана под эгидой Проблемной группы проектирования Интернета (Internet Engineering Task Force, IETF – одна из групп IAB, отвечающая за решение инженерных задач Интернета, выпускает большинство RFC, используемых производителями для внедрения стандартов в архитектуру TCP/IP). Процесс нуждается в тщательном согласовании, а это значит, что создание подобных вещей требует длительного времени и в результате они получаются более сложными, чем могли бы быть. Как мы увидим позднее, эта сложность не является хорошим фактором.
Так же как существует много различных атак, мишенью которых служат алгоритмы, множество их направлено и против протоколов. Простейшие из них – это пассивные атаки: вы просто присматриваетесь к протоколу и ищете, что можно понять. Часто в результате простого подслушивания можно узнать очень многое.
Существует множество веб-сайтов электронной почты. Чтобы ими воспользоваться, вы идете на этот сайт, набираете ваше имя и пароль. Как правило, такой протокол уязвим для атаки перехвата. Другая серия протоколов, уязвимых для атаки-перехвата, – протоколы для предупреждения мошенничеств с аналоговыми телефонами. Кто-то, у кого есть сканирующее устройство, может прослушать соединение телефона с базовой станцией, а затем оплачивать свои звонки со счета того телефона. (Это называется телефонным клонированием. Цифровые сотовые телефоны в этом смысле лучше, но ненамного.)
Узким местом атак перехвата является то, что не всегда понятно, какая информация представляет ценность. Можете представить себе зашифрованную телефонную сеть, в которой невозможно (учитывая секретность, обеспечиваемую криптографией) подслушивать телефонные разговоры. Однако информация о подключениях остается доступной. Эта информация часто тоже бывает полезной. В военной обстановке, например, вы можете многое узнать из анализа трафика: кто с кем говорит, когда и как долго.
Более сложные атаки – активные: вставка, удаление и изменение сообщений. Они могут оказаться существенно более действенными.
Рассмотрим систему смарт-карт. Люди кладут деньги на счет и затем используют карточку для оплаты. Эта система будет состоять из множества различных протоколов: для помещения денег на карту, для перевода денег с карты на другое устройство, для запросов информации о карте и других.
Активные атаки способны нанести множество повреждений такой системе. Предположим, вы можете вмешиваться в протокол между банком и картой. Если вам доступно воспроизведение старых сообщений, вы можете добавить на карту побольше денег. Или, например, вы умеете удалять сообщение в протоколе перевода денег с карты при покупке – тогда сумма на карте никогда не будет уменьшаться.
Одна из мощных атак – это атака посредника, «человека посередине» (man-in-the-middle-attack). Алиса хочет тайно поговорить с Бобом, применяя какой-то алгоритм с открытым ключом, чтобы создать свой ключ. Ева перехватывает сообщение Алисы. Она представляется Алисе как Боб, завершая протокол обмена ключами. Затем она связывается с Бобом и представляется как Алиса, выполнив тем самым второй протокол обмена ключами с Бобом. После этого она может прослушивать связь. Когда Алиса посылает Бобу сообщение, Ева его перехватывает, расшифровывает, зашифровывает заново и посылает Бобу. Когда Боб посылает сообщение для Алисы, Ева проделывает аналогичную процедуру. Это очень действенная атака.
Безусловно, грамотные разработчики протоколов принимают во внимание такие атаки и пытаются предотвращать их. Лучшие протоколы связи не допускают атак посредничества и, конечно, не дают возможности перехвата пароля. Лучшие протоколы электронной торговли не допускают, чтобы злонамеренные пользователи произвольно добавляли деньги на смарт-карты. Но людям свойственно ошибаться, и во множестве протоколов есть проблемы.
И, повторим снова, не всегда очевидно, какого рода атаки необходимо предотвращать. Существовал протокол идентификации открытого ключа, который описан в литературе, сконструированный так, что пользователи могли аутентифицировать себя для хостов. Этот протокол защищал от атак пассивного прослушивания и от активных атак вставки или удаления. Но, как оказалось, он не защищал от хостов злоумышленников. Алиса может подтвердить хосту свою подлинность, и ни один перехватчик не сможет выдать себя за Алису. Но хост сможет.
Это – интересная атака. В одних обстоятельствах полагают, что хост достоин доверия и этой проблемы нет. В других случаях проблема налицо. Нам легко представить себе, что злонамеренные хосты во Всемирной паутине есть. Если бы банк, работающий через Интернет, использовал этот протокол (насколько мне известно, такого не было), то преступники смогли бы создать ложный банковский вебсайт, у которого немного отличался бы URL. Не подозревающие ни о чем пользователи аутентифицировали бы себя на этом ложном сайте, а он затем представлялся бы реальному банку пользователем.