2012-07-18 9 views
5

Chcę zweryfikować podpis RSA. Mam dane do weryfikacji, podpis i klucz publiczny w postaci modułu i wykładnika. Chciałbym przeprowadzić weryfikację za pomocą openssl. Czy to możliwe? Wiem, że mogę użyć openssl rsautl -verify -in sig -inkey key.pem, ale nie wiem jak (używając openssl) stworzyć klucz publiczny o właśnie jego module i wykładniku.Tworzenie klucza publicznego RSA z jego modułu i wykładnika

Może inne pomysły na sprawdzenie tego podpisu (z wyjątkiem pisania niektórych programów)?

+1

”... z wyjątkiem pisania niektóre programy ... "jeśli czytasz [FAQ] (http://stackoverflow.com/faq), to wiesz do czego jest stackoverflow. –

+0

GregS: To nie tak :) Mam program, który robi to, ale mój klient twierdzi, że nie działa poprawnie. Aby udowodnić mu, że się myli, chcę pokazać, że na przykład openssl (któremu można zaufać) zachowuje się tak samo jak mój program. – emstol

+0

Czy chcesz mieć strukturę RSA * z danego modułu i wykładnika? – doptimusprime

Odpowiedz

-1

Sprawdzanie strony człowiek powinien dać poniżej

# generate private key 
openssl genrsa > key.priv 

# use it to sign something 
echo "Dirk should be given $10" | openssl rsautl -inkey key.priv -sign > msg.sig 

# create a pub key (modules, exp) from the private key 
openssl rsa -pubout <key.priv> key.pub 

# use that to verify the signature. 
openssl rsautl -in msg.sig -verify -inkey key.pub -pubin 

to wszystko przy założeniu, że chcesz klucze surowe. Jeśli dobrze rozumiem twój komentarz poniżej - wydaje się, że nie masz modułów/exp w normalnym formacie. Najpierw musisz spakować go w ASN.1 , aby używać go z użyciem zwykłych narzędzi.

Będziesz musiał napisać kod c/java/etc dla tego. Łatwym sposobem na to jest użycie biblioteki openssl; i wypełnij strukturę RSA *.

+1

Nie widzę, jak rozwiązuje mój problem. Mam tylko dwie liczby: moduł i wykładnik.I chcę utworzyć plik key.pub zawierający klucz publiczny utworzony na podstawie tych liczb. Nic więcej. Zadałem to pytanie dawno temu i nadal nie wiem, jak to zrobić. – emstol

+0

Zakładając, że nie masz modułów i wykładnika nie w normalnym opakowaniu BER - będziesz musiał napisać opakowanie ASN.1, aby je spakować. –

4

Aby wygenerować klucz serwisowy RSA w formacie PEM, który będzie używany z openssl, można wykonać następujące kroki.

Tworzenie ASN1 plik definicji

zmodyfikować następujący szablon na swój moduł i wykładnik

# Start with a SEQUENCE 
asn1=SEQUENCE:pubkeyinfo 

# pubkeyinfo contains an algorithm identifier and the public key wrapped 
# in a BIT STRING 
[pubkeyinfo] 
algorithm=SEQUENCE:rsa_alg 
pubkey=BITWRAP,SEQUENCE:rsapubkey 

# algorithm ID for RSA is just an OID and a NULL 
[rsa_alg] 
algorithm=OID:rsaEncryption 
parameter=NULL 

# Actual public key: modulus and exponent 
[rsapubkey] 
n=INTEGER:0x%%MODULUS%% 

e=INTEGER:0x%%EXPONENT%% 

Zamiast edycji, można również może chcieć skrypt to za pomocą sed

sed -i "s/%%MODULUS%%/$(xxd -ps -c 256 mymodulus.bin)/" def.asn1 

Uwaga: -c 256 powinno być wybrane według długości klucza w bajtach.

Możesz użyć podobnego polecenia dla wykładnika.

wygenerować klucz RSA

Użyj następującego polecenia openssl. To da Ci klucz RSA zakodowany w DER.

openssl asn1parse -genconf def.asn1 -out pubkey.der -noout 

następnie przekształcić go w PEM kluczowego

openssl rsa -in pubkey.der -inform der -pubin -out pubkey.pem 

Sprawdź używając swojego klucza

Można użyć openssl dgst -verify lub openssl rsautl -verify