Книга: PGP: Кодирование и шифрование информации с открытым ключом.

Система для шифрования с двумя ключами.

Система для шифрования с двумя ключами.

Все желающие (PGP распространяется свободно) переписывают из любых источников саму систему (PGP) и ее исходные тексты (если есть необходимость, исходные тексты также распространяются свободно). Все функции системы выполняются с помощью одной единственной программки — она делает все. Дальнейшие действия проследим на примере двух корреспондентов: меня (Пети) и Васи. Итак, Петя и Вася захотели использовать PGP и раздобыли его (хотя бы на нашем PGP support site — DIOGEN).

Первое действие — генерация секретного ключа пользователя (RSA-key). Для этого система запрашивает фразу пароля, которая потом будет неоднократно использоваться при каждом использовании секретного ключа. Кроме того, запрашивается собственно имя (идентификатор) пользователя, куда входит и его адрес (E-mail, FIDO), на основании этих данных и с использованием ряда случайных чисел (которые получаются путем измерения интервалов времени между нажатиями клавиш человеком) генерируется СЕКРЕТНЫЙ ключ пользователя. Это просто бинарная последовательность. Этот ключ рекомендуется хранить достаточно тщательно, несмотря на то, что воспользоваться им сможет только тот, кто знает фразу пароля. Затем, на основании этого СЕКРЕТНОГО ключа PGP генерирует ОБЩИЙ (публичный) ключ (тоже RSA). На этом предварительные действия закончены.

Следующий этап. Конечно, наши герои, Петя и Вася могли бы встретиться однажды, договориться о совсем секретном пароле и потом шифровать свои послания этим паролем. Но порой это не совсем удобно, не всегда получится и не всегда секретно, и потом, если у Вас ТЫСЯЧИ адресатов:(... Так эта система делает все простым и гениальным. Петя, создав оба ключа, посылает общий ключ Васе (ну, и всем остальным, кому надо). То же самое делает и Вася. Итак, у Пети есть свой собственный секретный ключ, общий ключ Васи (и другие общие ключи, в принципе, сколько угодно). И все. PGP:).

Теперь Петя хочет написать Васе СОВСЕМ СЕКРЕТНОЕ письмо. То есть, чтобы его смог прочитать ТОЛЬКО Вася. Петя берет общий ключ Васи и с помощью все той же PGP шифрует письмо (этим ключом). (На самом деле, шифруется не само письмо, а временный пароль, которым уже шифруется письмо, но это не принципиально). И посылает то, что получилось адресату (Васе). Петя может быть спокоен — теперь зашифрованное общим ключом Васи письмо может прочитать ТОЛЬКО Вася, так как только у него есть секретный ключ, которому однозначно соответствует общий. Даже написавший письмо Петя не прочтет его.

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

Оглавление книги


Генерация: 0.382. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз