Инструменты шифрования с открытым ключом

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

Именно к шифрованию с открытым ключом проявляется основное внимание общественности. Наиболее популярные инструменты шифрования в 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 может применяться для защиты передаваемых данных в широком спектре приложений.