Czy można poprosić gpg (lub gpg4win) o sprawdzenie, czy plik został podpisany przez określony plik klucza publicznego, bez konieczności importowania, podpisywania i ufania temu kluczowi?
tj. coś podobnego
gpg --using-key pubkey.txt --verify message.txt
w przeciwieństwie do konieczności tworzenia własnego klucza prywatnego, a następnie robienia tego
gpg --import pubkey.txt
gpg --lsign-key [name within pubkey.txt]
# ... something to do with choosing trust levels
gpg --verify message.txt
gpg --status-fd 1 --verify (thefile)
podaje jako wynik pierwszy odcisk palca klawisza, który utworzył podpis.Odpowiedzi:
Musisz mieć klucz publiczny, aby zweryfikować podpis wykonany odpowiednim kluczem prywatnym, ale nie musisz podpisywać ani nawet lokalnie podpisywać klucza. W takim przypadku otrzymasz ostrzeżenie od GPG, że klucz jest niezaufany.
Oto test, który wykonałem za pomocą pliku podpisanego własnym kluczem, ale w systemie, w którym klucz nie został zaimportowany:
Niestety sugestia Harry'ego nie działa, wyciąga trochę więcej informacji, ale nie na tyle, by była przydatna.
Jak widać, najwięcej uzyskanych informacji to identyfikator klucza podklucza użytego do złożenia podpisu oraz godzina jego złożenia. To pasuje do danych dostępnych dla pgpdump (lub --list-packets):
Jak widać, zapewnia algorytm mieszania, szczegóły typu klucza (mój klucz podpisujący to 3072-bitowy podklucz RSA i identyfikator klucza podklucza, ale nie ma nic, co mogłoby zidentyfikować klucz główny. Ta informacja jest tylko ujawnione, gdy masz klucz publiczny i zweryfikuj podpis.
Następnie zaimportowałem mój klucz publiczny do tego systemu i spróbowałem ponownie:
Teraz jest w stanie zidentyfikować klucz i dopasować go do klucza podstawowego. Możliwe jest jednak ograniczenie charakteru takich ostrzeżeń:
Nadal jest ostrzeżenie, że jest to niezaufany klucz, ale nie tak masowo, a usunięcie gadatliwości ogranicza go tylko do tego:
Klucz publiczny jest wymagany na etapie weryfikacji, ponieważ służy do dopasowania danych wygenerowanych przez osobę podpisującą z ich kluczem prywatnym. Mówiąc najprościej, można go traktować jako uzupełnienie szyfrowania, w którym klucz prywatny jest potrzebny do dekodowania danych zaszyfrowanych na klucz publiczny.
Uwaga: trochę poprawiłem UID w tym przykładzie, ale każdy, kto dostanie ten klucz, zobaczy, kim naprawdę jest. W przeciwnym razie dane wyjściowe to prosta kopia i wklej.
EDYCJA: Możesz wywołać plik klucza publicznego bezpośrednio jak brelok, jeśli masz go w zbrojonym formacie innym niż ASCII (tzn. Plik .gpg zamiast pliku .asc). Mimo to nadal potrzebujesz klucza publicznego. Aby to zrobić, polecenie wygląda następująco:
źródło
Jeśli jesteś OK z wysyłką do bazy kluczy, zamiast pliku klucza publicznego, prawdopodobnie chcesz użyć
gpgv
zamiastgpg
:źródło
Jeśli słowo „zweryfikuj” w pytaniu oznacza „absolutnie zweryfikuj”, to oczywiście klucz publiczny musi zostać zaimportowany, aby całkowicie zweryfikować podpisany dokument. Jeśli jednak oznacza to „identyfikacja”, poniżej opiszę heurystykę, która może stwierdzić, czy wszystkie dokumenty zostały podpisane tym samym podpisem.
Zgodnie z testami przeprowadzonymi przez @Ben w celu zweryfikowania mojego komentarza, istnieje możliwość użycia następującego polecenia do heurystycznego wskazania klucza podpisującego:
Test Bena dał wynik poniżej. Na uwagę zasługują wartości ERRSIG i NO_PUBKEY, a także wartość „ID klucza RSA”, która jest częściowo w nich zawarta, jak następuje:
Uwaga nad ciągiem
7FF2D37135C7553C
. Ten sam ciąg znajduje się w odcisku palca klucza, który jest zgłaszany po zaimportowaniu klucza:Ciąg ten znajduje się jako dolna część odcisku palca (podklucz powyżej), więc może być prawdopodobnie użyty do identyfikacji klucza. Oprócz podklucza prawdopodobnie należy też zweryfikować „odcisk palca klucza głównego”.
Ciąg „Identyfikator klucza RSA” jest identyczny na obu wyjściach i znajduje się również jako ostatnia część odcisku palca, więc może być możliwe, że sam wystarczy do zidentyfikowania podpisu. W takim przypadku użycie tylko danych wyjściowych
gpg --verify
może wystarczyć do zidentyfikowania podpisu w prostszy sposób.Moja wiedza na temat GPG nie jest wystarczająca, aby w pełni zweryfikować tę metodę, dlatego powinieneś wypróbować ją na większej liczbie przykładowych plików. Jeśli to działa, możesz posortować pliki według ich podpisów, ale będziesz musiał zaimportować klucz, aby znaleźć tożsamość podpisanego.
Jasne stwierdzenie: ta metoda nie może w pełni zidentyfikować podpisu. To tylko sposób heurystycznego sortowania podpisanych dokumentów.
źródło