В криптографической системе с общим ключом вы не должны защищать общие ключи от взлома. Фактически, лучше, чтобы они широко распространялись. Но важно защищать их от подделки, то есть, вы должны быть уверены, что если вам кажется, что данный ключ принадлежит определенному человеку, то он именно ему и принадлежит. Это является наиболее уязвимым местом криптографии с общим ключом. Давайте сначала рассмотрим потенциальное несчастье, а затем, как избежать этого с помощью PGP.
Предположим, что вы хотите послать частное сообщение Алисе. Вы списываете общий удостоверенный ключ Алисы с BBS ("электронная доска объявлений"). Вы шифруете ваше письмо к Алисе с помощью этого общего ключа и посылаете его к ней через электронную почту BBS.
Рисунок 1 . Схема внедрения поддельного ключа
К сожалению, без вашего и Алисы ведома, другой пользователь с именем Чарли "отфильтровал" эту BBS и сгенерировал свой собственный общий ключ с присоединенным идентификатором пользователя Алисы. Он скрытно подставляет свой поддельный ключ вместо настоящего общего ключа Алисы. Вы, ничего не подозревая, используете этот поддельный ключ, принадлежащий Чарли, вместо ключа Алисы. Все проходит нормально, так как этот поддельный ключ имеет идентификатор пользователя Алисы. Теперь Чарли может декодировать сообщение, предназначенное Алисе, потому что он имеет соответствующий секретный ключ. Он может даже снова зашифровать декодированное сообщение с настоящим общим ключом Алисы и послать это ей, так что никто и не заподозрит никакого подвоха. Кроме того, он может даже делать вполне достоверные подписи Алисы с этим секретным ключом, потому что все будут использовать поддельный общий ключ для проверки подписи Алисы.
Рисунок 2 . Схема вторжения в переписку
Единственный способ предотвращать это бедствие заключается в том, чтобы предотвратить возможность подделки кем-либо общего ключа. Если вы получили общий ключ Алисы прямо от нее, то нет проблем. Но это может быть затруднительно, если Алиса находится за тысячи миль или вообще сейчас недостижима.
Возможно, вы смогли бы получить общий ключ Алисы от вашего общего друга Давида, который знает, что у него есть достоверная копия общего ключа Алисы, и которому вы оба доверяете. Давид может подписать общий ключ Алисы, удостоверяя его целостность. Давид может создать эту подпись с помощью своего собственного секретного ключа.
Таким образом будет создано подписанное удостоверение общего ключа, и будет показано, что ключ Алисы не был подделан. Но для этого требуется, чтобы вы имели заведомо верную копию общего ключа Давида для проверки его подписи. При этом возможно, чтобы Давид обеспечил также и Алису подписанной копией вашего общего ключа. Таким образом, Давид служит как бы "поручителем" между вами и Алисой.
Это подписанное удостоверение общего ключа для Алисы может быть передано Давидом или Алисой на BBS, и вы можете списать его позже. Тогда вы сможете проверять подпись с помощью общего ключа Давида и, таким образом, быть уверенным, что это действительно общий ключ Алисы. Никакой мошенник не сможет одурачить вас так, чтобы вы приняли его собственный поддельный ключ за ключ Алисы, потому что никто другой не может подделывать подписи, сделанные Давидом.
Пользующийся доверием человек может даже специализироваться в области "рекомендации" пользователей друг другу посредством удостоверения их общих ключей своей подписью. Этот доверенный человек мог бы расцениваться как "сервер" ("ключник") или как "Удостоверяющий Авторство". Любым удостоверениям общего ключа, обладающим подписью такого сервера можно вполне доверять, как действительно принадлежащим тому, кто в них указан. Все пользователи, кто хочет участвовать в этом, будут нуждаться в заведомо верной копии только общего ключа сервера, чтобы его подписи могли бы быть проверены.
Доверенный централизованный сервер ключей или Удостоверяющий Авторство наиболее подходит для большой безликой центрально управляемой корпорации или правительственных учреждений.
Для более децентрализованных массовых "партизанских" использований, разрешение всем пользователям действовать как доверенные поручители для их друзей, вероятно, сработает лучше, чем центральный сервер ключей. PGP настроена, чтобы подчеркивать этот органически децентрализованный подход . Он лучше отражает естественный способ взаимодействия людей на персональном социальном уровне, и позволяет людям лучше выбирать, кому они могут доверять управление ключами.
Все это дело защиты общих ключей от подделки - наиболее трудная проблема в программных средствах, использующих принцип общего ключа. Это ахиллесова пята криптографии с общим ключом, и некоторая сложность программ связана с решением именно этой проблемы.
Вы должны использовать общий ключ только после того, как вы уверены, что он вполне достоверен, не был подделан и действительно принадлежит тому человеку, который на это претендует. Вы можете быть в этом уверены, если вы получили общий ключ непосредственно от его владельца, либо если этот ключ имеет подпись кого-либо из тех, кому вы доверяете и от которого вы уже получили достоверный общий ключ. Кроме того, идентификатор пользователя должен содержать полное имя и фамилию владельца, а не только имя.
Неважно, как вас соблазнят -- а вас будут соблазнять -- никогда , НИКОГДА не признавайте целесообразность и не доверяйте общему ключу, который вы переписали с BBS, если он не подписан кем-либо, кому вы доверяете. Такой никем не удостоверенный ключ вполне мог быть поделан кем-то, возможно даже администратором BBS.
Если вас попросят подписать чей-либо сертификат общего ключа, убедитесь, что этот ключ действительно принадлежит человеку, чье имя указано в идентификаторе пользователя удостоверения этого ключа. Это необходимо потому, что ваша подпись на этом удостоверении - ваше личное утверждение принадлежности этого ключа. Другие люди, доверяющие вам, будут принимать этот ключ как достоверный, потому что он подписан вами. плохой совет - полагаться на слухи; не подписывайте общий ключ, пока не получите независимую информацию из первых рук о принадлежности этого ключа. Предпочтительно подписывать только после получения ключа прямо от автора.
Если вы удостоверяете общий ключ, вы должны быть уверены в принадлежности этого ключа в гораздо большей степени, чем при простом шифровании сообщения этим ключом. Чтобы быть убежденным в достоверности ключа настолько, чтобы использовать его, ключ должен иметь удостоверяющие подписи от надежных поручителей. Однако, для того, чтобы самому удостоверить этот ключ, вы должны знать о действительном владельце этого ключа из первых рук. К примеру, вы могли бы позвонить ему по телефону и прочитать ему файл ключа для окончательного подтверждения того факта, что этот ключ - его, при этом будучи уверенным, что разговариваете с тем, кем надо. Для получения дополнительной информации смотрите раздел "Проверка общего ключа с помощью телефона" в части "Специальные разделы".
Имейте в виду, что ваша подпись на удостоверении общего ключа не подтверждает честность человека, а только утверждает целостность (монопольное использование) общего ключа этого человека. Вы не рискуете вашим авторитетом при подписании общего ключа человека с социально-патологическими изменениями, если вы были полностью уверены, что ключ действительно принадлежал ему. Другие люди будут верить, что ключ принадлежит ему, потому что вы подписали его (если они доверяют вам), но они не будут доверять владельцу ключа. Достоверный ключ не то же самое, что доверие к его владельцу.
Доверие не обязательно передается; у меня есть друг, я ему доверяю и считаю, что он говорит правду. Он - доверчивый человек, который доверяет Президенту и считает, что тот говорит правду. Это отнюдь не значит, что я доверяю Президенту и считаю, что он говорит правду. Это просто здравый смысл. Если я доверяю подписи Алисы на ключе, а она, в свою очередь, доверяет подписи Чарли на ключе, это не означает, что я должен доверять подписи Чарли на ключе.
Хорошая идея - хранить ваш собственный общий ключ у себя вместе с коллекцией удостоверяющих подписей, которыми ваш ключ подписали "поручители" в надежде, что большинство людей будут доверять по крайней мере одному из поручителей, которые удостоверяют правильность вашего общего ключа. Вы могли бы посылать ваш ключ с коллекцией удостоверяющих подписей на различные BBS. Если вы подписываете кому-либо его общий ключ, возвращайте ему его со своей подписью, он затем добавит ее к своей собственной коллекции "верительных грамот" для своего общего ключа.
PGP следит, какие ключи в вашем каталоге публичных ключей правильно удостоверяются подписями поручителей, которым вы доверяете. Все, что вы должны делать - сообщать PGP, каким людям вы доверяете, как поручителям, и удостоверять их ключи у себя с помощью вашей собственной абсолютно достоверной подписи. PGP может брать ее отсюда, автоматически при утверждении любых других ключей, которые были подписаны вашими указанными поручителями. И, конечно, вы можете прямо подписывать большинство ключей самостоятельно. Подробнее об этом ниже.
Удостоверьтесь, что никто другой не может подделать ваш собственный каталог общих ключей. Проверка нового подписанного удостоверения общего ключа должна в конечном счете зависеть от целостности достоверных общих ключей, которые уже имеются в вашем собственном каталоге общих ключей. Поддерживайте физический контроль за вашим каталогом общих ключей, предпочтительно на вашем собственном персональном компьютере, нежели на удаленной системе с разделением времени, так же, как вы будете делать это для вашего секретного ключа. Это должно защищать его от подделки, но не от раскрытия. Храните достоверную резервную копию вашего каталога общих ключей и вашего каталога секретных ключей на защищенных от записи носителях.
Так как ваш собственный достоверный общий ключ используется как последняя инстанция для прямого или косвенного удостоверения всех остальных ключей в каталоге, этот ключ является наиболее важным для защиты от подделки. Для обнаружения любой подделки вашего собственного абсолютно достоверного общего ключа PGP может быть сконфигурирована таким образом, чтобы автоматически сравнивать ваш общий ключ с резервной копией на защищенном от записи носителе.
PGP, в принципе, считает, что вы будете поддерживать физическую защиту вашей системы и ваших каталогов ключей, столь же хорошо, сколь и собственно вашу копию PGP. Если злоумышленник имеет доступ к вашему диску, тогда, теоретически, он может изменить собственно PGP.
Один несколько сложный способ защиты вашего собственного каталога общих ключей от вмешательства заключается в подписывании всего каталога вашим секретным ключом. Вы могли делать это посредством создания отдельного удостоверения подписи каталога общих ключей, посредством подписания каталога с помощью опции "-sb" (см. раздел "Отделение подписей от сообщений" в руководстве пользователя PGP, часть "Специальные Разделы"). К сожалению, вы будете должны еще хранить отдельную достоверную копию вашего собственного общего ключа для проверки сделанной подписи. Вы не можете полагаться на ваш собственный общий ключ, хранящийся в каталоге, так как он является частью того, что вы пытаетесь проверить.