RSA: è sicuro andare senza padding se la lunghezza del messaggio == lunghezza della chiave?

0

Ho letto sull'algoritmo e ho visto che una serie di attacchi contro RSA da manuale si basano sulla crittografia dei messaggi più brevi e sulla verifica del risultato. Se il padding fa quello che penso faccia (espandi il messaggio per avere la stessa lunghezza della chiave), è sicuro di rinunciare al padding se il messaggio è già garantito dalla lunghezza della chiave?

Per quanto ne so alcuni schemi di padding introducono caratteri casuali, quindi il mio istinto mi dice che è comunque necessario prevenire gli attacchi con testo normale.

Devo andare per una dimensione di messaggio più piccola e aggiungere padding? O è sicuro usare m == n e nessun padding.

    
posta Lukeyb 08.06.2017 - 10:24
fonte

2 risposte

7

Quando crittografate un messaggio utilizzando RSA, è necessario il riempimento per garantire diverse proprietà:

  1. La crittografia dello stesso messaggio due volte deve generare output diversi, per evitare un attacco di testo normale scelto. Questo è il motivo per cui i paddings sono randomizzati.
  2. RSA conserva alcune strutture, il padding dovrebbe eliminare quella struttura.
  3. Quando un utente malintenzionato manipola il testo cifrato, vuoi rifiutare quel falso in un modo che impedisce all'hacker di imparare qualcosa.

    Molti paddati più vecchi, come PKCS # 1v1.5, non riescono a garantire questo, e quindi sono rotti per molte applicazioni. Dovresti utilizzare il riempimento OAEP.

In alternativa puoi semplicemente crittografare un numero casuale della stessa dimensione del modulo con RSA e usare il suo hash come chiave per la crittografia simmetrica (ad esempio AES-GCM). Questo è noto come RSA-KEM e non ha bisogno di alcun padding. Produce testi cifrati più grandi ma è più facile da implementare.

    
risposta data 08.06.2017 - 10:42
fonte
0

Poiché CodesInChaos ha menzionato il padding distrugge la proprietà omomorfica di RSA, che riceve due (anche molto lunghi) messaggi m1, m2 e i corrispondenti ciphertexts c1, c2 quindi puoi creare un terzo ciphertext valido c '= c1 * c2.

Senza padding o altre precauzioni, il ricevitore non è in grado di dire se hai intenzione di inviare m1, m2 o m1 * m2.

    
risposta data 08.06.2017 - 11:59
fonte

Leggi altre domande sui tag