it-swarm.dev

Quali sono le differenze tra MD5, SHA e RSA?

Gli strumenti MD5 generano valori esadecimali. Allo stesso modo, SHA e RSA insieme producono un output esadecimale (o qualsiasi altro)?

Quali sono le differenze tra MD5, SHA e algoritmi RSA?

43
Kars

Non è il tipo di output. Hex è solo il modo in cui i dati vengono formattati: poiché tutti funzionano su dati binari, hex ha molto senso.

La parte importante è ciò che fanno e come lo fanno:

  • MD5 e SHA sono funzioni hash (SHA è in realtà una famiglia di funzioni hash) - prendono un pezzo di dati, lo compattano e creano un output adeguatamente unico che è molto difficile da emulare con un diverso pezzo di dati. Non crittografano nulla - non puoi prendere MD5 o SHA output e "unhash" per tornare al punto di partenza. La differenza tra i due sta in cosa algoritmo che usano per creare l'hash. Si noti inoltre che MD5 è ora rotto in quanto è stato scoperto un modo per generare facilmente collisioni e non dovrebbe più essere utilizzato né ritenuto affidabile.

  • RSA è un algoritmo di crittografia assimetrica. Hai due chiavi (privata e pubblica) e puoi eseguire una funzione con una chiave (crittografare o decrittografare) e invertire con l'altra chiave. La chiave utilizzata dipende dal fatto che si stia tentando di eseguire una firma digitale o una crittografia.

57
bethlakshmi

MD5 è una funzione hash crittografica. "SHA" è il nome di una famiglia di funzioni hash; prima fu definito un "SHA" di breve durata che fu ribattezzato "SHA-0", poi "SHA-1" (un best seller). Successivamente, furono aggiunti nuovi membri della famiglia, designati collettivamente come "SHA-2" e costituiti da SHA-224, SHA-256, SHA-384 e SHA-512. Recentemente, una nuova SHA, chiamata "SHA-3" ma anche "Keccak" (si trattava di una competizione aperta, essendo Keccak il nome in codice di uno dei candidati, che alla fine ha vinto) .

Una funzione hash crittografica è una funzione deterministica completamente definita che non utilizza alcuna chiave segreta. Prende come input un messaggio di lunghezza arbitraria (un flusso di bit, any bit) e produce un output di dimensioni fisse. Le dimensioni dell'output dipendono dalla funzione; sono 128 bit per MD5, 160 bit per SHA-1, 256 bit per SHA-256 ... Tutti possono calcolare una determinata funzione di hash su un dato input e ottengono tutti gli stessi risultati. Le funzioni hash sono anche chiamate digest perché in qualche modo producono una sorta di "checksum" o "riepilogo" dell'input. Le robuste funzioni di hash devono essere tali che nessuno sappia "invertirle" o persino trovare due input distinti che producono lo stesso output. Quest'ultimo si chiama a collisione ed è una necessità matematica che esistano collisioni (poiché la funzione può accettare molti più input distinti di quanti ne possa produrre output distinti), ma richiediamo che sia impossibile trova pari uno collisione.

MD5 si è rivelato molto rotto per quanto riguarda le collisioni (possiamo produrre una collisione in pochi secondi di lavoro su un PC) e anche SHA-0 è rotto in questo senso; SHA-1 è un po 'traballante; il resto della famiglia SHA sembra essere robusto finora. Il modo in cui una funzione hash raggiunge la resistenza alle collisioni è un po 'un miracolo poiché l'intera funzione è completamente nota, senza alcun valore segreto; è solo mescola troppo i dati per i migliori crittografi per svelare il processo.

RSA è due algoritmi: un crittografia asimmetrica algoritmo e un firma digitale algoritmo . Sebbene entrambi gli algoritmi si basino sullo stesso tipo di matematica, sono piuttosto distinti (molte persone descrivono le firme come "crittografia con la chiave privata", che è un'analogia imperfetta e nella migliore delle ipotesi confusa, quindi non farlo). Entrambi gli algoritmi utilizzano chiavi, ovvero parti di dati che devono essere tenuti segreti. Succede così che per le firme RSA, ciò che è firmato non è direttamente un dato messaggio (una sequenza di bit) ma un hash del messaggio: il messaggio viene prima elaborato con una funzione hash crittografica come SHA-256 e viene quindi utilizzato il valore hash. Questo viene fatto in questo modo perché la matematica di RSA può gestire solo valori di dimensioni moderate, al massimo poche centinaia di bit. Le funzioni di hash crittografiche sono tali che la firma dell'hash è buona come la firma dei dati originali.

In questo modo, le funzioni RSA e hash crittografiche vengono spesso utilizzate insieme; ma non sono affatto la stessa cosa.

Esadecimale è un modo per rappresentare una sequenza di bit in una sequenza di caratteri: esadecimale utilizza cifre e lettere da " A 'a' F '; ogni carattere codifica esattamente quattro bit ('0' codifica '0000', '7' codifica '0111', 'D' codifica '1101' ...). Any la sequenza di bit (e in particolare l'output di una funzione hash) può essere convertita in esadecimale e viceversa. L'esadecimale è popolare perché gli occhi umani e il cervello sono bravi a leggere i personaggi e non a leggere i pezzi. Gli strumenti da riga di comando che calcolano le funzioni hash crittografiche sui file tradizionalmente producono caratteri esadecimali per questo motivo. Tuttavia, non c'è nulla che leghi intrinsecamente le funzioni hash con esadecimali: tutto ciò che si inserisce in un computer in un modo o nell'altro è una sequenza di bit, e quindi è suscettibile all'esadecimale; e un output della funzione hash è solo una sequenza di bit, che può essere codificato in vari modi, esadecimale essendo solo il modo "tradizionale" (anche se si incontra spesso Base64 , specialmente quando si tratta di database).

35
Thomas Pornin