|
Использование Pretty-Good-Privacy в Linux
ВступлениеPGP расшифровывается как Pretty Good Privacy (очень хорошая защита) и является одним из самых популярных в компютерном обществе криптографическим приложением.PGP является средством, созданным для обеспечения защиты и аутентификации информации в таких ненадежных коммуникационных сетях, как Internet. Защита гарантирует, что только получатель информации может воспользоваться ей. Оказавшись в чужих руках, она будет совершенно бесполезной, поскольку ее нельзя будет декодировать. Аутентификация гарантирует, что если некоторая ифнормация была создана лицом "A" , то она действительно поступила от "A" и не была никем сфальсифицирована или изменена в пути. PGP основана на криптографической системе, известной как открытый ключ, которая может быть использована на ненадежных каналах. Это делает ее идеальной для обеспечения защиты информации, передаваемой по таким сетям, как Internet. Для того, чтобы интересоваться защитой передаваемых вами данных и, следовательно, нуждаться в средстве криптографии, вовсе не обязательно участвовать в крутом промышленном шпионаже :) Нечто совсем простое, например E-mail, может быть самой настоящей причиной начать использовать PGP. Давайте разберемся почему:
Как работает криптография открытого ключаВ системах с открытым ключом каждый человек имеет два ключа, взаимно дополняющих друг друга; один является открытым ключом, а другой закрытым.Открытый ключ может и должен быть свободно доступным, так как он является именно тем ключом, который остальной мир использует для передачи вам информации. Однако открытый ключ не угрожает безопасности закрытого ключа. Рассмотрим это на примере двух друзей, Хуана и Педро. Хуан может безопасно послать информацию Педро, если он знает его открытый ключ. С другой стороны, Педро, используя свой закрытый ключ, способен декодировать сообщение, которое послал Хуан. Предположим, что есть еще один человек, Маркос, который перехватывает сообщение, которое Хуан послал Педро. Маркос не может ничего сделать с сообщением, поскольку у него нет закрытого ключа Педро. Даже сам Хуан, отправитель и создатель сообщения, не может декодировать его, это может сделать только Педро, при помощи закрытого ключа. Безопасность системы основана на надежном хранении каждым пользователем своих закрытых ключей, даже в тех случаях, когда открытый ключ широко известен. Если кто-то попытается сломать систему, не зная закрытого ключа получателя, ему потребуется так много лет, что в конце концов информация окажется бесполезной. Как было сказано во вступлении, помимо защиты, PGP дает возможность аутентифицировать информацию. Рассмотрим почему: Наш открытый ключ служит не только для кодирования сообщений, но и для "подписи" посылаемой информации; полная аналогия с подписями, которые часто ставят на бумажных документах. Подписанный цифровым образом без закрытого ключа документ может быть аутентифицирован любым человеком, обладающим открытым ключом. Такая аутентификация предоставляет средства, позволяющие проверить, действительно ли сообщение поступило от человека, указанного в качестве отправителя, и что оно не было изменено или фальсифицировано. Для обеспечения защиты и аутентификации могут использоваться оба процесса, как кодирование, так и подпись. Сначала документ подписывается нашим закрытым ключом и затем кодируется с помощью открытого ключа получателя. По получении сообщения получатель выполняет шаги в обратном порядке, сначала декодируя документ своим закрытым ключом и потом проверяя нашу подпись нашим открытым ключом. Все эти процессы могут быть автоматизированы, это мы покажем позднее. Открытый ключ хранится в так назыаемом сетрификате ключа, который является самим открытым ключом вместе с именем владельца и датой его создания. Закрытый ключ защищен паролем, который предотвращает его несанкционированное использование. Оба ключа хранятся в файле, известном как кольцо ключей, в котором также хранятся различные сертификаты ключей. Обычно есть кольцо для открытых ключей и кольцо для закрытых. Ключи имеют внутренний идентификатор ключа, который состоит из 64 последних бит ключа. При отображении информации о ключе на самом деле показываются последние 32 бита ключа. Эти идентификаторы ключа используются PGP, например, для определения ключа при декодировании сообщения. При подписывании документа PGP формирует 128 бит, которые представляют
документ. Эта подпись является своего рода контрольной суммой, или CRC,
которая позволяет обнаружить изменения в документе. В отличие от обычных
CRC или контрольных сумм, никто не может заново создать эту подпись чтобы
узаконить любые изменения исходного документа. Подпись создается при помощи
закрытого ключа отправителя и тот, кто хочет внести изменения, не имеет
к нему доступа.
Версии PGPТеперь, когда вы знаете, для чего нужен PGP, вы наверняка захотите им воспользоваться.На этом этапе необходимо еще раз сказать о большой путанице, окружающей
различные версии PGP. В виду политики Соединенных Штатов в отношении экспорта
криптографического материала, появились несколько версий PGP, вместе с
несколькими законами по их использованию. Я постараюсь прояснить всю эту
неразбериху и перечислю различные версии, существующие на сегодняшний день.
Необходимо также учитывать, что в некоторых странах, например во Франции, Иране, Ираке, России и Китае, использование криптографии регулируется законодательством или запрещено. Некоторые интересные ссылки для версии 2.6.3i для различных дистрибутивов Linux:
ftp.replay.com/pub/replay/ub/redhat/SRPMS/pgp-2.6.3i-1.src.rpm Установка 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. Если вы загрузили не исходный код, а скомпилированную версию (a.out или ELF), вы можете пропустить этот этап. Если вы подготовили исходный код, то компиляция выполняется следующими командами: cd src make linuxЕсли все прошло хорошо, то makefile создаст исполняемый файл pgp. В случае глобальной установки вы можете скопировать его в /usr/local/bin, /usr/bin или куда пожелаете. Или вы можете оставить его в вашем домашнем каталоге. Аналогично, файл справки pgp.1 копируется в /usr/man/man1 в случае глобальной
установки.
Основная конфигурацияПо умолчанию PGP ищет кольца ключей и некоторые конфигурационные файлы в каталоге ~/.pgp, поэтому первым шагом мы создадим этот каталог в нашем HOME: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 <alogo@mx2.redestb.es> Далее идет пароль, который будет защищать ваш закрытый ключ. Выберите фразу, которую вы легко сможете запомнить. Это необходимо для защиты закрытого ключа. Например, если кто-нибудь украдет его, он будет бесполезен без пароля. Наконец, программа попросит вас в произвольном порядке нажать несколько клавиш на клавиатуре чтобы она могла создать последовательность случайных чисел. Программа задает последовательность бит на основе интервалов между нажатиями клавиш. Через несколько секунд PGP создаст ключи и известит вас об этом сообщением. После того, как ключи были сгенерированы должным образом, их необходимо сохранить в каталоге ~/.pgp в виде файлов: pubring.pgp и secring.pgp Первый, pubring.pgp, является кольцом с открытым ключем. На данный момент в нем хранится только ваш ключ. Второй, secring.pgp является, как вы можете понять, кольцом закрытых ключей, на данный момент в нем содержится только ваш закрытый ключ. Необходимо помнить, что безопасность методов открытого ключа опирается на безопасность закрытого ключа; поэтому, обязательно храните его в надежном месте и следите за тем, чтобы никто не смог его получить из кольца закрытых ключей. Проверьте права доступа к secring.pgp и установите такие права доступа, чтобы только вы могли читать и записывать, причем остальные не должны иметь доступ вообще. Наконец, необходимо упомянуть, что редактировать и изменять и идентификаторы ключей и пароли закрытых ключей можно с помощью команды: pgp -ke идентификатор [кольцо] Добавление ключей к кольцуТеперь вам, вероятно, захочется добавить открытые ключи ваших друзей к вашему кольцу. Для этого вам потребуется получить эти кольца: с сервера ключей, непосредственно от этого человека, при помощи команды finger, по e-mail, и т.д. Вспомним, что открытые ключи распространяются свободно и нет необходимости передавать их по безопасному каналу, как в случае с криптологическими методами с одним ключем.Если в вашем файле Somekey.pgp содержится ключ и вы хотите добавить его в ваши кольца, процедура очень проста: pgp -ka 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 (попробуйте использовать cat для его просмотра). Однако, если кому-нибудь потребуется создать файл ключа в формате ASCII чтобы послать, к примеру, по e-mail, или добавить дополнительную информацию к базе данных finger, ему потребуется напечатать: pgp -kxa identifies file [ring]Например: "pgp -kxa angel mykey" выделяет открытый ключ, идентифицированный подстрокой "angel", в файл "mykey.asc". Вместе с ключом также выделяются все сертификаты, которые его подтверждают.
Содержание кольцаЧтобы просмотреть ключи, содержащиеся в кольце, наберите команду:pgp -kv [идентификатор] [кольцо]Еще раз заметим, что кольцом по умолчанию является pubring.pgp, открытое кольцо. Если идентификатор не указан явно, то показываются все ключи кольца. Чтобы просмотреть все сертификаты каждого ключа, необходимо набрать: pgp -kvv [идентификатор] [кольцо] Кодирование сообщенияМы рассмотрели, как использовать ключи. Теперь давайте попробуем использовать это для чего-нибудь интересного. Давайте посмотрим, как декодировать файл:pgp -e файл идентификаторПриведем пример: учитель хочет послать своему коллеге экзаменационные задачи по e-mail и не хочет, чтобы студенты перехватили это сообщение :). Пусть имя второго учителя будет Маркос и идентификатор его открытого ключа содержит его имя. Первый учитель наберет: pgp -e exam.doc marcosЭта команда создает файл с именем exam.pgp, содержащий файл exam.doc, закодированный так, что только Маркос может его декодировать с помощью своего закрытого ключа. Помните, что созданный файл, exam.pgp, не является ASCII файлом, поэтому для отправки его по E-Mail может потребоваться добавить еще одну опцию -a для того, чтобы выходной закодированный файл был в формате ASCII, например так: pgp -ea exam.doc marcosПо причинам безопасности, нам иногда может потребоваться удалить оригинал. PGP может делать это автоматически при помощи опции -w: pgp -eaw exam.doc marcos Кодирование сообщения для нескольких получателейТеперь представьте, что наш учитель хочет послать эти задачи своим коллегам по кафедре. Чтобы это сделать, ему необходимо просто набрать вместо одного несколько идентификаторов:pgp -ea exam.doc marcos juan aliciaЗаметьте, что опция -a тоже используется, поэтому выходной файл будет в формате 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 используется для кодирования электронной почты, которая чаще всего представляет собой текст. Проблема текстовых файлов заключается в том, что на разных машинах текст представляется по разному; например в MSDOS все строки заканчиваются символами возврата каретки и перевода строки, в Линуксе только перевод строки, в 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-X для отправки, Pine спросит нас, хотим ли мы послать его сразу, без применения заданных фильтров. Чтобы послать сообщение без кодирования, просто ответьте утвердительно, но если вы хотите послать сообщение закодированным, то нажмите CTRL-N или CTRL-P, далее вам предложат список всех заданных фильтров. В нашем случае это будет только фильтр PGP, приведенный выше. Это очень простые и базовые настройки, которые позволят вам использовать PGP в Pine с применением только двух фильтров. Для получения дополнительной информации по интеграции PGP с Pine и другими системами, посмотрите следующие ссылки: elm | GNU Emacs | tin | mailx | MH | Pine | sendmail | vi | zmail Дальнейшая информация:
Перевод на русский: Владимир Попов |
|||||||||||||||||
With any suggestions or questions please feel free to contact us |