Contesto: un sito Web è ospitato su più server dedicati. Ci sono server Web frontend, server DB backend e altri server tra di loro. Il DB contiene le password degli account degli utenti. Tutte le connessioni sono sicure e le pagine di registrazione / login non possono essere bruteforce (fuori dalla portata della domanda).
Modello di minaccia: un hacker riesce a ottenere una copia del DB e desidera decifrare le password. L'hacker ha una potenza hardware molto potente a sua disposizione (CPU / GPU / RAM / ASIC) e deve solo craccare una sola password per essere considerata vincente (proteggere un massimo di utenti non è sufficiente, tutti gli utenti devono essere protetti).
Domanda: quale dei seguenti casi sarà considerato il più sicuro contro gli sforzi degli hacker?
- Le iterazioni tradizionali basate su hashing (scrypt / bcrypt)
- L'hashing multi-pepato fatto a mano con segreti molto lunghi tenuti in ogni "stage" (webserver / middle / DB).
- Operazione del server Web: Hash1 = SHA512 (password + secret1)
- Operazione centrale: Hash2 = SHA512 (hash1 + secret2)
- Operazione DB: Hash3 = SHA512 (hash2 + secret3)
- Archiviazione DB: Hash3 con sale
La mia opinione è che il caso 2 sia di gran lunga il più resistente perché le iterazioni non proteggono le password povere (bassa entropia) come "123456" per più di poche ore al giorno. Fintanto che i segreti sono molto lunghi e almeno uno di essi rimane sconosciuto, penso che l'aumento di entropia garantirà a tutti per decenni.
Non vedo un tale schema distribuito sulla produzione molto spesso sebbene, in generale, il consenso sia "iterazioni + sale o vergogna", quindi forse mi manca qualcosa.
Ovviamente l'implementazione dovrebbe essere sicura (fatta a mano rispetto a uno scrypt più standard) ei segreti devono rimanere sconosciuti. Inoltre se un segreto viene rivelato e deve essere cambiato, il processo di aggiornamento sarebbe un dolore. D'altra parte, il processo di login sarebbe più rispettoso dell'hardware (senza iterazioni).
Modifica (basato sul commento di Matthews): la mia domanda non riguarda il vantaggio di un pepe in un metodo basato su iterazioni. È la differenza di sicurezza tra i metodi basati sulle iterazioni e i segreti.
Modifica 2: ho fatto più ricerche e sono riuscito a trovare una domanda simile dopo tutto, il mio male (forse i risultati sono migliorati in base alla mia attività sulla domanda corrente). Ha una bella risposta (di Thomas Pornin) simile a qui.