it-swarm.dev

RSA massimo byte da crittografare, rispetto ad AES in termini di sicurezza?

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

30
pandoragami

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 piu.

Quando "crittografate i dati con RSA", in pratica, state effettivamente crittografando una chiave simmetrica casuale con RSA, quindi crittografate i dati con un algoritmo di crittografia simmetrica, che non ha dimensioni limitate. Funziona così in SSL , S/MIME , OpenPGP ... Regolarmente, alcuni la gente suggerisce di fare "solo RSA" suddividendo il messaggio di input in blocchi di 245 byte e crittografando ciascuno di essi più o meno separatamente. Questa è una cattiva idea perché:

  • Possono esserci notevoli debolezze nel modo in cui i dati vengono suddivisi e quindi ricostruiti. Non esiste uno standard ben studiato per questo.
  • Ogni blocco, quando crittografato, cresce un po '(con una chiave di 2048 bit, i 245 byte di dati diventano 256 byte); durante l'elaborazione di grandi quantità di dati, l'overhead delle dimensioni diventa significativo.
  • La decrittazione di un messaggio di grandi dimensioni può diventare intollerabilmente costosa.

Quando si crittografano i dati con un codice a blocchi simmetrico, che utilizza blocchi di n bit, alcuni problemi di sicurezza iniziano a comparire quando la quantità di dati crittografati con una singola chiave si avvicina a 2n/2 blocchi, ovvero n * 2n/2 bit. Con AES, n = 128 (AES-128, AES-192 e AES-256 usano tutti i 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 blocchi più comuni (a quel tempo) a 64 bit: in modo che la dimensione dei dati sia praticamente illimitata.

61
Thomas Pornin

Confrontare i due direttamente è un po 'come paragonare un trattore a un treno: sono entrambi veicoli ma hanno funzione e costruzione completamente diverse.

RSA è un codice asimmetrico. È ideale per lo scambio sicuro di messaggi attraverso una rete non attendibile, poiché la chiave pubblica può essere conosciuta da tutti: un messaggio crittografato con la chiave pubblica può essere decrittografato solo dalla chiave privata. Di conseguenza, se due parti conoscono le chiavi pubbliche dell'altra, possono scambiarsi messaggi in modo sicuro. Ciò significa che nessuna informazione segreta deve essere trasmessa - fintanto che autenticità e integrità sono mantenuti sicuri. Per fortuna, RSA fornisce un metodo per generare firme sui dati, che aiuta a dimostrare che è autentico. Dato un messaggio firmato da una chiave privata, è possibile verificare quella firma utilizzando la chiave pubblica corrispondente.

Come regola generale, è possibile crittografare solo i dati della lunghezza della chiave RSA. Quindi, se hai una chiave RSA a 4096 bit, puoi crittografare solo i messaggi lunghi fino a 4096 bit. Non solo, ma è incredibilmente lento. RSA non è progettato come un codice di trasporto dati ad alta velocità.

AES è un codice a blocchi simmetrico ed è incredibilmente veloce. Il testo in chiaro è suddiviso in blocchi chiamati blocchi e ogni blocco è crittografato in una catena. Esistono diversi modi per farlo, ma uno comune è chiamato Cipher Block Chaining, o CBC in breve. Ciò consente dimensioni dei messaggi teoricamente infinite. Tuttavia, le cifre simmetriche come AES richiedono che una chiave segreta venga scambiata per prima. 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 trovare è che entrambi gli schemi sono implementati insieme, in modo che RSA sia usato per scambiare la chiave con un codice a blocchi come AES:

  1. Alice e Bob conoscono le chiavi pubbliche dell'altra RSA. 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 crittografa quella chiave 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 usano per crittografare i messaggi usando una cifra simmetrica, come AES.

Questo 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 di chiavi di sessione può essere effettuato in modo sicuro, ovvero autenticità e 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 diversi lavori. attualmente supponiamo che le chiavi AES a 128 bit siano sicure e che le chiavi RSA a 2048 bit siano sicure, ma ciò dipende interamente dai requisiti di sicurezza individuali. L'uso delle chiavi AES a 256 bit e RSA a 4096 bit dovrebbe essere più che sufficiente per il prossimo decennio, supponendo che l'implementazione sia corretta.

Si noti che tutto ciò è una semplificazione, in quanto vi sono molti avvertimenti e dettagli, e la descrizione e lo scambio di RSA come "crittografia" non è strettamente corretto, ma tutto sommato dovrebbe essere una panoramica di alto livello ragionevole del modo in cui il due tipi di crittografia.

41
Polynomial

Un motivo per cui normalmente non si vede 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.

3
Adam Caudill

Secondo il pacchetto crittografico GoLang "Il messaggio non deve superare la lunghezza del modulo pubblico meno 11 byte". http://golang.org/pkg/crypto/rsa/#EncryptPKCS1v15

2
Andrew Watson

AES è un algoritmo a chiave simmetrica. RSA è asimmetrico. Mentre entrambi sono per la crittografia, vengono spesso utilizzati in diversi modi, quindi è difficile confrontarli in termini di efficienza o forza, poiché lo scopo di utilizzare l'uno rispetto all'altro sarebbe probabilmente un fattore determinante in quale uno o una classe di viene utilizzata la crittografia.

Puoi iniziare con questa altra domanda: Crittografia - dovrei usare RSA o AES?

2
Eric G