2014-09-06 24 views
9

Definizione delle dimensioni di uscita della crittografia RSA quando si utilizza la chiave a 2048 bit (utilizzando pkcs1padding). Sono sempre 256 byte indipendenti dalla dimensione dell'input? come posso calcolarlo per altre dimensioni di chiave?Dimensione uscita crittografia RSA

+3

Avete notato che 256 * 8 = 2048? – Perseids

+2

@Persidi. si, ma non sono sicuro che l'output sia sempre 256 byte. è? – hyda

+1

Da ['RSA_size'] (https://www.openssl.org/docs/man1.1.0/crypto/RSA_size.html): *" RSA_size() restituisce la dimensione del modulo RSA in byte. Può essere usata per determinare quanta memoria deve essere allocata per un valore crittografato RSA. "* (La dimensione del messaggio dipende dalla dimensione del modulo). – jww

risposta

9

, lo è.

Il dimensioni in uscitadovrebbe è sempre uguale la dimensione della Modulus (parte della chiave), quindi:

2048 bit Modulus -> 2048 bit output 
1024 bit Modulus -> 1024 bit output 
... 

Se non lo è, esistono numerosi attacchi contro RSA, vedi here per informazioni di base a riguardo.

in modo da garantire che il uscita è 2048 bit anche quando l'ingresso per crittografare è, diciamo 7,
un'imbottitura deve sempre essere applicato!

+0

La situazione è un po 'più complicata. Essendo un po 'pedante potrei obiettare che se il modulo è piccolo per la sua dimensione di bit (diciamo che inizia con i bit 100), allora hai una buona possibilità di ottenere un testo cifrato che è in realtà un po' più corto del modulo. Ma più al punto, non grandi valori di input, ma uno schema di padding audio rende RSA sicuro. Ad esempio il [attacco di John Hastad] (http://www.nada.kth.se/~johanh/rsalowexponent.ps) funziona con qualsiasi schema di riempimento deterministico se si utilizza un piccolo esponente (ad esempio 3). – Perseids

+0

La dimensione risultante non è il risultato del riempimento, è il risultato dell'applicazione della funzione I2OSP al risultato dell'esponenziazione modulare. Dovresti anche spiegare che la dimensione del modulo è uguale alla dimensione della chiave. –

3

Sì, è sempre uguale alla dimensione della chiave (in byte, 2048/8 = 256).

Come Perseidi correttamente spiegato, l'uscita (come numero intero) di RSAEP (RSA encryption primitive) è compresa fra 0 e n:

  1. Se il rappresentante messaggio m non è compreso tra 0 e n-1, uscita messaggio rappresentante fuori di range e stop.

  2. Sia c = m^e mod n.

  3. Uscita c.

Naturalmente, c è un numero. Quindi devi convertirlo in byte perché sia ​​utilizzabile.

Hai menzionato PKCS1Padding, che fa parte dello schema di crittografia RSAES-PKCS1-V1_5-ENCRYPT. Troverete che la codifica di c è specificato in là:

...

Fase 4: Convertire il rappresentante testo cifrato c per un testo cifrato C di lunghezza k ottetti: C = I2OSP (c, k)

...

dove k è la dimensione del modulo in ottetti (byte).

Quindi sì, la risposta è sempre k, la dimensione del modulo, che a sua volta è la dimensione della chiave, quando rappresentato come byte.

Si noti che l'imbottitura OAEP utilizza la stessa tecnica, quindi la risposta è corretta anche per OAEP (e per la maggior parte degli schemi meno noti).

+1

Se non sei sicuro, leggi lo standard! Sono spesso molto più leggibili di quanto la gente si aspetti. –