Все еще не понимаю, что такое ключи и подключи GPG

Все еще не понимаю, что такое ключи и подключи GPG

Я только что сгенерировал новый ключ с помощью

gpg --быстрая-генерация-ключа

Теперь, когда я это сделаю,

gpg --list-keys[email protected]

У меня получается что-то вроде этого:

pub   rsa2048 2020-01-29 [SC] [expires: 2022-01-28]
      DEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF
uid           [ultimate] [email protected]
sub   rsa2048 2020-01-29 [E]

но когда я делаю это:

gpg --edit-key[email protected]

Я получаю что-то вроде следующего:

gpg (GnuPG) 2.2.17; Copyright (C) 2019 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Secret key is available.

sec  rsa2048/DEADBEEFDEADBEEF
     created: 2020-01-29  expires: 2022-01-28  usage: SC  
     trust: ultimate      validity: ultimate
ssb  rsa2048/BEEFDEADBEEFDEAD
     created: 2020-01-29  expires: never       usage: E   
[ultimate] (1). [email protected]

Я думал, что хотя бы немного понимаю концепцию ключей и подключей, но для меня это все еще бессмысленно.

  1. Почему в одном случае на выходе отображаются открытые ключи, а в другом — секретные?
  2. Почему открытый ключ ( pub) показан как способный подписывать ( S) в первом случае, а секретный ключ ( ssb) показан как способный шифровать ( E) во втором случае? Разве это не противоречит тому, что мы узнали в Public Key Crypto 101?

решение1

Почему в одном случае на выходе отображаются открытые ключи, а в другом — секретные?

Я предполагаю, что в GnuPG 2.1+ --edit-keyкоманда показывает секретные ключи, потому что она всегда так делала.

В GnuPG 1.x (и аналогично в оригинальном PGP 2.x) было два полностью отдельных набора ключей (pubring и secring). Некоторые операции работали с одним, а некоторые — с другим. Так что раньше --list-secret-keysбыло точно так же, --list-keysза исключением того, что он читал из другого файла и --edit-keysимел подкоманду, которая переключалась между двумя представлениями.

Почему открытый ключ (pub) показан как способный подписывать (S) в первом случае, а секретный ключ (ssb) показан как способный шифровать (E) во втором случае? Разве это не противоречит тому, что мы узнали в Public Key Crypto 101?

Нет. Выходные данные описывают «ключ» как в объекте PGP, а не «ключ» в чисто криптографическом смысле, а флаги использования описывают, какие операции PGP это делает.имел в видудля использования, а не только для того, какие криптооперации "внутренний" ключ математически способен выполнять. Это означает, что они не меняются в зависимости от того, смотрите ли вы на публичную или частную половину.

Например, ваш пример блока ключей PGP содержит две пары ключей RSA, и обе они технически могут подписывать/проверять, а также шифровать/расшифровывать. Но весь смысл наличия двух пар в том, что вы хотите разделить их цели – т. е. вы не хотите, чтобы GnuPG выполнял шифрование с использованием подключа, предназначенного для подписи, поэтому флаги использования отфильтровывают его.

(Отдельного флага для «расшифровки» или «проверки» нет, поскольку сообщение или подпись уже указывают, какой ключ для этого использовать.)

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

  • «S» позволяет использовать ключ для подписи сообщений и файлов (электронной почты и т. д.);
  • «C» позволяет использовать ключ для подписи (сертификации) других ключей/подключей;
  • «A» позволяет использовать ключ для подписания задач аутентификации (как в TLS или SSHv2).

Несмотря на то, что все три создают один и тот же тип цифровых подписей в криптографическом смысле, сами ключи часто разделены по политическим причинам. (Например, «сертифицирующий» ключ должен быть гораздо более надежно защищен, чем «аутентификационный» ключ.)

Связанный контент