Наша цель — передавать письма через интернет в зашифрованном виде. Т. е. мы хотим зашифровать письмо на устройстве отправителя, послать его через сеть и расшифровать на устройстве получателя. В этом случае злоумышленники, которые прослушивают каналы передачи информации, не смогут получить доступ к тексту нашего письма.
В основе технологии, которую мы будем использовать, лежит теория асимметричного шифрования. Грубо говоря, для шифра будут использоваться два ключа — закрытый и открытый. Открытый вы можете передавать кому угодно: им будут шифроваться сообщения, предназначенные вам. Прочитать же эти сообщения сможет лишь тот, у кого есть закрытый ключ — только вы. Поэтому свой закрытый ключ следует хранить в тайне.
Аналогичным образом устроена операция электронной цифровой подписи, которая позволяет приложить к исходному письму специальный файл, информирующий о том, что оригинальное письмо создано именно вами, и никто в него не вносил никаких изменений. Для генерации подписи используется ваш закрытый ключ, а для его проверки — открытый.
Шифровать, дешифровать, подписывать и проверять подписи будет бесплатная программа с открытым исходным кодом, проверенная поколениями специалистов. От вас требуется всего лишь: её установить, автоматически создать ключи и настроить почтовое окружение. Далее всё будет делаться в автоматическом режиме, изредка спрашивая у вас пароль.
Мы будем использовать программу под названием GnuPG, созданную по мотивам PGP (почитайте, там интересная история) благодаря стандарту OpenPGP (RFC 4880 — даже не читайте).
Для изложения и демонстрации в качестве основной операционной системы (ОС) будет использоваться Linux, с необходимыми комментариями для пользователей других ОС. Однако я действительно не понимаю зачем что-то шифровать на проприетарных системах с закрытым исходным кодом. ОС — очень сложная система и даже если её код передаётся спецслужбам, их ресурсы не позволяют гарантировать, что данное программное обеспечение не содержит закладок, бекдоров или прозрачных механизмов взлома системы, а также того, что результирующие бинарные сборки соответствуют исходному коду. Т. е. используя закрытое программное обеспечение (ПО) вы должны быть готовы, что абсолютно вся создаваемая на них информация передаётся вашим врагам и недоброжелателям.
Для работы нам понадобится почтовый аккаунт (адрес почты), почтовый клиент (программа на локальном компьютере, принимающая и отправляющая почту) и собственно программа GnuPG.
Так как всю скрытую почту планируется шифровать, подойдёт абсолютно любой почтовый адрес на платном или бесплатном, приватном или публичном почтовом сервере. От него требуется лишь устойчивой работы и возможности скачивать (POP3 и/или IMAP) и пересылать через него (SMTP) почту почтовым клиентом, установленном на вашем компьютере. Практически все популярные почтовые сервисы эту возможность предоставляют. Если вы не планируете хотя бы первое время изменять своим привычкам, боитесь что-то сломать, или просто хотите разово поэкспериментировать, рекомендую завести для шифрованной почты отдельный почтовый аккаунт. В этом случае можно настроить большинство операций в автоматическом режиме. Если понравится, по-аналогии можно будет распространить этот подход на все свои адреса.
Для чистоты эксперимента я завёл для этих целей аккаунт alexanderkrassotkin@yahoo.com. Тут и далее все адреса, числа и логи реальные, в том числе и для того, чтобы убедиться, что обладая всеми этими данными, невозможно прочитать и расшифрованное сообщение. Настройки клиента для почты на yahoo.com находятся тут.
Настройки POP3 или IMAP (получение) и SMTP (отправка) для Gmail, а также необходимые рекомендации, находятся на этих страницах: 1, 2. Настройки для Outlook.com (Hotmail), можно узнать тут. Настройки почтовых программ (почтовых клиентов) для Yandex, приведены на этой странице. Рекомендации о том, как настроить почтовую программу для адреса на Mail.ru, описаны тут. Если вы используете собственные виртуальные площадки, смотрите настройки у своего провайдера. В случае корпоративной почты, настройки можно узнать у своего системного администратора.
Почтовый клиент — программа, устанавливаемая на локальном компьютере и позволяющая принимать и отправлять почту.
Для наших целей подойдёт практически любой современный почтовый клиент с открытым исходным кодом. В настоящий момент я использую Evolution, в которой шифрование встроено в настройки. Универсальным решением, для всех платформ является Mozilla Thunderbird, для которой необходимо установить расширение (add-ons) Enigmail.
Преимущество использования почтового клиента состоят ещё и в том, что пользоваться почтой вы сможете без рекламы, в привычном интерфейсе, а ваш удалённый почтовый ящик будет бессмысленно взламывать, т. к. он не будет предназначен для хранения писем, а в случае с шифрованием, прочитать передаваемую корреспонденцию будет невозможно.
Если вы пользуетесь одним из дистрибутивов Linux, скорее всего у вас уже установлена GnuPG. Для проверки наберите в консоли gpg --help. Если же программы нет, воспользуйтесь установщиком или консольным менеджером пакетов (yum, apt и т.п.).
Если у вас установлена другая операционная система, скачайте последнюю версию GnuPG с официального сайта, воспользовавшись одним из официальных зеркал, например, этим.
Обладатели Windows могут также инсталлировать оконный вариант GnuPG — Gpg4win. Тем не менее далее все действия лучше производить в консольном (терминальном, интерфейсе командной строки) режиме.
Минимально необходимые шаги, для создания инфраструктуры GnuPG по шифрованию почты включают в себя следующие пункты: создание пароля (см. подготовка к генерации ключа), создание ключа, создание аннулирующего сертификата, экспорт открытого ключа, экспорт сертификата в открытое хранилище, бекап инфраструктуры и импорт ключей ваших респондентов.
Если вы работаете на Windows и установили Gpg4win, все действия по созданию и работе с ключами можно осуществить на ваш выбор из программы в оконном режиме или через интерфейс командной строки. Ответы на вопросы, которые задаст программа при создании и работе с ключами, смотрите ниже.
Перед генерацией ключей придумайте длинный и сложный (содержащий большие и маленькие буквы, цифры и знаки препинания) пароль, который вы в состоянии запомнить. Для этого подойдёт любая длинная фраза (пробелы в этом пароле допускаются). Секретный ключ будет храниться на вашем компьютере в зашифрованном виде именно этим паролем. При всех операциях, требующих доступа к вашему закрытому ключу, этот пароль будет запрашиваться. Если вы забудете пароль к секретному ключу, прочитать зашифрованные для вас сообщения будет невозможно. Поэтому сохраните ваш пароль таким образом, чтобы никто кроме вас не мог понять что это за набор букв и цифр и где его использовать.
Если вы предпочитаете Linux, или решили произвести настройку с помощью интерфейса командной строки, перейдите в консоль (терминал; интерфейс командной строки). Тут и далее вывод программы изображён на сером фоне. Обычным шрифтом показаны приглашения gpg, жирным — то что необходимо ввести.
Для генерации ключа наберите:
Вы попадёте в интерактивный режим, в котором вам придётся ответить на ряд вопросов. Вы можете самостоятельно изучить теорию и практику шифрования и вдумчиво ответить на вопросы, или просто довериться нашим рекомендациям или предлагаемым программой ответам (в скобочках).
Первым вопросом будет выбор алгоритма шифрования:
Введя «2», мы выбрали DSA алгоритм для электронной подписи и схему Эль-Гамаля для шифрования.
На следующем этапе вас попросят ввести длину ключа:
Общее правило: чем длиннее ключ, тем безопасней, однако ключи длиннее 2048 бит поддерживаются не всеми программами и их версиями.
Потом вас попросят ввести срок действия вашего ключа.
Мы выбрали бессрочные ключи, которые в любой момент можно аннулировать по соответствующей процедуре (об аннулирующем сертификате см. ниже).
Программа, как бы удивившись нашему выбору, переспросит, но мы будем непреклонны:
Далее следует ввести своё имя, почтовый адрес, для которого вы будете использовать этот ключ и комментарий. В поле комментария вы можете ввести что угодно, например, адрес своего сайта:
После, вас попросят два раза ввести придуманный на предварительном этапе пароль, который не будет отображаться в поле вывода, будьте внимательны.
Начнётся генерация ключа, во время которой вам следует активно пользоваться компьютером (слушать музыку, смотреть видео, печатать, двигать мышкой и т. п.). Из этих случайных действий якобы формируется необходимые для ключей случайные последовательности. Однако, на современных компьютерах, генерация ключа происходит очень быстро и вряд ли вы сможете насладиться генерацией случайной энтропии:
По завершении работы программа сообщила ID нашего основного ключа — 1D7C3C0B. ID ключа вам понадобиться для выполнения последующих операций.
Просмотреть все ключи в нашей базе и найти ID любого ключа всегда можно командой:
Или, если база большая, указав строку поиска (по любой информации, содержащейся в имени, адресе почте или в комментарии, например):
При использовании Gpg4win, вся информацию о созданных ключах будет размещена также в интерфейсе программы.
Если ваш закрытый ключ будет скомпрометирован (например, ваш компьютер взломали), или вы по каким-то причинам решите аннулировать ключ, вам будет необходим аннулирующий сертификат (специальный файл, содержащий информацию об аннулировании нашего ключа). Аннулирующий сертификат передаётся вашим респондентам и размещается на серверах в случае компрометации ключа, после чего все вновь подписанные вашим закрытым ключом письма, будут считаться недействительными.
После того, как вы потеряли доступ к своему устройству, создать аннулирующий сертификат будет невозможно. Поэтому его необходимо создавать заранее — сразу после генерации нового ключа — т. е. на данном этапе.
Дальнейшие действия лучше совершать в директории (папке), где хранится вся инфраструктура ключей.
В Linux инфраструктура ключей хранится в папке ~/.gnupg, в Windows — в папке %APPDATA%\GnuPG. Для дальнейших действий перейдём туда:
Для перехода в директорию GnuPG в Linux необходимо выполнить команду:
а в Windows:
Для его создания аннулирующего сертификата выполним следующую команду (указав имя файла, в который необходимо будет сохранить аннулирующий сертификат, в моём случае — revoke.1D7C3C0B.asc и ID нашего ключа — 1D7C3C0B; не забудьте указать ваши данные):
Программа запросит подтверждение желания создать аннулирующий сертификат и причину по которым мы решили отозвать ваш открытый ключ:
В качестве причины мы указали компрометацию ключа.
Следом gpg попросит ввести комментарий и пароль к секретному ключу:
Мы ввели Someone cracked me and got my key and passphrase (нас взломали и украли наш пароль) и подтвердили этот факт.
Аннулирующий сертификат создан и сохранён в текущей папке.
Внимание! После того, как вы сделаете бекап инфраструктуры (ниже), удалите этот файл. В противном случае, любой, кто получит к нему доступ, может аннулировать ваш сертификат без вашего ведома.
Посмотреть содержимое директории, в которой хранится инфраструктура GnuPG и куда только что мы сохранили аннулирующий сертификат в Linux можно командой:
а в Windows:
Если мы хотим, чтобы с нами могли обмениваться зашифрованными сообщениями, мы должны передать респондентам наш открытый ключ, для этого его необходимо экспортировать командой:
где 1D7C3C0B.openkey.asc — имя файла открытого ключа, а 1D7C3C0B — ID ключа. Не забудьте заменить эти данные на свой ID ключа.
После выполнения данной команды, в текущей папке будет создан файл с открытым ключом 1D7C3C0B.openkey.asc в ASCII формате, который вы можете передавать друзьям, публиковать на сайте, или поместить в глобальный репозиторий ключей. Вы можете посмотреть содержимое этого файла в своём текстовом редакторе. В моём случае он выглядит так:
Как было указано выше, вы можете передавать свой открытый ключ лично или публикуя на сайте, однако, существуют публичные открытые репозитории для хранения ключей. Все они синхронизируются между собой. Поэтому достаточно загрузить свой ключ на один из них следующей командой:
где pgp.mit.edu — один из репозиториев хранения ключей, а 1D7C3C0B — ID ключа (замените на свой).
После выполнения этой команды вы можете перейти на сервер pgp.mit.edu, и найти свой ключ по email или имени. Например, для моего ключа: на этой странице.
Также вы можете воспользоваться ручной загрузкой ключа, например, на сервер keyserver.pgp.com.
После создания инфраструктуры GnuPG её необходимо сохранить на случай поломки или взлома компьютера.
Теоретически, можно скопировать нужные файлы в открытом виде на флешку и положить на видное место, чем мы, очевидно, скомпрометируем всю нашу безопасность. На мой взгляд, так делать не следует.
Я рекомендую, во-первых, копировать всю инфраструктуру целиком (всю папку GnuPG), во-вторых, шифровать её, в третьих, сохранять получившийся бекап в каких-то онлайн хранилищах.
Для такого решения перейдём в домашнюю директорию.
Команда для Linux:
Команда для Windows:
Следом архивируем и зашифруем всю директорию, предварительно придумав очень длинный и очень сложный пароль (отличный от того, который мы используем для шифрования секретного ключа).
В Linux упаковку и сохранение можно выполнить одной командой:
где tar czf — .gnupg/ — упаковка директории, gpg --symmetric --cipher-algo aes256 — команда симметричного шифрования с помощью алгоритма aes256, filename — имя итогового файла, который можно загрузить в ваше личное онлайн хранилище файлов.
При необходимости, когда вам понадобится восстановить эти данные, вы сможете восстановить получившийся файл командой:
В Windows необходимо вначале упаковать директорию (например в файл gnupg.zip), а следом зашифровать получившийся файл командой:
Когда вам понадобиться восстановить эту директорию, для дешифровки выполните команду:
и распакуйте секретный файл filename в outputfilename.
Получившийся упакованный и зашифрованный файл с именем filename можно загрузить в онлайн хранилище, или на флешку, как вам удобней.
После бекапа инфраструктуры удалим лишние файлы, в том числе и созданный ранее аннулирующий сертификат.
Напомню, для того чтобы отправить кому-то зашифрованное письмо вам необходимо зашифровать его открытым ключом получателя. Т.е. вам необходимо импортировать в свою базу данных открытый ключ респондента.
Взять его можно из репозиториев открытых ключей (тех же, в которые вы загружали свой ключ), или получить лично. Мой открытый ключ, опубликованный выше можно скачать в виде файла тут.
Импортировать мой открытый ключ можно командой:
где 1D7C3C0B.pub.d.asc — имя импортируемого файла открытого ключа (исправляйте соответственно для других ключей).
После импорта ключа вам необходимо сообщить программе, что вы доверяете данному ключу и подписать его. Для этого отредактируем запись о новом, только что добавленном, ключе командой:
где 1D7C3C0B — ID импортируемого ключа.
Программа выведет информацию о ключе. Подтверждение происходит в интерактивном режиме. Первым делом вам необходимо подписать новый ключ, введя в интерактивном диалоге редактирования команду sign и подтвердив паролем к своему закрытому ключу:
В случае, если открытый ключ является срочным, вас попросят подтвердить, что доверять ключу вы будете до момента истечения его срока действия:
Далее вас попросят установить уровень доверия этому ключу:
Проверить правильность внесённых изменений можно интерактивной командой check:
Для сохранения внесённых изменений нужно выполнить интерактивную команду save:
Теперь у вас всё готово для обмена со мной зашифрованной почтой. Посылая сообщения вы будете шифровать их моим открытым ключом и подписывать своим закрытым, я же буду дешифровать их своим закрытым ключом и проверять вашу подпись вашим открытым.
Для настройки Evolution:
Для настройки связки Mozilla Thunderbird — Enigmail Add-ons:
GnuPG очень мощный инструмент, и если вы хотите продолжить обучение, необходимо глубже изучить его возможности.
Если кроме шифрования вы хотите использовать анонимность, рекомендуем применять шифрование с помощью GnuPG в связке с p2p анонимайзерами, например, Tor.
Если вы считаете, что существующие механизмы сложными и/или неудобными, создайте свою программу, и я с удовольствием приму участие в её тестировании, написании, рекламе, а возможно и в финансировании.
Данный текст представляет собой всего лишь демонстрацию технологии и инструкцию по быстрому практическому решению проблемы шифрованного обмена сообщениями электронной почты в минимально необходимом виде. Всюду, где можно, изложение упрощено, всё лишнее опущено. Поэтому данную информацию не следует воспринимать, как полностью необходимый и достаточный способ решения проблемы. Для более глубокого применения данной технологии в домохозяйствах следует продолжить изучение, проведя поиск по обозначенным в данном тексте ключевым словам. Для использования данной технологии в корпоративных и ведомственных масштабах, следует пригласить специалистов, способных провести аудит существующих решений и построить комплексную систему информационной безопасности.