PGP хранит ключи в зашифрованном виде. Они содержатся в двух файлах на жёстком диске; один файл для открытых ключей, другой — для закрытых. Эти файлы называются связками (keyrings). Используя PGP, вы, время от времени, будете добавлять открытые ключи своих корреспондентов на связку открытых. Ваши закрытые ключи находятся на связке закрытых. Если вы потеряете (удалите) связку закрытых ключей, то уже никаким образом не сможете расшифровать информацию, зашифрованную для ключей с этой связки. Следовательно, сохранение пары резервных копий этого файла является полезной практикой.
Цифровые подписи
Дополнительное преимущество от использования криптосистем с открытым ключом состоит в том, что они предоставляют возможность создания электронных цифровых подписей (ЭЦП). Цифровая подпись позволяет получателю сообщения убедиться в аутентичности источника информации (иными словами, в том, кто является автором информации), а также проверить, была ли информация изменена (искажена), пока находилась в пути. Таким образом, цифровая подпись является средством аутентификации и контроля целостности данных. Кроме того, ЭЦП несёт принцип неотречения, который означает, что отправитель не может отказаться от факта своего авторства подписанной им информации. Эти возможности столь же важны для криптографии, как и секретность.
ЭЦП служит той же цели, что печать или собственноручный автограф на бумажном листе. Однако вследствие своей цифровой природы ЭЦП превосходит ручную подпись и печать в ряде очень важных аспектов. Цифровая подпись не только подтверждает личность подписавшего, но также помогает определить, было ли содержание подписанной информации изменено. Собственноручная подпись и печать не обладают подобным качеством, кроме того, их гораздо легче подделать. В то же время, ЭЦП аналогична физической печати или факсимиле в том плане, что, как печать может быть проставлена любым человеком, получившим в распоряжение печатку, так и цифровая подпись может быть сгенерирована кем угодно с копией нужного закрытого ключа[5].
Некоторые люди используют цифровую подпись гораздо чаще шифрования. Например, вы можете не волноваться, если кто-то узнает, что вы только что поместили $1000 на свой банковский счёт, но вы должны быть абсолютно уверены, что производили транзакцию через банковского кассира.
Простой способ генерации цифровых подписей показан на рисунке 6. Вместо зашифрования информации чужим открытым ключом, вы шифруете её своим собственным закрытым. Если информация может быть расшифрована вашим открытым ключом, значит её источником являетесь вы.
Хэш-функция
Однако описанная выше схема имеет ряд существенных недостатков. Она крайне медлительна и производит слишком большой объём данных — по меньшей мере вдвое больше объёма исходной информации. Улучшением такой схемы становится введение в процесс преобразования нового компонента — односторонней хэш-функции. Одностороняя хэш-функция берёт ввод произвольной длины, называемый прообразом, — в данном случае, сообщение любого размера, хоть тысячи или миллионы бит — и генерирует строго зависящий от прообраза вывод фиксированной длины, допустим, 160 бит. Хэш-функция гарантирует, что если информация будет любым образом изменена — даже на один бит, — в результате получится совершенно иное хэш-значение.
В процессе цифрового подписания PGP обрабатывает сообщение криптографически стойким односторонним хэш-алгоритмом. Эта операция приводит к генерации строки ограниченной длины, называемой дайджестом сообщения (message digest)[6]. (Опять же, любое изменение прообраза приведёт к абсолютно иному дайджесту.)
Затем PGP зашифровывает полученный дайджест закрытым ключом отправителя, создавая «электронную подпись», и прикрепляет её к прообразу. PGP передаёт ЭЦП вместе с исходным сообщением. По получении сообщения, адресат при помощи PGP заново вычисляет дайджест подписанных данных, расшифровывает ЭЦП открытым ключом отправителя, тем самым сверяя, соответственно, целостность данных и их источник; если вычисленный адресатом и полученный с сообщением дайджесты совпадают, значит информация после подписания не была изменена. PGP может как зашифровать само подписываемое сообщение, так и не делать этого; подписание открытого текста без зашифрования полезно в том случае, если кто-либо из получателей не заинтересован или не имеет возможности сверить подпись (допустим, не имеет PGP).
Если в механизме формирования ЭЦП применяется стойкая односторонняя хэш-функция, нет никакого способа взять чью-либо подпись с одного документа и прикрепить её к другому, или же любым образом изменить подписанное сообщение. Малейшее изменение в подписанном документе будет обнаружено в процессе сверки ЭЦП.
ЭЦП играют важнейшую роль в удостоверении и заверении ключей других пользователей PGP.
Цифровые сертификаты
Одна из главных проблем асимметричных криптосистем состоит в том, что пользователи должны постоянно следить, зашифровывают ли они сообщения истинными ключами своих корреспондентов. В среде свободного обмена открытыми ключами через общественные серверы-депозитарии атаки по принципу"человек посередине" представляют серьёзную потенциальную угрозу. В этом виде атак злоумышленник подсовывает пользователю собственный ключ, но с именем предполагаемого адресата; данные зашифровываются подставным ключом, перехватываются его владельцем-злоумышленником, попадая в итоге в чужие руки.
В среде криптосистем с открытым ключом критически важно, чтобы вы были абсолютно уверены, что открытый ключ, которым собираетесь что-то зашифровать — не искусная имитация, а истинная собственность вашего корреспондента. Можно попросту шифровать только теми ключами, которые были переданы вам их владельцами из рук в руки на дискетах. Но предположим, что нужно связаться с человеком, живущим на другом краю света, с которым вы даже незнакомы; как вы можете быть уверены, что получили его подлинный ключ?
Цифровые сертификаты ключей упрощают задачу определения принадлежности открытых ключей предполагаемым владельцам.
Сертификат есть форма удостоверения. Иные виды удостоверений включают ваши водительские права, государственный паспорт, свидетельство о рождении, и т. п. Каждое из них несёт некоторую идентифицирующую вас информацию и определённую неподделываемую запись, что кто-то другой (госструктура, организация) установил вашу личность. Некоторые сертификаты, такие как паспорт, — самодостаточное подтверждение вашей личности; будет довольно скверно, если кто-то похитит его, чтобы выдать себя за вас.
Цифровой сертификат в своём предназначении аналогичен физическому. Цифровой сертификат ключа — это информация, прикреплённая к открытому ключу пользователя, помогающая другим установить, является ли ключ подлинным и верным. Цифровые сертификаты нужны для того, чтобы сделать невозможной попытку выдать ключ одного человека за ключ другого.
Цифровой сертификат состоит из трёх компонентов:
открытого ключа, к которому он приложен;
данных, или записей, сертификата (сведения о личности пользователя, как то, имя, электронная почта и т. п., а также, по необходимости, дополнительные ограничителельные сведения: права допуска, рабочие лимиты и прочее);
одной или нескольких цифровых подписей, "связывающих" ключ с сертификатом.
Цель ЭЦП на сертификате — указать, что сведения сертификата были заверены доверенным третьим лицом или организацией. В то же время цифровая подпись не подтверждает достоверность сертификата как целого; она является поручительством только того, что подписанная запись сертификата (идентифицирующая информация) связаны с данным открытым ключом.