Podpis i weryfikacja

Podpis pliku to po prostu zaszyfrowanie skrótu pliku za pomocą klucza prywatnego. Weryfikacja to będzie odszyfrowanie za pomocą klucza publicznego i sprawdzenie czy skrót się zgadza ze skrótem otrzymanego pliku.

Krok po kroku

Załóżmy, że mamy plik document.pdf i chcemy go podpisać a później zweryfikować. Wykorzystamy do tego gotowe już klucze: publiczny (public_key.pem) i prywatny (private_key.pem).

Podpis

1. Skrót (hash) pliku

Na początku musimy stworzyć skrót podpisywanego pliku – ponieważ klucze publiczne i prywatne nie pozwalają na zaszyfrowanie zbyt długich ciągów bitów:

openssl dgst -sha256 -out document.sha256 document.pdf

Do stworzenie skrótu został użyty algorytm sha256 (jest to informacja, którą powinien otrzymać odbiorca podpisu, aby móc samemu wygenerować skrót na podstawie otrzymanego pliku i porównać z tym otrzymanym).

2. Podpis (czyli zaszyfrowanie kluczem prywatnym)

Teraz należy po prostu zaszyfrować plik skrótu (document.sha256) kluczem prywatnym:

openssl rsautl -sign -inkey private_key.pem -keyform PEM -in document.sha256 -out document.signature

Plik document.signature zawiera podpis skrótu.

Weryfikacja

Weryfikacja będzie wymagała trzech elementów:
– pliku podpisanego – document.pdf
– pliku podpisu (skrótu pliku) – document.signature
– algorytmu użytego do stworzenia skrótu – sha256
– klucza publicznego podpisującego – public_key.pem

1. Odszyfrowanie pliku skrótu

Mając te wszystkie elementy, możemy przejść do weryfikacji. Krokiem pierwszym będzie odszyfrowanie skrótu za pomocą klucza publicznego:

openssl rsautl -verify -inkey public_key.pem -keyform PEM -pubin -in document.signature -out document.sha256.verify

Otrzymaliśmy plik document.sha256.verify posiadający odszyfrowany skrót.

2. Tworzenie skrótu z otrzymanego pliku

Teraz należy stworzyć skrót z otrzymanego pliku (document.pdf) za pomocą znanego algorytmu – sha256:

openssl dgst -sha256 -out document.sha256.received.verify document.pdf

3. Porównanie skrótów

W końcu należy porównać obydwa skróty (przykładowo używając polecenia diff):

diff document.sha256.received.verify document.sha256.verify

Jeśli są takie same, to możemy uznać weryfikacją za pozytywną.

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *