id: Гость   вход   регистрация
текущее время 14:22 28/03/2024
создать
просмотр
ссылки

Что такое uid?


Доброго времени суток.


Учусь работать с GPG. (Кстати, отличное руководство, ссылки на которое на pgpru.com, кажется, нет (если не считать архива) – http://gnupg.trinitum.org/gph/ ). Непонятен один момент: что из себя представляют user id? Фактически – имя, фамилия, e-mail и произвольный комментарий, прикреплённые к открытому ключу для его идентификации. Заверенные подписью соответствующим закрытым ключом (самоподписью), чтобы исключить возможность обмана.


И дальше никак не могу понять. Когда кто-то подписывает ваш ключ, он удостоверяет, что проверил, что ключ принадлежит именно вам. Но смотрите: я генерирую ключ, пишу в uid "Ivan Ivanov" (мои настоящие данные). Иду на встречу заверителей, предъявляю документ, удостоверяющий личность, получаю подписи. Удаляю (или отзываю) uid "Ivan Ivanov", добавляю новый "Petr Petrov", подписываю своим ключом, на котором множество удостоверяющих подписей. Или просто, ничего не удаляя, добавляю одновременно "Sidor Sidorov" и "Maksim Maksimov". Выглядит так, что после этого не получится узнать, какие именно uid были проверены людьми, подписавшими мой ключ.


Некоторая информация есть здесь:

В разделе "Сеть доверия" мы обсуждали достоверность ключей. На тот момент мы исходили из того, что каждый ключ имеет только одно имя пользователя. Для PGP это неверно: ключи здесь могут иметь более одной записи сертификата. В таком случае с определением достоверности возникает проблема. Мы больше не можем говорить о достоверности ключа в целом: каждая запись сертификата может иметь независимое от других значение достоверности. Таким образом, следует отдельно рассматривать достоверность каждой из комбинаций ключа-имени, но не ключа, как такового. Зачастую такие детали можно опустить. Предположим, сертификат ключа несёт два имени пользователя: "Alice <alice@home.com>" и "Alice <alice@hotmail.com>". Если Алиса, создавшая ключ, обладает обоими из указанных адресов, то можно заключить, что ключ достоверен. Если же, напротив, создатель ключа не владеет ни одним из адресов и его даже не зовут Алисой, тогда ключ очевидно недостоверен.

Но от этого не становится понятнее, только наоборот...


Не направит ли меня кто-нибудь на путь истинный?


 
Комментарии
— SATtva (04/10/2008 17:42)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Выглядит так, что после этого не получится узнать, какие именно uid были проверены людьми, подписавшими мой ключ.

В ходе сертификации ключа подписывается не ключ в целом, а каждая конкретная запись сертификата (UID), которую поручитель считает достоверной.

Допустим, Ваш ключ содержит записи "Иван Иванов" и "Пётр Петров", Вы встречаетесь с поручителем, он проверяет удостоверение личности, видит, что в нём Ваше фото и оно выдано на первое имя. Тогда он подписывает именно первый UID с именем Иван Иванов. Теперь если кто-нибудь решит воспользоваться этим ключом, чтобы отправить письмо Петру Петрову (надо полагать, что записи сертификата содержат помимо имён ещё мэйл-адреса), OpenPGP-совместимая программа не позволит пользователю сделать этого, поскольку этот UID не заверен доверенной подписью.
— Гость (04/10/2008 19:44)   <#>
Стало понятнее. Спасибо.

То есть, выходит, раз uid по сути должны принадлежать одному человеку и все ключи тоже принадлежат одному человеку, то uid не привязаны к какому-то конкретному ключу/подключу связки, они принадлежат ей целиком. И, получается, все подключи абсолютно равнозначны. Правильно?

И тогда, если можно, у меня ещё один вопрос: как gpg вычисляет степень доверия к ключу, если у него есть несколько uid, заверенных разным числом удостоверяющих подписей?

[offtopic]P. S. SATtva, к вашим сообщениям больше не прилагается информация о подписанности / неподписанности и отпечатке ключа.[/offtopic]
— SATtva (04/10/2008 20:26)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
И, получается, все подключи абсолютно равнозначны. Правильно?

Совсем нет. Каждый ключ уникален. Хотя Вы можете создать себе несколько ключей с одинаковыми uid, все эти ключи (вернее, сертификаты, т.е. ключ плюс его uid'ы) будут по-прежнему уникальны.

Здесь приведена хорошая аналогия: каждый uid можно представить как своего рода бирку с именем человека на обычном дверном ключе, при этом на каждой такой бирке может быть некоторое количество подтверждающих подписей. Бирка привязана к ключу, заметьте. Перенести бирку (uid) и её подтверждающие подписи с одного ключа на другой невозможно: каждый uid несёт ещё и т.н. автоподпись (self-signature) — подпись от того ключа, на котором создан этот uid, и эта подпись заверяет содержимое uid'а вместе с отпечатком ключа (его уникальным идентификатором). Аналогично, и другие подтверждающие подписи покрывают запись сертификата вместе с отпечатком ключа. Это не позволяет производить какие-либо манипуляции с сертификатом (ключом и uid'ами) без неизбежного повреждения всех подписей.

как gpg вычисляет степень доверия к ключу, если у него есть несколько uid, заверенных разным числом удостоверяющих подписей?

Разберёмся в терминологии. Есть доверие (trust) — это параметр, задаваемый Вами у чужих ключей, который определяет, насколько Вы лично доверяете владельцам этих ключей в заверении каких-либо иных ключей. А есть достоверность (или подлинность, validity) — параметр, вычисляемый программой для каждого ключа на основе тех подтверждающих подписей, которые на этом ключе собраны, и параметров доверия (trust), установленных Вами для ключей, издавших эти подписи.

Теперь, если Ваш вопрос касается именно доверия, то всё очевидно: какое значение доверия Вы установите для того или иного ключа, такое оно и будет. С достоверностью чуть иначе. Она вычисляется как для каждого uid в отдельности (просто исходя из подписей на этом uid'е), так и целиком для ключа. Для последнего показателя берётся наивысший уровень доверия от рассчитанных для uid'ов. То есть если на чьём-то ключе есть три uid'а, один из которых не имеет доверенных подписей и считается недостоверным (вернее, имеющим неизвестный уровень подлинности), другой имеет одну частично доверенную подпись и считается вероятно достоверным, а третий — достаточное число подписей, чтобы получить полную достоверность, то ключ в целом так же будет расценен как полностью достоверный. Однако, этот итоговый показатель достоверности ключа влияет лишь на то, будут ли приниматься в расчёт его подтверждающие подписи (пока ключ не считается полностью достоверным, параметры доверия и, соответственно, подтверждающие подписи от него не принимаются в расчёт).
— Гость (05/10/2008 16:44)   <#>
Стало ещё понятнее :) Чем больше я знаю, тем больше понимаю, что ничего не знаю.

Совсем нет. Каждый ключ уникален. Хотя Вы можете создать себе несколько ключей с одинаковыми uid, все эти ключи (вернее, сертификаты, т.е. ключ плюс его uid'ы) будут по-прежнему уникальны.

Но, вероятно, если главному ключу принадлежит какой-то uid, то он относится и ко всем подключам. В таком случае можно заменять подключи, не теряя сертифицирующие подписи на главном ключе. Да?

А каким образом можно создать uid, прицепленный к подключу? Ну или посмотреть, какой именно uid к какому ключу относится? Мне это никак не удаётся. Не привожу точные листинги команд, которые пробовал, слишком уж длинно получается. Если просто сделать gpg --edit-key alice, adduid, save, то uid добавится к основному ключу. gpg --edit-key alice, key 1, adduid, save – то же самое. (И вообще выбрать основной ключ командой key номер_ключа не получается – выбирается только подключ при помощи key 1. key 0, как и полагается, отменяет выбор всех ключей.) Пытаюсь просмотреть список ключей через при помощи gpg --list-keys – все uid идут после основного ключа, после дополнительного – ни одного.

Разберёмся в терминологии.<...>

Да, вопрос был о том, как вычисляется достоверность (validity), просто я ещё не освоился с терминами.
— SATtva (05/10/2008 17:36)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Но, вероятно, если главному ключу принадлежит какой-то uid, то он относится и ко всем подключам. В таком случае можно заменять подключи, не теряя сертифицирующие подписи на главном ключе. Да?

Совершенно верно. Подключи были придуманы именно с этой целью (в числе прочего). А говорите, что ничего не понимаете. :-)

А каким образом можно создать uid, прицепленный к подключу?

Никак. UID'ы и подключи являются атрибутами главного ключа.

Да, вопрос был о том, как вычисляется достоверность (validity), просто я ещё не освоился с терминами.

Я постарался достаточно подробно ответить. Если остались ещё какие-то недопонимания, конкретизируйте.
— Гость (05/10/2008 20:54)   <#>
Однако, этот итоговый показатель достоверности ключа влияет лишь на то, будут ли приниматься в расчёт его подтверждающие подписи (пока ключ не считается полностью достоверным, параметры доверия и, соответственно, подтверждающие подписи от него не принимаются в расчёт).
Ага. Оказывается, при зашифровании для кого-то нужно выбирать uid, а не ключи. И если подписать документ, а потом проверить, то тоже выводится uid (primary). То есть, собственно, в качестве корреспондентов выступают uid, а не ключи.



Всё-таки ничего не понятно :) Если uid не может принадлежать подключу, то в чём же тогда суть? Может быть всё же "Каждый ключ уникален. Хотя Вы можете создать себе несколько ключей с одинаковыми uid<...>" относится не к подключам, а к ключам? Ведь если uid относятся только к основному ключу, то подключи всё же имеют равные права на все эти uid. И, значит, тому, кто захочет проверить цифровую подпись, должно быть безразлично, какой именно из своих подключей я использовал – всё равно достоверность будет высчитываться не для ключей, но для uid, который был основным (primary) в момент подписывания сообщения. И, значит, подключи всё-таки равнозначны. Или я в очередной раз не уловил что-то?)

Я постарался достаточно подробно ответить. Если остались ещё какие-то недопонимания, конкретизируйте.
Да, очень подробно. Спасибо... Просто уточнил, что я имел в виду изначально.
— SATtva (05/10/2008 21:42, исправлен 05/10/2008 21:46)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Оказывается, при зашифровании для кого-то нужно выбирать uid, а не ключи.

Не обязательно: реципиента можно указать и как keyID (0x1234abcd). Но разница не принципиальна: keyID равнозначен главному uid'у.

То есть, собственно, в качестве корреспондентов выступают uid, а не ключи.

Об этом я уже говорил выше. Только сообщения всё равно шифруются ключами (вернее, подключами), а не uid'ами. ;-)

Может быть всё же "Каждый ключ уникален. Хотя Вы можете создать себе несколько ключей с одинаковыми uid<...>" относится не к подключам, а к ключам? Ведь если uid относятся только к основному ключу, то подключи всё же имеют равные права на все эти uid.

Ну да. Я ведь Вам именно про ключи отвечал, а не подключи. :-) Подключи носят чисто утилитарный характер — это, собственно, само средство шифрования (и/или подписи в некоторых случаях, но не сертификации!). Они сами непосредственно не участвуют в системе Сети доверия. А uid'ы (наряду с отпечатком ключа) — это центральный элемент Сети доверия. Если бы не Сеть доверия, то в uid'ах не было бы особого практического смысла. Разве что немного удобства, чтобы не запоминать цифровые идентификаторы.

И, значит, тому, кто захочет проверить цифровую подпись, должно быть безразлично, какой именно из своих подключей я использовал – всё равно достоверность будет высчитываться не для ключей, но для uid, который был основным (primary) в момент подписывания сообщения. И, значит, подключи всё-таки равнозначны. Или я в очередной раз не уловил что-то?)

Нет, Ваши рассуждения верны. Недопонимание возникает обычно из-за терминологических неточностей. То, что в обиходе называют "ключом PGP" — весьма сложная и разнородная структура. Всю в целом её правильно называть "сертификатом OpenPGP". С "ключом PGP" обычно ассоциируют первичный ключ, эксклюзивной функцией которого является сертификация и криптографическое связывание элементов сертификата (uid'ов, подключей и прочего); именно хэш первичного ключа используется в качестве отпечатка, а укороченный вариант отпечатка — в качестве keyID; именно от первичного ключа вычисляется ЭЦП, содержащая пакет параметров ключа (таких как срок его действия, предпочтительные шифры и т.д.); опять же, именно отпечаток (т.е. хэш первичного ключа) связывает uid'ы, равно, как и подключи, с сертификатом в целом. Поэтому когда речь заходит о "ключах PGP", я обычно подразумеваю под этим именно первичный ключ. Подключи — элемент чисто механический. (Разумеется, если речь заходит о "шифровании ключом PGP", это, понятно, формально означает "шифрование подключами".)
— Гость (06/10/2008 22:29)   <#>
Ну да. Я ведь Вам именно про ключи отвечал, а не подключи. :-)
Но я-то спрашивал про подключи :) Поэтому я тогда всё не так понял :)

Что же, теперь с uid всё стало как будто бы понятно. Чтобы не развеивать эту иллюзию, прекращаю задавать вопросы :)

Спасибо, SATtva.
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3