Как защитить открытый ключ от подмены
В среде криптосистем с открытым ключом вам нет нужды предохранять открытые ключи от компрометации. Напротив, гораздо лучше, когда они широко распространены. Но очень важно защищать их от подделки, дабы всегда сохранялась уверенность, что конкретный открытый ключ действительно принадлежит человеку, чьё имя указано в сведениях сертификата. В этом состоит самое слабое место криптосистем с открытым ключом и это их главная уязвимость. Давайте для начала представим потенциально возможный инцидент, а затем разберёмся, как его не допустить.
Предположим, вам нужно отправить секретное послание Алисе. Вы скачиваете её сертификат и открытый ключ с сервера-депозитария, затем этим ключом зашифровываете письмо и отправляете его по электронной почте.
К несчастью для вас и Алисы, злоумышленник Мэллори сгенерировал собственную ключевую пару с идентификационными сведениями Алисы в сертификате (имя, email), взломал сервер и незаметно подменил подлинный открытый ключ Алисы своей подделкой. Ничего не подозревая, вы использовали поддельный ключ Мэллори вместо открытого ключа Алисы, ведь всё выглядело вполне правдоподобно, поскольку на поддельном ключе была идентификационная информация Алисы. Теперь Мэллори может перехватить и расшифровать сообщение, предназначенное Алисе, поскольку в его распоряжении соответствующий закрытый ключ. Он даже может вновь зашифровать письмо реальным ключом Алисы и отправить его по назначению, так что никто не заметит ничего подозрительного. Более того, он может делать собственным закрытым ключом подписи, якобы принадлежащие Алисе, поскольку для их проверки все будут использовать его подставной открытый ключ.
Единственный способ избежать подобной проблемы – не допускать махинаций с открытыми ключами. Это несложно, если вы получили открытый ключ Алисы непосредственно от неё при личной встрече, но может оказаться весьма проблематичным, если она в тысячах миль от вас или просто в данный момент недоступна.
Вероятно, вы сможете получить ключ Алисы от вашего с ней общего друга Дэвида, который имеет подлинную копию её открытого ключа. Дэвид может подписать открытый ключ Алисы собственным закрытым, тем самым поручаясь за его достоверность.
Так, Дэвид заверит сертификат ключа, чем укажет, что ключ Алисы не был подделан. В то же время, проверка подписи поручителя на сертификате требует наличия у вас подлинной копии открытого ключа Дэвида. Вероятно, Дэвид также сможет предоставить и Алисе надёжную копию вашего ключа. Таким образом, он станет доверенным посредником-поручителем между вами и Алисой.
Этот подписанный сертификат открытого ключа Алисы может быть загружен ей самой или Дэвидом на сервер-депозитарий с тем, чтобы вы могли его получить в любое удобное время. Скачав сертификат, вы сверяете подпись открытым ключом Дэвида и можете быть уверены, что это на самом деле подлинный открытый ключ Алисы. Ни один мошенник не сможет вас одурачить, выдавая свой поддельный ключ за ключ Алисы, поскольку никто не может подделать сертифицирующую этот ключ подпись Дэвида.
Широко известный и уважаемый человек может даже специализироваться на услугах посредничества и представительства между разными пользователями, подписывая сертификаты их открытых ключей. Этого доверенного индивида можно назвать Центром сертификации. Цифровой сертификат любого открытого ключа, содержащий подпись этого Центра сертификации, может быть априорно расценен как подлинный и действительно принадлежащий пользователю, чья идентификация указана в сведениях сертификата. Любому пользователю, желающему участвовать в такой Сети доверия, для проврки подписей будет достаточно достоверной копии открытого ключа ЦС. В некоторых случаях, ЦС может также выступать в качестве сервера-депозитария, позволяя пользователям сети запрашивать из него открытые ключи; но для сервера-депозитария заверять ключи нет никакой необходимости.
Доверенный централизованный ЦС особенно уместен в крупных корпоративных и государственных учреждениях с единой системой управления. Некоторые организации используют иерархии ЦС.
В более децентрализованной среде возможность всем пользователям выступать в качестве представителей и доверенных поручителей своих друзей и коллег будет более предпочтительна, нежели централизованный источник сертификации ключей.
Одна из привлекательных особенностей PGP состоит в том, что он реализуется равно эффективно и в централизованной среде с Центром сертификации, и в более децентрализованной, в которой пользователи самостоятельно обмениваются своими персональными ключами.
Комплекс мер по защите открытых ключей от подделки – это наиболее сложная проблема практических реализаций криптосистем с открытым ключом. Это «ахиллесова пята» всей асимметричной криптографии, и большая часть всех механизмов PGP завязана именно на решение этой главной задачи.
Не используйте чужой открытый ключ, пока полностью не убедитесь, что это не подделка, а подлинный ключ человека, чья идентификация указана в сведениях сертификата. Вы можете быть уверены в подлинности ключа, если получили его напрямую от владельца при личной встрече, либо если его сертификат подписан человеком, которому вы доверяете, при условии, что располагаете достоверной копией ключа поручителя. Кроме того, в сведениях сертификата должно быть отражено как имя, так и фамилия пользователя, а не одно его имя.
Как бы вы ни были опытны, не забывайте о мерах предосторожности и не полагайтесь на подлинность скачанного с сервера-депозитария или с веб-сайта открытого ключа, если он не заверен кем-то, кому вы доверяете. Такой несертифицированный открытый ключ мог быть подделан или заменён кем угодно, возможно даже системным администратором сервера или веб-сайта.
Если вас просят подписать чей-то ключ, прежде убедитесь, что он действительно принадлежит человеку, указанному в идентификации сертификата, поскольку подпись на сертификате открытого ключа – это ваше поручительство за его подлинность и принадлежность указанному человеку. Все, кто вам доверяет, примут этот открытый ключ за достоверный, потому что он несёт вашу сертифицирующую подпись. Не полагайтесь на домыслы и чужое мнение: подписывайте открытый ключ только тогда, когда лично и непосредственно убедились в его принадлежности заявленному владельцу. Предпочтительнее подписывать только те ключи, которые были напрямую получены от их истинных владельцев.
Для подписания сертификата ключа вы должны быть гораздо более уверены в его подлинности, нежели для его личного использования с целью шифрования сообщений. Для установления подлинности ключа только для личного применения будет достаточно подписи доверенного поручителя. Но чтобы подписать ключ самому, вам необходима собственная независимая непосредственная убеждённость в том, кто в действительности является владельцем этого ключа. Возможно, вам стоит позвонить владельцу (убедитесь, что говорите с тем, с кем надо) и попросить его прочитать отпечаток ключа, дабы удостовериться, что ключ, находящийся у вас, является точной копией оригинального.
Имейте в виду: ваша подпись на сертификате ключа не поручительствует за доверие владельцу; она поручительствует только за достоверность (подлинность) этого открытого ключа. Вы не рискуете репутацией, подписывая ключ социопата, если полностью убеждены, что ключ действительно принадлежит ему. Другие люди поверят в подлинность ключа, поскольку он подписан вами (допуская, что они вам доверяют), но не поверят его владельцу как человеку. Доверие целостности ключа и доверие его обладателю – не одно и то же.
Полезно держать свой открытый ключ вместе с набором удостоверяющих подписей от ряда поручителей в надежде, что большинство людей доверится сертифицирующей подписи хотя бы одного из них. Вы можете разместить свой ключ с набором подписей в различных депозитариях. Если подписываете чужой открытый ключ, верните его копию с вашей подписью обратно владельцу; таким образом, вы сможете выступать в качестве его представителя.
Примите все меры, чтобы никто не мог подменить файл вашей собственной связки открытых ключей. Проверка подписей на сертификате нового ключа полностью зависит от целостности достоверных открытых ключей, уже находящихся на вашей связке. Держите связку под физическим контролем; желательно хранить её, равно как и закрытый ключ, на собственном персональном компьютере, нежели на многопользовательской системе со свободным доступом или служебном ПК; это необходимо для защиты связки от подделки, а не от компрометации. Храните актуальную достоверную резервную копию связки открытых и закрытых ключей на защищённом от записи внешнем носителе, например, на компакт-диске.
Так как ваш собственный открытый ключ является последним источником прямой или опосредованной проверки подлинности всех остальных ключей на связке, этот ключ защитить от подделки важнее всего. Будет лучше, если вы сделаете его резервную копию и поместите её на надёжный носитель.
PGP в своей логике исходит из допущения, что вы держите связки ключей, сам PGP и систему в целом в полной физической безопасности. Если злоумышленник получит доступ к компьютеру, тогда, теоретически, он сможет изменить программу, делая неэффективными все её механизмы обнаружения недостоверных ключей.
Несколько усложнённым способом защиты всей связки открытых ключей от подделки будет подписание её файла закрытым ключом. Вы можете сделать это, создав съёмную подпись (detached signature) файла и регулярно её сверяя.