GPG: примеры использования для шифрования

Автор: | 06/30/2015
 

xl_gnupg_logo_200Для Windows — имеется пакет Gpg4Win.

Для Linux-систем — пакет gnupg.

GNU Privacy Guard (GnuPG, GPG) — позволяет шифровать данные между двумя пользователи, например — безопасно пересылать другие RSA-ключи.

После установки — необходимо создать свою пару ключей:

d:>gpg --gen-key
gpg (GnuPG) 1.4.13; Copyright (C) 2012 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1
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)
Key does not expire at all
Is this correct? (y/N) y
...
Real name: Test User
Email address: testmail@domain.com
Comment:
You selected this USER-ID:
    "Test User <testmail@domain.com>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.
...
gpg: key 2F1FB48D 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:   2  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 2u
pub   2048R/2F1FB48D 2015-06-30
      Key fingerprint = ED45 2FFE 91D5 1151 D75C  D1BE 8214 0153 2F1F B48D
uid                  Test User <testmail@domain.com>
sub   2048R/4C28EF58 2015-06-30

Просмотреть список доступных ключей можно с помощью --list-keys:

d:>gpg --list-keys
C:/Users/zia/AppData/Roaming/gnupgpubring.gpg
----------------------------------------------
pub   2048R/88352DB2 2015-04-09
uid                  Arseny Name <arsenyz@domain.com>
sub   2048R/1F504D77 2015-04-09

pub   4096R/31997DFF 2015-06-29
uid                  Matthew Name <mattheww@domain.com>

pub   2048R/2F1FB48D 2015-06-30
uid                  Test User <testmail@domain.com>
sub   2048R/4C28EF58 2015-06-30

Теперь — можно создать публичную часть ключа, которую будем передавать людям:

d:>gpg --output testuserpubkey.gpg --export testmail@domain.com

В таком виде — ключ будет создан в двоичном виде, который нельзя прочитать. Что бы экспортировать его в ASCII виде — используйте опцию --armor:

d:>gpg -armor --output testuserpubkey.gpg --export testmail@domain.com
File `testuserpubkey.gpg' exists. Overwrite? (y/N) y
d:>type testuserpubkey.gpg
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.13 (MingW32)

mQENBFWSVokBCADNZV1ZKRnUCZ01CWEaXavWit7mp97/p5Dn9TXH+E6wg3jRFVrz
jpB5tgnB5JAL7k/tVQDRvj6GZs6aKwVWVRtLnfLw5PzWIDJjHVaKVTqmvcTgVBUn
JjE/0zgSePcd93vqDwTDkljIVaXrw6lgIl8OZuzB7zJkNAuiD45K/rjvqdLqbyaL
...
vKPPDiQ95WxH4T3eW9WV2L2xz+/lHK67ZVbk1MFeJsJ2tyjL3IXcZyBNrZzWfcKI
K1pOjFpirg+C3IlWQQIvU9JiDY/SOGsG4ou7HBN2ArC1DaT34UoEUnMv9MX+hdJk
0a0EJydKrPiCk+kfIJtN9MD05HRICxcYafrp+ERa
=QGgb
-----END PGP PUBLIC KEY BLOCK-----

Шифрование файлов

Что бы зашировать файл вашим ключём — используйте --encrypt (или -e).

Например — имеется файл с текстом:

d:>type textfile.txt
Hi, this is text file

Зашифруем его:

d:>gpg --encrypt --recipient "Test User" textfile.txt

В результате — получаем файл с тем же именем, но расширением .gpg:

d:>dir /b
...
textfile.txt
textfile.txt.gpg

Что бы сохранить его под другим именем — используйте --output:

d:>gpg --output "newfile.gpg" --encrypt --recipient "Test User" textfile.txt
d:>dir /b
...
newfile.gpg
...
textfile.txt
textfile.txt.gpg

При попытке прочтения которого — получаем абракадабру:

d:>type newfile.gpg
à☺♀♥¶¼<☺L(´X☺²

Что бы расшифровать его — используйте --decrypt:

d:>gpg --decrypt newfile.gpg

You need a passphrase to unlock the secret key for
user: "Test User <testmail@domain.com>"
2048-bit RSA key, ID 4C28EF58, created 2015-06-30 (main key ID 2F1FB48D)

gpg: encrypted with 2048-bit RSA key, ID 4C28EF58, created 2015-06-30
      "Test User <testmail@domain.com>"
Hi, this is text file

Что бы зашировать файл для другого пользователя — он вам должен предоставить свою публичную часть ключа.

Например — у меня есть файл mjw-rsa-2015, который является публичной часть ключа коллеги.

Добавляем его в хранилище:

d:Temp555>gpg --import mjw-rsa-2015
gpg: key 31997DFF: public key "Matthew Name <mattheww@domain.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

Проверяем:

d:Temp555>gpg --list-keys
C:/Users/zia/AppData/Roaming/gnupgpubring.gpg
----------------------------------------------
pub   2048R/88352DB2 2015-04-09
uid                  Arseny Name <arsenyz@domain.com>
sub   2048R/1F504D77 2015-04-09

pub   2048R/2F1FB48D 2015-06-30
uid                  Test User <testmail@domain.com>
sub   2048R/4C28EF58 2015-06-30

pub   4096R/31997DFF 2015-06-29
uid                  Matthew Name <mattheww@domain.com>

Подписываем ключ другого пользователя:

d:Temp555>gpg --edit-key Matthew Name
gpg (GnuPG) 1.4.13; Copyright (C) 2012 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
pub  4096R/31997DFF  created: 2015-06-29  expires: never       usage: SCE
                     trust: unknown       validity: unknown
[ unknown] (1). Matthew Name <mattheww@domain.com>
gpg> fpr
pub   4096R/31997DFF 2015-06-29 Matthew Name <mattheww@domain.com>
 Primary key fingerprint: 881B 1FAC 86B4 330E AE25  CF36 02A2 000B 3199 7DFF

gpg> sign

pub  4096R/31997DFF  created: 2015-06-29  expires: never       usage: SCE
                     trust: unknown       validity: unknown
 Primary key fingerprint: 881B 1FAC 86B4 330E AE25  CF36 02A2 000B 3199 7DFF

     Matthew Name <mattheww@domain.com>

Are you sure that you want to sign this key with your
key "Arseny Name <arsenyz@domain.com>" (88352DB2)

Really sign? (y/N) y

You need a passphrase to unlock the secret key for
user: "Arseny Name <arsenyz@domain.com>"
2048-bit RSA key, ID 88352DB2, created 2015-04-09
gpg> check
uid  Matthew Name <mattheww@domain.com>
sig!3        31997DFF 2015-06-29  [self-signature]
sig!         88352DB2 2015-06-30  Arseny Name <arsenyz@domain.com>

И создаём для него письмо:

d:>gpg --encrypt --output for_matt.gpg --sign --armor --recipient mattheww@domain.com textfile.txt

You need a passphrase to unlock the secret key for
user: "Arseny Name <arsenyz@domain.com>"
2048-bit RSA key, ID 88352DB2, created 2015-04-09

Опции тут:

  • --sign — письмо подписывается вашим приватным ключём, гарантируя, что письмо/файл созданы вами;
  • --armor — позволяет создать файл в текстовом виде;
  • --recipient — получатель, который сможет расшировать письмо.

Что бы удалить ключ из хранилища — используйте —delete-keys:

d:>gpg --delete-keys mattheww@domain.com

Ссылки по теме

https://www.digitalocean.com
https://www.madboa.com
https://www.gnupg.org