Domanda

Ho bisogno di firmare digitalmente un testo in Python utilizzando una chiave privata memorizzata in un file .pem. Sembra che M2Crypto è il modo migliore per farlo che in questi giorni, ed è quello che sto usando. Credo di ottenere la maggior parte di esso, ma sono confuso su come configurare imbottitura. Per essere precisi, ho bisogno di verificare la firma in un applicazione per iPhone, usando uno schema di imbottitura chiamato kSecPaddingPKCS1SHA1 e descritto in questo modo:

  

Dati da firmare è un hash SHA1.   ASN.1 Imbottitura standard sarà fatto, così come PKCS1 imbottitura dell'operazione RSA sottostante.

Non essendo un esperto di crittografia, ho solo un'idea confusa ciò che questo significa. Ho provato a guardare alcune delle RFC, ma li ho trovati impenetrabile. Vedo che i metodi di crittografia / decrittografia di oggetti RSA prendono tipi di imbottitura, ma non vedo nulla di simile correlate a verifica della firma.

Qualsiasi aiuto, in particolare con il codice, sarà apprezzato.

(In un certo senso questo è il contrario di questa domanda .)


Ok, la risposta data sotto è corretta AFAICT. Il seguente codice genera una firma per text che convalida su iPhone utilizzando lo schema di kSecPaddingPKCS1SHA1 imbottitura.

from M2Crypto import EVP
privkey = EVP.load_key("privkey.pem")
privkey.sign_init()
privkey.sign_update(text)
signature = privkey.sign_final()

(Spiace editorialize, ma posso solo dire che gli hacker crittografici sono alcuni degli scrittori di documentazione lousiest nell'universo?)

È stato utile?

Soluzione

Per quanto ne sappia M2Crypto aggiunge imbottitura in cui è richiesto.

PKCS1 imbottitura è l'impostazione predefinita.

Ma, (ancora una volta solo per quanto ne so), le firme non hanno imbottitura, imbottitura è aggiunto solo ai dati crittografati per impedire un possibile attacco.
EDIT: caf utente, in un commento dice che un imbottitura è essnetial ad un buon firma. Sto ancora raccomandando si prova con il comportamento di default M2Crypto, potrebbe aggiungerlo.

Su documenti generati del M2Crypto si può vedere che la {private pubbliche,} _ {} cifrare, decifrare i metodi hanno un'opzione di imbottitura, che è PKCS1 per impostazione predefinita, mentre il segno menthod ha nessuno.

IMO basta dare un colpo con le M2Crypto predefinite params, che probabilmente funzionerà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top