Глава 3. Управление ключами

$Id: c3.xml 7 2005-10-18 21:05:13Z zwon $

Содержание

Управление Вашей парой ключей
Целостность ключа.
Добавление и удаление компонент ключа
Отзыв компонент ключа
Изменение срока действия ключа
Проверка достоверности ключей
Доверие владельцу ключа
Использование доверия для проверки достоверности ключей
Распространение ключей

Подделка ключа - наиболее слабое место в криптографии с открытым ключом. Злоумышленник может изменить пользовательскую связку ключей или подделать открытый ключ пользователя и посылать его другим для загрузки и использования. Например, предположим, что Хлой хочет отслеживать сообщения, которые Элис посылает Блэйку. Она могла бы использовать атаку, называемую человек в середине (man in the middle). Для этого Хлой создает новую пару ключей. Она заменяет копию открытого ключа Блэйка, принадлежащую Элис, новым открытым ключом. Затем она перехватывает сообщения, которые Элис посылает Блэйку. Каждое перехваченное сообщение она расшифровывает, используя новый секретный ключ, зашифровывает настоящим открытым ключом Блэйка и направляет их ему. Все сообщения, направленные Элис Блэйку, теперь могут быть прочитаны Хлой.

Правильное управление ключами является решающим фактором для обеспечения целостности не только Ваших связок ключей, но и связок ключей других пользователей. Основой управления ключами в GnuPG является подписание ключей. Подписание ключей имеет два основных применения: это позволяет Вам обнаруживать вмешательство в Вашу связку ключей, а также позволяет удостоверять, что ключ действительно принадлежит человеку, чьим идентификатором пользователя он помечен. Подписи на ключах также используются в схеме известной как сеть доверия (web of trust), которая позволяет считать допустимыми не только ключи подписанные лично Вами, но и подписанные людьми, которым Вы доверяете. Аккуратные пользователи, правильно реализовавшие управление ключами, могут исключить подмену ключей как вид атаки на конфиденциальность связи при помощи GnuPG.

Управление Вашей парой ключей

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

Для просмотра пары ключей используется команда --edit-key. Например,

joe% gpg --edit-key joe@duck.zu Secret key is available. pub 1024R/3AA48DCE created: 2002-05-05 expires: never trust: u/u sub 1024D/13375D62 created: 2002-05-06 expires: never sub 2048G/3745CA64 created: 2002-05-06 expires: 2004-05-05 sub 1024g/015418C9 created: 2002-05-06 expires: 2004-05-05 (1) Joe Duck <joe@duck.zu> (2). Joe Duck (cook) <jd@other.mail.zu> Command>

При отображении открытого ключа выводится информация о том, доступен секретный ключ или нет. Затем выводится информация о каждом компоненте открытого ключа. Первая колонка показывает тип ключа. Символы pub обозначают открытую часть главного подписывающего ключа, а символы sub открытую часть подчиненных ключей. Вторая колонка показывает длину ключа в битах, тип и идентификатор. Тип D это ключ DSA, R - ключ RSA, g - ключ ElGamal, пригодный только для шифрования, G - ключ ElGamal, который может использоваться и для подписи и для шифрования. Дата создания и окончания срока действия показана в колонках три и четыре. Идентификаторы пользователя перечислены после ключей.

Дополнительная информация о ключе может быть получена различными командами. Команда toggle переключает между открытой и закрытой компонентами пары ключей, если обе из них доступны.

Command> toggle sec 1024R/3AA48DCE created: 2002-05-05 expires: never ssb 1024D/13375D62 created: 2002-05-06 expires: never ssb 2048G/3745CA64 created: 2002-05-06 expires: never ssb 1024g/015418C9 created: 2002-05-06 expires: never (1) Joe Duck <joe@duck.zu> (2) Joe Duck (cook) <jd@other.mail.zu> Command>

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

Целостность ключа.

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

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

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

joe% gpg --edit-key joe Secret key is available. pub 1024R/3AA48DCE created: 2002-05-05 expires: never trust: u/u sub 1024D/13375D62 created: 2002-05-06 expires: never sub 2048G/3745CA64 created: 2002-05-06 expires: 2004-05-05 sub 1024g/015418C9 created: 2002-05-06 expires: 2004-05-05 (1) Joe Duck <joe@duck.zu> (2). Joe Duck (cook) <jd@other.mail.zu> Command> check uid Joe Duck <joe@duck.zu> sig!3 3AA48DCE 2002-05-05 [self-signature] uid Joe Duck (cook) <jd@other.mail.zu> sig!3 3AA48DCE 2002-05-06 [self-signature]

Как и ожидалось, все подписи сделаны главным подписывающим ключом с идентификатором ключа 0x3AA48DCE. Самоподписи на подключах также представлены в открытом ключе, но они не показываются в GnuPG.

Добавление и удаление компонент ключа

Как новые подключи, так и идентификаторы пользователя могут быть добавлены к Вашей паре ключей после ее создания. Идентификатор пользователя добавляется командой adduid. Вам будет выдан запрос относительно Вашего имени, адреса электронной почты и комментария, также как при создании пары ключей. Подключ добавляется командой addkey. Процедура аналогична используемой при первичном создании пары ключей. Подключ может быть подписывающим DSA ключом, ElGamal ключом пригодным только для шифрования, ключом ElGamal пригодным и для подписи и для шифрования или ключом RSA пригодным либо для подписи, либо для шифрования. Когда создаются подключ или идентификатор пользователя, они подписываются главным подписывающим ключом, при этом Вы должны ввести пароль, которым защищён главный ключ.

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

Дополнительные подключи также могут быть полезны. Идентификаторы пользователя, ассоциированные с Вашим главным открытым ключом, заверяются другими людьми, с которыми Вы общаетесь, и смена главного ключа, следовательно, потребует переподтверждения. Это может оказаться сложным и занять много времени, если Вы общаетесь со многими людьми. С другой стороны, неплохо периодически менять подключи шифрования. Если подключ взломан, все данные, зашифрованные им, станут уязвимы. При смене подключа, уязвимой станет только часть данных.

Подключи и идентификаторы пользователя могут быть удалены. Для удаления подключа или идентификатора пользователя, Вы должны сначала выбрать его, используя команду key или uid. Это команды переключатели. Например, команда key 2 выберет второй подключ, повторная команда key 2 отменит выбор. Если не заданы дополнительные аргументы, выбор всех подключей или идентификаторов пользователя будет отменен. Если идентификатор пользователя, который надо удалить, выбран, то команда deluid удалит его из ключа. Аналогично, команда delkey удаляет все выбранные подключи из обоих, открытого и секретного, ключей.

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

Отзыв компонент ключа

Для отзыва подключа он должен быть выбран. Будучи выбран, он может быть отозван командой revkey. Ключ отзывается добавлением отзывающей самоподписи к ключу. В отличие от опции командной строки --gen-revoke, эффект наступает немедленно.

Command> revkey Do you really want to revoke this key? y Please select the reason for the revocation: 0 = No reason specified 1 = Key has been compromised 2 = Key is superseded 3 = Key is no longer used Q = Cancel Your decision? 2 Enter an optional description; end it with an empty line: > Reason for revocation: Key is superseded (No description given) Is this okay? y You need a passphrase to unlock the secret key for user: "Joe Duck (cook) <jd@other.mail.zu>" 1024-bit RSA key, ID 3AA48DCE, created 2002-05-05 pub 1024R/3AA48DCE created: 2002-05-05 expires: never trust: u/u sub 1024D/13375D62 created: 2002-05-06 expires: never sub 2048G/3745CA64 created: 2002-05-06 expires: 2004-05-05 rev! subkey has been revoked: 2002-05-07 sub 1024g/015418C9 created: 2002-05-06 expires: 2004-05-05 (1) Joe Duck <joe@duck.zu> (2). Joe Duck (cook) <jd@other.mail.zu>

Идентификатор пользователя отменяется иначе. Как правило, на идентификатор пользователя ставятся подписи, удостоверяющие личность обладателя ключа. Теоретически, идентификатор вечен, т.к. человек всегда остаётся собой. На практике, однако, элементы идентификатора пользователя, такие, как адрес электронной почты и комментарий могут изменяться, делая идентификатор пользователя недействительным.

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

Подпись отзывается командой revsig. Т.к. Вы можете иметь любое число подписанных идентификаторов пользователя, программа запросит Вас о каждой подписи.

Command> revsig You have signed these user IDs: Joe Duck <joe@duck.zu> signed by 3AA48DCE at 2002-05-05 Joe Duck (cook) <jd@other.mail.zu> signed by 3AA48DCE at 2002-05-06 user ID: "Joe Duck <joe@duck.zu>" signed with your key 3AA48DCE at 2002-05-05 Create a revocation certificate for this signature? (y/N) n user ID: "Joe Duck (cook) <jd@other.mail.zu>" signed with your key 3AA48DCE at 2002-05-06 Create a revocation certificate for this signature? (y/N) y You are about to revoke these signatures: Joe Duck (cook) <jd@other.mail.zu> signed by 3AA48DCE at 2002-05-06 Really create the revocation certificates? (y/N) y Please select the reason for the revocation: 0 = No reason specified 4 = User ID is no longer valid Q = Cancel Your decision? 4 Enter an optional description; end it with an empty line: > Reason for revocation: User ID is no longer valid (No description given) Is this okay? y You need a passphrase to unlock the secret key for user: "Joe Duck (cook) <jd@other.mail.zu>" 1024-bit RSA key, ID 3AA48DCE, created 2002-05-05 pub 1024R/3AA48DCE created: 2002-05-05 expires: never trust: u/u sub 1024D/13375D62 created: 2002-05-06 expires: never sub 2048G/3745CA64 created: 2002-05-06 expires: 2004-05-05 rev! subkey has been revoked: 2002-05-07 sub 1024g/015418C9 created: 2002-05-06 expires: 2004-05-05 (1) Joe Duck <joe@duck.zu> (2). Joe Duck (cook) <jd@other.mail.zu>

Отозванный идентификатор пользователя указан отзывающей подписью при перечислении подписей на идентификаторах пользователя.

Command> check uid Joe Duck <joe@duck.zu> sig!3 3AA48DCE 2002-05-05 [self-signature] uid Joe Duck (cook) <jd@other.mail.zu> rev! 3AA48DCE 2002-05-07 [revocation] sig!3 3AA48DCE 2002-05-06 [self-signature]

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

Изменение срока действия ключа

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

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