RSA numero massimo di byte da crittografare, confronto con AES in termini di sicurezza?

21

Qual è il numero massimo di byte per crittografare un messaggio in chiaro usando RSA che sia ragionevolmente sicuro e anche efficiente e che AES sia migliore per le stesse dimensioni in byte? A proposito, la crittografia non deve essere pubblica, mi chiedo solo se AES sia altrettanto valido su un breve messaggio come su un documento di grandi dimensioni. Fondamentalmente il messaggio o il documento sarebbero stati inviati crittografati, ma la chiave non sarebbe mai stata resa pubblica. Immagino che anche sconfiggere lo scopo di RSA, ma ho letto un paio di volte online che RSA è buono per i messaggi brevi e AES è buono per quelli lunghi.

    
posta pandoragami 30.03.2013 - 06:23
fonte

5 risposte

42

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

Quando "crittografate i dati con RSA", in pratica, in realtà state crittografando una chiave simmetrica casuale con RSA e quindi crittografate i dati con un algoritmo di crittografia simmetrica, che non è limitato nelle dimensioni. Funziona in SSL , S / MIME , OpenPGP ... Regolarmente, alcune persone suggeriscono di fare" solo RSA "dividendo il immettere un messaggio in blocchi da 245 byte e crittografarli singolarmente o separatamente. Questa è una cattiva idea perché:

  • Possono esserci dei punti deboli sostanziali nel modo in cui i dati vengono suddivisi e quindi ricostruiti. Non esiste uno standard ben studiato per questo.
  • Ogni blocco, una volta crittografato, cresce un po '(con una chiave da 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 decrittografia di un messaggio di grandi dimensioni può diventare intollerabilmente costosa.

Quando si crittografa i dati con un cifrario a blocchi simmetrico, che utilizza blocchi di bit n , alcuni problemi di sicurezza iniziano ad apparire quando la quantità di dati crittografati con una singola chiave si avvicina a 2 < sup> n / 2 blocchi, cioè n * 2 n / 2 bit. Con AES, n = 128 (AES-128, AES-192 e AES-256 utilizzano tutti i blocchi a 128 bit). Questo significa un limite di oltre 250 milioni di terabyte, che è sufficientemente grande per non essere un problema. Questo è esattamente il motivo per cui AES è stato definito con blocchi a 128 bit, anziché i blocchi a 64 bit più comuni (in quel momento): così la dimensione dei dati è praticamente illimitata.

    
risposta data 30.03.2013 - 14:50
fonte
34

Confrontando i due direttamente è un po 'come paragonare un trattore a un treno - sono entrambi veicoli ma hanno funzioni e costruzioni completamente diverse.

RSA è un codice asimmetrico. È ideale per lo scambio sicuro di messaggi su una rete non sicura, perché la chiave pubblica può essere conosciuta da tutti: un messaggio crittografato con la chiave pubblica può essere decifrato solo dalla chiave privata. Pertanto, se due parti conoscono le rispettive chiavi pubbliche, possono scambiare messaggi in modo sicuro. Ciò significa che non devono essere trasmesse informazioni segrete - purché autenticità e integrità vengano mantenuti al sicuro. Fortunatamente, RSA fornisce un metodo per generare firme sui dati, che aiutano a dimostrare che è autentico. Dato un messaggio firmato da una chiave privata, è possibile verificare tale firma utilizzando la chiave pubblica corrispondente.

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

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. 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, i cifrari simmetrici come AES richiedono prima una chiave segreta da scambiare. 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 gli schemi entrambi sono implementati insieme, in modo tale che RSA sia usato per scambiare la chiave per un codice a blocchi come AES:

  1. Alice e Bob conoscono le rispettive chiavi pubbliche RSA. In generale questi sono scambiati fuori banda, ad es. tramite un certificato distribuito come parte del tuo 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 usa la sua chiave privata per decodificare il messaggio.
  4. Eve (un intercettatore) ha visto il messaggio crittografato, ma non può decodificarlo 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 utilizzando un codice simmetrico, come AES.

Questo soddisfa alcuni requisiti:

  • La conversazione può verificarsi su una rete non affidabile senza che un utente malintenzionato possa leggere i messaggi.
  • Lo scambio delle chiavi di sessione può essere fatto in modo sicuro, cioè l'autenticità e l'integrità sono 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. Noi 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 Aa a 256 bit e RSA a 4096 bit dovrebbe essere più che sufficiente per il prossimo decennio, presupponendo che l'implementazione sia corretta.

Si noti che tutto ciò è una semplificazione, poiché ci sono molte avvertenze e dettagli coinvolti, e la descrizione e lo scambio RSA come "crittografia" non sono strettamente corretti, ma tutto sommato dovrebbe essere una ragionevole panoramica ad alto livello di il modo in cui i due tipi di crittografia funzionano.

    
risposta data 30.03.2013 - 11:25
fonte
3

Un motivo 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. / p>

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

    
risposta data 30.03.2013 - 09:53
fonte
2

AES è un algoritmo a chiave simmetrica. RSA è asimmetrico. Mentre entrambi sono per la crittografia, sono spesso usati in modi diversi, quindi è difficile confrontarli in termini di efficienza o forza, dal momento che lo scopo di utilizzare l'uno rispetto all'altro sarebbe probabilmente un determinante maggiore in cui una o una classe di la crittografia è utilizzata.

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

    
risposta data 30.03.2013 - 06:59
fonte
1

Secondo il pacchetto crittografico GoLang "Il messaggio non deve essere più lungo della lunghezza del modulo pubblico meno 11 byte". link

    
risposta data 20.11.2014 - 04:01
fonte

Leggi altre domande sui tag