Domanda

Ho cercato la maggior parte delle librerie di crittografia Python, ho deciso di utilizzare PyCrypto o M2Crypto.
Ho scartato ezPyCrypto perché supporta MD5 solo per la firma e Keyczar perché non è abbastanza maturo.

Quindi ho letto che RSA è vulnerabile a diversi attacchi se il testo da crittografare (o l'hash della firma) non è correttamente riempito.
Cosa significa?
Né PyCrypto o M2Crypto menzionano nulla a riguardo e Google non ha trovato nulla di rilevante. Queste librerie aggiungono automaticamente il paddign? Come si può dire?

Se la risposta a quanto sopra è no, che cosa è considerata un'imbottitura corretta?

È stato utile?

Soluzione

PyCrypto non aggiunge l'imbottitura menzionata.
M2Crypto invece lo fa.

M2Crypto è costruito su openSSL, supporta principalmente tutto ciò di cui hai bisogno, è ancora aggiornato e aggiornato mentre PyCrypto emette diversi avvisi di deprecazione.

Altri suggerimenti

Uno dei motivi per il riempimento casuale potrebbe essere quello " dal libro " RSA con esponente basso (diciamo 3) può essere decifrato semplicemente se lo stesso identico messaggio viene inviato a più persone (tre).

È quindi meglio assicurarsi di non inviare lo stesso messaggio esatto applicando in precedenza un tipo di trasformazione casuale (ma inversibile) al messaggio.

Forse è di questo che si tratta imbottitura!?

EDIT: Ho cercato su Wikipedia. quello di cui stavo parlando si chiama attacco di Hastad.

Di recente ho combattuto per capire la crittografia ... questo articolo mi ha aiutato molto a spiegare cosa fosse il riempimento:

http://www.di-mgt.com.au/cryptopad.html

(il metodo 1 mi è sembrato il più semplice da implementare)

Posso condividere alcuni frammenti di codice, se necessario.

P.S. Questo file è stato utile anche per aiutare a creare chiavi sicure (google per esso) PBKDF2.py - Derivazione chiave basata su password PKCS # 5 v2.0

Non del tutto sicuro, ma se aggiungi un componente casuale al tuo messaggio RSA impedisce gli attacchi del dizionario

In primo luogo, dovresti usare AES, poiché è lo standard di fatto.

AES crittografa i byte in blocchi di 16 byte. Ovviamente questo funziona benissimo per qualsiasi grande dato. Ma l'ultimo bit, ovviamente forse inferiore a 16 byte.

Per l'ultimo blocco, dovrai riempirlo, e il riempimento tipico viene eseguito tramite PCKS7, che è piuttosto semplice.

Supponiamo che tu abbia una stringa: " icecream " come ultimo blocco.

" icecream " è di 8 byte, quindi sono necessari altri 8 byte per creare un blocco

Quindi quello che fai è semplicemente aggiungere il personaggio 8 (non '8') 8 volte

"icecream\x08\x08\x08\x08\x08\x08\x08\x08"

Sarebbe la tua stringa risultante. Ora vai avanti e crittografa i dati.

Ricorda che durante la decodifica, dovrai catturare quest'ultimo blocco e rimuovere il padding prima di usarlo.

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