Domanda

Quando scrivo una nuova app media nel 2009, qual è la funzione digest più ragionevole da usare, in termini di sicurezza e prestazioni? (E come posso determinarlo in futuro, poiché le condizioni cambiano?)

Quando similar < a href = "https://stackoverflow.com/questions/184089/what-is-the-strongest-hashing-algorithm-commonly-available-today"> domande erano chiesto in precedenza, le risposte includevano SHA1, SHA2, SHA-256, SHA-512, MD5, bCrypt e Blowfish.

Mi rendo conto che in gran parte uno di questi potrebbe funzionare, se usato in modo intelligente, ma preferirei non tirare un dado e sceglierne uno a caso. Grazie.

È stato utile?

Soluzione

Seguirei Linee guida NIST / FIPS :

  

15 marzo 2006: la famiglia SHA-2 di   funzioni hash (es. SHA-224,   SHA-256, SHA-384 e SHA-512) possono essere   usato dalle agenzie federali per tutti   applicazioni che usano l'hash sicuro   algoritmi. Le agenzie federali dovrebbero   smettere di usare SHA-1 per il digitale   firme, timestamp digitale e   altre applicazioni che richiedono   resistenza alla collisione non appena   pratico e deve usare SHA-2   famiglia di funzioni hash per questi   domande dopo il 2010. Dopo il 2010,   Le agenzie federali possono utilizzare solo SHA-1   per le seguenti applicazioni:   autenticazione dei messaggi basata su hash   codici (HMAC); derivazione chiave   funzioni (KDF); e numero casuale   generatori (RNGs). Indipendentemente dall'uso,   NIST incoraggia l'applicazione e   progettisti di protocolli per utilizzare SHA-2   famiglia di funzioni hash per tutti i nuovi   applicazioni e protocolli.

Altri suggerimenti

Dici " funzione digest " ;; presumibilmente questo significa che vuoi usarlo per calcolare digest di "long" messaggi (non solo hashing "breve", "messaggi" come password). Ciò significa che bCrypt e opzioni simili sono fuori; sono progettati per rallentare l'inibizione degli attacchi di forza bruta sui database delle password. MD5 è completamente rotto, e SHA-0 e SHA-1 sono troppo indeboliti per essere una buona scelta. Blowfish è un codice di flusso (anche se puoi eseguirlo in una modalità che produce digest), quindi non è nemmeno una buona scelta.

Ciò lascia diverse famiglie di funzioni hash, tra cui SHA-2, HAVAL, RIPEMD, WHIRLPOOL e altre. Di questi, la famiglia SHA-2 è la più accuratamente crittografata, e quindi sarebbe la mia raccomandazione per l'uso generale. Consiglierei SHA2-256 o SHA2-512 per applicazioni tipiche, dal momento che queste due dimensioni sono le più comuni e probabilmente saranno supportate in futuro da SHA-3.

Dipende davvero da cosa ti serve.

Se hai bisogno di un'effettiva sicurezza, dove la possibilità di trovare facilmente una collisione comprometterebbe il tuo sistema, userei qualcosa come SHA-256 o SHA-512 poiché vengono fortemente raccomandati da varie agenzie.

Se hai bisogno di qualcosa che sia veloce e possa essere usato per identificare in modo univoco qualcosa, ma non ci sono reali requisiti di sicurezza (cioè, un attaccante non sarebbe in grado di fare qualcosa di brutto se trovasse una collisione) quindi userei qualcosa come MD5.

MD4, MD5 e SHA-1 hanno dimostrato di essere più facilmente fragili, nel senso di trovare una collisione tramite un metodo di attacco di compleanno, del previsto. RIPEMD-160 è ben considerato, ma a soli 160 bit un attacco di compleanno richiede solo 2 ^ 80 operazioni, quindi non durerà per sempre. Whirlpool ha caratteristiche eccellenti e appare il più forte del lotto, anche se non ha lo stesso supporto di SHA-256 o SHA-512, nel senso che se ci fosse un problema con SHA-256 o SHA-512 tu ' sarebbe più probabile scoprirlo tramite i canali appropriati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top