Именно к шифрованию с открытым ключом проявляется основное внимание общественности. Наиболее популярные инструменты шифрования в Unix, ssh и SSL, работают на основе открытых ключей. Даже в задачах, связанных с шифрованием локально хранимых файлов, системы на основе открытых ключей пользуются большим спросом, поскольку не требуют распространения закрытых ключей.
В систему Linux часто включается GNU Privacy Guard (дрд), который, подобно широко известному PGP2, может использоваться для шифрования файлов или почтовых сообщений. Кроме того, данный инструмент содержит средства для работы с цифровыми подписями, которые позволяют проверить подлинность сообщений электронной почты. В следующем примере при помощи gpg выполняется шифрование и декодирование файла. Прежде всего, мы создаем ключи при помощи параметра --gen-key:
$ gpg -gen-key gpg (GnuPG) 1.0.4; Copyright (C) 2000 Free Software Foundation, Inc. This program comes with ABSOLUTELY HO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. gpg: Warning: using insecure memory! gpg: /home/craig/.gnupg/secring.gpg: keyring created gpg: /home/craig/.gnupg/pubring.gpg: keyring created Please select what kind of key you want: (1) OSA and ElGamal (default) (2) DSA (sign only) (4) ElGamal (sign and encrypt) Your selection? 1 DSA keypair will have 1024 bits. About to generate a new ELG-E keypair. minimum keysize is 768 bits default keysize is 1024 bits highest suggested keysize is 2048 bits What keysize do you want? (1024) 1024 Requested keysize is 1024 bits Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) 0 Key does not expire at all Is this correct (y/n)? y A User-ID identifies your key; the software constructs the user id from Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) <heinrichh$duesseldorf.de>" Real name: Craig Hunt Email address: craig.huntewrotethebook.com Comment: You selected this USER-ID: "Craig Hunt <craig.hunt(*wrotethebook.com>" Change (N)ame, (C)omment, (E)mail or (0)kay/(Q)uit? o You need a Passphrase to protect your secret key. Type the passphrase: Fateful lightening Repeat: Fateful lightening we need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. +++++. +++++. +++++. ++++++++++++++++++++. +++++. +++++++++++++++.+++++++++. ++++++++++. ++++++++++++++++++++. +++++++++++++++++++++++++++++++++++++> . +++++... ......................+++++ public and secret key created and signed.
Использование опции --gen-key связано с необходимостью ответить на ряд «опросов. Вопросы весьма просты, а создание исходных ключей следует выполнить всего один раз. Прежде всего, gpg спрашивает, какой тип ключа необходимо сгенерировать. А именно - с какой целью будут использоваться ключи: для работы с цифровыми подписями, для шифрования либо для того и другого. Выберите вариант (1), то есть вариант по умолчанию. Программа создаст оба типа ключей, и вы сможете встретить любую задачу шифрования во всеоружии. Затем программа запрашивает длину ключа: чем длиннее ключ, тем труднее его сгенерировать и подобрать. По умолчанию ключ имеет длину 1024 бита, которой будет более чем достаточно для любого реального применения gpg. gpg запрашивает ваше имя, адрес электронной почты и необязательный комментарий. Данная информация используется для поиска ваших ключей в базах данных. Наконец, программа запрашивает парольную фразу, позволяющую получать доступ к вашему секретному ключу.
Для хранения закрытых и открытых ключей в gpg используется пара баз данных. Эти базы данных в gpg называются «кольцами для ключей». Файл базы данных закрытых ключей называется secring.gpg, а файл базы данных открытых ключей - pubring.gpg. Оба ключа используются при шифровании и последующем декодировании файла. Следующий пример иллюстрирует процесс шифрования:
$ cat test.txt This is a test file. $ gpg --recipient craig.huntGwrotethebook.com --encrypt test.txt gpg: Warning: using insecure memory! $ cat test.txt.gpg Y -°u i 2J e Y;0-[ o# LHu" e 'EDO Si P -EU 9 610!7 n6 IOei cEo$2[9oAIi@E-wY $2'6 $B«'6yk_-o1N0®Bi giy [CyoU6Wg TWn2qO»Bx n0nmT5a Y[uuYEA2 ,heq"?°i *J\Po o/o?"ETTeBaaUU»°5oNB= a}/0©Nemstu S rm test.txt
Команда cat показывает, что мы создали простой текстовый файл test.txt и желаем его зашифровать. Действие ключа командной строки --encrypt вполне очевидно, однако не столь очевидно назначение аргумента --recipient. База данных pubring.gpg может содержать большое число открытых ключей.
Аргумент --recipient указывает на открытый ключ, который следует использовать для шифрования файла. Слово «recipient» (получатель) использовано потому, что gpg часто применяется для шифрования почты, а в таких случаях используется открытый ключ адресата (получателя) сообщения. По этой же причине обычной практикой является идентификация ключа по почтовому адресу, который был указан в момент создания этого ключа.
gpg создает файл с зашифрованным текстом и дает ему имя исходного файла, добавляя суффикс .gpg. Команда cat для зашифрованного файла показывает нам, что файл стал совершенно нечитаемым. Убедившись, что зашифрованный файл создан, мы удаляем файл с открытым текстом. Разумеется, нет особой пользы в создании зашифрованного файла, если исходный файл продолжает существовать и может быть прочитан всеми желающими!
Чтобы прочесть зашифрованный текст, его необходимо раскодировать. В следующем примере для решения задачи используется ключ --decrypt командной строки gpg. Расшифруем файл test.txt.gpg:
$ gpg --output test.txt --decrypt test.txt.gpg gpg: Warning: using insecure memory! You need a passphrase to unlock the secret key for user: "Craig Hunt <craig.huntewrotethebook.com>" 1024-bit ELG-E key. ID D99991BA, created 2001-09-18 (main key ID 9BE3B5AD) Enter passphrase: Fateful lightening $ cat test.txt This is a test file.
Ключ --output указывает gpg, куда записывать расшифрованный открытый текст. В примере мы записываем результат в файл test.txt. Команда cat для test.txt показывает, что файл читаем, и содержит исходный текст.
Приведенные примеры работы gpg схожи с примерами для ssh, расположенными выше в данной главе, и примерами для openssl в главе 11. Все эти программы предоставляют инструменты для создания открытых и закрытых ключей, используемых для решения определенных задач, gpg защищает файлы и сообщения электронной почты, ssh - терминальные соединения, openssl - веб-трафик. При этом SSL может применяться для защиты передаваемых данных в широком спектре приложений.