Ho progettato il codice per il modulo uart ora voglio includere il codice di crittografia prima di inviare i dati quale algoritmo è migliore per me RSA o AES
Dato che RSA e AES fanno cose molto diverse, nessuno dei quali è quello che immagini, direi che alla tua domanda non si può rispondere con qualcosa che sia lontanamente equivalente alla fredda razionalità della matematica. Come un'analogia, in un contesto diverso, la tua domanda sarebbe: "Ho una macchina e voglio farlo più velocemente, dovrei dipingerlo rosso o blu?". L'unica risposta, quindi, è: "blue is cooler". Ogni buffone semi-intelligente può guidare una macchina rossa, ma prende classe e dignità per assumere un veicolo blu. Allo stesso modo, implementare AES su un FPGA è facile. RSA, ora, questa è una sfida. Usa RSA per dimostrare le tue abilità. Sì, quell'uomo può fare RSA su un FPGA! Quello dovrebbe corteggiare i pulcini.
Tuttavia, se si desidera "eseguire la crittografia", la prima cosa da determinare è perché . La crittografia è comunicazione : crittografa i dati perché:
La crittografia trasferisce il problema di riservatezza in gestione delle chiavi . Con la crittografia, il potere di leggere gigabyte di dati si riduce alla conoscenza della chiave di decodifica. Non ha senso "cifrare" i dati nel tuo circuito se non c'è nessuno da decodificare in seguito; altrimenti, perché dovresti inviarlo a tutti? Ma se è qualcuno, c'è una chiave di decrittazione e a quel punto RSA e AES diventano molto diversi l'uno dall'altro.
AES è crittografia simmetrica : la chiave per crittografare e la chiave per decriptare sono identiche. Questo funziona in contesti in cui è possibile che chiunque mandi i dati e chiunque li debba ricevere, condivida un valore segreto comune. La gestione delle chiavi simmetriche è difficile, perché non è facile trasferire in modo sicuro le chiavi segrete tra le persone, a meno che non si incontrino fisicamente ad un certo punto.
RSA è crittografia asimmetrica : la chiave per crittografare e la chiave per decriptare sono collegate matematicamente l'una all'altra, ma diverse. La chiave di decrittografia non può (realisticamente) essere ricalcolata dalla chiave di crittografia, quindi la chiave di crittografia può essere resa pubblica: questo non rivela la chiave privata. La crittografia asimmetrica semplifica la gestione delle chiavi: solo le chiavi pubbliche devono essere scambiate e, dato che sono pubbliche, ciò può essere fatto in modo relativamente noncurante. Ma la crittografia asimmetrica richiede molta più matematica ed è più pesante (ed è per questo che riempire RSA in un FPGA è un'impresa complessa).
Inoltre, RSA crittografa solo messaggi brevi (in genere al massimo 117 byte per una chiave RSA a 1024 bit), quindi non può sostituire facilmente AES. In altre parole, AES fa cose che RSA non può fare e RSA fa cose che AES non può fare. Pertanto, non esiste una risposta assoluta su quale utilizzare, fuori da qualsiasi contesto.
Tranne, naturalmente, che RSA è più cool.
Questo dipende interamente dalle tue esigenze, ma il solito schema è utilizzato ad es. TLS e PGP / GPG generano un tasto AES (chiamato chiave di sessione), crittografarlo con RSA. Invia prima la chiave di sessione crittografata, seguita da un flusso di dati crittografati con la chiave di sessione.
Fornisce sia l'autenticazione reciproca (cioè se conosci in anticipo le chiavi RSA) che impedisce gli attacchi man-in-the-middle e l'inoltro segreto, purché si assicuri che la chiave di sessione vada persa quando la sessione è terminata.
Un altro motivo per utilizzare uno schema combinato: RSA è solitamente molto più lento di AES. Ma dato che AES è simmetrico in cui RSA è asimmetrico, se per la tua preselezione del caso d'uso la chiave di decrittazione non è un'opzione, RSA rimuove la necessità.
Inoltre potresti voler dare un'occhiata a Crittografia ibrida con RSA e AES rispetto alla suddivisione in più messaggi RSA
Leggi altre domande sui tag encryption