The fonte che citi in realtà indica già i problemi, anche se in realtà li considera come problemi ma come vantaggio. Per citare:
Pros and Cons
The highlights of this solution are:
...
5. Faster to compute - verification is several multiplications of 32 bit numbers that is much much faster than computing a hash value.
L'attacco che stai tentando di impedire è che l'aggressore possa indovinare correttamente, a condizione che l'attaccante conosca le informazioni segrete archiviate nel database.
Nel tuo esempio hai un segreto con 10 caratteri alfanumerici in cui l'autore dell'attacco deve indovinare uno specifico 3 caratteri. Ciò significa che sono necessarie 36 supposizioni 3 quando sono consentiti solo caratteri maiuscoli o 72 3 con caratteri minuscoli. Dato che il controllo è molto molto veloce, l'attaccante può trovare rapidamente questi valori (vale a dire probabile in tempo reale) se il segreto memorizzato nel database è noto.
Se l'attaccante deve scegliere più di 3 personaggi, diventa più difficile da fare in tempo reale, ma può essere facilmente precalcolato. Se sono necessari 5 caratteri su 10 di 10 * 9 * 8 * 7 * 6 / (2 * 3 * 4 * 5) le possibili "maschere" per l'inserimento dei caratteri devono essere precalcolate e ognuna ha al massimo 36 5 (o 72 5 ) valori possibili, ovvero al massimo 10 * 9 * 8 * 7 * 6 / (5 * 4 * 3 * 2) * 72 5 devono essere fatti calcoli molto veloci. Supponendo che in un secondo si possano effettuare 10000 calcoli, un giorno l'attaccante porterebbe l'attaccante se possiede una botnet di circa 600 macchine - il che non è irragionevole. E probabilmente potrebbe essere ottimizzato. Con 4 caratteri su 10, sarebbero necessari solo 6 macchine per un giorno e con 3 su 10 una macchina singola potrebbe fare ciò in meno di 1,5 ore.
Si noti che questa stima presuppone anche un segreto casuale. Se si tratta di un segreto scelto dall'utente, la situazione peggiora notevolmente. Ma, se l'utente non può scegliere il segreto, probabilmente ha bisogno di scrivere il segreto casuale da qualche parte - sconfiggendo la tua idea originale perché questo segreto aggiuntivo dovrebbe essere dato (ad esempio, evitare la navigazione a spalla e l'archiviazione nei gestori di password) in molti casi.