В ранних версиях PGP в качестве алгоритма хэш-функции применялся MD5, Message Digest Algorithm, опубликованный для свободного применения компанией RSA Data Security. MD5 представляет собой хэш-алгоритм со 128-битовым выходом. В 1996 году MD5 был практически взломан немецким криптографом Гансом Доббертином. Хотя алгоритм не поддался окончательно, в нём выявились столь серьёзные недостатки (тенденция сжимающей функции алгоритма к коллизиям), что теперь никому более не рекомендуется использовать его для генерации ЭЦП. Дальнейшая работа в этой области наверняка позволит полностью его взломать, что сделает возможной свободную подделку электронных подписей. Если вы не желаете в один прекрасный день обнаружить свою электронную подпись на подставных признательных показаниях, переходите к применению новых ключей DSA и RSA v4 как предпочтительного метода генерации цифровых подписей, поскольку они в качестве криптографически стойкой односторонней хэш-функции используют SHA-1.
Как защитить открытый ключ от подмены
В среде криптосистем с открытым ключом вам нет нужды предохранять открытые ключи от компрометации. Напротив, гораздо лучше, когда они широко распространены. Но очень важно защищать их от подделки, дабы всегда сохранялась уверенность, что конкретный открытый ключ действительно принадлежит человеку, чьё имя указано в сведениях сертификата. В этом состоит самое слабое место криптосистем с открытым ключом и это их главная уязвимость. Давайте для начала представим потенциально возможный инцидент, а затем разберёмся, как его не допустить.
Предположим, вам нужно отправить секретное послание Алисе. Вы скачиваете её сертификат и открытый ключ с сервера-депозитария, затем этим ключом зашифровываете письмо и отправляете его по электронной почте.
К несчастью для вас и Алисы, злоумышленник Мэллори сгенерировал собственную ключевую пару с идентификационными сведениями Алисы в сертификате (имя, email), взломал сервер и незаметно подменил подлинный открытый ключ Алисы своей подделкой. Ничего не подозревая, вы использовали поддельный ключ Мэллори вместо открытого ключа Алисы, ведь всё выглядело вполне правдоподобно, поскольку на поддельном ключе была идентификационная информация Алисы. Теперь Мэллори может перехватить и расшифровать сообщение, предназначенное Алисе, поскольку в его распоряжении соответствующий закрытый ключ. Он даже может вновь зашифровать письмо реальным ключом Алисы и отправить его по назначению, так что никто не заметит ничего подозрительного. Более того, он может делать собственным закрытым ключом подписи, якобы принадлежащие Алисе, поскольку для их проверки все будут использовать его подставной открытый ключ.
Единственный способ избежать подобной проблемы — не допускать махинаций с открытыми ключами. Это несложно, если вы получили открытый ключ Алисы непосредственно от неё при личной встрече, но может оказаться весьма проблематичным, если она в тысячах миль от вас или просто в данный момент недоступна.
Вероятно, вы сможете получить ключ Алисы от вашего с ней общего друга Дэвида, который имеет подлинную копию её открытого ключа. Дэвид может подписать открытый ключ Алисы собственным закрытым, тем самым поручаясь за его достоверность.
Так, Дэвид заверит сертификат ключа, чем укажет, что ключ Алисы не был подделан. В то же время, проверка подписи поручителя на сертификате требует наличия у вас подлинной копии открытого ключа Дэвида. Вероятно, Дэвид также сможет предоставить и Алисе надёжную копию вашего ключа. Таким образом, он станет доверенным посредником-поручителем между вами и Алисой.
Этот подписанный сертификат открытого ключа Алисы может быть загружен ей самой или Дэвидом на сервер-депозитарий с тем, чтобы вы могли его получить в любое удобное время. Скачав сертификат, вы сверяете подпись открытым ключом Дэвида и можете быть уверены, что это на самом деле подлинный открытый ключ Алисы. Ни один мошенник не сможет вас одурачить, выдавая свой поддельный ключ за ключ Алисы, поскольку никто не может подделать сертифицирующую этот ключ подпись Дэвида.
Широко известный и уважаемый человек может даже специализироваться на услугах посредничества и представительства между разными пользователями, подписывая сертификаты их открытых ключей. Этого доверенного индивида можно назвать Центром сертификации. Цифровой сертификат любого открытого ключа, содержащий подпись этого Центра сертификации, может быть априорно расценен как подлинный и действительно принадлежащий пользователю, чья идентификация указана в сведениях сертификата. Любому пользователю, желающему участвовать в такой Сети доверия, для проврки подписей будет достаточно достоверной копии открытого ключа ЦС. В некоторых случаях, ЦС может также выступать в качестве сервера-депозитария, позволяя пользователям сети запрашивать из него открытые ключи; но для сервера-депозитария заверять ключи нет никакой необходимости.
Доверенный централизованный ЦС особенно уместен в крупных корпоративных и государственных учреждениях с единой системой управления. Некоторые организации используют иерархии ЦС.
В более децентрализованной среде возможность всем пользователям выступать в качестве представителей и доверенных поручителей своих друзей и коллег будет более предпочтительна, нежели централизованный источник сертификации ключей.
Одна из привлекательных особенностей PGP состоит в том, что он реализуется равно эффективно и в централизованной среде с Центром сертификации, и в более децентрализованной, в которой пользователи самостоятельно обмениваются своими персональными ключами.
Комплекс мер по защите открытых ключей от подделки — это наиболее сложная проблема практических реализаций криптосистем с открытым ключом. Это "ахиллесова пята" всей асимметричной криптографии, и большая часть всех механизмов PGP завязана именно на решение этой главной задачи.
Не используйте чужой открытый ключ, пока полностью не убедитесь, что это не подделка, а подлинный ключ человека, чья идентификация указана в сведениях сертификата. Вы можете быть уверены в подлинности ключа, если получили его напрямую от владельца при личной встрече, либо если его сертификат подписан человеком, которому вы доверяете, при условии, что располагаете достоверной копией ключа поручителя. Кроме того, в сведениях сертификата должно быть отражено как имя, так и фамилия пользователя, а не одно его имя.
Как бы вы ни были опытны, не забывайте о мерах предосторожности и не полагайтесь на подлинность скачанного с сервера-депозитария или с веб-сайта открытого ключа, если он не заверен кем-то, кому вы доверяете. Такой несертифицированный открытый ключ мог быть подделан или заменён кем угодно, возможно даже системным администратором сервера или веб-сайта.
Если вас просят подписать чей-то ключ, прежде убедитесь, что он действительно принадлежит человеку, указанному в идентификации сертификата, поскольку подпись на сертификате открытого ключа — это ваше поручительство за его подлинность и принадлежность указанному человеку. Все, кто вам доверяет, примут этот открытый ключ за достоверный, потому что он несёт вашу сертифицирующую подпись. Не полагайтесь на домыслы и чужое мнение: подписывайте открытый ключ только тогда, когда лично и непосредственно убедились в его принадлежности заявленному владельцу. Предпочтительнее подписывать только те ключи, которые были напрямую получены от их истинных владельцев.
Для подписания сертификата ключа вы должны быть гораздо более уверены в его подлинности, нежели для его личного использования с целью шифрования сообщений. Для установления подлинности ключа только для личного применения будет достаточно подписи доверенного поручителя. Но чтобы подписать ключ самому, вам необходима собственная независимая непосредственная убеждённость в том, кто в действительности является владельцем этого ключа. Возможно, вам стоит позвонить владельцу (убедитесь, что говорите с тем, с кем надо) и попросить его прочитать отпечаток ключа, дабы удостовериться, что ключ, находящийся у вас, является точной копией оригинального.
Имейте в виду: ваша подпись на сертификате ключа не поручительствует за доверие владельцу; она поручительствует только за достоверность (подлинность) этого открытого ключа. Вы не рискуете репутацией, подписывая ключ социопата, если полностью убеждены, что ключ действительно принадлежит ему. Другие люди поверят в подлинность ключа, поскольку он подписан вами (допуская, что они вам доверяют), но не поверят его владельцу как человеку. Доверие целостности ключа и доверие его обладателю — не одно и то же.
Полезно держать свой открытый ключ вместе с набором удостоверяющих подписей от ряда поручителей в надежде, что большинство людей доверится сертифицирующей подписи хотя бы одного из них. Вы можете разместить свой ключ с набором подписей в различных депозитариях. Если подписываете чужой открытый ключ, верните его копию с вашей подписью обратно владельцу; таким образом, вы сможете выступать в качестве его представителя.