2012-07-18 16 views
5

Voglio verificare una firma RSA. Ho dati per verificare, la firma e una chiave pubblica in una forma di modulo ed esponente. Mi piacerebbe fare la verifica usando openssl. È possibile? So che posso usare openssl rsautl -verify -in sig -inkey key.pem ma non so come (usando openssl) per creare una chiave pubblica con il suo modulo ed esponente.Creazione di una chiave pubblica rsa dal suo modulo ed esponente

Forse altre idee su come controllare questa firma (tranne la scrittura di alcuni programmi)?

+1

" ... tranne un po 'di scrittura programmi ... "beh se leggi le [FAQ] (http://stackoverflow.com/faq) sapresti che è così cosa è lo stackoverflow. –

+0

Greg: Non è così :) Ho un programma che lo fa ma il mio cliente afferma che non funziona correttamente. Quindi, per dimostrargli che ha torto, voglio dimostrare che ad esempio openssl (di cui può fidarsi) si comporta allo stesso modo del mio programma. – emstol

+0

Vuoi la struttura RSA * da un dato modulo ed esponente? – doptimusprime

risposta

-1

Controllo delle pagine man dovrebbe darvi seguito

# 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 

tutto questo supponendo che si desidera chiavi prime. Se capisco il tuo commento in basso a destra - sembra che tu non abbia moduli/exp in un formato normale. Quindi per prima cosa devi impacchettarlo in ASN.1 per usarlo con i soliti strumenti.

Dovrai scrivere del codice c/java/etc per questo. Un modo semplice per farlo è usare la libreria openssl; e compilare la struttura RSA *.

+1

Non vedo come risolve il mio problema. Ho solo due numeri: un modulo e un esponente.E voglio creare un file key.pub contenente una chiave pubblica creata in base a quei numeri. Nient'altro. Ho fatto questa domanda molto tempo fa e ancora non so come farlo. – emstol

+0

Supponendo che i moduli e l'esponente non siano nella normale confezione del BER, sarà necessario scrivere un pacchetto ASN.1 per impacchettarlo. –

4

Per generare una chiave pbulic RSA in formato PEM da utilizzare con openssl, è possibile seguire questi passaggi.

Creare un file di definizione ASN1

Modificare il seguente modello di includere il vostro modulo e esponente

# 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%% 

Invece di modifica, è anche possibile che si desideri questo script utilizzando sed

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

Nota il -c 256 deve essere scelto in base alla lunghezza della chiave in byte.

È possibile utilizzare un comando simile per l'esponente.

generare la vostra chiave RSA

Utilizzare il seguente comando openssl. Questo ti darà una chiave RSA codificata DER.

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

quindi convertirlo in un PEM chiave

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

Verifica utilizzando la chiave

È possibile utilizzare uno o openssl dgst -verifyopenssl rsautl -verify

Problemi correlati