Ho letto qui che l'hashing con algoritmi diversi sarebbe un buon idea.
Puoi confermarlo?
Nella tua esperienza, è utile e sicuro? Ci sono dei buchi di sicurezza?
Ho letto qui che l'hashing con algoritmi diversi sarebbe un buon idea.
Puoi confermarlo?
Nella tua esperienza, è utile e sicuro? Ci sono dei buchi di sicurezza?
In generale, gli algoritmi a cascata raramente sono una buona idea. Il processo a cascata funziona molto bene per rendere il software più complesso e meno reattivo, il che è poco desiderabile. La solita "giustificazione" della cascata è che dovrebbe in qualche modo (possibilmente magicamente) resistere alla completa rottura di uno degli algoritmi, ma non dell'altro. In pratica, non è così, per diversi motivi:
Ci sono molti modi per "farcela" e non fanno la stessa cosa. Ad esempio, se si dispone di funzioni hash f e g e si desidera proteggere da preimmagini, quindi in cascata come f (g (x)) potrebbe funzionare; ma se si vuole proteggere contro le collisioni, è f (x) || g (x) che ha senso (cioè concatenazione, non composizione). Le persone che richiedono il collegamento in cascata raramente pensano a ciò che in realtà vogliono con sufficiente profondità in questo senso.
Diciamocelo, questo non è più il 1938. L'algoritmo non è mai il punto debole; ciò che è debole è come viene (errato) usato. La cascata è come guardare una porta d'acciaio su una capanna di legno, e sostenendo che dovrebbe avere anche un lucchetto extra e pesante. È un modo grandioso e consolidato per evitare problemi di sicurezza reali.
Nel caso specifico dell'hash della password, c'è una debolezza evidente, che è la password stessa: le password sono indovinate. Quindi vogliamo le funzioni hash slow e sconfiggiamo l'hacker inserendo più CPU in esso (ovvero aumentiamo il numero di iterazioni, in modo che l'hash sia il più costoso possibile, il vantaggio dell'attaccante diventa come molto più CPU che può radunare rispetto al server onesto). La CPU del server è la sua linea di difesa. Cascare significa sprecare proprio quella forza vitale, solo per la sfocata sensazione che renderà le cose più resistenti alle favolose pause crittoanalitiche.
Quindi no, non fare cascate. Nella migliore delle ipotesi, renderà la tua vita più difficile. Più spesso, ridurrà più o meno direttamente la sicurezza.
Visto che ho scritto quel post sul blog, ho pensato di inserirmi. Prima di tutto, lasciatemi spiegare che si trattava di una veloce riscrittura di 5 minuti, quindi non si trattava di una teoria ben analizzata, più di un commento a sorpresa. L'ho scritto perché avevo visto diverse discussioni al momento discutere quale algoritmo specifico fosse il migliore.
Il punto originale era, piuttosto che discutere su quale sia il migliore, basta usare entrambi e farlo.
Da quando ho scritto, ho fatto molte più ricerche nell'area e chiaramente ho esagerato con i benefici. Semplicemente facendo qualcosa come sha256 (blowfish (data)) non è così resistente all'attacco come sembra. Ci sono modi per farlo, ma farlo correttamente richiede una solida conoscenza della crittografia, ci sono alcuni compromessi, e sarebbe troppo facile rovinarlo. È altamente improbabile che lo renderei meno sicuro, ma i guadagni sono minimi per gli attacchi più probabili.
Quel mio post illustra perfettamente quanto sia difficile fare correttamente la crittografia e come dovresti prestare molta attenzione a come la implementa. Il concetto di combinare algoritmi suona perfettamente logico, ma quando ci si siede e lo si analizza correttamente, i risultati non sono grandi come previsto, o in alcuni casi potrebbero persino peggiorare.