La risposta breve è: no . Questo non è quello che ho detto, né quello che ho insinuato.
Utilizzando il compromesso che ho identificato e discusso, puoi scambiare la memoria per il tempo della CPU. Quindi sì, puoi ridurre una particolare derivazione da 16MiB a 8 KiB (circa). Tuttavia, fare ciò richiederà alla CPU diversi ordini di grandezza più logica da eseguire. Una certa efficienza è ottenuta dalla localizzazione della cache, ma in generale dovrebbe essere molto più lenta. (in media, circa 8.000 volte più lento della versione 16MiB, ma fino a 16.000 volte più lento, a seconda delle esatte distribuzioni casuali dell'algoritmo).
C'è un'alternativa più interessante però. Il mio attacco era un all-or-not-bais. In pratica, elimina completamente l'array V, a costo di aumentare la complessità. Ma puoi fare un compromesso più sfumato. È possibile tagliare l'array a metà e ri-calcolare ogni altro valore. O taglialo ad ogni terzo valore. Scambiando spazio di archiviazione per lo spazio della CPU. Ma in misura diversa. Questo è comunemente definito come un defibrillatore TMTO (Time-Memory-TradeOff Defeater).
Ho eseguito un analisi più approfondita, inclusa una proposta di correzione su questo thread . Vale la pena notare che almeno una delle proposte per la Competizione hash password utilizza il mio algoritmo aumentato.
Quindi no, lo scrypt è ancora incredibilmente strong. E per il suo caso d'uso principale (come KDF), è un po 'meglio delle alternative.,
Il punto che stavo cercando di fare con il mio post, è che quando non ottimizzato in modo ottimale (usato con impostazioni improprie) o con impostazioni molto veloci, può essere significativamente più debole degli algoritmi esistenti. Specificamente per archiviazione password . Dove conosci il risultato e stai cercando il materiale sorgente (password).