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
risposta
Sì, 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!
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
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. –
La dimensione di uscita di RSA semplice (utilizzando uno schema di riempimento, ma non hybrid encryption) è sempre la dimensione della chiave. Il motivo è che per alcune chiavi pubbliche n
il risultato è un numero intero c
con 0<=c<n
. Ci sono molte introduzioni per RSA, ad es. http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-045j-automata-computability-and-complexity-spring-2011/lecture-notes/MIT6_045JS11_rsa.pdf
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:
Se il rappresentante messaggio m non è compreso tra 0 e n-1, uscita messaggio rappresentante fuori di range e stop.
Sia c = m^e mod n.
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).
Se non sei sicuro, leggi lo standard! Sono spesso molto più leggibili di quanto la gente si aspetti. –
Avete notato che 256 * 8 = 2048? – Perseids
@Persidi. si, ma non sono sicuro che l'output sia sempre 256 byte. è? – hyda
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