Как зашифровать почту и сделать электронную подпись

Применяем криптографию на практике
5 минут27860

В прошлой статье мы рассмотрели, как в принципе устроена криптография и как она работает. Теперь научимся использовать эти знания. В этом нам поможет стандарт реализации сертификатов шифрования OpenPGP. Создаём свой сертификат

Для начала установим программу gpg4win. После этого появляется менеджер ключей Kleopatra:

При помощи этой утилиты мы будем выписывать сертификаты. Её преимущество в том, что сертификат затем можно будет загрузить на сервер ключей, а при переустановке программы на другой компьютер просто импортировать необходимые ключи с сервера.

Создаём сертификат. В меню «Файл» выбираем пункт «Создать новую пару ключей»: 

Выбираем тип сертификата — OpenPGP:

Затем нужно задать имя и адрес электронной почты. В дополнительных параметрах можно выбрать криптографические алгоритмы:

Обязательно обратите внимание, какие параметры будут у полученной ключевой пары:

При создании ключей необходимо будет задать пароль для защиты информации:

Когда создадутся ключи, лучше на всякий случай сделать их резервную копию и хранить её у себя: 

Ещё советую создать сертификат отзыва. С его помощью в дальнейшем можно будет сделать ваш сертификат недействительным, если понадобится.

В принципе, на этом этапе уже можно работать. Но для начала неплохо бы опубликовать сертификат на сервере ключей, чтобы иметь к нему доступ из любого места. Сделать это можно, выбрав из списка нужный сертификат и соответствующий пункт в меню «Файл»:

После этого сертификат экспортируется на сервер ключей, который указан в настройках Kleopatra (по умолчанию это http://keys.gnupg.net).

Теперь мы можем зашифровать или расшифровать файл, подписать его и проверить подпись. 

Шифруем файл при помощи OpenPGP

Выбираем сертификат, жмём кнопку «Подписать / зашифровать». В открывшемся окне указываем файл для шифрования.

Теперь надо выбрать, для кого мы шифруем файлы.

Потом вводим пароль для сертификата — и всё, файл зашифрован. Можно открыть его в текстовом редакторе и посмотреть:

Расшифровываем файл

В Windows для расшифровки достаточно двойного клика по созданному зашифрованному файлу. Если в системе установлена Kleopatra, то ассоциация файлов настраивается автоматически и программа сама запускается.

Чтобы собеседники могли отправлять нам зашифрованные сообщения и проверять подпись отправленных нами файлов, нужно экспортировать наш открытый ключ (сертификат) в файл. Для этого есть кнопка «Экспорт...».

Теперь этот файл можно передать на другое устройство. А собеседник сможет установить такой сертификат в свой менеджер ключей (например, Kleopatra) — и отправлять нам зашифрованные нашим открытым ключом сообщения. Этим же открытым ключом проверяется целостность ЭЦП у файлов, которые мы ему отправим.

Соответственно, если мы хотим зашифровать почту для собеседника, нам нужен его открытый ключ шифрования. Он может прислать его письмом или опубликовать на сервере ключей, чтобы мы этот ключ загрузили.

Интеграция с электронной почтой

В популярном почтовом клиенте Mozilla Thunderbird есть интересный плагин для работы с сертификатами ЭЦП и шифрования сообщений — Enigmail. Он позволяет и шифровать почту, и подписывать её с помощью ЭЦП. Для работы плагина в системе должен быть установлен компонент PGP. Во многих Debian-подобных ОС Linux он присутствует в репозиториях пакетов. 

Установите в систему PGP и настройте сертификаты шифрования, как обговорили выше. И можно перейти к настройке почтового клиента.

Чтобы установить Enigmail в Thunderbird, выберите меню «Инструменты» — «Дополнения». Далее найдите Enigmail и выполните инструкции:

Теперь мы можем создать новое письмо — при этом в меню появится пункт Enigmail. Настройки программы разнообразны и находятся в меню Enigmail — Preferences:

В настройках вы можете проверить, есть ли в системе GnuPG (ссылка выше). Это критически важно.

Можно настроить систему так, чтобы она автоматически прикрепляла открытый ключ при отправке сообщения (если оно зашифровано или подписано). Далее возможны два сценария.

Сценарий 1: если вы ранее создали ключи и экспортировали их на сервер. В этом случае в Enigmail их можно получить с сервера. Добавляем в Thunderbird учётную запись почты, для которой были сформированы ключи. При создании письма у вас появится меню Enigmail, в котором можно будет импортировать ключи в систему:

Если щёлкнуть правой кнопкой мыши по полю с именем ключа, то попадём в контекстное меню с основными операциями, которые можно выполнить с сертификатами:

Теперь составляем письмо и выбираем в меню Enigmail пункты Sign Message и Attach my public key.

Возможно, придётся указать, как подписать письмо. Выбирайте строчку с PGP.

Адресат теперь получит подписанное письмо и сможет импортировать себе ключ отправителя.

Как только он сделает это, сможет проверить подлинность подписи.

Сценарий 2: если ключи не были созданы. В этом случае их можно будет сгенерировать прямо в Enigmail. Это делается с помощью мастера настройки согласно руководству или вручную.

Для тестирования мы будем использовать тестовый почтовый сервер на виртуальной машине с условным доменом (неважно каким). Создадим ключи для учётной записи pc1@”имя домена” и отправим его по адресу pc2@”имя домена”.

Сначала создаём новое сообщение. Далее переходим в меню Enigmail и выбираем раздел Key Management:

Теперь в открывшемся окне выбираем Generate — New Key Pair:

В следующем окне надо задать параметры ключей. Особенно важен их срок жизни — стоит реально оценить, насколько необходимо делать его долгим:

По завершении процесса система посоветует сгенерировать сертификат отзыва. Напомню: он пригодится, чтобы пометить сертификат как недействительный:

Система спросит пароль от сертификатов:

Теперь письмо можно подписать (и / или зашифровать) и отправить получателю. Для этого на панели появятся две кнопки. Помните, что сообщение подписывается закрытым ключом отправителя, а подпись проверяется по его открытому ключу (который можно послать вместе с письмом):

Получатель может импортировать себе открытый ключ отправителя. После этого письмо можно будет проверить:

Если надо зашифровать сообщение, потребуется открытый ключ получателя. Он сможет переслать его нам вместе с подписанным письмом.

Теперь встанем на место пользователя — сгенерируем открытый ключ для пользователя pc2 (аналогично pc1):

После генерации ключа можно создать новое сообщение и прикрепить ключ для pc2. На стороне получателя (теперь это pc1) добавим ключ в список доверенных. После этого можно будет проверить подпись:



Если потребуется зашифровать сообщение от pc1 к pc2, то потребуется открытый ключ получателя — ключ pc2. А если ещё и подписать — то и открытый ключ отправителя (pc1):

Если оба нужных ключа у отправителя есть, то они прикрепляются к письму автоматически. Причём можно ещё и заменить строку с темой письма на невнятный текст. Вот так будет выглядеть для получателя зашифрованное (но не расшифрованное) и подписанное письмо:

Вводим пароль и видим открытый текст:

Письмо было подписано, подпись проверена и расшифрована.

Итоги и рекомендации

Мы научились защищать свою почту с помощью шифрования. Электронная подпись генерируется закрытым ключом отправителя, а проверяется по открытому ключу отправителя. Шифрование осуществляется открытым ключом получателя, а дешифрование — закрытым ключом получателя.

Несколько советов:

  • Всегда создавайте сертификаты отзыва — так вы сможете легко сделать недействительными свои сертификаты, если потребуется.
  • Используйте серверы хранения ключей (если вас не мучает паранойя, что они могут быть известны третьим лицам).
  • Не разбрасывайтесь ключами — не нужно их рассылать кому попало :)
  • Пользуйтесь менеджером ключей — так вы сможете эффективнее ими управлять.

Источники:

Напоминаю ссылку на первую часть статьи, где мы рассмотрели теоретическую часть и базовую работу с шифрованием.

Защита электронной почты — это лишь малая часть одного из курсов факультета информационной безопасности GeekUniversity. Присоединяйтесь, и вы научитесь защищать компьютерные сети, веб-приложения и всю IT-инфраструктуру в целом.

программированиеsecurity
Нашли ошибку в тексте? Напишите нам.
Спасибо,
что читаете наш блог!