Jak zarządzać kluczami GPG w wielu systemach?

103

Nie znam się na GnuPG i próbuję zrozumieć, jak najlepiej go używać. Przejrzałem krótkie, łatwe do zrozumienia wyjaśnienie GPG / PGP dla osób nietechnicznych? , ale większość przewodników wyjaśnia PGP z perspektywy pojedynczej maszyny.

Chcę używać GnuPG na trzech urządzeniach komputerowych: komputerze z systemem Linux, laptopie z systemem Linux i telefonie z Androidem.

Podstawowym przypadkiem użycia jest szyfrowanie / deszyfrowanie wiadomości e-mail zarządzanych przez usługę IMAP, więc wszystkie urządzenia potrzebują tego samego klucza prywatnego do odszyfrowania.

Myślę, że moje wybory to:

  1. Po prostu skopiuj wszystkie moje klucze do kluczy na każdym urządzeniu i do ochrony polegaj głównie na haśle klucza prywatnego.

  2. Utwórz klucz główny (przy pomocy --gen-key), aby reprezentować moją tożsamość, a następnie utwórz osobny klucz jednorazowy (ponownie przy użyciu --gen-key) do szyfrowania / deszyfrowania wiadomości e-mail i podpisany za pomocą klucza głównego. Ten pierwszy znajduje się tylko na moim komputerze, drugi jest dystrybuowany do każdego urządzenia. Dopóki moje urządzenia mobilne nie zostaną naruszone, klucz jednorazowy pozostaje ważny.

Mogę być zbyt paranoikiem i komplikować to bardziej, niż to musi być, ale żartuj, proszę. Wierzę, że nie wkładam wszystkich jajek do jednego koszyka.

Kluczem głównym powinna być moja cyfrowa tożsamość. Dużo wysiłku zostanie włożone w budowanie zaufania wokół tej tożsamości i wolę cierpieć z powodu niedogodności związanych z moją paranoją, niż stracić swój klucz z nieostrożności i muszę budować zaufanie wokół nowego klucza głównego (być może nie jest tak źle, jak ja myśl, ale jestem nowy w tym) .

Bardziej prawdopodobne jest, że stracę laptopa lub telefon niż komputer. Jeśli utrata == kompromis, wolałbym stracić jednorazową parę kluczy (którą mogę odwołać) niż moją główną parę kluczy. Zawsze mogę obdarzyć zaufaniem mojego klucza głównego nowy klucz jednorazowy.

Przepraszam za bardzo długie pytanie. :-)

TL; DR

Czy hasło wystarcza do przechowywania mojego głównego klucza prywatnego na wielu urządzeniach?

Czy mój plan dotyczący opcji nr 2 jest wykonalny? Czy coś źle zrozumiałem, czy można to poprawić?

Jeśli opcja 2 jest złym pomysłem, to jakie są najlepsze praktyki korzystania z GnuPG dla jednego użytkownika na wielu urządzeniach?

Justin C.
źródło

Odpowiedzi:

59

Cóż, to trochę zawstydzające. Spędziłem godziny w ciągu tygodnia, starając się rozwiązać ten problem, a odpowiedź wydaje się leżeć w podkluczach - temat, który zawiera podręcznik GnuPG i FAQ.

Badając, czym są podklucze i dlaczego można ich użyć zamiast --gen-key, natknąłem się na ten klejnot: http://wiki.debian.org/subkeys .

Wiki Debiana wyjaśnia, jak zaimplementować opcję nr 2 (patrz OP) za pomocą klucza głównego z podkluczami, a także wyjaśnia, jak usunąć klucz główny z dowolnego systemu po przechowywaniu go na nośniku kopii zapasowej (np. Dysku flash). Podklucze można następnie rozdzielić między moje klucze na każdym urządzeniu.

Plusy:

  1. Nie polega głównie na haśle do ochrony klucza głównego,

  2. Jeśli jakikolwiek system zostanie naruszony, klucz główny nie jest natychmiast dostępny (chyba że głupio zostawiam podłączony dysk flash lub podłączam go do zainfekowanego systemu),

  3. Jest to praktyka wdrożona przez zespół programistów Debiana.

  4. Używa funkcji podklucza GnuPG. Co wydaje się nieco bardziej zorganizowane niż posiadanie kilku luźnych kluczy na breloku, tak?

Odpowiednia część z Wiki podklucza Debiana

  1. Utwórz kopie zapasowe istniejących plików GnuPG ($ HOME / .gnupg). Pilnuj ich. Jeśli coś pójdzie nie tak podczas poniższych kroków, może być konieczne, aby powrócić do znanego dobrego miejsca. (uwaga: umask 077 spowoduje ograniczenie uprawnień do tworzenia kopii zapasowej).

    • umask 077; tar -cf $HOME/gnupg-backup.tar -C $HOME .gnupg
  2. Utwórz nowy podklucz do podpisywania.

    • Znajdź swój identyfikator klucza: gpg --list-keys yourname
    • gpg --edit-key YOURMASTERKEYID
    • W odpowiedzi na gpg>monit:addkey
    • To poprosi o twoje hasło, wpisz je.
    • Wybierz typ klucza „RSA (tylko znak)”.
    • Rozsądnie byłoby wybrać rozmiar klucza 4096 (lub 2048).
    • Wybierz datę wygaśnięcia (możesz obracać swoje podklucze częściej niż klucze główne lub zachować je na okres ważności klucza głównego, bez wygaśnięcia).
    • GnuPG utworzy (ostatecznie) klucz, ale być może będziesz musiał poczekać, aż uzyska wystarczającą entropię, aby to zrobić.
    • Zapisz klucz: save
  3. Możesz to powtórzyć i utworzyć podklucz „RSA (tylko szyfruj)”, jeśli chcesz.

  4. Teraz skopiuj $HOME/.gnupgna dyski USB.

  5. Nadchodzi trudna część. Musisz usunąć prywatny klucz główny i niestety GnuPG nie zapewnia wygodnego sposobu na zrobienie tego. Musimy wyeksportować podklucz, usunąć klucz prywatny i zaimportować podklucz z powrotem.

    • Wyeksportować podklucze: gpg --export-secret-subkeys YOURMASTERKEYID >secret-subkeys(do wyboru, które podklucze wywozem określić identyfikatory podklucz następnie każdy z wykrzyknikiem: gpg --export-secret-subkeys SUBKEYID! [SUBKEYID! ..])
    • Usuń główny klucz tajny: gpg --delete-secret-key YOURMASTERKEYID
    • Zaimportuj podklucze z powrotem: gpg --import secret-subkeys
    • Sprawdź, czy gpg -Kpokazuje sec#zamiast tylko secdla twojego klucza prywatnego. Oznacza to, że tajnego klucza tak naprawdę nie ma. (Zobacz także obecność fikcyjnego pakietu OpenPGP na wyjściu gpg --export-secret-key YOURMASTERKEYID | gpg --list-packets).
    • Opcjonalnie zmień hasło chroniące podklucze: gpg --edit-key YOURMASTERKEYID passwd. (Pamiętaj, że materiał klucza prywatnego na kopii zapasowej, w tym prywatny klucz główny, pozostanie chroniony przez stare hasło).

Twój komputer jest teraz gotowy do normalnego użytkowania.

Gdy potrzebujesz użyć kluczy głównych, zamontuj zaszyfrowany dysk USB i ustaw zmienną środowiskową GNUPGHOME:

export GNUPGHOME=/media/something
gpg -K

lub użyj argumentu wiersza polecenia --home:

gpg --home=/media/something -K

To ostatnie polecenie powinno teraz wyświetlać twój klucz prywatny, seca nie sec#.

Wiele podkluczy na maszynę vs. Jeden pojedynczy podklucz dla wszystkich maszyn

Fragment wiki podklucza Debiana. Pierwotnie odnotowany w komentarzach. [Parafrazowanie] i podkreślenie moje.

Można pokusić się o jeden podklucz na maszynie, dlatego wystarczy wymienić potencjalnie zagrożony podklucz tej maszyny. W przypadku pojedynczego podklucza używanego na wszystkich komputerach należy go wymienić na wszystkich komputerach [gdy ten pojedynczy podklucz jest lub podejrzewa się, że został naruszony].

Ale działa to tylko do podpisywania podkluczy . Jeśli masz wiele podkluczy szyfrowania, mówi się, że gpg szyfruje tylko najnowszy podklucz szyfrowania, a nie wszystkie znane i nieodwołane podklucze szyfrowania.

Justin C.
źródło
5
Dobre pytania i odpowiedzi, ale AFAIK wciąż ma jeden problem z tą konfiguracją ... Jest świetny do podpisywania, ale nie do szyfrowania, jeśli nie chcesz udostępniać tego samego klucza szyfrowania między różnymi urządzeniami, ponieważ gdy ktoś sprawia, że ​​jesteś odbiorcą zaszyfrowanego wiadomość, gpg domyślnie używa najnowszego, nieodwołanego klucza szyfrowania. Nie można zmusić nadawców do użycia określonego podklucza enc w zależności od UID (domu lub pracy itp.).
KurzedMetal
2
Być może to jest problem. Moją największą troską jest utrata sieci zaufania, którą buduję wokół mojego klucza głównego (który tylko podpisuje). Oczywiście podklucz szyfrowania musi istnieć na wszystkich urządzeniach, których używam do odczytywania zaszyfrowanych wiadomości. Jeśli mój klucz szyfrowania zostanie kiedykolwiek naruszony, proces odzyskiwania dotyczy tylko mnie; w przeciwieństwie do utraty mojego głównego klucza podpisu i konieczności poproszenia / przekonania mojej sieci zaufania do podpisania nowego klucza. Nie zamierzałem przenosić podklucza szyfrowania w moim skarbcu.
Justin C
9

Jako ktoś, kto również nie lubi pojedynczych punktów awarii (w tym kluczy głównych, a zwłaszcza haseł), właśnie tak bym to zrobił. Pozwala to na działanie urządzeń za pośrednictwem sieci zaufania, a jednocześnie pozwala na zdecentralizowaną tożsamość.

Nie wiem, czy istnieje już do tego system, ale myślę, że prawdopodobnie mógłby zostać scrobbowany wraz z zadaniem cron i kilkoma liniami Bash.

W tym systemie masz dwie klasy kluczy: klucze urządzeń i ramy czasowe . Jedna para kluczy urządzenia jest generowana dla użytkownika na każdym urządzeniu i pozostaje na tym urządzeniu przez cały okres jego użytkowania. Ramy czasowe parę kluczy jest generowana przez centralny serwer w rutynowych odstępach czasu (co miesiąc, codziennie, co godzinę - zależy jak paranoidalny chcesz być). Klucz publiczny jest ogłaszany publicznie (sam serwer ma własną parę kluczy urządzeń do podpisywania), a klucz prywatny jest dystrybuowany zaszyfrowany kluczem publicznym każdego urządzenia, które ma mieć dostęp do tego klucza. (Ta dystrybucja powinna być jak najbardziej prywatna, np. Mieć bezpośrednie połączenie urządzeń z serwerem).

Do podpisywania wiadomości używasz klucza urządzenia z dowolnego urządzenia, z którego wysyłasz wiadomość. Jeśli ktoś chce wysłać Ci wiadomość, może ją podpisać przy użyciu bieżącego publicznego klucza ramy czasowej. (Powinny mieć zautomatyzowany system, aby nadążać za ogłoszeniami). Następnie możesz odczytać ich wiadomość z dowolnego urządzenia.

Aby odczytać starsze zaszyfrowane wiadomości, kopie zapasowe starszych kluczy czasowych są zapisywane na każdym urządzeniu zgodnie z odpowiednią strategią (w tym na serwerze generującym klucze czasowe, jeśli chcesz - ponownie, w zależności od poziomu paranoi), gdzie masz inny zestaw chronionych hasłem par kluczy chroniących starsze klucze (z taką ilością haseł w miarę upływu czasu, jak wygodnie zapamiętujesz).

Jeśli urządzenie zostanie skradzione lub w inny sposób naruszone, możesz użyć innego z publicznie zaufanych urządzeń, aby utworzyć publicznie podpisaną wiadomość weryfikującą Twoją tożsamość (w jakikolwiek sposób, np. Informując, że będziesz na spotkaniu publicznym i / lub zaufany przyjaciel zweryfikuje Cię osobiście) i unieważniając zainfekowany klucz urządzenia oraz wszelkie klucze ram czasowych, do których miał dostęp. Odwołując klucz, usuwasz również skradzione urządzenie z listy zaufanych urządzeń serwera (z hasłem i kluczem zaufanego urządzenia).

Zasady ufania nowo ogłoszonym kluczom urządzeń powinny być podobne do obecnych zasad zaufania - uważam, że odpowiednią zasadą jest ufanie serwerowi generującemu, urządzeniu mobilnemu i dużemu i ciężkiemu urządzeniu, ponieważ trudno je ukraść / infiltrować telefon użytkownika, komputer stacjonarny i VPS w skoku uzgodnionym, zanim użytkownik zauważy.

Jeśli Twój serwer jest zagrożony, po prostu odwołaj go, wykonując tę ​​samą procedurę, co w przypadku każdego innego urządzenia, które zostało przejęte (być może z silniejszą polityką podobną do zasady dodawania nowego urządzenia) i użyj ponownie zabezpieczonego lub całkowicie nowego serwera (z nowy klucz urządzenia)).

Stuart P. Bentley
źródło
Sekcja odwoływania jest trochę pochmurna, jak napisano - odwołanie urządzenia powinno być możliwe po ogłoszeniu z dowolnego innego urządzenia (aby nie zawieść, jeśli ktoś ukradnie laptopa, a telefon nie będzie mógł skontaktować się bezpośrednio z serwerem), ale nie jest możliwe zostać zrobione przez złodzieja (więc urządzenia powinny mieć chroniony hasłem klucz do odwołania). W przypadku sprzecznych raportów wszystkie klucze powinny być tymczasowo nieufne do czasu ręcznej weryfikacji przez stronę trzecią.
Stuart P. Bentley,
W rzeczywistości może być wskazane posiadanie innego mechanizmu odwoływania kluczy, przy użyciu silnego hasła publicznego, które jest regularnie aktualizowane (wymieniane) regularnie - w ten sposób można odwołać klucz bez konieczności korzystania z dowolnego urządzenia (powiedzmy, że jesteś tylko z twoim telefonem i ktoś go kradnie), o ile trzymasz hasło w tajemnicy.
Stuart P. Bentley,