Автоматизм действий пользователя
Когда в главе 6 я излагал основы криптографии, я говорил о том, как Алиса и Боб шифруют, расшифровывают, подписывают и верифицируют сообщения и документы. Например, я упоминал, как Алиса может применять шифрование с помощью открытого ключа: если она найдет ключ Боба в телефонной книге, она может использовать его для шифрования своего сообщения Бобу. На самом деле все совсем не так. Алиса никогда не шифрует и не подписывает свои сообщения Бобу. Она никогда не расшифровывает входящие сообщения. Она вообще не занимается криптографией. Все, что она делает, так это щелкает на соответствующей кнопке, а компьютер шифрует или подписывает сообщения и вообще делает то, чего хочет Алиса. В этом состоит принципиальное отличие.
Представьте себе, что в будущем мы будем постоянно подписывать цифровые документы. Как это будет выглядеть? Алиса составит документ с помощью некоторого приложения – текстового редактора, почтовой программы и т. п. – и щелкнет на определенном значке, чтобы сообщить о своей готовности подписать его. Приложение вызовет некоторую программу, которая создаст подпись. Алиса введет свой пароль (слово или целую фразу) или приложит палец к устройству идентификации, или еще каким-либо способом подтвердит, что она именно та, за которую себя выдает. Программа составит цифровую подпись и передаст ее вызвавшему приложению для присоединения к документу. Вуаля – подпись готова. Возможно, Алиса даже проверит подпись (снова с помощью компьютера), чтобы убедиться, что она правильная.
Это то, что я называю автоматизмом действий пользователя (human-computer transference). Алиса знает, чего она хочет, – подписать документ. Она должна иметь определенные гарантии того, что компьютер сделает именно то, что ей нужно. Однако обеспечить безопасность не так просто.
Предположим, мы хотим заставить Алису подписать нечто, что ей подписывать не хочется. Это легко сделать, если она поверит в то, что подписывает именно тот документ, который видит на экране. Нам нужно заставить компьютер обмануть Алису.
Мы напишем троянского коня, который будет размещаться в программе, создающей цифровую подпись. Этот троянский конь будет содержать документ, который мы хотим подсунуть Алисе, – несомненно, или что-нибудь постыдное, или сулящее выгоду, – и код для его подписания. Единственное, чего не хватает троянскому коню, – это ключа Алисы. Когда она вводит свой пароль, чтобы подписать какое-нибудь сообщение для нас, троянский конь подсовывает вместо него компрометирующий документ. Программа, создающая цифровую подпись, возвращает ее основному приложению, которое присоединяет подпись к документу, который Алиса действительно собиралась заверить. Если она попытается проверить подпись, троянский конь снова подсунет подделку, и программа, создавшая подпись, подтвердит, что она правильная. Таким образом, троянский конь может заставить компьютер солгать Алисе. Затем она отправляет нам свое сообщение с ошибочной подписью – составленной для совершенно другого документа. Мы присоединяем эту подпись к копии нашей подделки и звоним в Washington Post. Тем временем троянский конь самоуничтожается, и все возвращается в исходное состояние.
Это легко реализовать в среде Windows: можно создать макрос, который будет попросту наблюдать за «открытым файлом» диалога PGP, копировать свой собственный файл под именем того, который как раз собирается подписать Алиса, и впоследствии возвращать старый файл на место. Язык макрокоманд программы Word позволяет сделать это, поэтому совсем не трудно создать такой макровирус.
Это всего лишь один пример. Троянский конь может подсунуть для подписи оба документа и переслать подделку позже, в подходящий момент. Или просто похитить ключ Алисы.
В этом нет ничего сложного, программирование – простое дело. Во всяком случае, если мы достигнем успеха, мы завладеем опасным для Алисы документом с ее подписью. Мы можем размахивать им в суде или передать журналистам, обоснованно заявляя, что под документом стоит действительная подпись. Однако вероятнее всего, что нас постигнет неудача. Как только кто-нибудь напишет троянского коня, подделывающего подписи, он распространится повсеместно. И если документ будет предъявлен в суде, одна из сторон может представить свидетельство эксперта о существовании этого троянского коня и о том, с какой легкостью можно заставить кого угодно поставить свою подпись неведомо на чем. Примет ли суд эту подпись в качестве доказательства? Все зависит от обстоятельств, а не от математических методов.
Суть фундаментальной проблемы состоит в том, что у нас нет никакого представления, что же в действительности делает компьютер по нашей команде. Когда мы приказываем ему сохранить документ, или зашифровать файл, или сложить числа в столбце, у нас нет уверенности в том, что этот «черный ящик» выполнит задание правильно или даже вообще его выполнит. Мы вынуждены все принимать на веру. Насколько трудно поймать за руку вороватого работника, настолько же трудно выловить разрушительную программу. Дело обстоит даже хуже. Представьте себе, что этот сотрудник работает в одиночестве и за ним некому уследить, Все средства наблюдения, которые мы можем установить, – скрытые камеры и микрофоны – управляются самим же этим работником. Все, что мы можем сделать, – это сравнивать поступающие к нему («на входе») материалы с производимым им продуктом («на выходе»). Но и этого недостаточно для полной уверенности в его честности.
Если Алиса не может доверять компьютеру, на котором работает, то она не может быть уверена в том, что он точно выполняет ее команды. Хотя бы потому, что когда она велит ему подписать документ, это не означает, что он не способен поставить ее подпись под другим документом. Проблему можно исчерпать, когда Алиса станет подписывать документы лишь на совершенно надежном компьютере, а это трудно осуществить. Если речь идет о компьютере общего назначения, я никогда не поверю в то, что он достаточно надежен.
Вот если бы у Алисы был маленький компьютер с единственным назначением – создавать цифровые подписи, – тогда было бы на что надеяться. Я в состоянии представить карманное устройство с миниатюрной клавиатурой и экраном, в которое можно перенести документ с компьютера общего назначения. Алиса сможет просмотреть документ на экране – так как нет никакой гарантии, что «большой» компьютер загрузит именно то, о чем его попросят, – и ввести пароль с клавиатуры. Устройство создаст подпись под документом и передаст ее назад компьютеру общего назначения. Нам остается молиться о том, чтобы такая система была безопасной. Можно сконструировать ее так, чтобы устройство использовало только заводское программное обеспечение, а независимая проверяющая компания будет выдавать свидетельство о том, что программа работает правильно.
Однако при работе на небезопасном компьютере – то есть практически всегда – нет никакой гарантии того, что мы видим на экране именно то, что получили, или что оно работает так, как мы могли бы ожидать.