Come firmare i dati con OpenSSL 0.9.8?

3

Sto costruendo un generatore di licenze per nodejs e attualmente sto testando su Heroku .

Sul mio computer locale che esegue OpenSSL 1.0.1g, sono in grado di testare le mie coppie di chiavi (firma e verifica) in questo modo:

# 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

Ma su Heroku (OpenSSL 0.9.8) ottengo il seguente errore:

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

Ecco come viene generata la mia coppia:

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

Ricordo di avere lo stesso problema su OS X 10.9.2 (macchina locale), ma prima di provare qualsiasi altra cosa, ho aggiornato OpenSSL tramite Homebrew e questo miracolosamente ha iniziato a funzionare.

Suppongo che ci sia un modo più vecchio di firmare dati (sintassi, ecc.) di cui non sono a conoscenza.

Qualcuno può aiutare? Grazie.

    
posta Nikolay Tsenkov 17.04.2014 - 15:37
fonte

1 risposta

2

OpenSSL-0.9.8 è vecchio (dal 2005) e il supporto per le curve ellittiche non è stato completamente aggiunto a quel punto, specialmente per gli strumenti da riga di comando. OpenSSL è principalmente una libreria ; gli strumenti da riga di comando vengono forniti per il test, ma spesso sono in ritardo nella funzionalità. Il modo "normale" di usare OpenSSL è programmaticamente, scrivendo il codice C che chiama la libreria.

MacOS X utilizza ancora OpenSSL-0.9.8 perché le persone OpenSSL hanno rotto la compatibilità binaria per alcune funzioni, impedendo a MacOS di eseguire un aggiornamento trasparente (potrebbe rompere alcune applicazioni). La reazione di Apple era quella di contrassegnare tutte le funzioni di OpenSSL come "deprecate" (ricevi un sacco di avvertimenti se compili il codice C usando le intestazioni OpenSSL fornite dal sistema) e scrivi la loro libreria crittografica.

In ogni caso, dovresti aggiornare, non solo per una migliore funzionalità, ma anche per la sicurezza (ad esempio, alcune implementazioni di algoritmi hanno ottenuto una protezione aggiuntiva rispetto a side channel attack ) e per le prestazioni (ad esempio su un x86 a 64 bit, RSA sarà 5 o 6 volte più veloce con 1.0.1g rispetto a 0.9.8).

    
risposta data 17.04.2014 - 22:00
fonte

Leggi altre domande sui tag