Шифрование PGP
PGP (Pretty Good Privacy) — криптографическое приложение для обеспечения защиты и аутентификации данных. Используя его можно быть уверенным, что никто не сможет прочитать или изменить Вашу информацию. Подробнее о программе и истории ее создания можно прочитать на сервере www.pgpi.org. Защита гарантирует, что только получатель информации сможет воспользоваться ей. Оказавшись в чужих руках, она будет совершенно бесполезной, поскольку ее невозможно декодировать.
Внимание — в настоящее время статья устарела. Актуальная замена PGP — это GnuPG (GNU Privacy Guard, https://www.gnupg.org). Пример работы с GnuPG в Windows смотрите в статье "Шифрование GPG (GnuPG, ex PGP)".
Аутентификация гарантирует, что если некоторая информация была создана Вами и выложена для публичного доступа, то она действительно поступила от Вас и не была никем фальсифицирована или изменена в пути.
В 1999 году силами Фонда свободного программного обеспечения была создана свободная реализация OpenPGP под названием GNU Privacy Guard (GnuPG), а сам PGP был куплен McAfee, а поздгнее — Symantec. Проект GnuPG жив и здоров, о нем читайте в отдельной статье.
PGP основана на криптографической системе, известной как открытый ключ, которая может быть использована на ненадежных каналах. Это делает ее идеальной для обеспечения защиты информации, передаваемой по таким сетям, как Internet.
В системах с открытым ключом каждый из участников информационного обмена имеет два ключа, взаимно дополняющих друг друга; один является открытым ключом, а другой закрытым. Открытый ключ может и должен быть свободно доступным, так как он является именно тем ключом, который отправитель использует для шифрования передаваемой Вам информации. Закрытый ключ ни в коем случае не должен распространяться. Именно он гарантирует безопасность передаваемых данных.
Как это работает
Возьмем для примера двух друзей — Сергея и Максима. У Сергея есть открытый ключ Максима. Он шифрует письмо с помощью этого ключа и отправляет. Теперь только Максим сможет прочитать это письмо, потому что закрытый ключ находится только у него. Даже Сергей уже не может прочитать свое собственное, но уже зашифрованное письмо.
Аутентификация
Вы посылаете письмо в список рассылки для своих клиентов. При этом подписчики списка хотят быть уверены что это именно Вы послали сообщение и что оно не было изменено каким-либо посторонним лицом. Подписываем сообщение с помощью своего закрытого ключа и вставляем подпись в письмо. Теперь все клиенты, у которых есть открытый ключ, могут с помощью него проверить, действительно ли Вы послали это письмо и не изменено ли оно кем-либо.
На наших машинах установлены две версии PGP:
PGP 2.6.3ia — /usr/local/bin/pgp
PGP 6.5.1i — /usr/local/bin/pgp6
В PGP версии 2.6.3ia для криптования используется алгоритм RSA, а в версии 6.5.1i добавлен алгоритм DSS/DH.
Генерация ключей
Сначала необходимо зайти в unix shell и в своей домашней директории создать подкаталог .pgp командой:
После этого командой "/usr/local/bin/pgp -kg" создаем ключи и защищаем свой закрытый ключ паролем. Обязательно запишите этот пароль. При утере восстановить его будет невозможно и придется создавать новые ключи. В каталоге .pgp созданы два файла:
pubring.pgp — набор открытых ключей
secring.pgp — набор закрытых ключей
Теперь можете приступать к использованию PGP
Использование PGP
Создание пары ключей
Чтобы начать использовать PGP, нужно создать собственную пару ключей (открытый/закрытый). Чтобы это сделать, выполните команду:
Вас попросят выбрать максимальный размер ключа (512, 768 или 1024 байт). Чем больше ключ, тем более надежным он будет, правда ценой небольшого снижения быстродействия при шифровании.
После выбора размера нужно задать идентификатор открытого ключа. Обычно здесь указывают свои имена и/или e-mail адрес. Например:
Ivan Petrov <ivan@zmail.ru>
Далее нужно задать пароль, который будет защищать закрытый ключ. Это необходимо для защиты закрытого ключа. Например, если кто-нибудь украдет его, ключ будет бесполезен без пароля. Наконец, программа попросит в произвольном порядке нажать несколько клавиш на клавиатуре чтобы она могла создать последовательность случайных чисел. Через несколько секунд PGP создаст ключи и известит об этом соответствующим сообщением. После того, как ключи были сгенерированы должным образом, они сохраняются в каталоге
/.pgp в виде файлов: pubring.pgp и secring.pgp. Первый, pubring.pgp, является файлом с открытыми ключами, secring.pgp — файл с закрытыми ключами На данный момент эти файлы содержат только открытый и закрытый ключи их создателя. Необходимо помнить, что безопасность методов открытого ключа опирается на безопасности закрытого ключа, поэтому обязательно хранить его в надежном месте и следить за тем, чтобы никто не смог его получить. Установите такие права доступа к файлу secring.pgp, чтобы только Вы могли читать и записывать в него. Редактировать и изменять, и идентификаторы ключей и пароли закрытых ключей можно с помощью команды:
pgp -ke идентификатор [файл с ключами]
Добавление ключей в файл
Теперь Вам, вероятно, захочется добавить открытые ключи людей, с которыми есть желание обмениваться шифрованными сообщениями. Для этого потребуется получить открытые ключи Ваших корреспондентов: с сервера ключей, непосредственно от конкретных людей, по e-mail, и т.д. Вспомним, что открытые ключи распространяются свободно и нет необходимости передавать их по безопасному каналу. Если в файле somekey.pgp содержится ключ и есть желание добавить его в файл ключей, процедура такова:
pgp -ka somekey [файл с ключами]
По умолчанию расширение .pgp указывает на файл с ключем и имена pubring.pgp и secring.pgp даются файлам, содержащим наборы открытых и закрытых ключей, соответственно. После добавления ключа PGP может сообщить, что добавленный ключ не полностью сертифицирован, это означает, что данный ключ не обязательно может принадлежать заявленному владельцу. Если есть уверенность, что ключ действительно принадлежит этому человеку, то сами можете подтвердить его приемлемость для использования.
Удаление ключа из файла
Удалить ненужный ключ из файла можно командой
pgp -kr идентификатор [файл с ключами]
Например: "pgp -kr alex" удалит любой ключ, у которого в идентификаторе содержится "alex". По умолчанию исследуется файл открытых ключей.
Выделение ключа
После сохранения ключей друзей в файле необходимо послать им свой открытый ключ. Прежде всего его необходимо выделить из собственного файла открытых ключей:
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. Также такое сообщение смогут читать те, кому не обязательно проверять подпись.
Кроме того, можно подписать документ и затем закодировать его при помощи следующей команды:
pgp -es файл идентификатор_получателя мой_идентификатор
Для кодирования файла используется открытый ключ, идентифицируемый подстрокой "идентификатор_получателя", поэтому только этим ключом можно декодировать этот файл. Затем идентифицируем закрытый ключ строкой "мой_идентификатор", так как в нашем наборе есть несколько ключей. Даже в этом случае можно создать файл в формате ASCII, используя опцию -a.
Расшифровка
Для расшифровки файла и/или проверки его подписи используется команда:
pgp входной_файл [-o выходной_файл]
По умолчанию предполагается, что входной файл имеет расширение .pgp. Имя файла, который получится в результате декодирования, является необязательным параметром. Если выходной файл не указан, расшифрованный файл будет сохранен в файле входной_файл без расширения .pgp.
Также можно просто просмотреть расшифрованный файл без сохранения:
Авторизуйтесь для добавления комментариев!
Почтовый сервер Шифрование Squid 3proxy VPN Mikrotik Настройка сервера Виртуальные машины kvm Защита почты Резервное копирование Групповые политики SELinux WDS IPFW OpenVPN firewalld systemd Mobile libvirt Samba WiFi Iptables NAT Lightsquid Remote desktop Postfix Dovecot Удаление данных Софт Безопасность Настройка прокси Winbox User agent Хостинг Передача данных Онлайн сервисы Privacy LetsEncrypt VPN сервер RRDTool sendmail Rsync Linux SSH Система Windows Синхронизация Облако fail2ban FreeBSD
PGP Encryption & Decryption
Thanks for using this software, for Cofee/Beer/Amazon bill and further development of this project please Share.
Any private key value that you enter or we generate is not stored on this site, this tool is provided via an HTTPS URL to ensure that private keys cannot be stolen, for extra security run this software on your network, no cloud dependency
Asking for donation sound bad to me, so i’m raising fund from by offering all my Nine book for just $9
Pretty Good Privacy
Pretty Good Privacy or PGP is a popular program used to encrypt and decrypt email over the Internet, as well as authenticate messages with digital signatures and encrypted stored files.
PGP and similar software follow the OpenPGP standard (RFC 4880) for encrypting and decrypting data.
When we generate a public-private keypair in PGP, it gives us the option of selecting DSA or RSA, This tool generate RSA keys. RSA is an algorithm.PGP is originally a piece of software, now a standard protocol, usually known as OpenPGP.
PGP Vs OpenPGP
PGP is a proprietary encryption solution, and the rights to its software are owned by Symantec
Алиса и Боб в стране PGP. Почему защитить почту становится все сложнее
История переписки — лакомый кусок для многих. Хакеры ищут в ней личные и корпоративные секреты, компании анализируют почтовый трафик для рассылки таргетированной рекламы, а спецслужбы выискивают признаки готовящихся преступлений и пытаются выяснить круг общения подозреваемых. Единственный способ осложнить сбор информации из перехваченной почты — это шифровать ее. Но как именно?
WARNING
Виды защиты почты
Криптографические сервисы для электронной почты разработаны давно, но и спустя 25 лет после появления PGP они не особенно востребованы. Причина в том, что они базируются на устаревшей инфраструктуре передачи сообщений, вынуждены использовать недоверенную среду (в том числе произвольный набор почтовых серверов), имеют ограниченную совместимость, растущую массу известных недостатков, да и просто сложны для рядового пользователя. Ты-то легко разберешься в премудростях криптографии, а вот твой вечно занятой начальник однажды запутается в двух ключах и выложит секретный на сервер, разом спалив всю вашу переписку. Виноватым, конечно, назначат тебя.
Сама концепция шифрования почты разделяется на множество прикладных задач, из которых можно выделить две основные: это защита от посторонних глаз уже принятых и подготовленных к отправке писем (почтовой базы данных) и защита писем непосредственно при их пересылке — от разглашения или модификации текста при его перехвате.
Иными словами, в криптографической защите почты сочетаются методы противодействия НСД и атаке посредника, имеющие принципиально разные решения. К сожалению, их часто путают и пытаются использовать не самые подходящие методы. Я предлагаю тебе небольшой рассказ о двух известных криптографических персонажах, который должен расставить все по своим местам и наглядно продемонстрировать проблемы с шифрованием почты. Как говорится, нет повести секретнее до гроба, чем повесть про Алису и про Боба!
Представим, что Боб узнал что-то очень важное и спешит поделиться с Алисой. Спасаясь от слежки, он уничтожает смартфон и ноутбук. Боб забегает в интернет-кафе, где вынужден использовать почту через веб-интерфейс. Чтобы зашифровать письмо, он устанавливает браузерное расширение CryptoData, которым раньше они с Алисой оба пользовались. Оглядевшись по сторонам, Боб поправляет капюшон, ставит на монитор поляризующий экран и логинится в свою почту через VPN. Через несколько секунд он набирает сообщение. Пока оно отображается простым текстом в окошке CryptoData, но это продлится недолго.
Первое сообщение для Алисы
Другие статьи в выпуске:
Xakep #208. Атака на сигналку
В два клика Боб шифрует его ключом, известным Алисе. Он надеется, что правильно ввел его по памяти при настройке CryptoData на общедоступном компе. Иначе важное сообщение так и останется мешаниной символов, которую он вставил в тело письма, скопировав из окна CryptoData.
Сообщение после шифрования ключом для Алисы
Алиса получает странное письмо, видит в нем знакомое начало S3CRYPT и понимает, что надо использовать CryptoData с тем ключом, которым они когда-то обменялись с Бобом. Вот только с тех пор много всего произошло, и каким был этот ключ — она может не вспомнить.
Попытка расшифровать письмо
Если Алиса проявит чудеса мнемотехники и все-таки введет верный ключ, сообщение от Боба примет читаемый вид.
Письмо расшифровано
Однако девичья память далеко не EEPROM, поэтому Боб получает неожиданный ответ.
Предложение сменить тип шифрования
Конечно, Боб знает, как пользоваться PGP. Вот только последний раз он это делал в почтовом клиенте The Bat, который был установлен на взорванном ноутбуке. Как проверить присланный ключ? Вдруг прямо сейчас Алису пытают, а ему отвечают с ее адреса и пытаются выведать секреты? Поэтому Боб просит дополнительных гарантий подлинности ключа. Например, можно попросить Джека проверить и подписать его.
Сеть доверия в PGP
Алиса реагирует немного странно. Она сообщает новость о внезапном исчезновении Джека и предлагает альтернативный способ верификации. Впрочем, не слишком надежный. Простейшая цифровая подпись S/MIME подтвердит лишь адрес отправителя, но не его личность. Поэтому Боб прибегает к хитрости: он просит подтвердить ключ по другому каналу связи, заодно проверяя общий с Алисой секрет, который знали только они.
Использование отпечатка ключа и общего секрета
Спустя некоторое время ему приходит СМС с верным отпечатком ключа и новое письмо от Алисы.
Отпечаток ключа и ответ на секретный вопрос
Письмо выглядит убедительно, отпечаток ключа совпадает, но Боб — тертый калач. Прочитав ответ на секретный вопрос, он понимает, что беседует не с Алисой.
Последнее сообщение Боба псевдо-Алисе
Геометрия шифрования
В этой истории Алиса и Боб пытались использовать два принципиально разных типа криптографической защиты. В CryptoData для шифрования и расшифровки по алгоритму AES используется один и тот же ключ. Поэтому такую криптосистему называют симметричной.
CryptoData
В качестве примера мы выбрали CryptoData, так как из всех известных расширений на момент написания статьи только у него был актуальный статус и живой русскоязычный форум. Кстати, с помощью CryptoData можно не только шифровать почту, но и хранить локальные заметки под защитой AES и даже создавать и просматривать зашифрованные сайты.
CryptoData доступен для браузера Firefox в качестве аддона. Также он поддерживает почтовые клиенты Thunderbird и SeaMonkey. Текст шифруется по алгоритму AES. Несмотря на его блочную природу, в режиме счетчика (CTR) с его помощью реализуется потоковое шифрование.
К плюсам CryptoData можно отнести известную реализацию AES-CTR через JavaScript. Главный же недостаток CryptoData (как и любой симметричной системы) — безопасно обмениваться ключами невозможно.
При использовании CryptoData в электронной почте, помимо зашифрованного текста, надо как-то передать ключ для его расшифровки. Сделать это безопасным образом через интернет крайне сложно. Требуется создавать доверенный канал, а в идеале — устраивать личную встречу. Поэтому часто менять ключи не получится. При компрометации ключа им вскрывается вся перехваченная ранее зашифрованная переписка.
Менее значимый минус — узнаваемое начало всех зашифрованных текстов. После стандартного начала «S3CRYPT:BEGIN» открытым текстом указывается используемый алгоритм и режим шифрования (AESCTR или RC4). Это упрощает выборочный перехват зашифрованных сообщений (обычно в них пишут все самое важное) и их взлом.
Подобно CryptoData работали CryptFire, Encrypted Communication и многие другие расширения.
В отличие от AES-CTR, в PGP используется пара разных, но математически связанных ключей. Это асимметричная система, устроенная по принципу замка с защелкой: захлопнуть дверь (зашифровать сообщение) может кто угодно, а вот открыть ее (расшифровать текст) — только владелец ключа.
В симметричных системах проще достигнуть высокой криптостойкости при относительно малой длине ключа, но для ведения зашифрованной переписки этот ключ надо как-то сначала передать собеседнику по надежному каналу. Если ключ станет известен посторонним, то вся ранее перехваченная переписка будет раскрыта. Поэтому симметричное шифрование используется в основном для локальной защиты почтовых баз данных, но не для пересылки писем.
Асимметричные системы как раз решают проблему передачи ключа через ненадежную среду, используя пару ключей. Открытый ключ служит для шифрования сообщений, отправляемых конкретному адресату, и проверки криптографической подписи в принятых от него письмах. Секретный — для расшифровки полученного письма и подписывания отправляемого. При организации защищенной переписки собеседникам достаточно обменяться своими открытыми ключами, а их перехват (почти) ни на что не повлияет. Поэтому такую систему называют еще шифрованием с открытым ключом. В почтовых клиентах поддержка PGP реализована давно, а вот при использовании почты через веб-интерфейс понадобятся браузерные аддоны.
Mailvelope и аналоги
Mailvelope — одно из самых продвинутых расширений для шифрования почты в Google Chrome. В нашем журнале о нем писали три года назад, и уже тогда это была качественная разработка.
Расширение Mailvelope для Google Chrome
Текущая версия Mailvelope встраивается непосредственно в код страниц при работе с веб-почтой и уже содержит автоматические настройки для самых популярных почтовых сервисов.
Недоступные функции Mailvelope
При этом в ней остался нерешенным ряд задач. Например, нельзя задать срок действия ключа — он всегда получается неограниченным. Нельзя выбрать алгоритм (доступен только RSA), нет опции шифрования вложений (шифруется только текст самого письма), и нет функции проверки подписи отправителя. В общем, реализованы только базовые криптографические функции.
Генерирование пары ключей PGP в Mailvelope
В Mailvelope можно сгенерировать новую пару ключей, импортировать открытый ключ разными способами и управлять всеми ключами с одной вкладки.
Импортирование открытого ключа в Mailvelope
Управление ключами в Mailvelope
Базовую функциональность PGP в браузере обещают и другие расширения, но у них полно своих недостатков. У аддона Pandor логика работы вообще странная. По замыслу, пользователи регистрируются на сайте pandor.me и генерируют ключи PGP. Все они хранятся на сервере и автоматически используются для шифрования и дешифрования. При этом обмениваться ключами не надо. Удобно? Может быть. Однако те, кто жертвуют удобством ради безопасности, в итоге лишаются и того и другого. Секретный ключ неспроста называется так, а безопасно сгенерировать пару ключей можно только локально.
Для удобства обмена открытыми ключами и их подтверждения создаются специализированные репозитории. На таких серверах открытых ключей проще найти актуальный для нужного пользователя. При этом не надо регистрироваться на сомнительных ресурсах и рисковать засветить секретный ключ.
Keybase.io
Открытые ключи можно не только вручную переслать всем собеседникам, но и загрузить на специализированный сервер. Так их проще будет находить и подписывать, расширяя сеть доверия. Об одном из таких репозиториев открытых ключей — Keybase.io мы уже писали. После быстрого старта интерес к развитию этого сервера открытых ключей у его разработчиков угас. Репозиторий вот уже два года находится в стадии бета-тестирования, но это не препятствует его использованию.
Чтобы создать на нем свой аккаунт, сначала придется запросить пригласительный код.
Запрос кода приглашения
Очередь на его ожидание измеряется пятизначными числами, поэтому наберись терпения. Сервис работает из командной строки, но использует вполне очевидный синтаксис. Например, оператор encrypt шифрует сообщение открытым ключом пользователя, идентификатор которого указан следом.
Keybase.io подтверждает не только валидность открытого ключа собеседника и адрес его электронной почты, но и URL личного сайта, а также аккаунты пользователя в Twitter и GitHub, если они есть. Одним словом, если твои собеседники загружают свои открытые ключи на Keybase.io, то ты всегда сможешь отыскать их там вместе с актуальными контактными данными.
От алгоритмов к стандартам
Для работы с зашифрованной перепиской собеседники должны использовать одинаковые криптографические методы. Поэтому любая защита почты на уровне приложения или сервиса использует какую-то криптографическую систему в рамках общепризнанного стандарта шифрования. Например, клиент Thunderbird поддерживает через аддон Enigmail форк GnuPG как открытую реализацию криптосистемы PGP по стандарту OpenPGP.
В свою очередь, PGP и любая другая криптосистема базируется на нескольких алгоритмах шифрования, которые используются на разных этапах работы. Самым распространенным среди алгоритмов асимметричного шифрования остается RSA. Он же используется в оригинальной криптосистеме PGP Филиппа Циммерманна. В ней RSA применяется для шифрования 128-битного хеша MD5 и 128-битного ключа IDEA.
У различных форков PGP (например, у того же GnuPG) есть свои алгоритмические отличия. Но если криптосистемы удовлетворяют требованиям общего стандарта OpenPGP, то они остаются совместимыми друг с другом. Собеседники могут вести защищенную переписку с помощью разных версий криптографических программ, в том числе и предназначенных для разных платформ. Поэтому составленное в Thunderbird для Linux письмо, зашифрованное PGP, может быть прочитано в The Bat для Windows и даже через браузер с поддержкой OpenPGP на уровне дополнений.
OpenPGP
OpenPGP был предложен в 1997 году, но развитие стандарта было сложным из-за судьбы самого алгоритма PGP. Права на него последовательно переходили от Циммерманна и PGP Inc. к Network Associates (McAfee), PGP Corporation и Symantec. Каждый из новых правообладателей менял конечную реализацию алгоритма. Не исключено, что в McAfee и Symantec ослабляли его криптографическую стойкость по требованию властей. Например, снижая качество генератора псевдослучайных чисел, эффективную длину ключа или даже внедряя программные закладки.
Поэтому в 1999 году появилась открытая реализация GnuPG. Считается, что за ней стоит фонд FSF, но на деле GnuPG разработал всего один человек — немецкий программист Вернер Кох, который когда-то впечатлился речью Столлмана и решил сделать «правильный, открытый PGP». Позже он неоднократно намеревался забросить поддержку GnuPG, но в решающий момент находил новые стимулы продолжать ее.
Сейчас Коху 53 года, он безработный и много раз находился на пороге нищеты до того момента, как сумел собрать более 300 тысяч долларов с помощью разных краудфандинговых кампаний. Ему перечисляли деньги из Linux Foundation и от простых пользователей, давали гранты Facebook и Stripe — просто потому, что судьба GPGTools, Enigmail, Gpg4win и многих других популярных проектов в мире СПО целиком зависит от его желания продолжать развитие GnuPG.
С таким шатким фундаментом стандарт OpenPGP до сих пор имеет известные слабости. Их проще было объявить «не багами, а фичами», чем устранять. Например, в нем есть только один способ подтвердить отправителя зашифрованного сообщения — криптографическая подпись. Однако проверить ее может кто угодно открытым ключом отправителя (вот почему я сделал оговорку «почти», указывая на безопасность перехвата открытого ключа). Следовательно, подпись, помимо аутентификации, обеспечивает и не всегда нужную неотрицаемость сообщения.
Что это значит на практике? Представь, что ты отправил Ассанжу очередную порцию интересных данных о первых лицах сильно демократической страны. Письмо перехватили, IP узнали и за тобой приехали. Даже не раскрывая содержимое зашифрованного письма, ты привлек к себе внимание самим фактом переписки с человеком, за которым давно следят. Сослаться на подделку письма или козни почтового червя уже не получится — сообщение было подписано твоим секретным ключом. Без этой же подписи Ассанж не станет читать сообщение, считая его фальшивкой или провокацией. Получается замкнутый круг: криптографические подписи лишают возможности отрицать авторство писем перед третьими лицами, а без подписей для самих собеседников не будет гарантии подлинности сообщений друг к другу.
Еще один недостаток PGP заключается в том, что зашифрованные сообщения имеют очень узнаваемый вид, поэтому сам факт обмена такими письмами уже делает собеседников потенциально интересными для спецслужб. Они легко выявляются в сетевом трафике, а стандарт OpenPGP не позволяет скрыть ни отправителя, ни получателя. Для этих целей вместе с PGP пытаются использовать Tor или стеганографию как дополнительные слои защиты, но у луковичной маршрутизации и методов сокрытия файлов одного формата внутри другого полно своих нерешенных проблем. К тому же система получается слишком сложной, а значит, она также не будет популярной и останется уязвимой к человеческим ошибкам.
Вдобавок у PGP отсутствует свойство наперед заданной секретности, а ключи обычно имеют длительные сроки действия (как правило, год или больше) и меняются редко. Поэтому в случае компрометации секретного ключа им можно расшифровать львиную долю перехваченной ранее переписки. Происходит это в том числе потому, что PGP не защищает от человеческой ошибки и не препятствует ответу открытым текстом на шифрованное сообщение (даже с его цитированием). Имея зашифрованное сообщение, расшифрованный текст и открытый ключ, гораздо проще вычислить парный ему секретный.
S/MIME
Если у OpenPGP столько принципиальных недостатков, то есть ли ему альтернатива? И да и нет. Параллельно развиваются другие стандарты шифрования почты, в том числе и с использованием открытого ключа. Вот только пока что они устраняют одни недостатки ценой появления других. Яркий пример тому — S/MIME (Secure/Multipurpose Internet Mail Extensions). Начиная со второй версии, появившейся еще в 1998 году, S/MIME стал общепринятым стандартом. Настоящая популярность пришла к нему годом позже, когда третью версию S/MIME стали поддерживать такие почтовые программы, как Microsoft Outlook (Express) и Exchange.
S/MIME упрощает задачу распространения публичных ключей в недоверенной среде, поскольку контейнером для открытого ключа служит цифровой сертификат, который обычно имеет одну или несколько цифровых подписей. С тяжелой руки Microsoft современная концепция криптографии с открытым ключом часто реализуется именно посредством цифровых сертификатов и цепочек доверия. Сертификаты выдаются конкретному субъекту и содержат его открытый ключ. Подлинность самого сертификата гарантируется (обычно за деньги) его эмитентом — то есть выпустившей организацией, которой изначально доверяют все участники переписки. Например, это может быть Thawte, VeriSign, Comodo или другая крупная компания. Простейший сертификат, подтверждающий только адрес электронной почты, можно получить бесплатно.
Теоретически цифровой сертификат решает сразу две проблемы: он позволяет легко найти открытый ключ нужного пользователя и убедиться в его подлинности. Однако на практике в механизме доверенных сертификатов и стандарте S/MIME до сих пор есть серьезные уязвимости, делающие возможными дополнительные векторы атак помимо тех, что актуальны для OpenPGP. Так, в 2011 году была произведена атака на сертификационные центры DigiNotar и Comodo, в результате чего были выпущены сотни поддельных сертификатов от имени самых популярных сетевых узлов: addons.mozilla.com, login.skype.com, login.yahoo.com, mail.google.com и других. В дальнейшем они использовались в разных сценариях атак, включая MITM, рассылку фишинговых писем и распространение зловредов, подписанных сертификатами известных фирм.
Веб-почта и мобильные клиенты
WARNING
Все больше людей отказываются от десктопных почтовых клиентов, предпочитая работать с почтой через веб-интерфейс или мобильные приложения. Это полностью меняет правила игры. С одной стороны, при веб-подключении шифрование соединения уже обеспечивается посредством HTTPS. С другой — пользователь никак не контролирует почтовую базу на сервере и способы передачи писем с него. Остается уповать на репутацию компании, которая обычно варьируется от слегка подмоченной до промокшей насквозь.
Многие помнят Hushmail — первый веб-сервис электронной почты с шифрованием по стандарту OpenPGP на стороне сервера. Уверен, кто-то пользуется им до сих пор, считая надежным. Ведь все письма, как утверждается, в нем хранятся на собственном защищенном сервере и передаются на внешние адреса через другой сервер с поддержкой SSL. Почти десять лет компания уверяла, что расшифровать письма ее клиентов невозможно. Однако в 2007 году Hushmail была вынуждена признать, что имеет такую техническую возможность и предоставляет ее по требованию властей, а также протоколирует IP-адреса своих клиентов и собирает о них «другую статистику» — вдруг компетентные органы ее запросят.
Впрочем, черт бы с Hushmail. Большинство людей сегодня пользуется Gmail, который активно развивается. «Очень активно, — подсказывает Мэттью Грин, профессор криптографии из Университета Джонса Хопкинса. — Скоро исполнится два года, как Google обещала внедрить сквозное шифрование почты. Ну и где оно?»
Любопытно, что, помимо Google, в разное время это обещали сделать Yahoo, Microsoft и другие. Есть очевидное объяснение тому, почему компании с ежегодной прибылью на уровне миллиардов долларов до сих пор не смогли внедрить сквозное шифрование. Оно подразумевает выполнение криптографических операций в доверенной среде и передачу сообщений через недоверенные узлы только в зашифрованном виде. Реализовать это без контроля над устройствами практически невозможно.
Проблема в том, что шифрование и расшифровку почты приходится выполнять на совершенно разных платформах. Каждая из них имеет свои уязвимости, сводящие на нет любую криптографическую защиту уровня приложения. Критические уязвимости остаются непропатченными месяцами. Поэтому что толку шифровать письма, если их копию можно тайком стянуть открытым текстом, например из оперативной памяти или временного файла?
Именно так взломали итальянскую Hacking Team: атакующий получил удаленный доступ к одному из компьютеров в локальной сети компании, а затем просто дождался, когда кто-то из сотрудников сам откроет контейнер TrueCrypt со всей секретной перепиской и документацией. Без доверенной среды хоть шифруй, хоть не шифруй — все равно получишь лишь иллюзию защиты.
Что такое PGP, OpenPGP, GPG?
PGP (англ. Pretty Good Privacy) — компьютерная программа, также библиотека функций, позволяющая выполнять операции шифрования и цифровой подписи сообщений, файлов и другой информации, представленной в электронном виде, в том числе прозрачное шифрование данных на запоминающих устройствах, например, на жёстком диске.
OpenPGP — это стандарт, выросший из программы PGP, получившей в Интернете к середине 90-х повсеместное распространение как одно из первых средств шифрования электронной почты.
PGP имеет множество реализаций, совместимых между собой и рядом других программ (GnuPG, FileCrypt и др.) благодаря стандарту OpenPGP (RFC 4880), но имеющих разный набор функциональных возможностей. Существуют реализации PGP для всех наиболее распространённых операционных систем. Кроме свободно распространяемых есть коммерческие реализации.
Специалисты из немецкой компании Recurity Labs разработали JavaScript-реализацию стандарта OpenPGP (RFC 4880) для подписи и шифрования писем в почтовых веб-интерфейсах. Таким образом, PGP-криптография доступна прямо в браузере без установки дополнительного софта.
Итак, PGP («Pretty Good Privacy») — это тип шифрования, который защищает твою переписку от прочтения её левыми людьми. PGP используется как для шифровки, так и расшифровки информации. Сейчас многие программы подобного рода пользуются стандартом OpenPGP, то есть, письмо зашифрованное в одно программе, может быть дешифровано в другой. Вот примеры известных программ: GnuPG, PGPDesktop, но существуют и различные дополнения для браузеров, не забудь проверить, какой тип шифрования они используют.
Изначально PGP умел только шифровать симметричным алгоритмом, но теперь PGP — это не только шифрование с открытым ключом, шифрование в ней — это заключительный этап обработки данных. До этого данные могут быть сжаты, зашифрованы алгоритмом с симметричным ключом, и затем уже происходит шифрование с открытым ключом. Причем, на каждом этапе могут использоваться различные алгоритмы. Более того, тот алгоритм, который будет использоваться в дальнейшем, может использовать для шифрования несколько открытых ключей таким образом, что зашифрованное сообщение смогут прочитать несколько человек. Другой интересной особенностью является то, что сгенерированные ключи могут иметь срок годности, после которого они считаются недействительными.
Кроме того, PGP может использоваться для шифрования других вещей, помимо электронной почты. Вы можете использовать его для шифрования жесткого диска, мгновенных сообщений, файлов и многого другого.
GNU Privacy Gu (GnuPG, GPG) — свободная программа для шифрования информации и создания электронных цифровых подписей. Разработана как альтернатива PGP и выпущена под свободной лицензией GNU General Public License. GnuPG полностью совместима со стандартом IETF OpenPGP. Текущие версии GnuPG могут взаимодействовать с PGP и другими OpenPGP-совместимыми системами.
Как вы скоро увидите, у PGP много проблем. Если не вдаваться в подробности, основная причина в том, что программа разработана в 90-е годы, до появления серьёзной современной криптографии. Ни один компетентный криптоинженер сегодня не станет разрабатывать систему в таком виде и не потерпит большинства её дефектов ни в какой другой системе. Серьёзные криптографы в основном отказались от PGP и больше не тратят на неё времени (за некоторыми заметными исключениями). Поэтому хорошо известные проблемы в PGP остаются нерешёнными более десяти лет.
Когда пользователь шифрует сообщение с помощью PGP, то программа сначала сжимает текст, что сокращает время на отправку сообщения через модем и увеличивает надежность шифрования. Большинство приемов криптоанализа (взлома зашифрованных сообщений) основаны на исследовании рисунков, присущих текстовым файлам, что помогает взломать ключ. Сжатие ликвидирует эти рисунки и таким образом повышает надежность зашифрованного сообщения. Затем PGP генерирует сессионный ключ, который представляет собой случайное число, созданное за счет движений вашей мышки и нажатий на клавиши клавиатуры.
Как только данные будут зашифрованы, сессионный ключ зашифровывается с помощью публичного ключа получателя сообщения, который отправляется к получателю вместе с зашифрованным текстом.
Расшифровка происходит в обратной последовательности. Программа PGP получателя сообщения использует закрытый ключ получателя для извлечения временного сессионного ключа, с помощью которого программа затем дешифрует зашифрованный текст.
С развитием PGP стали появляться версии, поддерживающие новые функции и алгоритмы, способные создавать зашифрованные сообщения, которые не могут быть расшифрованы более ранними PGP системами даже с помощью действительного публичного ключа. Важно, чтобы отправитель и получатель знали возможности друг друга или хотя бы согласовали настройки PGP.
GnuPG работает путем шифрования сообщений с использованием пар асимметричных ключей, генерируемых отдельными пользователями GnuPG. Затем эти ключи могут быть обменены с другими пользователями, и пользователи могут добавить цифровую подпись для проверки личности отправителя и целостности сообщения..
Существует некоторая путаница в терминологии. Например, далеко не все могут внятно объяснить, чем 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, и соответственно любую из его реализаций.
PGP можно использовать для отправки конфиденциальных сообщений. Для этого PGP комбинирует шифрование с симметричным и публичным ключом. Сообщение шифруется с использованием симметричного алгоритма шифрования, для которого требуется симметричный ключ. Каждый симметричный ключ используется только один раз, и обычно называется сеансовым ключом. Сообщение и его сеансовый ключ отправляются получателю. Сеансовый ключ должен быть доставлен получателю, чтобы тот знал, как расшифровать сообщение. Чтобы защитить само сообщение во время передачи, используется публичный ключ получателя. Только конфиденциальный ключ, принадлежащий получателю, может расшифровать сеансовый ключ.
В конце концов полнофункциональная версия PGP стала доступной для широкого круга пользователей во всем мире. Фонд свободного программирования разработал собственную OpenPGP-совместимую программу под названием GNU Privacy Guard (GnuPG, или сокращенно GPG), которая свободно распространяется и имеет все необходимые библиотеки, используемые для шифрования, дешифрования и подписи документов и файлов. Эта система может применяться для широкого спектра задач, доступна везде и довольно проста в применении за счет использования графического интерфейса.
GnuPG может использовать меньшее количество алгоритмов по сравнению с PGP, так как в GnuPG реализованы только те алгоритмы, на которые нет каких-либо патентных ограничений, хотя некоторые запатентованные алгоритмы можно подключать как дополнительные модули.
PGP получила широкое распространение, и для решения проблем с патентами в 1997 году компания PGP Inc. представила открытый стандарт OpenPGP, который получил open-source реализацию, названную GNU Privacy Guard (GnuPG или GPG). Ее выпустил немецкий разработчик Вернер Кох в 1999 году.
Сертификат PGP содержит, в частности, следующие сведения:
Открытый ключ владельца сертификата — открытая часть ключевой пары и её алгоритм: RSA v4, RSA Legacy v3, DH или DSA.
Сведения о владельце сертификата — информация, идентифицирующая личность пользователя: его имя, адрес электронной почты, номер ICQ, фотография и т. д.
ЭЦП владельца сертификата — подпись ключевой пары, связанной с сертификатом (т. н. автоподпись).
Период действия сертификата — дата начала действия сертификата и дата окончания его действия; указывает на то, когда сертификат станет недействительным (аналогично сроку действия водительских прав). Если ключевая пара содержит дополнительные подключи шифрования, то здесь будет указан период действия каждого из них.
Предпочтительный алгоритм шифрования — указывает на то, зашифрованную каким алгоритмом информацию предпочитает получать владелец сертификата. Поддерживаются следующие: CAST, AES, IDEA, Triple-DES и Twofish.
Вы можете представить сертификат PGP в виде открытого ключа с одной или несколькими привязанными к нему «бирками». На этих «бирках» указана информация, идентифицирующая владельца ключа, а также подпись этого ключа, подтверждающая, что ключ и идентификационные сведения взаимосвязаны. (Этот вид подписи называется автоподписью (self-signature); её содержит каждый сертификат OpenPGP.)
Публичные и приватные ключи в основном используются для расшифровки сообщений, зашифрованных сложным математическим алгоритмом в рамках криптографии. Публичный ключ весьма распространен, приватный ключ, используемый в крипто-контексте, должен храниться отдельно в качестве пароля для защиты ваших цифровых активов.
По своей сути OpenPGP представляет собой систему криптографии с открытым ключом. Этот вид криптографии использует пару открытый / закрытый ключ для шифрования и дешифрования данных. При криптографии с открытым ключом, после того как данные зашифрованы с помощью открытого ключа, только соответствующий закрытый ключ может расшифровать их.
Нельзя сказать, что конкретный метод шифрования на 100 процентов безопасен. Тем не менее, PGP, как правило, считается чрезвычайно безопасным. Система с двумя ключами, цифровые подписи и тот факт, что PGP является открытым исходным кодом и находится под жестким контролем общественности, способствуют его репутации как одного из лучших протоколов шифрования.