Описание GNU Privacy Guard
. |  | След.

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

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

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

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

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

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

    chloe% gpg --edit-key chloe@cyb.org
    Secret key is available.

    pub  1024D/26B6AAE1  created: 1999-06-15 expires: never      trust: -/u
    sub  2048g/0CF8CB7A  created: 1999-06-15 expires: never
    sub  1792G/08224617  created: 1999-06-15 expires: 2002-06-14
    sub   960D/B1F423E7  created: 1999-06-15 expires: 2002-06-14
    (1)  Chloe (Jester) <chloe@cyb.org>
    (2)  Chloe (Plebian) <chloe@tel.net>
    Command>

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

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

    Command> toggle

    sec  1024D/26B6AAE1  created: 1999-06-15 expires: never
    sbb  2048g/0CF8CB7A  created: 1999-06-15 expires: never
    sbb  1792G/08224617  created: 1999-06-15 expires: 2002-06-14
    sbb   960D/B1F423E7  created: 1999-06-15 expires: 2002-06-14
    (1)  Chloe (Jester) <chloe@cyb.org>
    (2)  Chloe (Plebian) <chloe@tel.net>

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

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

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

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

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

    chloe% gpg --edit-key chloe
    Secret key is available.

    pub  1024D/26B6AAE1  created: 1999-06-15 expires: never      trust: -/u
    sub  2048g/0CF8CB7A  created: 1999-06-15 expires: never
    sub  1792G/08224617  created: 1999-06-15 expires: 2002-06-14
    sub   960D/B1F423E7  created: 1999-06-15 expires: 2002-06-14
    (1)  Chloe (Jester) <chloe@cyb.org>
    (2)  Chloe (Plebian) <chloe@tel.net>

    Command> check
    uid  Chloe (Jester) <chloe@cyb.org>
    sig!       26B6AAE1 1999-06-15   [self-signature]
    uid  Chloe (Plebian) <chloe@tel.net>
    sig!       26B6AAE1 1999-06-15   [self-signature]

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

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

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

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

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

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

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

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

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

    Command> revkey
    Do you really want to revoke this key? y

    You need a passphrase to unlock the secret key for
    user: "Chloe (Jester) <chloe@cyb.org>"
    1024-bit DSA key, ID B87DBA93, created 1999-06-28

    pub  1024D/B87DBA93  created: 1999-06-28 expires: never      trust: -/u
    sub  2048g/B7934539  created: 1999-06-28 expires: never
    sub  1792G/4E3160AD  created: 1999-06-29 expires: 2000-06-28
    rev! subkey has been revoked: 1999-06-29
    sub   960D/E1F56448  created: 1999-06-29 expires: 2000-06-28
    (1)  Chloe (Jester) <chloe@cyb.org>
    (2)  Chloe (Plebian) <chloe@tel.net>

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

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

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

    Command> revsig
    You have signed these user IDs:
         Chloe (Jester) <chloe@cyb.org>
       signed by B87DBA93 at 1999-06-28
         Chloe (Plebian) <chloe@tel.net>
       signed by B87DBA93 at 1999-06-28
    user ID: "Chloe (Jester) <chloe@cyb.org>"
    signed with your key B87DBA93 at 1999-06-28
    Create a revocation certificate for this signature? (y/N)n
    user ID: "Chloe (Plebian) <chloe@tel.net>"
    signed with your key B87DBA93 at 1999-06-28
    Create a revocation certificate for this signature? (y/N)y
    You are about to revoke these signatures:
         Chloe (Plebian) <chloe@tel.net>
       signed by B87DBA93 at 1999-06-28
    Really create the revocation certificates? (y/N)y

    You need a passphrase to unlock the secret key for
    user: "Chloe (Jester) <chloe@cyb.org>"
    1024-bit DSA key, ID B87DBA93, created 1999-06-28

    pub  1024D/B87DBA93  created: 1999-06-28 expires: never      trust: -/u
    sub  2048g/B7934539  created: 1999-06-28 expires: never
    sub  1792G/4E3160AD  created: 1999-06-29 expires: 2000-06-28
    rev! subkey has been revoked: 1999-06-29
    sub   960D/E1F56448  created: 1999-06-29 expires: 2000-06-28
    (1)  Chloe (Jester) <chloe@cyb.org>
    (2)  Chloe (Plebian) <chloe@tel.net>

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

    Command> check
    uid  Chloe (Jester) <chloe@cyb.org>
    sig!       B87DBA93 1999-06-28   [self-signature]
    uid  Chloe (Plebian) <chloe@tel.net>
    rev!       B87DBA93 1999-06-29   [revocation]
    sig!       B87DBA93 1999-06-28   [self-signature]

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

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

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

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

. |  | След.
Цифровые подписи |  | Проверка достоверности ключей в Вашей связке