Шифрование

Генерация подключа.

Если Вы при генерации ключа выбрали вариант 2 (DSA) или 5 (RSA), то имеющийся у Вас ключ может использоваться только для подписи. Для того, чтобы Ваши корреспонденты могли зашифровывать направляемые Вам сообщения, необходимо создать дополнительный ключ, который может использоваться для шифрования. Генерация дополнительного ключа осуществляется в режиме редактирования.

alice$gpg --edit-key alice@wonderland.uk
Secret key is available.

pub  2048R/8A9ED75D  created: 2005-10-21  expires: never       usage: CS  
                     trust: ultimate      validity: ultimate
[ultimate] (1). Alice (test key) <alice@wonderland.uk>

Command> addkey
Key is protected.

You need a passphrase to unlock the secret key for
user: "Alice (test key) <alice@wonderland.uk>"
2048-bit RSA key, ID 8A9ED75D, created 2005-10-21

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?

Если Вы намерены использовать подключ для шифрования, то следует выбрать вариант 4 или 6.

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) 2y
Key expires at Fri Oct 26 01:46:40 2007 MSD
Is this correct (y/n)? y
Really create? 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/8A9ED75D  created: 2005-10-21  expires: never       usage: CS  
                     trust: ultimate      validity: ultimate
sub  2048R/C2EC09D0  created: 2005-10-25  expires: 2007-10-25  usage: E   
[ultimate] (1). Alice (test key) <alice@wonderland.uk>

Command> save

Нетрудно заметить, что в списке ключей появился второй ключ. Для того, чтобы выйти из режима редактирования сохранив изменения, воспользуйтесь командой save.

Зашифрование и расшифрование документов

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

Если Вы хотите послать сообщение другу, то зашифровываете его при помощи открытого ключа друга, а тот расшифровывает его при помощи своего секретного ключа. Если друг захочет Вам ответить, то он зашифрует ответ при помощи Вашего открытого ключа, а Вы расшифруете его своим секретным.

Для зашифрования документа используется команда --encrypt. Вы должны иметь открытые ключи предполагаемых получателей. Программа ожидает в качестве параметра имя шифруемого файла или, в случае его отсутствия, считывает данные для зашифрования со стандартного ввода. Зашифрованный результат сохраняется в файле с тем же именем, что и у исходного файла, но добавляется расширение gpg или, если указана опция --output, то данные сохраняются в файле с указанным именем.

alice$ gpg --encrypt --recipient bob@example.com message.txt

Параметр --recipient используется для каждого получателя и имеет аргумент, идентифицирующий открытый ключ, которым должен быть зашифрован документ. Зашифрованный документ может быть расшифрован только тем, чей секретный ключ соответствует одному из указанных открытых ключей. В частности, Вы не можете расшифровать зашифрованный Вами документ, если не включили свой открытый ключ в список получателей. Можно добавить в файл конфигурации параметр encrypt-to с идентификатором собственного ключа, чтобы при зашифровании Вами файла он всегда зашифровывался и Вашим открытым ключом.

Для расшифрования сообщения используется команда --decrypt. Необходимо, чтобы у Вас имелся секретный ключ, для которого это сообщение было зашифровано. Расшифрованные данные выводятся на стандартный вывод или в файл определённый параметром --output.

bob$ gpg --output message.txt --decrypt message.txt.gpg

gpg --decrypt message.txt.gpg 

You need a passphrase to unlock the secret key for
user: "Bob Bobson <bob@example.com>"
2048-bit RSA key, ID 6D8F0E99, created 2005-10-25 (main key ID E4E68186)

Enter passphrase:  

Можно зашифровать файл и без открытого ключа. Вместо этого можно использовать для зашифрования данных симметричный шифр. Ключ, используемый при зашифровании, образуется из ключевой фразы. Для большей безопасности эта ключевая фраза не должна совпадать с той, которую Вы используете для защиты секретного ключа. Симметричный шифр применим тогда, когда нет необходимости обмениваться ключевой фразой. Для использования симметричного шифра применяется команда --symmetric.

alice$ gpg --symmetric message.txt
Enter passphrase: 

При расшифровании необходимо будет указать ту же самую ключевую фразу.