Введение в шифрование с открытым ключом и PGP
PGP (от англ. Pretty Good Privacy) означает «вполне хорошая приватность». На самом деле это очень хорошая приватность. При правильном использовании PGP может защитить содержимое ваших сообщений, текстов и даже файлов от самых серьезных правительственных средств слежки. Когда Эдвард Сноуден говорил «шифрование работает», он подразумевал именно PGP и связанные с ней программы. Известны случаи, когда правительство добиралось до закрытых ключей (путём конфискации компьютеров, внедрения вредоносного кода прямым путём или с помощью онлайнового мошенничества). Это сводило к нулю защиту и даже позволяло расшифровать частную переписку. Представьте, что вы установили защищённый от взлома дверной замок. Злоумышленник, однако, может на улице выкрасть у вас ключ, скопировать его и подбросить обратно в карман. Так он получит доступ к вашему дому, не взламывая замок.
К сожалению, PGP – не самый лёгкий для освоения и использования инструмент. Стойкое шифрование, реализованное в PGP (шифрование с открытым ключом) – мощное, но довольно мудрёное средство защиты. Сама программа PGP существует с 1991 года и является ровесником самых первых версий Microsoft Windows. С тех давних пор внешний вид PGP не особенно изменился.
К счастью, сегодня есть много программ, которые скрывают «древний» дизайн PGP и заметно упрощают её использование, особенно в части шифрования и аутентификации эл. почты (основные функции PGP). Мы предлагаем руководства по установке и работе с этими программами.
Перед началом работы с PGP и сопутствующими программами давайте посвятим несколько минут основам шифрования с открытым ключом: что оно умеет, что не умеет и в каких случаях может быть полезно.
Игра с двумя ключами
В чём суть шифрования как метода борьбы со слежкой?
Возьмём обычный текст, например, «Привет, мама!». Зашифруем его: превратим в код, который непонятен для чужих глаз (скажем, «OhsieW5ge+osh1aehah6»). Отправляем этот код по интернету. Наше сообщение может увидеть множество людей, но кто из них поймет содержание? В таком виде письмо дойдёт до получателя. Он и только он может расшифровать и прочитать исходный текст.
Откуда получатель знает, как расшифровать сообщение, если это не может сделать никто другой? У получателя есть дополнительная информация, недоступная для остальных. Назовём её ключом для расшифровки. Этот ключ раскодирует содержащийся в шифровке текст.
Отправитель должен заранее сообщить ключ получателю. Например, «попробуй прочитать сообщение по его отражению в зеркале» или «каждую букву нужно заменить буквой, следующей по алфавиту». У этой стратегии есть недостаток. Если вы думаете, что вашу почту могут перехватывать, как вы перешлёте ключ? Ведь злоумышленник перехватит и его. Тогда нет смысла отправлять зашифрованные сообщения. С другой стороны, если у вас есть секретный способ передать ключ, почему бы не использовать этот же способ для отправки всех секретных сообщений?
Шифрование с открытым ключом – замечательное решение проблемы. Каждый человек, участвующий в переписке, может создать два ключа. Один ключ (закрытый) нужно держать в тайне и никогда не передавать другим людям. Другой ключ (открытый) можно передать всем, кто желает переписываться. Неважно, кто получит доступ к открытому ключу. Вы можете загрузить его в сеть, откуда его будут скачивать все желающие.
Сами «ключи» по сути являются очень большими числами с определёнными математическими свойствами. Открытый и закрытый ключи связаны между собой. Если вы шифруете что-либо открытым ключом, расшифровать это можно только парным закрытым ключом.
Допустим, вы хотите отправить секретное сообщение Аркадию. У него есть закрытый ключ, а парный ему открытый ключ Аркадий загрузил на свою веб-страницу. Вы скачиваете открытый ключ Аркадия, с его помощью шифруете сообщение и отправляете адресату. Только Аркадий может расшифровать сообщение, потому что лишь у него есть парный закрытый ключ.
Подпись
Шифрование с открытым ключом избавляет вас от проблемы передачи адресату ключа для расшифровки (у адресата уже есть ключ). Нужно лишь получить соответствующий открытый ключ для шифрования. Он доступен всем желающим, даже злоумышленникам. Открытым ключом можно только шифровать, но не расшифровывать.
Итак, то, что зашифровано определённым открытым ключом, может быть расшифровано только парным ему закрытым ключом. Но это ещё не всё. Если, наоборот, применить к сообщению закрытый ключ, результат можно обработать только с помощью парного открытого ключа.
Зачем? Кажется, нет никакой пользы в защите секретного сообщения при помощи закрытого ключа. Всякий, у кого есть ваш открытый ключ (а он доступен любому в этом мире), может снять такую защиту. Предположим, вы написали «Обещаю заплатить Антону 1000 рублей» и применили к этому тексту свой закрытый ключ. Кто угодно может потом использовать парный открытый ключ, но лишь один человек (и это главное) мог написать сообщение: владелец упомянутого закрытого ключа. Конечно, если он аккуратно хранит свой закрытый ключ. Так вы можете подтвердить своё авторство. То же самое мы делаем, когда подписываем бумаги в реальном мире.
Подпись также защищает сообщения от редактирования. Если кто-то попытается изменить «Обещаю заплатить Антону 1000 рублей» на «Обещаю заплатить Борису 1000 рублей», заново подписать сообщение у злоумышленника не получится (у него нет закрытого ключа). Цифровая подпись гарантирует, что сообщение было действительно написано автором и не изменилось при передаче.
Подведём промежуточный итог. Шифрование с открытым ключом позволяет шифровать и безопасно пересылать сообщения всем, чьи открытые ключи вам известны. Если, в свою очередь, ваш открытый ключ известен другим людям, они могут отправлять вам сообщения, которые будете способны расшифровать только вы. Вы также можете подписывать сообщения. Тогда всякий, у кого есть ваш открытый ключ, сможет удостовериться в подлинности ваших писем. Если вы получили сообщение с чьей-то цифровой подписью, то можете использовать открытый ключ отправителя и убедиться, что сообщение написал именно он.
Вы, вероятно, уже догадались, что пользы от шифрования с отрытым ключом тем больше, чем больше людей знает ваш ключ. Очевидно, надо обеспечить безопасное хранение своего закрытого ключа. Если кто-либо получит копию вашего закрытого ключа, он сможет выдавать себя за вас и подписывать сообщения от вашего лица. В программе PGP есть функция отзыва закрытого ключа, и она позволяет предупредить людей о том, что ключу больше нельзя доверять, но это не лучшее решение. Главное правило для шифрования с открытым ключом: храните закрытый ключ в надежном месте.
Как работает PGP
Использование PGP – главным образом, работа по созданию и применению открытых и закрытых ключей. С помощью PGP вы можете создать пару ключей (открытый/закрытый), защитить закрытый ключ паролем и использовать ключи для подписания и шифрования сообщений. Программы на основе PGP также позволяют скачивать открытые ключи других пользователей и загружать свой открытый ключ на серверы – хранилища, где другие пользователи могут его найти. Мы предлагаем руководства по установке PGP-совместимых программ для разных почтовых клиентов.
Что самое важное в этом обзоре, спросите вы? Храните ваш закрытый ключ в безопасном месте и защищайте его длинным паролем. Открытый ключ можно давать всем, с кем вы хотите переписываться, и тем, кто хочет быть уверенным в подлинности ваших писем.
Дополнительные возможности PGP: сеть доверия
Возможно, вы уже заметили потенциальную проблему в шифровании с открытым ключом. Допустим, вы распространяете открытый ключ Барака Обамы. (По крайней мере, вы так утверждаете). Если люди вам поверят, они начнут отправлять Обаме письма, зашифрованные этим ключом. Они будут считать, что все сообщения, подписанные этим ключом, созданы Обамой. Такое случается редко, но в реальной жизни были прецеденты. В числе пострадавших – некоторые из авторов этого руководства. Их друзья стали жертвами мошенничества. (Правда, мы не можем сказать наверняка, имел ли злоумышленник возможность перехватывать сообщения и расшифровывать их, или он просто решил доставить неудобства людям, ведущим безопасную переписку).
Существует сценарий атаки, когда злоумышленник находится между двумя сетевыми собеседниками, читает их письма и периодически вставляет в переписку свои (сбивающие с толку) сообщения. Интернет устроен так, что информация проходит через множество разных компьютеров и рук. Поэтому такая атака («атака посредника») вполне возможна. Из-за неё обмен ключами без предварительных договорённостей – дело рискованное. «Вот мой ключ», – говорит Барак Обама и отправляет вам открытый ключ. Что если посредник прервал передачу ключа Обамы и подменил его ключ на собственный?
Как убедиться, что ключ действительно принадлежит конкретному человеку? Можно получить ключ от человека напрямую, но это ненамного проще, чем передавать друг другу единственный ключ и защищать его от перехвата. Как бы то ни было, люди обмениваются открытыми ключами при личных встречах и на так называемых «криптовечеринках».
PGP предлагает решение получше: «сеть доверия». Если вы считаете, что ключ принадлежит определённому человеку, вы можете подписать этот ключ и загрузить его (вместе с подписью) на сервер открытых ключей. Оттуда подписанный ключ могут скачивать заинтересованные люди.
В целом, чем больше людей, которым вы доверяете, подпишет ключ, тем выше доверие к такому ключу. PGP позволяет подписывать чужие ключи и доверять другим подписантам: если они подпишут ключ, ваша программа автоматически будет считать его достоверным.
Сеть доверия не лишена недостатков. EFF и другие подобные организации ищут более совершенные решения. Но сегодня, если вы не готовы передавать ключи исключительно при личной встрече, использование сети доверия и серверов открытых ключей – самая подходящая альтернатива.
Метаданные: что не может PGP
PGP обеспечивает секретность, подлинность и целостность содержимого сообщений. Но это не единственные аспекты приватности. Как мы уже говорили, информация о вашем сообщении (метаданные) может быть такой же разоблачающей, как и содержимое. Если вы используете PGP для переписки с каким-нибудь известным в вашей стране диссидентом, то можете оказаться в опасности из-за самого факта шифрованного обмена сообщениями. Даже расшифровывать их необязательно. В некоторых странах вам может грозить тюрьма только за отказ расшифровать ваши сообщения.
PGP не скрывает информацию об адресате и сам факт использования PGP. Если вы загружаете свой открытый ключ на серверы ключей или подписываете ключи других пользователей, то фактически показываете всему миру, какой именно ключ принадлежит вам и кого вы знаете.
Вы не обязаны это делать. Вы можете хранить ваш открытый ключ в секрете, давать его только тем, кому доверяете, просить их не загружать его на серверы открытых ключей. Вам не обязательно связывать ключ с вашим именем.
Скрыть переписку с определённым человеком сложнее. Один из вариантов – использование обоими собеседниками анонимных учётных записей электронной почты через Tor. PGP по-прежнему будет обеспечивать приватность вашей переписки, подлинность и целостность сообщений.