it-swarm.dev

SHA, RSA e la relazione tra loro

SHA è il meccanismo di hashing. Tuttavia, RSA è l'algoritmo di crittografia.

Quindi l'algoritmo RSA usa SHA meccanismo di hashing per generare chiavi di hashing che a loro volta vengono usate per crittografare il messaggio ??

Inoltre, la stessa RSA fornisce 2 chiavi. Uno può essere tenuto pubblico e uno privato. Ora, queste chiavi possono essere utilizzate per crittografare e decrittografare. Rif: RSA . Allora a che serve SHA in RSA?

In un certificato rilasciato da qualsiasi sito che offre sicurezza HTTPS, è presente un SHA e una chiave MD5. Come vengono prodotti e utilizzati nella crittografia o decrittografia dei dati trasferiti al browser ?

36
whitehat

RSA sono in realtà due algoritmi, uno per la crittografia asimmetrica e uno per le firme digitali (l'algoritmo di firma è tradizionalmente - ma erroneamente - descritto come "crittografia con la chiave privata "e questa è una fonte infinita di confusione).

La crittografia asimmetrica utilizza le chiavi. Le chiavi sono parametri dell'algoritmo; l'algoritmo stesso è uguale per tutti (in termini di software, è il file eseguibile) mentre i tasti variano tra gli utenti. In a coppia di chiavi, chiave pubblica è la chiave utilizzata per crittografare dati (convertire un dato , ovvero una sequenza di byte, in un'altra sequenza di byte che è insondabile per tutti) mentre chiave privata è la chiave che consente di decrittografare dati ( cioè invertire la crittografia).

Mentre in crittografia simmetrica , le chiavi di crittografia e decrittazione sono identiche, ma con crittografia asimmetrica, le chiavi di crittografia e decrittografia sono distinti tra loro (da cui il nome); sono matematicamente collegati tra loro, ma dovrebbe essere impossibile (vale a dire troppo difficile da fare con un semplice gruppo di computer) per recuperare la chiave di decodifica dalla chiave di crittografia. Questo è il motivo per cui la chiave di crittografia può essere resa pubblica mentre la chiave di decrittazione è mantenuta privata: rivelare la chiave pubblica non rivela la chiave privata.

Ciò che la crittografia asimmetrica raggiunge non è un'impresa banale. La possibilità di rivelare la chiave pubblica senza dire troppo della chiave privata, ma in modo tale che entrambe le chiavi funzionino insieme (ciò che è crittografato con la chiave pubblica può essere decrittografato dalla chiave privata corrispondente, ma nessun altro), richiede molto matematica! RSA è piena di matematica. Questo contrasta con algoritmi di crittografia simmetrica che sono "solo" modi per creare un gran casino di dati mescolando bit insieme.

La crittografia asimmetrica è lo strumento naturale da utilizzare quando vogliamo consentire trasmissioni riservate tra due utenti su una grande popolazione. Se hai 1000 utenti e desideri che uno dei due utenti sia in grado di scambiare dati tra loro senza consentire a nessuno di spiarli (inclusi gli altri 998 utenti), la soluzione classica sarebbe quella di distribuire chiavi per la crittografia simmetrica a ogni coppia di utenti. Alice e Bob avrebbero una chiave nota e comune; Alice e Charlie avrebbero anche una chiave condivisa (non la stessa); e così anche Bob e Charlie; e così via. Ogni utente dovrebbe ricordare la sua "chiave condivisa" con tutti gli altri 999 utenti e in totale si otterrebbero 499500 chiavi. L'aggiunta di un 1001 ° utente implicherebbe la creazione di 1000 chiavi simmetriche aggiuntive e darebbe uno a ciascuno dei 1000 utenti esistenti. L'intera distribuzione delle chiavi si trasforma presto in un incubo inutilizzabile/non fattibile. Con crittografia asimmetrica, tuttavia, le cose sono molto più semplici in termini di distribuzione delle chiavi: ogni utente deve solo ricordare la propria chiave privata; e le chiavi pubbliche (essendo pubbliche) possono essere distribuite attraverso una sorta di trasmissione (ad es. una directory).

RSA ha alcuni vincoli operativi. Con la variante più utilizzata (quella nota come PKCS # 1 v1.5 ), se la dimensione della chiave RSA è "1024 bit" (significa che la componente matematica centrale della coppia di chiavi è un 1024 bit intero), quindi RSA può crittografare un messaggio di lunghezza massima di 117 byte e generare un messaggio crittografato di lunghezza 128 byte. Quelle dimensioni limitate e le dimensioni aumentano durante la crittografia, sono inevitabili conseguenze della struttura matematica del processo di crittografia RSA. A causa di questi vincoli, di solito non crittografiamo i dati direttamente con RSA; invece, selezioniamo una piccola sequenza di byte casuali, che chiamiamo chiave di sessione. Crittografiamo la chiave di sessione con RSA; e quindi usiamo la chiave di sessione con un algoritmo di crittografia simmetrico per elaborare l'intero messaggio. Questo si chiama crittografia ibrida .


SHA è il nome comune per una famiglia di funzioni hash crittografiche . Il primissimo membro di quella famiglia fu descritto sotto il nome di "SHA" ma fu presto deprecato dopo che fu trovata una grave debolezza; una versione fissa è stata pubblicata con il nome SHA-1 (la versione debole è colloquialmente nota come SHA-0). In seguito sono state aggiunte alla famiglia quattro nuove funzioni simili a SHA (SHA-224, SHA-256, SHA-384 e SHA-512: che sono noti collettivamente come "SHA-2").

Le funzioni hash non hanno chiave. Una funzione hash è un algoritmo eseguibile che è puro codice. C'è uno SHA-1 e tutti usano lo stesso.

Le funzioni di hash "solo" creano un grosso pasticcio dei dati di input, che non dovrebbe essere svelato. In realtà, è pensato per essere resistente allo svelamento. Anche se tutti sanno tutto ciò che si deve sapere su una funzione hash (non esiste una chiave, solo un codice e nulla di ciò è segreto), risulta comunque "troppo difficile" per ricalcolare un messaggio di input corrispondente, dato il uscita della funzione hash. È persino impossibile trovare due messaggi di input distinti che, quando vengono dati alla funzione hash, producono lo stesso output; there must esistono tali coppie di messaggi - chiamate collisioni - perché un output della funzione hash ha una dimensione fissa fissa, mentre gli input accettati possono essere molto più grandi, quindi ci sono più ingressi possibili che possibili uscite. È una certezza matematica che esistono collisioni per ogni funzione hash, ma trovarne una è un'altra cosa.

Una funzione hash, come di per sé, non fa nulla di immediato valore elevato, ma è un blocco di costruzione molto importante per altri algoritmi. Ad esempio, vengono utilizzati con firme digitali . Una firma digitale "dimostra" l'azione consapevole di un firmatario designato su un pezzo di dati; come la crittografia asimmetrica, ciò comporta coppie di chiavi e matematica e vincoli associati ai dati firmati. Una funzione hash h è tale che la firma h (m) è valida come la firma m stessa: poiché è impossibile trovare due messaggi distinti che abbiano lo stesso valore, l'approvazione dell'output dell'hash è abbastanza buona. Il punto è che output della funzione hash è abbastanza piccolo da essere utilizzabile con la matematica nascosta nell'algoritmo della firma, anche se il messaggio stesso è grande (SHA-1 può elaborare gigabyte di dati e produce un output di 20 byte).

Si può notare che alcune recenti varianti dell'algoritmo di crittografia RSA (con il 'padding OAEP' di PKCS # 1 v2.0) usano internamente le funzioni hash. Le funzioni hash sono buoni "randomizzatori" (l'output di una funzione hash non presenta una struttura riconoscibile) e questo li rende appropriati per la creazione di algoritmi crittografici più elaborati con buone caratteristiche di sicurezza.


In SSL/TLS (HTTPS è solo HTTP-entro-a-SSL/TLS-tunnel), le funzioni hash sono usate per diverse cose:

  • come parte della crittografia asimmetrica e/o delle firme digitali;
  • come parte di HMAC per consentire al client e al server di verificare che i dati scambiati non siano stati modificati durante il trasporto;
  • come mattone per un Key Derivation Function , che "espande" una determinata chiave di sessione in diverse chiavi simmetriche utilizzate per la crittografia simmetrica e i controlli di integrità in entrambe le direzioni del tunnel.

Il KDF si basa sulla "randomizzazione" e sulla non invertibilità della funzione hash. In SSL/TLS fino a TLS 1.1, KDF è costruito su due funzioni hash, MD5 e SHA-1, nel tentativo di renderlo robusto anche se in seguito sono stati riscontrati punti deboli in MD5 o SHA-1. Si scopre che i punti deboli sono stati rilevati in entrambi, ma non ha consentito alcuna interruzione sul KDF utilizzato in SSL/TLS. Tuttavia, TLS 1.2 è passato a un altro KDF che utilizza una singola funzione di hash configurabile, di solito SHA-256, per la quale attualmente non è nota alcuna debolezza.

51
Thomas Pornin

SHA non è utilizzato in RSA.

Tuttavia, protocolli crittografici come SSL, SSH e altri, utilizzano algoritmi diversi come SHA e RSA per scopi diversi. SSL utilizza RSA (crittografia) o DH (con firma RSA, DSA o ECDSA) come chiave negoziazione e AES o 3DES per la crittografia dei dati Nel protocollo/formato file PGP, RSA, DSA ed ElGamal sono utilizzati per la firma e la crittografia.

4
chris

Come hai notato, sono due cose diverse. Hash (SHA) serve a garantire l'integrità e la crittografia dei dati (RSA) per la riservatezza dei dati. Vengono utilizzati insieme per assicurarsi che i dati non vengano temperati e che solo la parte giusta sia in grado di leggerli.

HTTPS è un modulo PKI che fornisce integrità, riservatezza, autenticazione. SHA o MD5 sono solo due diversi algoritmi di hashing utilizzati per garantire l'integrità delle connessioni https.

0
breakingigloo

Ovviamente è possibile che SHA sia usato per costruire un PRNG (generatore di numeri pseudo casuali) per generare le chiavi RSA. Ma è possibile usare altri primitivi crittografici (es. AES). Per questo PRNG ci sono specifiche speciali (NIS SP 800-90, ANSI X9.31). Il "puro" RSA don ti interessa come viene generata la chiave, ma per applicare RSA nell'applicazione del mondo reale dobbiamo essere sicuri che la chiave generata deve essere generata da un processo casuale vero (o sembra essere generato da). In caso contrario, per un attaccante è facile indovina quali sono le chiavi (se i keay non sono casuali, anche l'attaccante può calcolarlo).

0
user536

RSA è un algoritmo di crittografia asimmetrica, che viene utilizzato per inviare informazioni a una parte specifica senza che nemmeno tu stesso sia in grado di decodificarlo di nuovo. Ma può ancora essere decifrato dall'altra persona. Questi algoritmi sono molto lenti e quindi vogliono essere utilizzati solo su piccole quantità di dati.

SHA è una suite di algoritmi di hash crittografico, questa è una rappresentazione più piccola di un grande blocco di dati, per scopi crittografici vogliamo che questo soddisfi il requisito che è impossibile trovare un set di dati in modo che corrisponda a un determinato hash (in altre parole che non puoi passare dall'hash ai dati che producono quell'hash (che siano gli stessi dati o meno).

Infine, esistono algoritmi come AES che vengono utilizzati nella crittografia simmetrica in cui entrambe le parti hanno la stessa chiave e possono sia crittografare che decrittografare con la stessa chiave.

Fondamentalmente mettiamo insieme queste cose diverse in modi diversi: Quindi useremo RSA per inviare e concordare un set di chiavi simmetriche (AES) (solo per una sessione), in questo modo nessun altro può decodificare i nostri dati ma l'altro persona in quanto non sono riusciti a ottenere le chiavi simmetriche e non stiamo eseguendo la crittografia asimmetrica lenta su tutti i dati, ma solo una chiave di crittografia simmetrica relativamente piccola.

L'hashing viene solitamente utilizzato in tali sistemi nel modo seguente, vogliamo verificare che i dati provengano dall'altra persona, quindi decodifica il testo semplice con la sua chiave privata, se crittografiamo questo testo cifrato dovremmo recuperare i dati ( fondamentalmente pensa alla crittografia come al contrario della decrittazione e questo ha improvvisamente un senso!), tuttavia, come ho detto prima, la crittografia asimmetrica è lenta. Quindi, perché non eseguire l'hashing dei dati e firmare l'hash in questo modo possiamo verificare l'integrità dei dati senza che qualcuno sia in grado di creare dati che sembrano corrispondere.

0
ewanm89