Общий ключ генерируется на основе секретного, но обратный процесс невозможен в реальное время на реальной технике для ключей длиной >256 байт. Так же действует и Вася. Таким образом, первое, что позволяет делать эта система — это писать шифрованные письма адресатам, с которыми вы никогда не встречались или не имеете канала секретной связи.
Второе. Петя хочет "подписать" какой-то текст (программу, файл...), то есть поставить на него какую-то цепочку байт, по которой получивший сможет определить: ага, этот файл был однозначно завизирован Петей, и никто эту подпись не подделывал (что-то отдаленно напоминает ARJ security envelope). Петя берет свой файл, свой секретный ключ и с помощью PGP генерирует ЭЛЕКТРОННУЮ ПОДПИСЬ. Тоже просто последовательность байт, но последовательность абсолютно уникальная, так как для ее построения используется алгоритм "message digest", это отдаленный аналог CRC того файла, который подписывается, но у двух файлов может быть одинаковый CRC, а вот MD — не может. Теперь Петя может послать эту подпись вместе с файлом Васе (или отдельно). Вася (человек недоверчивый), берет файл, берет подпись (если она отдельно от файла), берет общий ключ Пети, запускает PGP, а она ему: "да, данный файл действительно был подписан таким-сяким тогда-то". Чему можно доверять почти на 100%.
Это два основных принципа использования шифрования с общим ключом. Естественно, оба они могут быть использованы вместе: то есть, вы шифруете свое письмо адресату с помощью ЕГО общего ключа, а затем подписываете его своей электронной подписью с помощью СВОЕГО секретного ключа.
Теперь я расскажу, как это дело организуется на практике. Для более подробного описания ваших действий по предохранению информации, ключей, о предотвращении возможности их подделки — читайте первую часть документации по PGP (зря я ее переводил?).
Key-server. Это станция из числа многих, раскиданных по всему свету. Для того, чтобы Вам самому не рассылать свой общий ключ "всем-всем-всем" (что, как Вы понимаете, довольно трудоемко), эту часть работы они берут на себя. На сервере Вы может зарегистрировать свой общий ключ — он будет рассылаться всем, кто этого пожелает, а также получить все необходимые общие ключи, чтобы писать письма. В PGP введен институт "удостоверения" общих ключей, это составная часть мероприятий по защите ключей from tampering. То есть, если я уверен, что вот этот ключ мне передал (однажды) Миша Браво (переслал по почте — именно он, либо привез лично), то я могу удостоверить его своей как бы "электронной подписью" (удостоверением), и при проверке сообщений, подписанных Мишей Браво будут упоминаться все удостоверившие (таким образом, при удостоверении ключа я (ты, он...) беру на себя ответственность за его достоверность). Степень достоверности общего ключа определяется PGP по количеству и степени достоверности "удостоверяющих подписей" (причем все делается автоматически).
Для удобства работы PGP группирует ключи в keyring (каталоги), таким образом, Вы можете иметь у себя на машине только два файла (кроме системных PGP): каталог секретных ключей и каталог общих ключей. Причем последний можно получить на нашем сервере. И вообще, программа очень неплохо эргономически построена, несмотря на интерфейс командной строки. Все вещи делаются за один присест. А для обработки пришедшего файла (что бы там ни было: подпись, ключ, письмо зашифрованное) достаточно просто дать команду "pgp file_name" — и она сама в нем разберется и разложит все новые ключи и подписи по местам.
Еще одно — весьма важное — свойство PGP: она очень неплохо делает ASCII armour. Вам сие действие должно быть знакомо: UUкодирование файлов в эху, да-да. Вкратце: Вы берете любой файл (текстовый, двоичный) и кодируете его так, чтобы в результате получились только символы первой половины таблички ASCII. Это необходимо при пересылке файлов в эхах и нетмэйлом (ну, и Е-mail`ом). Так вот, PGP это делает с одновременной упаковкой (по алгоритму ZIP, лицензия была предоставлена разработчикам), так что файлы получаются меньше, чем у UUENCODE/UUDECODE, к тому же их не надо предварительно архивировать. Таким образом можно пересылать и тексты и программы, естественно. PGP может файл зашифровать, а может и не зашифровывать, подпись может быть добавлена в сообщение, а может быть послана отдельно. Ну, и, разумеется, зашифрованные файлы и подпись могут быть созданы в виде двоичных файлов.