Основы работы с GnuPG #1

Сентябрь 7th, 2009 по SadKo Оставить ответ »

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

Для чего всё это надо?

GNU Privacy Guard, GnuPG, GPG — свободная альтернатива набору криптографического ПО PGP, выпущенная под лицензией GPL. Является частью проекта GNU, получила гранты от Германского правительства. GnuPG полностью совместим со стандартом IETF OpenPGP. Текущие версии GnuPG могут взаимодействовать с PGP и другими OpenPGP-совместимыми системами в режиме совместимости. GnuPG позволяет шифровать и подписывать данные в целях безопасного хранения и передачи информации.

Какие особенности GnuPG по сравнению с PGP/OpenPGP?

GnuPG обладает следующими особенностями:

  • Полная альтернатива PGP.
  • Не использует патентованные алгоритмы.
  • Распространяется под GNU General Public License.
  • Полная реализация OpenPGP (RFC2440).
  • Расшифрование и аутентификация сообщений, созданных с помощью PGP 5, 6 и 7.
  • Поддержка электронной подписи с помощью алгоритмов ElGamal, DSA, RSA и хеш-функций MD5, SHA-1, RIPE-MD-160 и TIGER.
  • Работа с ассиметричным шифрованием ElGamal и RSA (длина ключа от 1024 до 4096 бит).
  • Поддержка блочных алгоритмов симметричного шифрования AES, 3DES, Blowfish, Twofish, CAST5, а также IDEA с помощью плагина.
  • Лёгкая реализация новых алгоритмов с помощью дополнительных модулей.
  • Поддержка просроченных ключей и подписей.
  • Интегрированная поддержка HKP серверов ключей.
  • Каков принцип работы GnuPG?

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

    GnuPG не использует запатентованное или иначе ограниченное ПО и/или алгоритмы, включая алгоритм IDEA, который представлен в PGP почти с самого начала. GnuPG использует другие непатентованные алгоритмы CAST5, 3DES, AES, Blowfish и Twofish. Тем не менее, возможно использование в GnuPG и алгоритма IDEA с помощью дополнительного модуля.

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

    Как работать с утилитой gpg?

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

    При работе с утилитой необходимо начать с создания своих ключей или импорта чужих открытых ключей (public keys). Далее, имея необходимые ключи, можно осуществлять шифрование/дешифрование данных и добавление электронной цифровой подписи (ЭЦП), позволяющей удостовериться, что данные действительно принадлежат отправителю.

    Как создать свой ключ?

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

    gpg --gen-key

    Пример работы команды:

    sadko@sadovnikov:~/.ssh> gpg --gen-key
    gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software Foundation, Inc.
    This program comes with ABSOLUTELY NO WARRANTY.
    This is free software, and you are welcome to redistribute it
    under certain conditions. See the file COPYING for details.
     
    Please select what kind of key you want:
    (1) DSA and Elgamal (default)
    (2) DSA (sign only)
    (5) RSA (sign only)
    Your selection? 5
    RSA keys may be between 1024 and 4096 bits long.
    What keysize do you want? (2048)
    Requested keysize is 2048 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
     
    You need a user ID to identify your key; the software constructs the user ID
    from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
     
    Real name: Vladimir Sadovnikov
    Email address: sadovnikov@protei.ru
    Comment: PERL Developer
    You selected this USER-ID:
    "Vladimir Sadovnikov (PERL Developer) <sadovnikov@protei.ru>"
     
    Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
    You need a Passphrase to protect your secret key.
    Enter passphrase:
    Confirm passphrase:  
     
    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.
     
    Not enough random bytes available.  Please do some other work to give
    the OS a chance to collect more entropy! (Need 284 more bytes)
    ..........+++++
    +++++
    gpg: key F3F4743F marked as ultimately trusted
    public and secret key created and signed.
     
    gpg: checking the trustdb
    gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
    gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
    pub   2048R/F3F4743F 2008-07-28
    Key fingerprint = 6D16 A862 4CC8 487D E388  3235 DD5C 5A35 F3F4 743F
    uid                  Vladimir Sadovnikov (PERL Developer) <sadovnikov@protei.ru>
     
    Note that this key cannot be used for encryption.  You may want to use
    the command "--edit-key" to generate a subkey for this purpose.

    В данном примере были созданы открытый (public key) и закрытый ключи (private key) для алгоритма шифрования RSA длиной 2048 бит, защищённые паролем. Эти ключи будут использоваться для добавления ЭЦП. Владелец этих ключей — пользователь с идентификатором Vladimir Sadovnikov. Однако, шифровать данные при помощи этих ключей не получится. Поэтому надо к этим ключам создать ещё пару ключей для шифрования. Это делается при помощи консольной команды:

    gpg --edit-key user-id

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

    sadko@sadovnikov:~/.ssh> gpg --edit-key "Vladimir Sadovnikov"
    gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software Foundation, Inc.
    This program comes with ABSOLUTELY NO WARRANTY.
    This is free software, and you are welcome to redistribute it
    under certain conditions. See the file COPYING for details.
     
    Secret key is available.
     
    pub  2048R/F3F4743F  created: 2008-07-28  expires: never       usage: SC
    		trust: ultimate      validity: ultimate
    [ultimate] (1). Vladimir Sadovnikov (PERL Developer) <sadovnikov@protei.ru>
     
    Command> trust
    pub  2048R/F3F4743F  created: 2008-07-28  expires: never       usage: SC
    		trust: ultimate      validity: ultimate
    [ultimate] (1). Vladimir Sadovnikov (PERL Developer) <sadovnikov@protei.ru>
     
    Please decide how far you trust this user to correctly verify other users' keys
    (by looking at passports, checking fingerprints from different sources, etc.)
     
    1 = I don't know or won't say
    2 = I do NOT trust
    3 = I trust marginally
    4 = I trust fully
    5 = I trust ultimately
    m = back to the main menu
     
    Your decision? 5
    Do you really want to set this key to ultimate trust? (y/N) y
     
    pub  2048R/F3F4743F  created: 2008-07-28  expires: never       usage: SC
    		trust: ultimate      validity: ultimate
    [ultimate] (1). Vladimir Sadovnikov (PERL Developer) <sadovnikov@protei.ru>
     
    Command> addkey
    Key is protected.
     
    You need a passphrase to unlock the secret key for
    user: "Vladimir Sadovnikov (PERL Developer) <sadovnikov@protei.ru>"
    2048-bit RSA key, ID F3F4743F, created 2008-07-28
    Enter passphrase:
     
    Please select what kind of key you want:
    (2) DSA (sign only)
    (4) Elgamal (encrypt only)
    (5) RSA (sign only)
    (6) RSA (encrypt only)
    Your selection? 6
    RSA keys may be between 1024 and 4096 bits long.
    What keysize do you want? (2048)
    Requested keysize is 2048 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
    Really create? (y/N) y
    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.
    ............+++++
    ........+++++
     
    pub  2048R/F3F4743F  created: 2008-07-28  expires: never       usage: SC
    		trust: ultimate      validity: ultimate
    sub  2048R/EBD472E7  created: 2008-07-28  expires: never       usage: E
    [ultimate] (1). Vladimir Sadovnikov (PERL Developer) <sadovnikov@protei.ru>
     
    Command> quit
    Save changes? (y/N) y

    Для ключей к ЭЦП пользователя Vladimir Sadovnikov создаётся пара ключей RSA длиной 2048 бит. Эти ключи уже можно использовать для шифрования данных.

    Как можно посмотреть доступные ключи?

    Для просмотра открытых ключей можно воспользоваться командой:

    gpg --list-keys user_id

    Пример:

    sadko@sadovnikov:~/.ssh> gpg --list-keys
    gpg: checking the trustdb
    gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
    gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
    /home/sadko/.gnupg/pubring.gpg
    ------------------------------
    pub   2048R/F3F4743F 2008-07-28
    uid                  Vladimir Sadovnikov (PERL Developer) <sadovnikov@protei.ru>
    sub   2048R/EBD472E7 2008-07-28

    Просмотр закрытых ключей можно также сделать командой:

    gpg --list-secret-keys user_id

    Пример:

    sadko@sadovnikov:~/.ssh> gpg --list-secret-keys
    /home/sadko/.gnupg/secring.gpg
    ------------------------------
    sec   2048R/F3F4743F 2008-07-28
    uid                  Vladimir Sadovnikov (PERL Developer) <sadovnikov@protei.ru>
    ssb   2048R/EBD472E7 2008-07-28

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

    gpg --fingerprint user_id

    Пример:

    sadko@sadovnikov:~> gpg --fingerprint
    /home/sadko/.gnupg/pubring.gpg
    ------------------------------
    pub   2048R/F3F4743F 2008-07-28
    Key fingerprint = 6D16 A862 4CC8 487D E388  3235 DD5C 5A35 F3F4 743F
    uid                  Vladimir Sadovnikov (PERL Developer) <sadovnikov@protei.ru>
    sub   2048R/EBD472E7 2008-07-28

    Команда выводит аналогичный результат, что и —list-keys, но с полем Key fingerprint.

    Реклама

    Добавить комментарий

    Blue Captcha Image
    Refresh

    *