Czy bloki klucza prywatnego PGP „zawierają” także klucz publiczny?

13

Zauważyłem, że jeśli zaimportuję mój prywatny klucz PGP w zbroi ASCII do skądinąd pustego klucza GnuPG (przez ~/.gnupgwcześniejsze usunięcie ), klucz ten zawiera zarówno klucze publiczne, jak i prywatne. Ponadto zbrojony blok klucza prywatnego ASCII jest około dwa razy większy niż mój odpowiednik klucza publicznego, co prowadzi mnie do przekonania, że ​​blok klucza prywatnego zawiera zarówno klucze prywatny, jak i publiczny, podczas gdy blok klucza publicznego zawiera tylko ten ostatni.

Odkąd stworzyłem swój klucz, do tej pory utworzyłem kopię zapasową jednego pliku zawierającego jeden wyeksportowany blok klucza prywatnego, a drugi z wyeksportowanym blokiem klucza publicznego. Czy kopia zapasowa mojego bloku klucza publicznego jest zbędna, a zatem czy mogę bezpiecznie przechowywać plik klucza prywatnego?

Używam tego polecenia, aby utworzyć plik klucza prywatnego:

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

i to polecenie, aby utworzyć plik klucza publicznego:

gpg --export -a > public
Delan Azabani
źródło
1
Aby ktoś odpowiedział na twoje pytanie, musisz dodać polecenia, których używasz do eksportowania kluczy. Odpowiedź jest prawdopodobnie w tym. Ale co zyskałbyś, nie eksportując klucza publicznego? Powiedziałbym, że zostaw to w swojej procedurze tworzenia kopii zapasowych, to nic nie kosztuje i do każdego celu, w którym potrzebujesz tylko klucza publicznego, który już masz.
Bram
Dzięki Bram; Zredagowałem pytanie, aby uzyskać dodatkową jasność. I tak, oszczędność ~ 3 KB nie ma realnych korzyści, jestem tylko ciekawy.
Delan Azabani,

Odpowiedzi:

15

Tak, pakiety „tajny klucz” i „tajny podklucz” OpenPGP zawierają zarówno parametry publiczne, jak i prywatne. Możesz to sprawdzić za pomocą pgpdump do sprawdzenia wyeksportowanego klucza:

$ gpg --export-secret-key grawity | pgpdump
Old: Secret Key Packet (tag 5) (1854 bytes)
    Wersja 4 - nowa
    Czas utworzenia klucza publicznego - sob. 31 października 14:54:03 EET 2009
    Alg Alg - RSA Encrypt or Sign (pub 1)
    RSA n (4096 bitów) - ...
    RSA e (17 bitów) - ...
    Sym alg - CAST5 (sym 3)
    Iterowane i solone string-to-key (s2k 3):
        Hash alg - SHA1 (hash 2)
        Sól - 12 24 0 f e1 5b 7e e2 46 
        Liczba - 65536 (liczba zakodowana 96)
    IV - 91 a3 44 71 47 87 a4 ba 
    Szyfrowane RSA d
    Szyfrowane RSA p
    Szyfrowane RSA q
    Szyfrowane RSA u
    Zaszyfrowany skrót SHA1

Dotyczy to większości asymetrycznych systemów kluczy, nie tylko OpenPGP.

użytkownik1686
źródło
Nie sądzę, że to prawda dla bloków RSA PUBLIC KEY i RSA SECRET KEY zakodowanych w PEM.
vy32
2
@ vy32: To nie są klucze OpenPGP, więc nie ma znaczenia. Ale nadal dotyczy to również tych. (Uwaga jak openssl genrsawyjść tylko „prywatna” blok, więc blok publicznego mogą być uzyskane z niego). Można je zbadać siebie: openssl genrsa 512 | openssl asn1parse -i. Lub sprawdź załącznik RFC 3447, który wyraźnie pokazuje moduł i publicExponent w strukturze RSAPrivateKey.
user1686,