Расшифровка сообщений. Получение открытого ключа с сервера ключей. Оценка GPG шифрования

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

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

Терминология

Существует некоторая путаница в терминологии. Например, далеко не все могут внятно объяснить, чем PGP отличается от GPG. Давайте же во всем разберемся.

  • OpenPGP — стандарт шифрования, описанный в RFC 4880 и RFC 6637 . Не следует путать с конкретными реализациями, такими, как PGP и GPG;
  • GnuPG или GPG — конкретная открытая (GPLv3) реализация OpenPGP, речь о которой пойдет в настоящей статье;
  • PGP — сильно проприетарная реализация OpenPGP от компании PGP Corporation. В 2010-м году компанию купила Symantec , а ее продукты переименовала во что-то типа Symantec Desktop Email Encryption;

Часто, говоря «PGP», люди имеют ввиду способ шифрования, описанный в OpenPGP, и соответственно любую из его реализаций.

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

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

Основные команды GnuPG

Генерируем ключи:

gpg --gen-key

Хорошей идеей будет выбрать алгоритм RSA и длину ключей 4096 бит.

Важно! Не забудьте пароль от закрытого ключа.

Частая проблема — сообщение вроде такого:

Not enough random bytes available. Please do some other work to give
the OS a chance to collect more entropy! (Need 204 more bytes)

Решается она установкой демона для сбора энтропии:

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

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

sudo apt-get install rng-tools

Просмотр списка ключей:

gpg --list-keys
gpg --list-secret-keys
gpg --list-public-keys

Получение fingerprint ключа:

gpg --fingerprint afiskon@ example.ru

Пример вывода:

pub 4096R/8640D6B9 2016-09-27
Fingerprint = DB5E AA39 0745 427D ED31 D189 3197 3F00 8640 D6B9
uid Aleksander Alekseev
sub 4096R/5982B4BF 2016-09-27

Fingerprints используются в основном для проверки того, что с сервера ключей (см далее) был импортирован действительно правильный ключ. Для поиска их не используют.

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

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

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

gpg --armor --output privkey.txt --export-secret-keys 8640D6B9

Импорт открытого ключа:

gpg --import key.txt

Импорт закрытого ключа:

gpg --allow-secret-key-import --import privkey.txt

Если не указать --alow-secret-key-import , импортируется только открытый ключ, и при попытке подписать что-то вы будете получать странные ошибки вроде:

gpg: no default secret key: secret key not available
gpg: msg.txt: sign+encrypt failed: secret key not available

Чем больше ключ, тем больше времени требуется для его защиты. Кто знает, как долго понадобится угадать свой ключ с технологией завтрашнего дня? Было время, когда симметричный ключ из 56 бит считался чрезвычайно безопасным. Клавиши хранятся в зашифрованном виде. Ваши личные ключи хранятся в вашем наборе личных ключей. Если вы потеряете кучу секретных ключей, вы не сможете расшифровать зашифрованную информацию ключами этой брелка.

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

Экспорт открытого ключа на keyserver:

gpg --keyserver pgp.mit.edu --send-keys 8640D6B9

Важно! После того, как вы залили ключ на keyserver, его будет невозможно удалить, только сделать revoke. Убедитесь, что вы сделали надежную резервную копию ключа. Если вы раньше никогда не работали с PGP/GPG, очень советую сначала потренироваться на почтовых адресах в зоне example.ru.

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

Описанная выше система имеет некоторые проблемы. Он медленный и производит большой объем данных. Добавление односторонней хэш-функции в процессе улучшает приведенную выше схему. Эта функция обрабатывает ввод переменной длины, чтобы получить на выходе элемент фиксированной длины, а именно 160 бит, В случае модификации данных хеш-функция гарантирует получение совершенно другого выходного значения.

Не имеет большого значения, какой keyserver указать. Например, еще есть keys.gnupg.net, а также другие. Все они время от времени обмениваются друг с другом данными . Не лишено смысла сделать send-keys сразу на несколько серверов, чтобы их быстрее увидели все пользователи PGP/GPG. Синхронизация серверов, по моим наблюдениям, занимает минут 10-15.

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

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

Hint: чтобы постоянно не указывать --keyserver , просто допишите в ~/.bashrc:

alias gpg ="gpg --keyserver pgp.mit.edu"

Импорт открытого ключа с keyserver:

gpg --keyserver pgp.mit.edu --search-keys afiskon@ example.ru

В мире PGP/GPG существуют так называемая сеть доверия (web of trust) . В двух словах это означает, что GPG не доверяет ключу, если только он не подписан кем-то, кому вы доверяете. Кроме того, если вы доверяете Пете, а Петя доверяет Коле, то вы автоматически доверяете Коле. В частности, по умолчанию при проверке подписи и прочих действиях GPG будет ругаться так:

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

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

Чтобы исправить это, говорим:

gpg --edit-key afiskon@ example.ru

Затем в диалоге говорим trust , жмем 5 («I trust ultimately»), говорим quit . Другие ключи можно подписать командой tsign . Кстати, там же можно сменить пароль от вашего ключа (команда passwd ), изменить дату экспирации ключа в любую сторону (команда expire ), добавить имя/email (команда adduid ), удалить имя/email (команда revuid ), посмотреть алгоритмы шифрования, используемые по умолчанию (showpref ) и делать другие интересные вещи.

Цифровой сертификат содержит данные, аналогичные физическому сертификату, и содержит информацию, связанную с открытым ключом человека, помогая другим проверить, что ключ является подлинным или действительным. Числовые сертификаты помогают противодействовать попыткам заменить ключ одного человека на другой.

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

Примечание: Что делать, когда ключ заэкспайрился? В этом случае можно изменить дату экспирации на более позднюю и перезалить ключ. Или же создать новый ключ, подписать его старым, и залить новый ключ на keyserver. Делать revoke не требуется.

Вы можете подписать чей угодно ключ и залить подписанный ключ на сервер, подтвердив тем самым, что ключ действительно принадлежит человеку, указанному в описании:

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

gpg --sign-key 7EFE74E5

На какой-нибудь другой машине можно скачать ключ заново и посмотреть, кем он подписан:

gpg --keyserver pgp.mit.edu --search-keys eax@ example.ru
gpg --list-sigs eax@ example.ru
gpg --check-sigs eax@ example.ru

Время от времени стоит обновлять ключи, на случай, если у ключей появились новые подписи, или какие-то ключи отозвали:gpg echo "pinentry-program /usr/bin/pinentry-tty" >> \
~/ .gnupg/ gpg-agent.conf
killall gpg-agent

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

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

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

gpg --gen-revoke --armor --output =revocation.crt eax@ example.ru

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

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

Используя его, ключ можно отозвать так:

gpg --import revocation.crt
gpg --keyserver pgp.mit.edu --send-keys 7EFE74E5

Важно! Сертификат отзыва не шифруется и может быть использован кем угодно. Убедитесь, что храните его в надежном месте (лучше даже в нескольких таких местах) и непременно в зашифрованном виде!

Прикручиваем GnuPG к Claws Mail

В Ubuntu нам понадобятся следующие пакеты:

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

sudo apt-get install claws-mail-pgpinline claws-mail-pgpmime

В Configuration → Plugins → Load загружаем pgpcore.so, pgpinline.so и pgpmime.so. Далее просто настраиваем плагины через настойки клиента. В настройках аккаунта можно указать, какие ключи использовать, а также сгенерировать новые ключи и отправить их на keyserver. При написании письма в Options станут доступны галочки Encrypt и Sign.

В свойствах аккаунта во вкладке Privacy можно настроить плагины так, чтобы сообщения всегда подписывались, шифровались при ответе на зашифрованные сообщения, и так далее. Использовать советую PGP/MIME, так как PGP/Inline может не слабо раздражать пользователей, не использующих PGP/GPG. То есть, почти всех.

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

Прикручиваем GnuPG к Mutt

Заключение

GPG прикручивается еще очень много к чему. Скажем, для Thunderbird есть плагин Enigmail . Существуют мобильные приложения с поддержкой GPG. Например, для iPhone есть oPenGP и iPGMail . Кроме того, существуют плагины и для IM-клиентов, в частности, для Psi. К сожалению, рассмотреть их все в рамках одной статьи не представляется возможным.

В качестве домашнего задания можете добавить меня в свой keyring, подписать мои ключи и отправить мне на email зашифрованное письмо.

А используете ли вы PGP/GPG?

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

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

PGP основана на криптографической системе, известной как открытый ключ, которая может быть использована на ненадежных каналах. Это делает ее идеальной для обеспечения защиты информации, передаваемой по таким сетям, как Internet.

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

Выделение ключа

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

pgp -kx идентификатор файл [файл с ключами]

Например: "pgp -kx alex mykey" выделяет открытый ключ, идентифицированный подстрокой "alex" в файле mykey.

Созданный файл mykey.pgp будет не в формате ASCII. Однако, если потребуется создать файл ключа в формате ASCII чтобы послать, к примеру, по e-mail или добавить дополнительную информацию к базе данных, потребуется использовать команду:

pgp -kxa идентификатор файл [файл с ключами]

Например: "pgp -kxa alex mykey" выделяет открытый ключ, идентифицированный подстрокой "alex", в файл "mykey.asc".

Вместе с ключом также выделяются все сертификаты, которые его подтверждают.

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

pgp -kv [идентификатор] [файл с ключами]

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

pgp -kvv [идентификатор] [кольцо]

Шифрование сообщений

Теперь попробуем зашифровать файл. Сделать это можно командой:

pgp -e файл идентификатор

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

Помните, что созданный файл, не является ASCII файлом, поэтому для отправки его по E-Mail может потребоваться добавить еще одну опцию -a для того, чтобы выходной закодированный файл был в формате ASCII, например так:

pgp -ea файл идентификатор

Кодирование сообщения для нескольких получателей

Допустим, необходимо зашифровать и отправить письмо для нескольких получателей. В этом случае поступим так:

pgp -ea файл идентификатор1 идентификатор2 идентификатор3

Как подписывается сообщение

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

pgp -s файл идентификатор

Если у нас есть несколько закрытых ключей в нашем secring.pgp, мы можем выбрать один из них при помощи идентификатора. Эта команда создает файл, который не является ASCII-текстом, потому что PGP пытается сжать файл. Если, с другой стороны, Вы хотите подписать файл, оставив текст читабельным и с подписью в конце, то процедура будет выглядеть так:

pgp -sta файл

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

Кроме того, можно подписать документ и затем закодировать его при помощи следующей команды:

pgp -es файл идентификатор_получателя мой_идентификатор

Для кодирования файла используется открытый ключ, идентифицируемый подстрокой "идентификатор_получателя", поэтому только этим ключом можно декодировать этот файл. Затем идентифицируем закрытый ключ строкой "мой_идентификатор", так как в нашем наборе есть несколько ключей. Даже в этом случае можно создать файл в формате ASCII, используя опцию -a.

Расшифровка

Для расшифровки файла и/или проверки его подписи используется команда:

pgp входной_файл [-o выходной_файл]

По умолчанию предполагается, что входной файл имеет расширение.pgp. Имя файла, который получится в результате декодирования, является необязательным параметром. Если выходной файл не указан, расшифрованный файл будет сохранен в файле входной_файл без расширения.pgp.

Также можно просто просмотреть расшифрованный файл без сохранения.