Даже в физическом мире были разработаны более сложные протоколы, чтобы снизить опасность всякого рода жульничества. Вот как в общих чертах выглядит протокол продажи автомобиля.
1. Алиса передает Бобу ключи и документы.
2. Боб дает Алисе чек на сумму покупки.
3. Алиса кладет деньги в банк.
Здесь Боб запросто может сжульничать. Он может дать Алисе фальшивый чек. Она не будет знать, что чек фальшивый, и не узнает, пока ей не скажут об этом в банке. К тому времени Боб с ее машиной будет уже далеко.
Когда я продавал машину несколько лет назад, во избежание такой атаки придерживался несколько модифицированного протокола.
1. Боб выписывает чек и идет с ним в банк.
2. Когда на счет Боба поступит достаточно денег, чтобы покрыть чек, банк «заверяет» чек и возвращает его Бобу.
3. Алиса передает Бобу ключи и документы о праве собственности.
4. Боб дает Алисе заверенный чек на сумму покупки.
5. Алиса кладет деньги в банк.
Что при этом происходит? Банк в такой коммерческой сделке выступает доверенной третьей стороной. Алиса полагается на то, что банк выплатит по заверенному им чеку полную сумму. Боб верит, что банк сохранит деньги на счете, а не вложит их в рискованные предприятия в странах третьего мира. Алиса и Боб могут осуществить свою сделку, даже если они не доверяют друг другу, – поскольку они оба доверяют банку.
Такая система работает не потому, что банк – солидное учреждение, за которым стоит много, включая хорошую рекламную кампанию, а потому, что банк не заинтересован в выгоде кого-либо одного – Алисы или Боба – и имеет надежную репутацию. Банк будет придерживаться протокола заверения чека, что бы ни произошло. Если на счету Боба достаточно денег, банк выдаст чек. Если Алиса представит чек к оплате, банк его оплатит. Если бы банк все же скрылся с деньгами, не многое бы от него осталось. (В этом и есть сущность репутации.)
Данный протокол защищает Алису, но не Боба от покупки фальшивых документов или краденой машины. Для этого нам нужен другой протокол.
1. Алиса передает ключи и документы о праве собственности юристу.
2. Боб отдает юристу чек.
3. Юрист проверяет чек в банке.
4. По прошествии оговоренного временного промежутка, который отводится на то, чтобы проверить чек и зарегистрировать машину, юрист отдает Бобу документы. Если клиринг чека не удается осуществить в течение оговоренного времени, юрист возвращает документы Алисе. Если Боб не может получить новые документы на машину (поскольку Алиса дала ему недействительные документы), Боб предоставляет юристу соответствующие доказательства и получает назад свои деньги.
Как и в предыдущем протоколе, здесь привлекается третья доверенная сторона. В данном случае это юрист. Алиса не доверяет Бобу, Боб не доверяет Алисе, но оба они верят, что юрист на последнем шаге поведет себя беспристрастно. Юрист совершенно не заинтересован в чьей-либо выгоде – ему все равно, отдаст он документы Бобу или Алисе. Он задержит деньги на депоненте и будет действовать в соответствии с соглашением между Бобом и Алисой.
Другие протоколы могут быть более простыми и не требовать столь сложного обмена. Например, протокол, в соответствии с которым банк в состоянии удостовериться, что чек подписан Алисой.
1. Алиса подписывает чек.
2. Банк сравнивает подпись на чеке с подписью на папке Алисы.
3. Если они совпадают, банк дает Алисе деньги. Если не совпадают – не дает.
Теоретически, такой протокол обеспечивает защиту от того, что Боб обманным путем получит деньги Алисы, но, конечно, в реальности все сложнее. Боб может уметь подделывать подписи. Банк может давать рискованные займы Парагваю и разориться. Алиса может вытащить пистолет. Существуют, вероятно, тысячи способов нарушить этот протокол, но с разумными допущениями он работает.
Протоколы цифрового мира во многом похожи на предыдущие примеры. Цифровые протоколы при помощи криптографии делают то же самое: сохраняют секреты, проводят аутентификацию, охраняют справедливость, обеспечивают аудит и т. п.
В Интернете используется множество протоколов безопасности; я расскажу о них в следующем разделе. У других цифровых сетей есть свои протоколы безопасности. Индустрия сотовых телефонов применяет целый ряд протоколов – как для секретности, так и для предотвращения мошенничества (с переменным успехом). У компьютерных приставок к телевизору также есть протоколы безопасности. И у смарт-карт тоже.
Протоколы, содержащие цифровые подписи, особенно полезны для различных задач аутентификации. Например, при помощи схемы цифровых подписей можно создать подписи, которые сможет идентифицировать только определенный получатель. Это полезно для информаторов или доносчиков, поскольку получивший сообщение в силах установить, кто его отправил, но не сумеет доказать это третьему лицу. (Представьте, что вам на ухо прошептали секрет. Вы знаете, кто вам его сообщил, но никак не можете доказать, что это сделал именно он.) При помощи протоколов цифровых подписей можно подписать программу, и тогда только тот, кто приобрел программный пакет законным образом, сможет проверить подпись и узнать, что это не подделка; обладатели пиратских копий не могут быть в этом уверены. Мы можем создать групповые подписи, так что для людей, не входящих в группу, подпись будет казаться подписью группы в целом, а члены группы различат, чья конкретно эта подпись.
Более сложные протоколы дают криптографии возможность прыгнуть через любые препятствия. Можно предоставлять так называемые доказательства с нулевыми знаниями, когда Алиса способна доказать Бобу, что она что-то знает, не открывая, что именно. Криптографические протоколы также могут обеспечивать систему одновременного подписания контрактов через Интернет. Можно создать цифровой аналог заказных писем, когда Алиса сумеет прочесть письмо, только отослав обратно «расписку в получении».
При помощи протокола, называющегося совместным управлением секретностью (secret sharing), мы можем предписывать требование соглашения о доступе (collusioninaccess) – секрет, который нельзя узнать, если многие люди не действуют сообща. Это – действительно необходимая вещь. Представьте себе ядерную ракетную установку. Для того чтобы запустить ракету, два человека одновременно должны повернуть ключи и разблокировать систему. А замочные скважины (или в данном случае их цифровой аналог) достаточно сложны, чтобы один-единственный солдат не мог повернуть все ключи и убить всех; чтобы запустить ракету, по крайней мере два человека должны действовать сообща. Или представьте себе контроль счетов корпорации, в соответствии с которым для особо ценных чеков требуется две подписи: по крайней мере два из пяти членов правления корпорации должны подписать чек. Мы можем создать что-то подобное при помощи криптографии.
Получится даже еще лучше. Можно создать протокол для тайного голосования в Интернете – такой, что только зарегистрированный избиратель сможет проголосовать, никто не сумеет проголосовать дважды, никто не сможет узнать, кто за кого голосовал, и все будут уверены, что выборы честные. Можно даже создать электронную валюту, однако кто-нибудь попытается использовать эти платежные средства дважды…
Честно говоря… если вы захотите, мы сможем сделать и это.
Однако существуют и проблемы, которым посвящено достаточно места в этой книге.
Криптографические протоколы Интернета
Для Интернета криптография относительно нова и появилась она в нем только благодаря коммерциализации сети. Интернет небезопасен; чтобы обеспечить безопасность в сети, необходима криптография. Вот почему на практике криптографические протоколы являются важнейшей составной частью протоколов Интернета. Примеры, приведенные здесь, характерны для 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. У них есть возможность обеспечивать безопасность большей части трафика. Со временем, может быть, эта возможность реализуется.