Ignorando la collisione e (seconda) resistenza pre-immagine, cosa rende strong una funzione hash crittografica?

0

Riguardo alla resistenza contro gli attacchi dizionario e forza bruta agli hash "crack" contenenti password, cosa determina la resistenza di una funzione hash crittografica? Poiché la resistenza alla collisione non è importante per la memorizzazione delle password e, per quanto ne so, tutte le popolari funzioni di hash sono abbastanza resistenti agli attacchi pre-immagine e al secondo pre-immagine per renderlo un approccio non fattibile, immagino che questi fattori non davvero importante.

La prima cosa che mi passa per la mente è la quantità di calcolo necessaria per calcolare l'hash (c'è una parola per questo?) - la quantità più alta più tempo ci vorrà. C'è niente altro? Bit di lunghezza? La lunghezza del bit e la "quantità di calcolo" sono in qualche modo correlate?

    
posta tsorn 13.09.2015 - 14:03
fonte

1 risposta

2

Poiché il contesto di questo sembra essere il cracking delle password e gli hash crittografici non sono adatti per memorizzare le password, la semplice risposta è "la tua domanda è irrilevante".

Una buona funzione di hash crittografica ha una serie di obiettivi di progettazione di base:

  • Dovrebbe essere computazionalmente fattibile calcolare un hash H (x) per qualche valore di input x.
  • La modifica di un bit dell'input dovrebbe cambiare tutti i bit di output con una probabilità del 50%.
  • Dato solo l'output dell'hash, non dovrebbe essere computazionalmente fattibile recuperare informazioni sull'input (a parte gli attacchi generici come le tabelle arcobaleno).
  • Dato un input x 1 , non dovrebbe essere computazionalmente fattibile trovare un altro input x 2 che soddisfi la condizione H (x 1 ) == H (x 2 ), cioè dovrebbe essere difficile trovare collisioni.

Sebbene questi obiettivi di base siano certamente utili, in realtà non coprono i requisiti completi di una buona funzione di memorizzazione delle password. Per rispondere alla tua domanda in modo più specifico: il costo computazionale grande o controllabile non è certamente una caratteristica della maggior parte delle funzioni di hash crittografiche "ordinarie".

Una buona funzione di memorizzazione della password, insieme a tutti i precedenti, dovrebbe avere questi obiettivi di progettazione aggiuntivi:

  • Non dovrebbe essere deterministico, cioè due password uguali per utenti diversi (o altre entità) non dovrebbero produrre lo stesso hash dell'output.
  • Dovrebbe implementare una qualche forma di difesa contro gli attacchi di precomputazione (ad es. le tavole arcobaleno)
  • Dovrebbe essere computazionalmente costoso forzare l'input originale per tutti gli input di dizionario banali e comuni. Questo è solitamente controllato implementando un valore di costo, che consente di ridimensionare le prestazioni.
  • Non ci dovrebbe essere un modo per produrre guadagni di prestazioni più che trascurabili utilizzando i compromessi tempo / spazio.
  • Le prestazioni della funzione dovrebbero essere approssimativamente lineari su tutte le architetture, per evitare l'accelerazione da GPU, FPGA, ecc. forse escludendo il silicio appositamente progettato.

Alcuni di questi obiettivi sono simili a quelli implementati dalle funzioni di derivazione chiave (KDF) come PBKDF2, ma ancora queste funzioni non sono progettate per l'archiviazione di password e sono invece state appropriate per tali usi .

Mentre al momento ci sono solo pochi progetti che implementano tutto quanto sopra, è un campo relativamente nuovo, quindi sono previsti lavori futuri. Per motivi di interesse, l'attuale stato dell'arte per l'archiviazione delle password, come per PHC , è Argon .

    
risposta data 13.09.2015 - 15:30
fonte

Leggi altre domande sui tag