Temo che mi verranno lanciati dei pomodori per aver fatto questa vecchia domanda, ma ecco qua.
Dopo aver letto che è pericoloso inventare l'hash della propria password dalle funzioni di hashing esistenti sopra e sopra ancora non riesco a capire la logica. Ecco alcuni esempi:
-
md5 (md5 (salt) + bcrypt (password))
-
scrypt (bcrypt (password + salt))
-
sha1 (md5 (scrypt (password + md5 (salt))))
Gli argomenti tipici contro questi vai come segue:
Non sei un crittografo! Non hai idea se questi hash siano più sicuri. Lascia fare agli esperti che sanno cosa stanno facendo. Questi non aggiungono ulteriore sicurezza.
Certo, non migliorano la funzione come hash (cioè rendono più difficile invertire o trovare collisioni ecc.), Ma sicuramente sicuramente non lo rendono peggio come hash? Se lo facessero, gli hacker sarebbero in grado di rieseguire l'hashing delle password con hash standard in questi hash stravaganti come ritengono opportuno e indebolire l'hash? Non lo compro.
Secondo argomento:
Principio di Kerckoffs: un sistema crittografico dovrebbe essere sicuro anche se tutto ciò che riguarda il sistema è noto.
D'accordo. Questa è fondamentalmente la motivazione per non memorizzare le tue password come testo in chiaro in primo luogo. Ma se la mia risposta alla prima critica è valida, questi stravaganti hash funzionano ancora come hash sicuri e il nostro sistema non infrange il principio di Kerckoffs più di quanto farebbe con un hash standard.
Ecco due possibili (e utili, per quanto posso vedere) vantaggi nell'usare un hash "stravagante" rispetto a un hash normale:
- Certo, il tuo sistema dovrebbe essere protetto se l'aggressore ha il codice sorgente, ma è molto probabile che il tuo aggressore non abbia accesso al tuo codice sorgente e probabilmente non sarà in grado di indovinare il tuo bizzarro hash, rendendo impossibile qualsiasi tentativo di forza bruta.
- (Questa è la vera motivazione dietro la mia domanda)
BCrypt
è pensato per essere sicuro, difficile per CPU e GPU (ottimo) ma può essere molto veloce con hardware specializzato. Si dice cheSCrypt
sia difficile da forzare su CPU, GPU e attualmente disponibili hardward specializzati, ma è più recente e non è considerato attendibile dalla comunità crittografica tanto quanto BCrypt a causa della mancanza di visibilità che ha avuto. Ma l'hashBCrypt (SCrypt (password + salt))
non ottiene il meglio da entrambi i mondi?
Apprezzo che la passione / rabbia dietro la maggior parte delle invettive contro questi hash fatti in casa deriva dalla mancanza di conoscenza del programmatore medio di ciò che rende un buon hashish e dalla preoccupazione che incoraggiare questo tipo l'hashing stravagante finirà inevitabilmente con hash deboli e inutili che entrano nel codice di produzione. Ma Se l'hash stravagante è costruito con cura a partire da hash solidi e affidabili, i guadagni in termini di sicurezza non sono molto preziosi e reali?
Aggiorna
Ho un sacco di buone risposte su questo, grazie. Quello che sembrava trascurare nelle mie ipotesi era che, sebbene la combinazione di hash non possa rendere più facile il crack della password originale e quindi il crack degli hash costituenti, la combinazione di due o più hash sicuri può: almeno in linea di principio - essere più debole di uno qualsiasi dei suoi hash interni a causa delle interazioni complesse e non studiate tra di loro. Significa che potrebbe essere possibile trovare qualche stringa che ha superato l'hash stravagante senza necessariamente rompere gli hash che la componevano.