Uzyskanie klucza PGP jest łatwe, ale podzielenie się nim z innymi może być kłopotliwe.
Dlaczego używać Web Key Directory
Udostępnianie swojego publicznego klucza jest ważne dla zabezpieczenia komunikacji, ponieważ pozwala innym na szyfrowanie wiadomości, które tylko Ty z odpowiadającym prywatnym kluczem możesz odszyfrować i zweryfikować, że wiadomości pochodzą od Ciebie. Jest to szczególnie ważne dla poczty e-mail, która domyślnie nie jest szyfrowana i może być przechwycona i odczytana przez podmiot obsługujący e-mail. Wymaga to jednak, aby odbiorca miał Twój publiczny klucz, który musi być udostępniony.
Tradycyjne sposoby udostępniania publicznego klucza
Tradycyjnym sposobem udostępniania publicznego klucza jest przesłanie go na serwer kluczy, ale ta metoda ma swoje wady. Każdy może przesłać klucz na serwer kluczy, a nie ma sposobu na zweryfikowanie, czy klucz rzeczywiście należy do osoby, do której twierdzi, że należy.
Inną opcją byłoby pobranie klucza ze strony internetowej osoby, ale znalezienie klucza byłoby o wiele trudniejsze, ponieważ strona każdego byłaby inna i nadal wymagałoby ręcznej pracy, aby uzyskać klucz.
Nawet wysłanie klucza przez e-mail nie jest dobre, ponieważ pierwszy e-mail byłby nieszyfrowany, a klucz mógłby być przechwycony i zastąpiony złośliwym, a nadal wymagałby ręcznej pracy do importu klucza.
Rozwiązanie
Tutaj pojawia się Web Key Directory. WKD to protokół umożliwiający odkrywanie publicznych kluczy OpenPGP przesłanych na serwery osób, omijając potrzebę dedykowanych serwerów kluczy i umożliwiając większą kontrolę nad kluczami. Korzystając z HTTPs do uzyskania klucza, możesz być trochę pewniejszy, że klucz używany dla adresu e-mail został dystrybuowany przez właściciela domeny, który może być tą samą osobą.
WKD pozwala klientom poczty e-mail, takim jak Thunderbird, na automatyczne odkrywanie publicznego klucza odbiorcy i bezpośrednie użycie go podczas pierwszej rozmowy.
Konfiguracja Web Key Directory
WKD ma dwa rodzaje konfiguracji: konfigurację bezpośrednią i zaawansowaną. Pomimo swoich nazw, obie wymagają mniej więcej tych samych kroków. Konfiguracja bezpośrednia nie wymaga dodatkowych wpisów DNS, podczas gdy konfiguracja zaawansowana wymaga utworzenia subdomeny o nazwie openpgpkey
, która zostanie najpierw przetestowana, zanim przejdzie do konfiguracji bezpośredniej.
Wymagania
Domena:
Domena jest wymagana do hostowania publicznego klucza, ponieważ w przeciwnym razie nie mogłbyś używać WKD. Dla podstawowej konfiguracji wystarczy umiejętność umieszczenia plików w katalogu
.well-known
Twojej domeny. Dla zaawansowanej konfiguracji musisz być w stanie utworzyć subdomenę o nazwieopenpgpkey
i umieścić pliki w katalogu.well-known
tej subdomeny.Publiczny klucz, który pasuje do adresu e-mail hostowanego na domenie
Serwer WWW:
Serwer WWW jest wymagany do hostowania publicznego klucza. Jeśli nie masz hostingu WWW lub nie możesz kontrolować serwera WWW, możesz skorzystać z WKD-as-a-service Openpgp.org. Ta usługa pozwala na hostowanie publicznego klucza na ich serwerach, wykorzystując zaawansowaną konfigurację. Ten sposób ma wadę braku pełnej kontroli nad kluczem i zawiera wszystkie dostępne klucze dla tej tożsamości.
Uzyskanie hasza
Podstawowy tryb oczekuje klucza pod tym adresem: https://{domena}/.well-known/openpgpkey/hu/{hash}?l={nazwa-e-mail}
gdzie {domena} to domena adresu e-mail, {hash} to hash WKD adresu e-mail i {nazwa-e-mail} to część nazwy adresu e-mail przed @ z użyciem odpowiedniego unikania znaków.
Zaawansowany tryb jest podobny, ale używa subdomeny openpgpkey i zawiera domenę w małych literach w ścieżce, tak jak poniżej: https://openpgpkey.{domena}/.well-known/openpgpkey/{domena}/hu/{hash}?l={nazwa-e-mail}
Hash jest obliczany przez wzięcie adresu e-mail, zamienienie go na małe litery i zahashowanie go za pomocą algorytmu SHA-1. Wynikowy 160-bitowy skrót jest kodowany za pomocą metody Z-Base-32 w celu utworzenia 32-oktetowego ciągu. Ten ciąg jest następnie używany jako hash w adresie URL. Nie musisz jednak robić tego ręcznie, ponieważ narzędzie wiersza poleceń gpg może to zrobić za Ciebie.
|
|
Otrzymasz coś w rodzaju:
|
|
Hash jest przed @ w adresie e-mail, który w tym przypadku to
Teraz, gdy masz hash, musisz zapisać niezamaskowaną wersję klucza publicznego w lokalizacji hasha, co możesz zrobić za pomocą następującego polecenia:
|
|
Bądź ostrożny na Windows, ponieważ nie używa operatora przekierowania >
poprawnie i dane binarne zostają pomieszane. Rozważ użycie Git Bash lub WSL, aby temu zapobiec.
DNS
Jeśli planujesz korzystać z zaawansowanej konfiguracji, musisz utworzyć subdomenę o nazwie openpgpkey
i mieć serwer www serwujący klucze stamtąd. Jeśli korzystasz z metody bezpośredniej, musisz upewnić się, że subdomena openpgpkey nie odpowiada. Na przykład, gdy używasz rekordów DNS typu wildcard, upewnij się, że subdomena openpgpkey nie jest objęta wildcardingiem. Można to zrobić, dodając pusty rekord TXT dla tej subdomeny, co zapobiegnie wpływowi rekordów DNS typu wildcard na rekord DNS openpgp, ponieważ najpierw próbuje się metody zaawansowanej, zanim nastąpi powrót do metody bezpośredniej.
Przesyłanie klucza
Klucz musi być przesłany na serwer www w lokalizacji hasha odpowiedniej dla wybranej konfiguracji. Powinien być serwowany jako application/octet-stream
i zezwalać na dostęp z dowolnego miejsca za pomocą nagłówka Access-Control-Allow-Origin: *
.
Przykładowe konfiguracje dla nginx mogą wyglądać tak:
|
|
albo dla Clodflare pages przez utworzenie pliku _headers w katalogu wyjściowym:
|
|
Dodanie pliku policy
Specyfikacja wymaga, aby plik flag polityki był serwowany. Ten plik jest wymagany nawet jeśli protokół aktualizacji Web Key Directory nie jest obsługiwany, co jest protokołem, który umożliwia automatyczną aktualizację i dodawanie klucza publicznego. Ale to nie będzie potrzebne, ponieważ klucze będą statycznie hostowane i serwowane.
Plik flag polityki może być pustym plikiem, ale musi być serwowana pod /.well-known/openpgpkey/policy
zarówno dla konfiguracji bezpośredniej, jak i zaawansowanej.
Testowanie konfiguracji
Możesz przetestować swoją konfigurację za pomocą następującego polecenia GnuPG, które spróbuje pobrać klucz z serwera:
|
|
|
|
Dla codziennego użytku możesz po prostu użyć --locate-keys
w gpg, aby automatycznie pobrać klucz z serwera lub poszukać odpowiedniej opcji w swoim kliencie poczty.
Podsumowanie
Ustawienie Web Key Directory to świetny sposób na udostępnianie swojego publicznego klucza innym. Pozwala na automatyczne odkrywanie publicznego klucza na przykład w klientach poczty e-mail i umożliwia większą kontrolę nad kluczem, ponieważ jest hostowany na Twoim własnym serwerze i umożliwia komunikację bez ręcznej wymiany klucza. Pozwala również na usunięcie starych lub unieważnionych kluczy z serwera, co nie jest możliwe z tradycyjnymi serwerami kluczy, które będą przechowywać klucz na zawsze, zatruwając serwer kluczy starymi kluczami.
Źródła: