Domanda:
Numero massimo di byte RSA da crittografare, confronto con AES in termini di sicurezza?
pandoragami
2013-03-30 10:23:20 UTC
view on stackexchange narkive permalink

Qual è il numero massimo di byte per crittografare un messaggio di testo normale utilizzando RSA che sia ragionevolmente sicuro e anche efficiente e AES sarebbe migliore per la stessa dimensione in byte? A proposito, la crittografia non deve essere pubblica, mi chiedo solo se AES è altrettanto buono su un breve messaggio come su un grande documento. Fondamentalmente il messaggio o il documento verrebbero inviati crittografati ma la chiave non verrebbe mai resa pubblica. Immagino che ciò vanificherebbe anche lo scopo di RSA, ma ho letto alcune volte online che RSA è buono per i messaggi brevi e AES è buono per quelli lunghi.

Cinque risposte:
Thomas Pornin
2013-03-30 18:50:18 UTC
view on stackexchange narkive permalink

RSA, come definito da PKCS # 1, crittografa "messaggi" di dimensioni limitate. Con il "padding v1.5" comunemente usato e una chiave RSA a 2048 bit, la dimensione massima dei dati che possono essere crittografati con RSA è di 245 byte. Non più.

Quando "crittografa i dati con RSA", in pratica, stai effettivamente crittografando una chiave simmetrica casuale con RSA, quindi crittografa i dati con un algoritmo di crittografia simmetrico, che non ha dimensioni limitate . Ecco come funziona in SSL, S / MIME, OpenPGP... Di solito, alcune persone suggeriscono di fare "solo RSA" dividendo il inserire il messaggio in blocchi da 245 byte e crittografare ciascuno di essi più o meno separatamente. Questa è una cattiva idea perché:

  • Ci possono essere sostanziali debolezze nel modo in cui i dati vengono suddivisi e poi ricostruiti. Non esiste uno standard ben studiato per questo.
  • Ogni blocco, quando crittografato, cresce un po '(con una chiave a 2048 bit, i 245 byte di dati diventano 256 byte); quando si elaborano grandi quantità di dati, il sovraccarico delle dimensioni diventa significativo.
  • La decrittografia di un messaggio di grandi dimensioni può diventare intollerabilmente costosa.

Quando si crittografano i dati con un cifratura a blocchi simmetrica, che utilizza blocchi di n bit, alcuni problemi di sicurezza iniziano ad apparire quando la quantità di dati crittografati con una singola chiave si avvicina a 2 n / 2 sup > blocchi, cioè n*2n/2 bit. Con AES, n = 128 (AES-128, AES-192 e AES-256 utilizzano tutti blocchi a 128 bit). Ciò significa un limite di oltre 250 milioni di terabyte, che è sufficientemente grande da non costituire un problema. Questo è esattamente il motivo per cui AES è stato definito con blocchi a 128 bit, invece dei più comuni (a quel tempo) blocchi a 64 bit: quindi la dimensione dei dati è praticamente illimitata.

"Possono esserci sostanziali debolezze nel modo in cui i dati vengono suddivisi e poi ricostruiti".-Puoi approfondire per favore?Un esempio sarebbe buono.
Non userei n * 2 ^ (n / 2) bit in nessun tipo di raccomandazione.Una volta raggiunto quel numero di bit, la probabilità di una collisione aumenterà rapidamente e la probabilità di una collisione supererà il 50% quando raggiungerai 2 * n * 2 ^ (n / 2) bit.Per mantenere trascurabile la probabilità di una collisione, consiglio di crittografare non più di n * 2 ^ (n / 4) bit con la stessa chiave.Nel caso di AES funziona fino a 64 GB.
Polynomial
2013-03-30 15:25:54 UTC
view on stackexchange narkive permalink

Confrontare i due direttamente è un po 'come confrontare un trattore con un treno: sono entrambi veicoli ma hanno una funzione e una struttura completamente diverse.

RSA è un codice asimmetrico. È ideale per lo scambio sicuro di messaggi su una rete non affidabile, perché la chiave pubblica può essere conosciuta da tutti: un messaggio crittografato con la chiave pubblica può essere decrittografato solo dalla chiave privata. Pertanto, se due parti conoscono le chiavi pubbliche dell'altra, possono scambiarsi messaggi in modo sicuro. Ciò significa che non è necessario trasmettere alcuna informazione segreta, a condizione che l ' autenticità e l' integrità siano mantenute sei al sicuro. Per fortuna, RSA fornisce un metodo per generare firme sui dati, che aiutano a dimostrare che sono autentici. Dato un messaggio firmato da una chiave privata, è possibile verificare quella firma utilizzando la chiave pubblica corrispondente.

Come regola pratica, puoi crittografare solo dati grandi quanto la lunghezza della chiave RSA. Quindi, se hai una chiave RSA a 4096 bit, puoi crittografare solo messaggi fino a 4096 bit. Non solo, ma è incredibilmente lento. RSA non è progettato come un cifrario di trasporto dati a velocità piena.

AES è un cifrario a blocchi simmetrico ed è incredibilmente veloce. Il testo in chiaro è suddiviso in blocchi chiamati blocchi e ogni blocco è crittografato in una catena. Ci sono diversi modi per farlo, ma uno comune è chiamato Cipher Block Chaining, o CBC in breve. Ciò consente dimensioni dei messaggi teoricamente infinite. Tuttavia, le cifrature simmetriche come AES richiedono prima lo scambio di una chiave segreta. A differenza di RSA, la chiave condivisa deve rimanere sconosciuta agli aggressori, quindi è necessario fornire autenticità, integrità e segretezza. È difficile da fare direttamente.

Quello che tenderai a scoprire è che entrambi gli schemi sono implementati insieme, in modo tale che RSA venga utilizzato per scambiare la chiave con un cifrario a blocchi come AES :

  1. Alice e Bob conoscono le chiavi pubbliche RSA dell'altro. In generale, questi vengono scambiati fuori banda, ad es. tramite un certificato distribuito come parte del sistema operativo.
  2. Alice sceglie una chiave casuale a 256 bit per AES e la crittografa con la chiave pubblica di Bob. Firma questo messaggio con la sua chiave privata e lo invia a Bob.
  3. Bob utilizza la chiave pubblica di Alice per verificare la firma. Quindi utilizza la sua chiave privata per decrittografare il messaggio.
  4. Eve (un intercettatore) ha visto il messaggio crittografato, ma non può decrittografarlo senza conoscere la chiave privata di Bob. Inoltre, non può modificare il messaggio, poiché renderebbe la firma errata. Non può rigenerare una firma valida senza conoscere la chiave privata di Alice.
  5. Alice e Bob ora condividono una chiave segreta a 256 bit e la utilizzano per crittografare i messaggi utilizzando una crittografia simmetrica, come AES.

Ciò soddisfa alcuni requisiti:

  • La conversazione può avvenire su una rete non attendibile senza che un utente malintenzionato sia in grado di leggere i messaggi.
  • Lo scambio della chiave di sessione può essere effettuato in modo sicuro, ovvero l'autenticità e l'integrità vengono mantenute sulla chiave.
  • Le prestazioni di crittografia e decrittografia per i dati di conversazione effettivi sono molto buone.

In termini di livello di sicurezza, non ha molto senso confrontare RSA e AES. Fanno lavori diversi. attualmente presumiamo che le chiavi AES a 128 bit siano sicure e che le chiavi RSA a 2048 bit siano sicure, ma questo dipende interamente dai requisiti di sicurezza individuali. L'utilizzo di chiavi AES a 256 bit e RSA a 4096 bit dovrebbe essere più che sufficiente per il prossimo decennio, supponendo che l'implementazione sia valida.

Nota che tutto ciò è una semplificazione, poiché ci sono molti avvertimenti e dettagli coinvolti, e descrivere lo scambio RSA come "crittografia" non è strettamente corretto, ma tutto sommato dovrebbe essere una ragionevole panoramica di alto livello del modo in cui funzionano i due tipi di crittografia.

Questa è la panoramica più chiara del modo in cui i due sistemi funzionano tra loro per un principiante che ho trovato, grazie mille. Ho usato queste informazioni insieme a http://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/ per implementare la crittografia del token sicura (e sicura come Android Keystore) nel mio app.
Panoramica molto bella di come funzionano i crittosistemi ibridi.Tuttavia, vorrei fare i pignoli riguardo alla seguente riga: "se hai una chiave RSA a 4096 bit, puoi crittografare solo i messaggi fino a 4096 bit."Questo non è tecnicamente vero: sarebbe inferiore a 4096 bit e l'importo esatto dipenderebbe dallo schema di riempimento in uso.Capisco che potresti aver tentato di fare un'affermazione generale qui, ma la formulazione attuale a mio parere sembra implicare "dimensione della chiave = limite di lunghezza del messaggio".
Adam Caudill
2013-03-30 13:53:54 UTC
view on stackexchange narkive permalink

Uno dei motivi per cui normalmente non vedi RSA utilizzato per grandi quantità di dati è a causa delle prestazioni: sia RSA che AES sono sicuri per grandi e piccole quantità di dati (se implementati correttamente), ma RSA è molto più lento.

Nei casi in cui la crittografia a chiave pubblica ha senso, ma sono necessarie maggiori prestazioni, è possibile implementare un sistema ibrido che sfrutti entrambi.

Andrew Watson
2014-11-20 09:01:50 UTC
view on stackexchange narkive permalink

Secondo il pacchetto crypto GoLang "Il messaggio non deve essere più lungo della lunghezza del modulo pubblico meno 11 byte". http://golang.org/pkg/crypto/rsa/#EncryptPKCS1v15

Eric G
2013-03-30 10:59:17 UTC
view on stackexchange narkive permalink

AES è un algoritmo a chiave simmetrica. RSA è asimmetrico. Sebbene entrambi siano per la crittografia, sono spesso usati in modi diversi, quindi è difficile confrontarli in termini di efficienza o forza, poiché lo scopo dell'uso dell'uno rispetto all'altro sarebbe probabilmente un fattore determinante maggiore in quale uno o classe di viene utilizzata la crittografia.

Potresti iniziare con quest'altra domanda: Crittografia: dovrei usare RSA o AES?

Ho già visto quel thread e questo è il motivo per cui ho posto questa domanda. Suppongo che i diversi usi di RSA e AES rendano la mia domanda inutile poiché confrontare i due sarebbe come confrontare due cose non correlate.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...