2012-07-18 20 views
5

Quiero verificar una firma RSA. Tengo datos para verificar, la firma y una clave pública en forma de módulo y exponente. Me gustaría hacer la verificación usando openssl. ¿Es posible? Sé que puedo usar openssl rsautl -verify -in sig -inkey key.pem pero no sé cómo (usando openssl) crear una clave pública teniendo solo su módulo y exponente.Crear una clave pública rsa a partir de su módulo y exponente

¿Quizás otras ideas de cómo verificar esta firma (excepto escribir algunos programas)?

+1

" ... excepto escribir algunos programas ... "bueno, si lees las [preguntas frecuentes] (http://stackoverflow.com/faq) sabrías que es para qué es stackoverflow. –

+0

GregS: No es así :) Tengo un programa que lo hace pero mi cliente dice que no funciona correctamente. Entonces, para demostrarle que está equivocado, quiero mostrar que, por ejemplo, openssl (en lo que puede confiar) se comporta de la misma manera que mi programa. – emstol

+0

¿Desea estructura RSA * a partir de un módulo y exponente dado? – doptimusprime

Respuesta

-1

Comprobación de las páginas del manual le debe dar a continuación

# 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 

todo esto asumiendo que usted quiere llaves en bruto. Si entiendo tu comentario a la derecha, parece que no tienes módulos/exp en un formato normal. Por lo tanto, primero deberá empaquetarlo en ASN.1 para usarlo con las herramientas habituales.

Tendrá que escribir un código c/java/etc para esto. Una manera fácil de hacerlo es usar la biblioteca openssl; y complete la estructura RSA *.

+1

No veo cómo soluciona mi problema. Tengo solo dos números: un módulo y un exponente.Y quiero crear un archivo key.pub que contenga una clave pública creada en base a esos números. Nada más. Hice esta pregunta hace mucho tiempo y todavía no sé cómo hacer eso. – emstol

+0

Suponiendo que no tiene los módulos y el exponente en el embalaje BER normal, tendrá que escribir algún paquete ASN.1 para empaquetarlo de esta forma. –

4

Para generar una clave pbulic RSA en formato PEM para su uso con openssl, puede seguir estos pasos.

Crear un archivo de definición de ASN1

modificar la siguiente plantilla para incluir su módulo y exponente

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

En lugar de edición, es posible que también desee guión esta usando sed

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

Tenga en cuenta que el -c 256 debe ser elegido de acuerdo con su longitud de clave en bytes.

Puede usar un comando similar para el exponente.

generar su clave RSA

Utilice el siguiente comando openssl. Esto le dará una clave RSA codificada DER.

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

luego convertirlo en un PEM clave

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

Verificar con su clave

Puede utilizar cualquiera de openssl dgst -verify o openssl rsautl -verify

Cuestiones relacionadas