Jak zaimportować klucz RSA SSH do GPG jako klucz prywatny _primary_?


16

Obecnie mam klucz SSH, którego używałem od jakiegoś czasu i chciałbym zacząć używać GnuPG z nowym kluczem. Jednak biorąc pod uwagę, że używałem mojego klucza od wieków, chciałbym nadal używać tego klucza w GPG jako klucza głównego / podstawowego. Próbowałem zaimportować klucz za pomocą tych instrukcji .

Ale kończę na czymś, co uważa się za „podklucz”. Co więcej, jeśli spróbuję zaimportować go bez tworzenia standardowego klucza GPG, GPG nawet nie zobaczy tego podklucza. (Zakładam, że podklucz musi najpierw zostać podpisany przez klucz główny).

Jak używać tego klucza jako klucza głównego w secring.gpg?


W jakim sensie masz na myśli „ podstawowy klucz prywatny ”?
MadHatter

Odpowiedzi:


16

Prosta odpowiedź brzmi: nie.

Klucze SSH i klucze GnuPG (właściwie OpenPGP) są zupełnie inne, mimo że oba protokoły mogą używać par kluczy RSA.

A poza tym, dlaczego chcesz to zrobić? Nawet jeśli użyjesz tego samego klucza do stworzenia klucza PGP, nadal będziesz musiał rozpowszechniać swój klucz jako klucz PGP. Prawdopodobnie nie rozpowszechniłeś swojego klucza publicznego SSH wśród osób, z którymi korespondujesz, więc z punktu widzenia dystrybucji klucza nie ma różnicy: będą musieli otrzymać od ciebie klucz publiczny. I nawet jeśli dystrybuujesz swój klucz publiczny SSH innym osobom, będą musiały podjąć dodatkowe kroki, aby móc zaimportować go do swojej implementacji OpenPGP, co może, ale nie musi być łatwe.

Jak słusznie zauważył kasperd, musi istnieć tylko jeden sposób interpretacji (szczególnie) podpisu. Jeśli miałbyś użyć tego samego klucza zarówno dla PGP, jak i SSH, gdyby ktoś mógł oszukać cię do podpisania specjalnie spreparowanej wiadomości (co jest zakładaną możliwością w niektórych atakach systemu sygnaturowego) w jednym, to nawet jeśli oba systemy są bezpieczne w izolacji może być możliwe wytworzenie takiego komunikatu w sposób, który ma jedno znaczenie w jednym z systemów, ale inne znaczenie w drugim. To samo w sobie byłoby podatnością na ataki. (Do wykorzystania? Kto wie. Ale po co ryzykować?)

Zarówno pary kluczy PGP, jak i SSH są kluczami długoterminowymi, które służą do zabezpieczania efemerycznych kluczy (wiadomości i sesji) symetrycznych, a także do weryfikacji autentyczności strony zdalnej. To sprawia, że ​​klucz prywatny PGP lub SSH jest o wiele bardziej wartościowym celem dla atakującego niż odpowiedni klucz symetryczny. Jeśli użyjesz tego samego klucza do obu tych elementów, a atakujący zda sobie z tego sprawę, zwiększy to tylko wartość udanego ataku na tę parę kluczy.

Bez szczegółowego przyjrzenia się obu protokołom wyobrażam sobie, że uznanie, że ten sam materiał klucza jest używany w obu, byłoby prawdopodobnie dość trywialne, ponieważ klucz publiczny jest zasadniczo przesyłany w sposób wyraźny.

Po prostu wygeneruj nowy klucz PGP. Jeśli chcesz, ustaw RSA i tej samej długości co klucz SSH. (Żadna rozsądna osoba i tak nie przyjrzy się temu bliżej niż weryfikacja odcisku palca.) Następnie rozdaj klucz publiczny osobom, z którymi chcesz korespondować, jako klucz PGP. Będzie to znacznie łatwiejsze dla wszystkich, i prawdopodobnie bardziej bezpieczne, kosztem niewielkiej ilości entropii z losowej puli entropii twojego systemu, którą i tak należy szybko uzupełnić.


Jeśli masz wiele kluczy w tajnym breloku i chcesz określić, który z nich powinien być domyślnie używany, skorzystaj z dyrektyw default-keyi ewentualnie default-recipient{,-self}w pliku ~ / .gnupg / gnupg.conf.


1
Zgadzam się z tą odpowiedzią. Jest jednak jeszcze jeden powód, aby nie używać tego samego kluczowego materiału. Ze względów bezpieczeństwa musi istnieć tylko jeden sposób interpretacji podpisu. Gdyby ten sam podpis można było interpretować na dwa różne sposoby, byłaby to luka w zabezpieczeniach. Nawet jeśli zarówno ssh, jak i gpg są same w sobie bezpieczne, przeciwnik może nakłonić cię do podpisania wiadomości jednym z nich, a następnie przenieść podpis do drugiego programu, w którym może mieć to inne znaczenie.
kasperd

@kasperd Dobra uwaga. Poprawiłem odpowiedź; jak się teraz czujesz?
CVn

Brzmi nieźle.
kasperd

1
Myślę, że ta odpowiedź nie jest całkowicie dokładna: w Monkeysphere istnieje przypadek użycia, w którym możesz chcieć, aby istniejące klucze OpenSSH były tylko podkluczami uwierzytelniającymi w twoim osobistym kluczu OpenPGP. Przynajmniej chciałbym tego użyć w ten sposób.
user134450,

Te klucze wcale się nie różnią; ich metadane to.
foo

5

Możesz przekonwertować klucz SSH na klucz OpenPGP za pomocą narzędzia pem2openpgpz projektu monkeysphere . Ten klucz może następnie zostać zaimportowany przez gnupg jako zwykła para kluczy prywatny / publiczny. Jak wspomniano w innej odpowiedzi, zwykle nie jest to dobry pomysł, ponieważ ssh nie ma pojęcia certyfikatów, więc skutecznie dodajesz możliwość do istniejącego klucza, którego wcześniej nie mógł mieć. W kryptografii jest to generalnie niemożliwe.

I tak zrobiłem z jednym z moich kluczy ssh, ale dodałem parę kluczy do drugiego klucza OpenPGP jako podklucz, który ma tylko jedną flagę możliwości: uwierzytelnianie. Ta flaga jest przeznaczona do takich sytuacji, w których nie chcesz podpisywać ani szyfrować niczego za pomocą pary kluczy (znaczenie --encrypti --signopcje dla gnupg), ale chcesz mieć ją w swojej skrzynce na klucze w celu uwierzytelnienia w OpenSSH i gnupg-agent.

Aby uzyskać więcej informacji, zobacz dokumentację Monkeysphere.


2

Istnieją dobre powody, aby przekonwertować zwykły klucz w formacie PKCS do importowania do gpg.

Na przykład, jeśli chcesz umieścić go na karcie inteligentnej. Funkcje gpg, które udostępnia informacje o karcie i polecenia edycji karty, są bardzo pomocne w tym celu, więc dlaczego nie użyć go jako narzędzia? Jedyną przeszkodą, którą trzeba pokonać, jest ... a dokładnie: import klucza ze standardowego formatu PKCS # 8 (lub „surowego” formatu RSA PKCS # 1) do magazynu kluczy gpg w celu dalszego przetwarzania.

Więc - zwróć uwagę na mój sprzeciw wobec zatwierdzonej odpowiedzi! :)

Naprawdę pomocna odpowiedź na tego rodzaju pytanie znajduje się tutaj: /unix/276317/how-can-i-import-a-key-in-pem-format-not-openpgp-into -gpg


1

Użyj tego na Ubuntu 16.04 lub Windows WSL.

sudo apt install -y monkeysphere
cat key.pem | PEM2OPENPGP_USAGE_FLAGS=authenticate pem2openpgp "Key <key@example.com>" > key.pgp

Importuj kartę. Można to zrobić w systemie Windows lub Linux.

gpg --import key.gpg

Przenieś na kartę

Znajdź kluczowy identyfikator podpisu.

gpg --list-key

Przenieś klucz uwierzytelniający na kartę

gpg --edit-key FFFFFFFFFFF
keytocard

Wybierz numer gniazda uwierzytelniania.

Skończysz tutaj.

Pamiętaj, aby usunąć klucz z pęku kluczy gpg, jeśli używasz karty. Użyj powyższego identyfikatora klucza.

gpg --delete-secret-key FFFFFFFFFFF

Misc

Nie jest to konieczne, ale może być przydatne do uzyskania klucza w formacie tekstowym pgp.

gpg -a --export FFFFFF > key.asc
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.