355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Максим Левин » PGP: Кодирование и шифрование информации с открытым ключом » Текст книги (страница 6)
PGP: Кодирование и шифрование информации с открытым ключом
  • Текст добавлен: 12 октября 2016, 01:14

Текст книги "PGP: Кодирование и шифрование информации с открытым ключом"


Автор книги: Максим Левин



сообщить о нарушении

Текущая страница: 6 (всего у книги 10 страниц)

Версии PGP.

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

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

PGP 2.3a

Это "классический" PGP. Его все еще можно использовать, хотя из-за несовместимости могут возникнуть некоторые проблемы при обработке ключей и сообщений, созданными версиями 2.6.x и более поздними, использующими ключи длиннее 1280 бит. Предполагается, что версия 2.3a не может использоваться за пределами США из-за патентных ограничений.

PGP 2.6ui

Это неофициальная версия PGP 2.3a, которая устраняет указанные выше проблемы несовместимости. Эта версия не является версией 2.6.x так как она базируется на исходных кодах 2.3a.

PGP 2.62ui

Она основана на исходных кодах 2.6ui и является модификацией, в которой попытались достичь совместимости с последними нововведениями, появившимися в версиях 2.6.x.

MIT PGP 2.6.2

Это последняя официальная версия PGP. Ее сообщения можно прочитать предыдущими версиями до 2.5 и она использует библиотеку кодирования RSAREF. Экспортировать эту версию за пределы США незаконно, но, что любопытно, если она экспортирована, то ее можно свободно использовать.

PGP 2.6.3i

Основана на исходных кодах MIT PGP 2.6.2, которые были модифицированы для международного использования. В частности, не используется упомянутая выше библиотека кодирования RSAREF. Использование этой версии в США незаконно.

PGP 5.0

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

ViaCrypt PGP 2.7.1 v 4.0

Так как она является коммерческой, в поставку входит руководство и лицензия на личное использование. Исходные коды в поставку не входят.

PGP 4.5 и 5.0

В июне 1996 PGP Inc. купила ViaCrypt и начала разработку коммерческих версий PGP для Соединенных Штатов и Канады. Самой последней версией является PGPMail 4.5.

Необходимо также учитывать, что в некоторых странах, например во Франции, Иране, Ираке, России и Китае, использование криптографии регулируется законодательством или запрещено.

Некоторые ссылки для различных дистрибутивов Linux.

Бинарные файлы в формате ELF:

tonelli.sns.it/pub/Linux/pgp263.is.bin.tgz

Бинарные файлы и исходные коды для Red Hat:

ftp.replay.com/pub/replay/ub/redhat/i386/pgp-2.6.3i-1.i386.rpm

ftp.replay.com/pub/replay/ub/redhat/SRPMS/pgp-2.6.3i-1.src.rpm

Исходные коды:

ftp.dit.upm.es/mirror/ftp.ifi.uio.no/pub/pgp/src/pgp263is.tar.gz

Установка PGP.

Предположим, вы раздобыли PGP. Также предположим, что вы загрузили исходный код версии 2.6.3i и что на вашем жестком диске находится файл pgp263is.tar.gz

Первым шагом будет создать каталог для исходных кодов:

 mkdir pgp

Далее разворачиваем архив:

tar –C:/pgp –xzvf pgp263is.tar.gz

Теперь переходим в только что созданный каталог:

cd pgp

Теперь разворачиваем файл pgp263ii.tar, в котором находится документация и исходный код программы. Это выполняется командой:

tar –xvf pgp263ii.tar

Сейчас вы готовы к компиляции PGP. Если вы загрузили не исходный код, а скомпилированную версию (а.out или ELF), вы можете пропустить этот этап. Если вы подготовили исходный код, то компиляция выполняется следующими командами:

 cd scr

 make linux

Если все прошло хорошо, то makefile создаст исполняемый файл pgp. В случае глобальной установки вы можете скопировать его в /usr/local/bin, /usr/bin или куда пожелаете. Или вы можете оставить его в вашем домашнем каталоге.

Аналогично, файл справки pgp.1 копируется в /usr/man/man1 в случае глобальной установки.

Основная конфигурация.

По умолчанию PGP ищет кольца ключей и некоторые конфигурационные файлы в каталоге ~/.pgp, поэтому первым шагом мы создадим этот каталог в нашем НОМЕ:

 cd

 mkdir.pgp

Обратимся к дистрибутиву и найдем файл config.txt, который отвечает за конфигурацию некоторых аспектов PGP. Чтобы у вас была личная конфигурация, вы должны скопировать этот файл в ваш только что созданный ~/.pgp.

Или, вместо ~/.pgp/ config.txt, вы можете переименовать его в .pgprc и сохранить в вашем домашнем каталоге, то есть ~/.pgprc.

Среди прочего, этот файл может определять используемый язык при помощи параметра Languaje, возможные варианты:

 Languaje = en (Английский)

 Languaje = es (Испанский)

 Languaje = ja (Японский)

В этом файле есть другие параметры. Чтобы воспользоваться преимуществами этой опции, вы должны скопировать файл Languaje.txt в ~/.pgp

Далее рекомендуется скопировать персонализированный файл справки на вашем языке в ~/.pgp. В случае испано-говорящих пользователей можно скопировать файл es.hlp.

Создание пары ключей.

Чтобы начать использовать PGP, нужно создать вашу собственную пару ключей (открытый/закрытый). Чтобы это сделать, выполните команду:

 pgp -kg

Вас попросят выбрать максимальный размер ключа (512, 768 или 1024 байта), чем больше ключ, тем более надежным он будет, правда ценой небольшого снижения быстродействия.

После выбора размера ключа вас попросят задать идентификатор открытого ключа. Обычно здесь люди указывают свои имена или e-mail адрес. В моем случае, я написал:

Angel Lopez Gonzalez

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

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

Через несколько секунд PGP создаст ключи и известит вас об этом сообщением. После того, как ключи были сгенерированы должным образом, их необходимо сохранить в каталоге ~/.pgp в виде файлов: pubring.pgp и secring.pgp

Первый, pubring.pgp, является кольцом с открытым ключом. На данный момент в нем хранится только ваш ключ.

Второй, secring.pgp является, как вы можете понять, кольцом закрытых ключей, на данный момент в нем содержится только ваш закрытый ключ.

Необходимо помнить, что безопасность методов открытого ключа опирается на безопасность закрытого ключа; поэтому, обязательно храните его в надежном месте и следите за тем, чтобы никто не смог его получить из кольца закрытых ключей. Проверьте права доступа к secring.pgp и установите такие права доступа, чтобы только вы могли читать и записывать, причем остальные не должны иметь доступ вообще.

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

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

Добавление ключей к кольцу.

Теперь вам, вероятно, захочется добавить открытые ключи ваших друзей к вашему кольцу. Для этого вам потребуется получить эти кольца: с сервера ключей, непосредственно от этого человека, при помощи команды finger, по e-mail, и т.д. Вспомним, что открытые ключи распространяются свободно и нет необходимости передавать их по безопасному каналу, как в случае с криптологическими методами с одним ключом.

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

pgp -kа Somekey [кольцо]

По умолчанию расширение .pgp указывает на файл с ключом и имена pubring.pgp и secring.pgp даются файлам, содержащим кольца открытых и закрытых ключей, соответственно.

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

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

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

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

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

Теперь на сцене появляются еще два человека: Луис и Мария. Луис получает от Педро ключ Хуана и позднее пересылает его Марии. Мария не доверяет Луису, но видит, что ключ Хуана сертифицирован Педро. Мария может проверить открытый ключ Хуана благодаря подписи Педро. У нее есть открытый ключ Педро, который он дал ей лично, поэтому она может доверять ключу Луиса, проверив подлинность подписи Педро. Теперь мы знаем, как Мария может довериться ключу, данному ей такой ненадежной личностью, как Луис.

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

Удаление ключа из кольца.

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

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

Например: "pgp –kr juan" удалит любой ключ, у которого в идентификаторе содержится "juan". По умолчанию исследуется кольцо открытых ключей.

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

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

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

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

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

pgp –kxa identifies file [ring]

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

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

Содержание кольца.

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

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

Еще раз заметим, что кольцом по умолчанию является pubring.pgp, открытое кольцо.

Если идентификатор не указан явно, то показываются все ключи кольца.

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

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

Кодирование сообщения.

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

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

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

pgp -е exam.doc marcos

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

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

pgp -еа exam.doc marcos

По причинам безопасности, нам иногда может потребоваться удалить оригинал. PGP может делать это автоматически при помощи опции -w:

pgp –eaw exam.doc marcos

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

Теперь представьте, что наш учитель хочет послать эти задачи своим коллегам по кафедре. Чтобы это сделать, ему необходимо просто набрать вместо одного несколько идентификаторов:

pgp –ea exam.doc marcos juan alicia

Заметьте, что опция -а тоже используется, поэтому выходной файл будет в формате ASCII и его можно будет послать по e-mail.

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

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

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

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

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

Когда наш учитель из примера решает подписать экзаменационные задачи, чтобы сообщить, что их послали не студенты-шутники :) он набирает следующее:

pgp –s exam.doc

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

pgp -sta exam.doc

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

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

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

Например:

pgp -es exam.doc marcos –u angel

Здесь файл exam.doc кодируется и подписывается и сохраняется в файле exam.pgp. Для кодирования файла используется открытый ключ, идентифицируемый подстрокой "marcos", поэтому только этим ключом можно декодировать этот файл. Затем я идентифицирую мой закрытый ключ строкой "angel", так как в моем кольце есть несколько ключей.

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

Кроме того, нас может заинтересовать возможность создания подписи файла отдельно от данных. Чтобы это сделать, воспользуемся опцией -b:

pgp -sb exam.doc

Эта команда создает новый файл exam.sig, содержащий только подписи.

Декодирование.

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

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

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

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

pgp -m файл

Существует еще одна возможность – использовать каналы ввода и вывода с опцией -f:

pgp -fs идентификатор < входной_файл > выходной_файл

Еще одним интересным сценарием является декодирование подписанного сообщения, посланного нам кем-нибудь, с сохранением подписи, например для кодирования его еще раз для того, чтобы послать его кому-нибудь еще. Чтобы это сделать, нужно использовать опцию -d:

pgp -d exam

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

Обработка текстовых файлов.

Часто PGP используется для кодирования электронной почты, которая чаще всего представляет собой текст. Проблема текстовых файлов заключается в том, что на разных машинах текст представляется по-разному; например в MS-DOS все строки заканчиваются символами возврата каретки и перевода строки, в Линуксе только перевод строки, в Macintosh только возврат каретки... и т.д. Чтобы избежать несовместимости платформ, нам необходимо сказать PGP, что мы хотим закодировать текстовый файл, а не бинарный файл, с тем, чтобы после разархивирования его можно было адаптировать к особенностям платформы получателя. Для кодирования текстового файла для e-mail используется опция -t. Например:

pgp -sta текстовый_файл идентификатор

«Отпечатки (fingerprints)».

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

Для просмотра отпечатка ключа используется команда:

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

Использование PGP в командной строке.

PGP имеет опции, которые особенно полезны при использовании PGP в командной строке в автоматизирующих скриптах.

+batchmode

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

pgp +batchmode файл

force

Использование этой опции одобряет любую операцию по переписыванию файла или удалению ключа.

pgp +force –kr marcos

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

Здесь приведен пример:

PGPPASS="пароль"

export PGPPASS

pgp –s file.txt marcos

Еще одним способом передачи пароля PGP в неинтерактивном режиме является использование опции -z.

Как здесь:

pgp –sta exams.txt angel -z "пароль"

Еще одна полезная операция в командной строке – это изменение "разговорчивости" PGP при помощи опции +verbose.   Она задает тихий режим – то есть отсутствие информационных сообщений, только сообщения об ошибках:

pgp file.pgp +verbose=0

Интеграция в почтовые клиенты.

Интеграция PGP в почтовые клиенты для автоматического кодирования, декодирования и подписи проста и почти не зависит от используемого почтового клиента.

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

Хотя я буду описывать работу PGP с Pine, основные принципы применимы ко всем другим клиентам. Конфигурация, конечно, будет отличаться для каждой почтовой программы.

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

В случае Pine, у него есть опция для определения фильтров, которые выполняются до вывода сообщения на экран. Эта опция называется "display-filters" и находится в конфигурационном меню Pine. В эту опцию мы добавим новый фильтр, который выглядит так:

_BEGINNING("–BEGIN PGP MESSAGE–")

_ /usr/local/bin/pgp

Каждое закодированное PGP сообщение заключается двумя определенными строчками – "– BEGIN PGP MESSAGE –" и "– END PGP MESSAGE –" – с тем, чтобы если вы захотите узнать, имеет ли сообщение в теле закодированный текст, то достаточно найти одну из указанных выше строчек. Фильтр, определенный в Pine, делает именно это. Перед отображением самого сообщения он проверяет тело сообщения на наличие

строки "– BEGIN PGP MESSAGE –" с тем лишь ограничением, что она должна быть в начале какой-либо строки. Если он находит ее, он выполняет программу: /usr/local/bin/pgp

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

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

Pine помогает нам еще раз, в нем есть конфигурационная опция "sending-filters".  Ниже приведен фильтр, который надо задать для этой опции:

/usr/local/bin/pgp -etaf_RECIPIENTS

После написания сообщения и нажатия CTRL-Х для отправки, Pine спросит нас, хотим ли мы послать его сразу, без применения заданных фильтров. Чтобы послать сообщение без кодирования, просто ответьте утвердительно, но если вы хотите послать сообщение закодированным, то нажмите CTRL-N или CTRL-Р, далее вам предложат список всех заданных фильтров. В нашем случае это будет только фильтр PGP, приведенный выше.


    Ваша оценка произведения:

Популярные книги за неделю