¿Cómo firmar datos con OpenSSL 0.9.8?

3

Estoy creando un generador de licencias para nodejs y actualmente estoy probando en Heroku .

En mi máquina local que ejecuta OpenSSL 1.0.1g, puedo probar mis pares de claves (firmar y verificar) de esta manera:

# data.txt's content (the content of the string literal): "Tsenkov"
openssl dgst -sha1 -sign private.pem data.txt > license.txt
openssl dgst -verify public.pem -signature license.txt data.txt

Pero en Heroku (OpenSSL 0.9.8) me aparece el siguiente error:

Error Signing Data
27:error:0606B06E:digital envelope routines:EVP_SignFinal:wrong public key type:p_sign.c:99:

Así es como se genera mi par:

openssl ecparam -genkey -name secp521r1 -noout -out private.pem
openssl ec -in private.pem -pubout -outform PEM -out public.pem

Recuerdo que tuve el mismo problema en OS X 10.9.2 (máquina local), pero antes de intentar cualquier otra cosa, actualicé OpenSSL a través de Homebrew y milagrosamente empecé a funcionar.

Supongo que hay una forma más antigua de firmar datos (sintaxis, etc.) que no conozco.

¿Puede alguien ayudar? Gracias.

    
pregunta Nikolay Tsenkov 17.04.2014 - 15:37
fuente

1 respuesta

2

OpenSSL-0.9.8 es antiguo (desde 2005) y el soporte para curvas elípticas no se agregó completamente en ese momento, especialmente para las herramientas de línea de comandos. OpenSSL es principalmente una biblioteca ; Las herramientas de la línea de comandos se proporcionan para las pruebas, pero a menudo tienen una funcionalidad diferente. La forma "normal" de usar OpenSSL es mediante programación, escribiendo el código C que llama a la biblioteca.

MacOS X todavía usa OpenSSL-0.9.8 porque la gente de OpenSSL rompió la compatibilidad binaria para algunas funciones, lo que evita que MacOS realice una actualización transparente (podría romper algunas aplicaciones). La reacción de Apple fue marcar todas las funciones de OpenSSL como "obsoletas" (obtienes un montón de advertencias si compilas el código C usando los encabezados de OpenSSL provistos por el sistema) y escribes su propia biblioteca criptográfica.

En cualquier caso, debería querer actualizar, no solo para una mejor funcionalidad, sino también para la seguridad (por ejemplo, algunas implementaciones de algoritmos obtuvieron algo de protección adicional con respecto a ataques de canal lateral ) y para rendimiento (por ejemplo, en un x86 de 64 bits, el RSA será 5 o 6 veces más rápido con 1.0.1g que con 0.9.8).

    
respondido por el Thomas Pornin 17.04.2014 - 22:00
fuente

Lea otras preguntas en las etiquetas