Używam tego polecenia do podpisania pliku:
openssl dgst -binary -sha1 -out signedFile.bin -sign file.pem plainText
Chcę wiedzieć, jaki format jest wynikiem tego polecenia. Moim celem jest przeanalizowanie wyniku i wyodrębnienie tablicy mieszającej.
Jaki jest format Czy są jakieś narzędzia do parsowania wyniku?
Odpowiedzi:
JEŻELI plik.pem zawiera klucz prywatny RSA (w takim przypadku nazwa ta wprowadza w błąd) wynikiem jest „pusty” podpis RSA PKCS # 1 (v1.5) - liczba N-bitów, gdzie N jest rozmiarem modułu, zaokrąglonym w górę w razie potrzeby, co rzadko zdarza się, ponieważ ludzie zwykle używają rozmiarów kluczy takich jak 1024 i 2048, bez metadanych zwykle używanych z podpisem.
dgst -sign
Domyślnie jest to-binary
tak, że jest zbędny (the hash tylko formadgst
nie), ale jak mówi @ zedman9991 można prosić-hex
.Ale parsowanie tego nie ma sensu. To jest liczba. Jeśli chcesz „odzyskać” podpisaną wartość skrótu, którą obsługuje PKCS # 1, ale inne formaty RSA mogą tego nie robić, a inne algorytmy, takie jak DSA i ECDSA, zdecydowanie tego nie robią, musisz (1) wykonać obliczenia modexp-e (często niepoprawnie nazywane „deszyfrowanie za pomocą klucza publicznego”), następnie (2) rozpakuj, a następnie (3) dekoduj ASN.1. „parsowanie” może być rozsądnie użyte w znaczeniu (2) lub (3) lub obu. Możesz napisać program C, aby to zrobić w około 20 liniach. Biorąc pod uwagę plik binarny,
rsautl -verify
robi (1) i (2) (przydgst -sign
domyślnym dopełnieniu do wersji 1.5) i możesz zrobić (3) ręcznie lub za pomocąasn1parse
:Wartość ostatniego pola (OCTET STRING) „odzyskanego” podpisu DER, który w tym przypadku jest również jego ostatnimi 20 oktetami, jest wartością skrótu.
(Dla prostego przykładu użyłem 1024-bitowego klucza RSA, a zatem 128-bajtowego podpisu. RSA-1024 jest obecnie uważany za zagrożony awarią w dającej się przewidzieć przyszłości, więc co najmniej 1536, a zwykle 2048 lub więcej jest ogólnie wymagany dla bezpiecznych aplikacji).
źródło