Gli schemi di verifica della password usuali memorizzano un hash della password salata e il sale. Se l'hash è buono e computazionale costoso, è considerato sicuro.
Tuttavia una versione alternativa (utilizzata in Microsoft Office e probabilmente in altri posti) genera N byte casuali (ad esempio 16 byte) e un hash di byte M dei byte N (ad esempio 16 byte aggiuntivi), li concatena e crittografa il N concatenato + M byte utilizzando un algoritmo di crittografia e una chiave derivata dalla password.
Per verificare la password, i byte N + M vengono decodificati, i primi N byte vengono sottoposti a hashing e confrontati con i byte M decrittografati. Se corrispondono, la password è considerata verificata.
Per i miei occhi inesperti, l'introduzione di dati casuali (di lunghezza sufficiente) rende questo sistema sicuro contro qualsiasi schema di ricerca tabella anche se l'hash è debole. Sembra solo dipendere dalla forza della crittografia e dalla lunghezza della chiave.
Mi sbaglio? Dove?