→ Замечательные шифры от PGP. Расшифровка

Замечательные шифры от PGP. Расшифровка

Кирпич ни с того ни с сего, - внушительно перебил неизвестный, -
никому и никогда на голову не свалится.
М. Булгаков, "Мастер и Маргарита"

PGP (Pretty Good Privacy) – это криптографическая (шифровальная) программа с высокой степенью надежности, которая позволяет пользователям обмениваться информацией в электронном виде в режиме полной конфиденциальности.
Главное преимущество этой программы состоит в том, что для обмена зашифрованными сообщениями пользователям нет необходимости передавать друг другу тайные ключи, т.к. эта программа построена на новом принципе работы – публичной криптографии или обмене открытыми (публичными) ключами, где пользователи могут открыто посылать друг другу свои публичные ключи с помощью сети "Интернет" и при этом не беспокоиться о возможности несанкционированного доступа каких-либо третьих лиц к их конфиденциальным сообщениям.
В PGP применяется принцип использования двух взаимосвязанных ключей: открытого и закрытого. К закрытому ключу имеете доступ только вы, а свой открытый ключ вы распространяете среди своих корреспондентов.
Еще одно преимущество этой программы состоит также в том, что она бесплатная и любой пользователь, имеющий доступ к Интернету, может ее закачать на свой компьютер в течение получаса. PGP шифрует сообщение таким образом, что никто кроме получателя сообщения, не может ее расшифровать. Создатель PGP Филипп Циммерман открыто опубликовал код программы, который неоднократно был исследован специалистами крипто-аналитиками высочайшего класса и ни один из них не нашел в программе каких-либо слабых мест.
Филипп Циммерман следующим образом объясняет причину создания программы: "Людям необходима конфиденциальность. PGP распространяется как огонь в прериях, раздуваемый людьми, которые беспокоятся о своей конфиденциальности в этот информационный век. Сегодня организации по охране прав человека используют программу PGP для защиты своих людей за рубежом. Организация Amnesty International также использует ее."
Пользователям сети Интернет рекомендуется использовать эту программу именно по той же причине, почему люди предпочитают посылать друг другу письма в конвертах, а не на открытках, которые могут быть легко прочитаны почтовыми служащими. Дело в том, что электронные сообщения, в том виде и формате, который существует на сегодняшний день, легко могут быть прочитаны и архивированы любым человеком, имеющим доступ к серверу Интернет провайдера (поставщика услуг сети Интернет). В настоящий момент спецслужбам проще и дешевле подключиться к электронным адресам большого количества лиц, нежели к телефонным разговорам. Здесь вообще ничего делать не надо. Все сделает компьютер. Агенту спецслужбы или другому заинтересованному человеку остается только сесть за компьютер и просмотреть все ваши сообщения. Научно-технический прогресс облегчил задачу таким людям, однако, этот же самый прогресс предоставил возможность пользователям сети Интернет скрыть свои сообщения от третьих лиц таким образом, что даже суперкомпьютер стоимостью несколько десятков миллионов долларов не способен их расшифровать.

2. Как PGP работает

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

Ключи

В то время как открытый и закрытый ключи взаимосвязаны, чрезвычайно сложно получить закрытый ключ исходя из наличия только открытого ключа, однако это возможно при наличии большой компьютерной мощности. Поэтому крайне важно выбирать ключи подходящего размера: достаточно большого для обеспечения безопасности и достаточно малого для обеспечения быстрого режима работы. Кроме этого, необходимо учитывать личность того, кто намеревается прочитать ваши зашифрованные сообщения, насколько он заинтересован в их расшифровке, каким временем он обладает, и какие у него имеются ресурсы.
Более большие ключи будут более надежными в течение более длительного срока времени. Поэтому если вам необходимо зашифровать информацию с тем, чтобы она хранилась в течение нескольких лет, то необходимо использовать более крупный ключ.
Ключи хранятся на жестком диске вашего компьютера в зашифрованном состоянии в виде двух файлов: одного для открытых ключей, а другого - для закрытых. Эти файлы называются "кольцами" (keyrings). В течение работы с программой PGP вы, как правило, будете вносить открытые ключи ваших корреспондентов в открытые "кольца". Ваши закрытые ключи хранятся в вашем закрытом "кольце". При потере вашего закрытого "кольца" вы не сможете расшифровать любую информацию, зашифрованную с помощью ключей, находящихся в этом "кольце".

Цифровая подпись

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

Хэш-функция

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

Парольная фраза

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

3. Основные шаги в использовании PGP

  1. Установите программу на свой компьютер. Руководствуйтесь краткой инструкцией по инсталляции программы, приведенной ниже.
  2. Создайте закрытый и открытый ключ. Перед тем, как вы начнете использовать программу PGP, вам необходимо генерировать пару ключей, которая состоит из закрытого ключа, к которому имеете доступ только вы, и открытый ключ, который вы копируете и свободно передаете другим людям (вашим корреспондентам).
  3. Распространите свой открытый ключ среди своих корреспондентов в обмен на их ключи. Ваш открытый ключ, это всего лишь маленький файл, поэтому его можно либо воткнуть в сообщение, копировать в файл, прикрепить к почтовому сообщению или разместить на сервере.
  4. Удостовериться в верности открытого ключа. Как только вы получите открытые ключи своих корреспондентов, то их можно внести в «кольцо» открытых ключей. После этого вам необходимо убедиться в том, что у вас действительно открытый ключ вашего корреспондента. Вы можете это сделать, связавшись с этим корреспондентом и, попросив его зачитать вам по телефону «отпечатки пальцев» (уникальный идентификационный номер) его открытого ключа, а также сообщив ему номер вашего ключа. Как только вы убедитесь в том, что ключ действительно принадлежит ему, вы можете его подписать и таким образом подтвердить ваше доверие к этому ключу.
  5. Шифрование и удостоверение корреспонденции вашей цифровой подписью. После генерации пары ключей и обмена открытыми ключами вы можете начать шифрование и удостоверение ваших сообщений и файлов своей цифровой подписью. Если вы используете почтовую программу, которая поддерживается программой PGP, то вы можете шифровать и дешифровать всю вашу корреспонденцию, находясь прямо в этой программе. Если же ваша почтовая программа не поддерживается программой PGP, то вы можете шифровать вашу корреспонденцию другими способами (через буфер обмена или шифрованием файлов целиком).
  6. Дешифровка поступающих к вам сообщений и проверка подлинности отправителя. Когда кто-либо высылает вам зашифрованное сообщение, вы можете дешифровать его и проверить подлинность отправителя этого сообщения и целостность самого сообщения. Если ваша почтовая программа не поддерживается PGP, то вы можете сделать это через буфер обмена.
  7. Уничтожение файлов. Когда вам необходимо полностью удалить какой-либо файл, вы можете исполнить команду wipe (стереть). Таким образом, удаленный файл уже невозможно будет восстановить.

4. Инсталляция PGP

Ниже приводятся заголовки сообщений, появляющиеся при инсталляции программы и команды, которые необходимо исполнять при инсталляции:
  1. PGP Installation program:

  2. Нажмите Next
  3. Software License agreement:

  4. Согласны ли вы с лицензионным соглашением? Если согласны, то тогда нажмите Yes
  5. User information:

  6. Информация о пользователе. Заполните необходимые поля и нажмите Next
  7. Setup: choose installation directory:

  8. Выберите каталог, куда будет проинсталлирована PGP. Если никаких особых пожеланий по этому поводу нет, то нажмите Next
  9. Select components:

  10. Программа инсталляции предлагает выбрать компоненты, которые будут установлены. Обязательны для инсталляции Program Files . Далее вы можете отметить птичкой плагин для той почтовой программы, которой вы пользуетесь. Если ее в списке нет, то ничего помечать не нужно. Можете также пометить файлы документации (User"s manual ) и программу PGP Disk for Windows (рекомендуется).
    Нажмите Next .
  11. Check setup information

  12. Пронрамма инсталляции что-то там проверит... Смело жмите Next и начнется копирование файлов на жесткий диск.
  13. Для того чтобы программа автоматически запустила операцию создания ключей после перезагрузки компьютера нажать на кнопку "Yes I want to run PGP keys "
  14. Нажмите Finish и на предложение программы инсталляции о перезапуске компьютеры ответьте положительно.
Компьютер перезапустится и на этом программа установки завершится.
Теперь необходимо сгенерировать два ключа:
public key - открытый ключ
private key - закрытый ключ

5. Генерация ключей

  1. После перезагрузки компьютера в правом нижнем углу панели задач (возле часов) появится значок PGP. Кликните по нему и выберите Launch PGP Keys
  2. В меню Keys выберите пункт New Key .Нажмите Next и заполните необходимые формы (имя и E-Mail). Нажмите Next
  3. Выберите размер ключа (2048 рекомендуется) и нажмите Next . Поставьте птичку напротив фразы "Key pair never expires " и нажмите Next .
  4. Два раза введите парольную фразу и нажмите Next .
    В процессе генерации ключей двигайте случайным образом мышью, можете нажать несколько клавиш на клавиатуре. Это необходимо программе для генерации ключей.
  5. Когда программа выдаст сообщение о том, что процесс генерации закончен, нажмите Next и затем "Done ".
На этом процесс создания пары ключей закончился и можно начинать пользоваться программой.
Теперь, после установки программы, необходимо обменяться со своими корреспондентами открытыми ключами. Для этого снова запустите PGP Keys , правой кнопкой мыши кликните файл со своим ключом и выберите пункт Export . Программа предложит вам выбрать путь и имя файла. Этот файл вы должны послать своему корреспонденту, в обмен на его открытый ключ. Когда вы получите необходимый ключт от своего корреспондента, двойным кликом мыши по нему начните процесс импорта (Import). Теперь можно пересылать друг другу зашифрованные сообщения, которые шифруются открытым ключом получателя сообщения.

6. Как послать зашифрованное сообщение

Шифровка сообщений в почтовой программе

После того, как открытый (публичный) ключ вашего корреспондента установится на вашем компьютере, сообщение можно отправлять получателю следующим образом:
  1. Составляем сообщение в почтовой программе, например в Outlook Express
  2. Выделяем текст сообщения (Ctrl+A или Правка-Выделить все) и копируем его в буфер обмена (Ctrl+C или Правка-Копировать). Затем кликаем по иконке PGP на панели задач и выбираем путкт Encrypt Clipboard . Появляется диалог Key Selection Dialog . Дважды щелкните по открытому ключу того, кому собираетесь отправить сообщение и нажмите ОК. PGP зашифрует содержимое буфера обмена.
  3. В поле сообщения снова выделяем весь текст и вставляем только что зашифрованное содержимое буфера обмена, выбрав в меню Правка пункт Вставить (или просто нажав Ctrl+V).
  4. Вот и все. Можно отправлять сообщение!

Шифровка файлов для Attachment (вложений)

Кликните правой кнопкой мыши необходимый файл (например, то же сообщение, созданное в текстовои редакторе) и выберите пункт "PGP-Encrypt ". Появится диалоговое окно со списком доступных ключей, выберите ключ своего корреспондента. Файл будет зашифрован и его расширение изменится на pgp. Присоедините этот файл к своему сообщениею и можете не беспокоиться о том, что ваша информация станет достоянием третьих лиц.

7. Расшифровка сообщений

Расшифровка текста сообщения

Открываем зашифрованное сообщение и выделяем весь его текст (Ctrl+A), затем копируем его в буфер обмена (Ctrl+C). Кликнув по иконке PGP на панели задач, выбираем пункт "decrypt and verify clipboard ". PGP попросит вас ввести парольную фразу. Если фраза введена корректно, содержимое буфера обмена будет дешифровано.

Расшифровка вложений

Сохраните вложение где-нибудь на жестком диске. Кликните по этому файлу правой кнопкой мыши и выберите пункт "PGP-Decrypt ". Программа предложит ввести вашу парольную фразу и, если она была введена корректно, файл будет дешифрован.

Обработка и дизайн:

  • Перевод

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

Здесь будут раскрыты следующие темы:

  • Основы PGP и рекомендации по работе с соответствующим ПО.
  • Использование PGP с Git.
  • Защита учётной записи разработчика.

О структуре материалов

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

Особенности контрольного списка

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

Базовые концепции и инструменты PGP

▍Контрольный список

Вот темы, в которых нужно ориентироваться после успешного освоения материала этого раздела:
  1. Роль PGP в разработке свободного ПО (Важно).
  2. Основы криптографии с открытым ключом (Важно).
  3. Различия между шифрованием и подписыванием материалов (Важно).
  4. Идентификационные данные ключей PGP (Важно).
  5. Достоверность ключей PGP (Важно).
  6. Установка утилит GnuPG (версии 2.x) (Важно).

▍Пояснения

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

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

▍Обзор работы PGP

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

▍Шифрование

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

Процесс шифрования выглядит так:

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

▍Подписывание

Для подписывания данных открытые и закрытые ключи PGP используются обратным способом:
  1. Подписывающий генерирует хэш контрольной суммы неких данных.
  2. Подписывающий использует собственный закрытый ключ для шифрования этой контрольной суммы.
  3. Подписывающий предоставляет зашифрованную контрольную сумму вместе с данными.
Для проверки подписи выполняют следующие действия:
  1. Проверяющий генерирует собственную контрольную сумму данных.
  2. Проверяющий использует открытый ключ подписывающего для расшифровывания предоставленной контрольной суммы.
  3. Если контрольные суммы совпадают, значит целостность содержимого подтверждена.

▍Совместное использование шифрования и подписывания

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

▍Идентификационные данные ключа

С каждым PGP-ключом должны быть ассоциированы идентификационные данные владельца ключа. Обычно это - полное имя человека и адрес электронной почты в следующем формате:

Alice Engineer
Иногда идентификационные данные так же содержат комментарии, приводимые в скобках и предназначенные для того, чтобы сообщить конечному пользователю подробности о конкретном ключе:

Bob Designer (obsolete 1024-bit key)
Так как люди, владельцы ключей, могут играть множество профессиональных и персональных ролей, в одном и том же ключе могут присутствовать несколько наборов идентификационных данных:

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

▍Достоверность ключа

Для того чтобы иметь возможность использовать чей-нибудь открытый ключ для шифрования или верификации, вам нужно убедиться в том, что он действительно принадлежит этому человеку (Alice в данном случае), а не мошеннику (пусть мошенника зовут Eve). В PGP это называется достоверностью ключа:
  • Полная достоверность ключа означает, что имеется очень высокий уровень уверенности в том, что данный ключ принадлежит Alice.
  • Граничная достоверность ключа означает, что мы до некоторой степени уверены в том, что ключ принадлежит Alice.
  • Неизвестная достоверность ключа означает, что у нас абсолютно нет уверенности в том, что этот ключ принадлежит Alice.

▍Сеть доверия и механизм «доверие при первом использовании»

PGP включает в себя механизм делегирования доверия, известный как сеть доверия (Web of Trust, WOT). В своей основе - это попытка заменить необходимость в централизованных службах сертификации вроде тех, что используются в HTTPS/TLS. При таком подходе пользователь самостоятельно принимает решения о том, кому можно доверять.

К сожалению, очень немногие понимают, как работает сеть доверия, и ещё меньше людей заботится об этой технологии. И хотя сети доверия остаются важным аспектом спецификации OpenPGP, существующие версии GnuPG (2.2 и выше) реализовали альтернативный подход, представленный механизмом «доверие при первом использовании» (Trust on First Use, TOFU).

TOFU можно сравнить с SSH. Когда вы, используя SSH, в первый раз подключаетесь к удалённой системе, ваша система запоминает отпечаток её ключа. Если ключ изменится, SSH-клиент сообщит вам об этом и отклонит соединение, предлагая вам принять решение о том, доверяете ли вы изменившемуся ключу или нет.

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

В этом руководстве мы будем использовать модель доверия TOFU.

▍О терминологии

Тут нам хотелось бы отметить важность понимания различий между такими терминами, как PGP, OpenPGP, GnuPG и gpg:
  • PGP (Pretty Good Privacy) - это название коммерческой программы, вышедшей в 1991-м году.
  • OpenPGP - это стандарт IETF, совместимый с PGP.
  • GnuPG (Gnu Privacy Guard) - это бесплатное ПО, которое реализует стандарт OpenPGP.
  • Инструмент командной строки для GnuPG называется gpg.
Сегодня термин PGP почти универсально используется в смысле «стандарт OpenPGP», а не как название программы, и таким образом, PGP и OpenPGP взаимозаменяемы. Термины GnuPG и gpg следует использовать только когда имеются в виду конкретные инструменты, а не стандарты и прочие понятия, которыми мы оперируем. Например:
  • Ключ PGP (не GnuPG или GPG)
  • Подпись PGP (не GnuPG или GPG)
  • Сервер ключей PGP (не GnuPG или GPG)
Понимание этих различий должно помочь вам в общении с другими пользователями PGP.

▍Установка GnuPG

Если вы используете Linux, это значит, что в вашей системе уже установлено ПО GnuPG. На Mac вам надо установить GPG-Suite , или воспользоваться командой brew install gnupg2 . Если вы пользователь Windows, то вам подойдёт GPG4Win , и вам, вероятно, потребуется изменить некоторые команды из этого руководства. Если же вы пользуетесь в Windows Unix-подобным окружением, то команды менять не придётся. Если вы пользуетесь какими-то другими платформами, то вам понадобится самостоятельно подобрать подходящую реализацию GnuPG.

▍GnuPG версий 1 и 2

И GnuPG v.1, и GnuPG v.2 реализуют один и тот же стандарт, но они предоставляют несовместимые библиотеки и инструменты командной строки, в результате многие дистрибутивы поставляются и с устаревшей версией 1, и с более новой версией 2. Вам нужно удостовериться в том, что вы всегда пользуетесь GnuPG v.2.

Для начала, для того, чтобы узнать, какая версия GnuPG скрывается в вашей системе под именем gpg , выполните следующую команду:

$ gpg --version | head -n1
Если вы видите нечто вроде gpg (GnuPG) 1.4.x , это значит, что по команде gpg вызывается GnuPG v.1. Попробуйте в таком случае команду gpg2:

$ gpg2 --version | head -n1
Если вы видите что-то вроде gpg (GnuPG) 2.x.x , значит, всё в порядке. Тут мы полагаем, что у вас есть версия GnuPG 2.2 или более поздняя. Если вы используете версию GnuPG 2.0, некоторые из команд, которые будут здесь приведены, работать не будут, поэтому вам стоит рассмотреть возможность установки самой свежей версии 2.2 GnuPG.

▍Псевдоним для GnuPG v.2

Если в вашей системе есть и команда gpg , и команда gpg2 , хорошо бы настроить всё так, чтобы по команде gpg вызывалась GnuPG v.2, а не старая версия ПО. Сделать это можно, создав псевдоним:

$ alias gpg=gpg2
Эту команду можно поместить в.bashrc для того, чтобы на команду gpg откликалась программа GnuPG v.2.

Итоги

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

Уважаемые читатели! Используете ли вы PGP для защиты кода ваших программных проектов?

Теги: Добавить метки

После перезагрузки компьютера в нижнем правом углу (панель задач) появится значок PGP - символ амбарного замка.

Поставьте на него мышку, нажмите на мышку и выберите в открывшемся меню команду Launch PGP keys .

Зайдите в меню KEYS и выполните команду NEW KEY

Нажмите на next .

Введите свое имя и электронный адрес.

Нажмите на next .

Выберите размер ключа 2048 и нажмите на next .

Затем выделите фразу key pair never expires (срок действия ключевой пары никогда не истекает) и нажмите на next .

Два раза введите секретный пароль и нажмите на next .

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

Затем программа сообщит, что процесс генерации ключей закончен.

Нажмите на next .

Потом еще раз нажмите на next .

Затем нужно нажать на команду done.

На этом процесс создания пары ключей закончился и можно начинать пользоваться программой.

Теперь, после установки программы, необходимо обменяться со своими корреспондентами открытыми ключами. Для этого необходимо исполнить команду LAUNCH PGP KEYS , выделить свой ключ (файл со своим именем) в окошке, нажать на правую кнопку мышки и выбрать команду EXPORT .

Появится окошко, с помощью которого можно указать путь, где сохранить файл с названием "ваше имя.asc".

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

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

3. Порядок пользования программой pgp

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

Как послать зашифрованное сообщение

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

    Составляем сообщение в почтовой программе Outlook Express.

    После того, как сообщение готово к отсылке, нажимаем один раз, либо на третий значок справа на панели Outlook Express с изображением желтого конверта и замка (при этом кнопка просто вдавливается и больше ничего не происходит), либо в меню tools нажимаем на encrypt using PGP и затем нажимаем на команду в меню file под названием send later .

    Тогда сразу же появится окошко программы PGP под названием Recipient selection , в котором необходимо найти и выделить мышкой публичный ключ своего корреспондента (получателя сообщения, который обычно именуется именем получателя) и нажать на OK.

    Сразу же после этого программа автоматически зашифрует сообщение и поместит его в папку исходящих outbox.

    Теперь можно заходить в Интернет и отправлять все сообщения, готовые к отправке.

4. Способы шифрования и дешифрирования файлов в pgp Зашифровать и подписать из Проводника Windows

    Открыть Проводник Windows из меню Пуск.

    Выбрать файл или файлы, которые Вы хотите зашифровать.

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

    Выбрать требуемый пункт из подменю PGP меню "Файл" или из меню, которые вы видите, нажимая правую кнопку мыши.

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

При посылке файлов как вложения (аттачменты) с некоторыми программами электронной почты, Вы должны выбрать флажок "Текстовый вывод" (Text Output), чтобы файл был записан как ASCII текст. Это иногда необходимо, чтобы послать двоичный файл, используя старые программы электронной почты.

    Если Вы хотите получить зашифрованный файл, записаннный в текстовом формате, который может быть обработан всеми программами электронной почты, выберите флажок "Текстовый вывод" (Text Output). Этот выбор увеличивает размер файла примерно на 30 процентов.

Вы можете использовать обычное шифрование (только с паролем, без ключа), что означает, что Вы полагаетесь на обычный пароль, а не на шифрование с открытым ключом. Файл шифруется, используя временный ключ сеанса, который шифруется с использованием вашего пароля. Для обычного шифрования установите флажок "Conventional Encryption".

    Затирание оригинала уничтожает оригинал документа, который Вы шифруете или подписываете, так что ваша важная информация становится нечитаема для любого, кто имеет доступ на ваш жесткий диск. Для затирания оригиналов установите флажок "Wipe Original".

    Если Вы подписали файлы, у Вас спрашивают ваш пароль.

    Если Вы добавляете вашу подпись к файлу и хотели бы, чтобы подпись была записана в отдельном файле, выберите флажок "Detached Signature File".

    Выберите открытые ключи, перетяните их в список получателей (нижняя часть окна), затем щелкните OK. Появляется диалог "Сохранить Зашифрованный Файл Как" (Save Encrypted File As).

    Определите местоположение, и введите имя файла, где Вы хотите сохранить зашифрованную версию файла. Расширение.pgp автоматически добавляется в конец к наименованию файла, если Вы не включили выбор ASCII Armor (прим. перв.: по-видимому, имеется в виду текстовый вывод), когда используется расширение.asc.

Если Вы посмотрите в каталоге, где Вы сохранили файл, то увидите файл с указанным именем, представленным одним из двух изображений (иконок).

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

Pretty Good Privacy
Тип программное обеспечение неприкосновенности частной жизни [d] и шифрующее программное обеспечение
Автор Филипп Циммерманн
Разработчик Филипп Циммерманн
Написана на Multi-language
Операционная система Linux , macOS , Windows
Первый выпуск 1991
Лицензия коммерческое программное обеспечение и проприетарное программное обеспечение
Сайт openpgp.org

Общие сведения

PGP имеет множество реализаций, совместимых между собой и рядом других программ (GnuPG , FileCrypt и др.) благодаря стандарту OpenPGP (RFC 4880), но имеющих разный набор функциональных возможностей. Существуют реализации PGP для всех наиболее распространённых операционных систем . Кроме свободно распространяемых реализаций, есть ещё и коммерческие.

Совместимость

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

Защищённость

Криптографическая стойкость PGP основана на предположении, что используемые алгоритмы устойчивы к криптоанализу на современном оборудовании. Например, в PGP первых версий для шифрования ключей сессии использовался алгоритм RSA , основанный на односторонней функции (факторизация). В PGP версии 2 дополнительно можно использовать алгоритм IDEA . В последующем были добавлены дополнительные алгоритмы шифрования. Ни у одного используемого алгоритма нет известных уязвимостей.

В 2010 году группе учёных из Швейцарии, Японии, Франции, Нидерландов, Германии и США удалось декодировать данные, зашифрованные по алгоритму RSA при помощи ключа длиной 768 бит. Нахождение простых сомножителей осуществлялось общим методом решета числового поля . На первый шаг (выбор пары полиномов степени 6 и 1) было потрачено около полугода вычислений на 80 процессорах, что составило около 3 % времени, потраченного на главный этап алгоритма (просеивание), который выполнялся на сотнях компьютеров в течение почти двух лет. Если интерполировать это время на работу одного процессора AMD Opteron 2,2 ГГц с 2 ГБ оперативной памяти, то получилось бы порядка 1500 лет. Обработка данных после просеивания для следующего ресурсоёмкого шага (линейной алгебры) потребовала несколько недель на малом количестве процессоров. Заключительный шаг после нахождения нетривиальных решений ОСЛУ занял не более 12 часов.

Решение ОСЛУ проводилось с помощью метода Видемана на нескольких раздельных кластерах и длилось чуть менее 4 месяцев. При этом размер разрежённой матрицы составил 192 796 550×192 795 550 при наличии 27 795 115 920 ненулевых элементов. Для хранения матрицы на жёстком диске понадобилось около 105 гигабайт. В то же время понадобилось около 5 терабайт сжатых данных для построения данной матрицы.

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

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

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

Зная разложение модуля на произведение двух простых чисел, противник может легко найти секретную экспоненту и тем самым взломать RSA. Однако на сегодняшний день самый быстрый алгоритм факторизации - решето обобщённого числового поля (General Number Field Sieve), скорость которого для k-битного целого числа составляет exp ⁡ ((c + o (1)) k 1 3 log 2 3 ⁡ k) {\displaystyle \exp((c+o(1))k^{\frac {1}{3}}\log ^{\frac {2}{3}}k)} для некоторого c < 2 {\displaystyle c<2} , не позволяет разложить большое целое за приемлемое время.

Механизм работы PGP

Для ключей RSA legacy длина ключа может составлять от 1024 до 2048 бит, а для Diffie-Hellman/DSS и RSA - от 1024 до 4096. Ключи RSA legacy содержат одну ключевую пару, а ключи Diffie-Hellman/DSS и RSA могут содержать один главный ключ и дополнительные ключи для шифрования. При этом ключ электронной подписи в ключах Diffie-Hellman/DSS всегда имеет размер 1024. Срок действия для каждого из типов ключей может быть определён как неограниченный или до конкретной даты. Для защиты ключевого контейнера используется секретная фраза.

Цифровая подпись

Уголовное расследование

Вскоре после выпуска PGP стала использоваться за пределами США, и в 1993 году правительство США начало расследование против Циммермана по подозрению в нарушении экспортного законодательства, которое регулирует распространение криптографических систем с длиной ключа более 40 бит. В PGP использовались ключи длиной 128 бит и более.IETF IPsec VPN . После легализации экспорта криптографического ПО в 2000 году NAI прекратила публикацию исходных текстов, несмотря на возражения команды PGP.

В 2001 году Циммерман покинул NAI, NAI объявила о продаже PGP и остановке разработки PGP. В 2002 году NAI прекратила поддержку всех продуктов PGP PGP E-Business Server (исходной консольной версии PGP).

Современное состояние

В 2002 году несколько бывших разработчиков PGP основали PGP Corporation и выкупили PGP (кроме консольной версии). В 2003 году PGP Corporation разработала новый серверный продукт, PGP Universal.

В 2010 году Symantec Corp. выкупил PGP за 300 млн долларов.

Криптографические приложения PGP Corporation

PGP изначально разрабатывалась для шифрования электронной почты на стороне клиента, но с 2002 года включает также шифрование жёстких дисков переносных компьютеров, файлов и каталогов, сессий программ мгновенного обмена сообщениям, пакетной передачи файлов, защиту файлов и каталогов в сетевых хранилищах, а в современных версиях - ещё и шифрование HTTP-запросов и ответов на стороне сервера (mod openpgp) и клиента (Enigform).

Клиентские программы объединены в семейство PGP Desktop (включает в себя PGP Desktop EMail, PGP Whole Disk Encryption и PGP NetShare).

PGP Universal Server позволяет из командной строки централизованно администрировать клиенты на основе PGP Desktop.

В 2010 году права на приложение были приобретены компанией Symantec за 300 млн долларов.

Правовые аспекты использования в России

На сегодняшний день прямых законодательных запретов на использование PGP в России нет. Законодательно ограничивается использование криптографии только в государственных и муниципальных учреждениях. ФСБ предписывает всем государственным структурам использовать только сертифицированные средства криптографии. Физические лица и компании сами устанавливают, какая информация является для них коммерческой тайной, методы хранения и передачи такой информации Информационный ресурс Helpdesk24 в статье «Правомерность использования криптографических средств защиты информации» приводит выдержки из федеральных законов, поясняющие данный вопрос. Также авторы проекта «openPGP в России» утверждают, что не существует законов, запрещающих использование PGP Ссылки

Данная статья представляет собой краткое руководство по использованию GnuPG (он же 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

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

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

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

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

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

Не имеет большого значения, какой 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 --keyserver pgp.mit.edu --refresh-keys

Пример шифрования и подписи файла для заданного получателя (ключ -r можно указывать много раз):

gpg --encrypt --sign --armor -r eax@ example.ru msg.txt

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

Пример подписи и проверки подписи бинарного файла (например, ISO образа диска):

gpg --detach-sign file.iso
gpg --verify file.iso.sig

Симметричное шифрование/дешифрование файла (удобно, например, для хранения паролей):

gpg -o nonsense.gpg --cipher-algo AES -a -c nonsense.txt
gpg -o nonsense2.txt -d nonsense.gpg

Симметричное шифрование с сохранением в бинарном формате (удобно для шифрования бэкапов):

tar -cvzf - / home/ eax | \
gpg --symmetric --cipher-algo AES256 --digest-algo SHA256 \
--compression-algo Uncompressed > backup.tgz.gpg

Расшифровка зашифрованного таким образом файла:

gpg --decrypt backup.tgz.gpg | tar -xvzf -

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

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?

 

 

Это интересно: