Solo un'idea che avevo, e sono sicuro che c'è molto materiale su questo argomento, quindi sto cercando un puntatore per trovare ulteriori informazioni.
La mia idea è questa ...
Quando si memorizza una password in un database, è normale archiviarla come hash. Questo è debole contro le tavole arcobaleno, che viene mitigato aggiungendo sale, ed è anche debole contro gli attacchi di forza bruta.
Penso che sia possibile memorizzare l'hash, modificato con una piccola stringa casuale ...
Usando md5
mypass -> 2b643a4d56186389d84dbb3a9a483e99
Se hai l'hash, la password può essere trovata semplicemente facendo un hashing di tutte le password possibili, e confrontando l'hash, quindi ...
// append a random 3 character string of a-z characters, we can use "xth" for this example
mypassxth -> 02a2247c788681af6ce1bb5fa66dd4c0
La stringa casuale non viene mai memorizzata, mai condivisa e si trova solo in memoria sul server al momento dell'archiviazione dell'hash.
Questo rende la ricerca delle password meno efficiente, perché il server deve controllare tutte le richieste in arrivo forzando brute l'input parzialmente completo contro l'hash memorizzato, che in questo caso significherebbe un limite superiore di 17576 (26 ^ 3) assegni per convalidare la password.
Anche in questo caso renderebbe l'attacco brute force molto più difficile, un limite superiore (supponendo solo a-z) di 5429503678976 (26 ^ 9) piuttosto che 308915776 (26 ^ 6).
Suppongo che sia come usare un sale molto piccolo, che non è memorizzato da nessuna parte, che richiede la forzatura bruta durante le operazioni di ricerca.
Supponendo che non mi manchi completamente qualcosa di ovvio che rende questo non funziona, qualcuno può dirmi come si chiama questo concetto o indicarmi un punto in cui posso leggerlo?