Блоки закрытого ключа PGP также содержат открытый ключ?

13

Я заметил, что если я импортирую свой закрытый ключ PGP в ASCII-формате в пустую цепочку ключей GnuPG ( ~/.gnupgпредварительно удалив ), эта цепочка содержит как открытый, так и закрытый ключи. Кроме того, ASCII-защищенный блок закрытого ключа примерно в два раза больше моего аналога открытого ключа, что позволяет мне полагать, что блок закрытого ключа содержит как закрытый, так и открытый ключи, тогда как блок открытого ключа содержит только последний.

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

Я использую эту команду для создания файла закрытого ключа:

gpg --export-secret-keys -a > private

и эта команда для создания файла открытого ключа:

gpg --export -a > public
Делан Азабани
источник
1
Чтобы кто-то ответил на ваш вопрос, вам нужно добавить команды, которые вы используете для экспорта ключей. Ответ, вероятно, в этом. Но что бы вы получили, не экспортируя открытый ключ? Я бы сказал, оставьте это в своей процедуре резервного копирования, это ничего не стоит и для каждой цели, где вам нужен только открытый ключ, у вас уже есть это в наличии.
Брэм
Спасибо Брэм; Я отредактировал вопрос для большей ясности. И да, экономия ~ 3 КБ не приносит реальной пользы, мне просто любопытно.
Делан Азабани

Ответы:

15

Да, пакеты «секретный ключ» и «секретный подраздел» OpenPGP содержат как открытые, так и частные параметры. Вы можете проверить это с помощью pgpdump для проверки экспортированного ключа:

$ gpg --export-secret-key grawity | pgpdump
Старый пакет секретных ключей (тег 5) (1854 байта)
    Вер 4 - новый
    Время создания открытого ключа - суббота, 31 октября 14:54:03 EET 2009
    Pub alg - RSA Encrypt or Sign (паб 1)
    RSA n (4096 бит) - ...
    RSA e (17 бит) - ...
    Sym alg - CAST5 (sym 3)
    Итерированная и соленая строка в ключ (s2k 3):
        Hash alg - SHA1 (hash 2)
        Соль - 12 24 0f e1 5b 7e e2 46 
        Количество - 65536 (кодовое число 96)
    IV - 91 a3 44 71 47 87 a4 ba 
    Зашифрованный RSA d
    Зашифрованный RSA p
    Зашифрованный RSA q
    Зашифрованный RSA у
    Зашифрованный хэш SHA1

Это верно для большинства асимметричных ключевых систем, а не только для OpenPGP.

user1686
источник
Я не думаю, что это верно для кодированных PEM блоков RSA PUBLIC KEY и RSA SECRET KEY.
vy32
2
@ vy32: Это не ключи OpenPGP, так что это не имеет значения. Но это все еще верно и для тех. (Обратите внимание , как openssl genrsaвыводит только «частный» блок, таким образом , общественный блок может быть получен из него.) Вы можете изучить их самостоятельно: openssl genrsa 512 | openssl asn1parse -i. Или посмотрите RFC 3447 Приложение A, в котором четко показаны модуль и publicExponent в структуре RSAPrivateKey.
user1686