È possibile utilizzare il parallelismo quando si calcola una funzione di derivazione chiave per una singola password / chiave?

5

Supponiamo di avere un file crittografato AES-256 e voglio ricavare la chiave usando PBKDF2 e un determinato sale con un numero elevato di round (diciamo 1 milione), ma sono limitato dalla tolleranza dell'utente per il ritardo dell'interfaccia utente quando inserendo la loro password. È possibile calcolare una chiave che sia allo stesso modo resistente al cracking calcolando 100 chiavi in parallelo dalla stessa password e 100 diversi sali, per 10000 giri, e poi eseguendoli con una funzione hash come SHA-256?

Il modo standard è fondamentalmente questo:

key = pbkdf2(pseudo_random_function, password, salt, 1000000, 256);

Un modo parallelizzabile potrebbe essere così:

for(i = 0; i < 100; i++)  // parallelize this on the GPU/FPGA etc
{
  partial_keys[i] = pbkdf2(pseudo_random_function, password, salts[i], 10000, 256);
}
key = sha256(concatenate(partial_keys[0] ... partial_keys[99]));

Supponendo che il metodo di derivazione fosse noto a un cracker, ciò produrrebbe una chiave altrettanto difficile da decifrare come quella standard, e sarebbe altrettanto sicura? In caso contrario, approssimativamente quanto sarebbe sicuro (se è sicuro) in termini di numero equivalente di round usando l'approccio normale?

Forse non è necessario immagazzinare 100 sali, potresti semplicemente immagazzinare 1 sale e poi generare 100 diversi sali usando tecniche di key-stretching / codici a blocchi ecc. Se questo è stato usato in un'applicazione, potresti assumere o far rispettare un capacità minima della GPU prima di consentire all'utente di installarlo.

Il punto di questo sarebbe ridurre la latenza (tempo necessario per ottenere una singola chiave per l'utente), senza aumentare il throughput (numero di chiavi che possono essere derivate in un determinato periodo di tempo con una data quantità di potenza di calcolo da un cracker).

    
posta samgak 23.03.2016 - 03:01
fonte

1 risposta

2

La maggior parte delle funzioni di hash adottano misure per renderle difficili da implementare su GPU, ma è anche possibile sfruttare l'esecuzione parallela e utilizzarla dal lato del difensore durante la verifica delle password. Un algoritmo progettato per essere facilmente parallelizzabile è parallelo di Steve Thomas . Parallelamente è stato finalista nel PHC e quindi ha ottenuto qualche recensione, ma non sono riuscito a trovare molte informazioni su di esso.

Quindi l'idea dietro il tuo algoritmo è sana. L'implementazione mi sembra buona, ma potresti chiederlo a un vero crittografo prima di prenderlo in produzione.

    
risposta data 08.06.2016 - 10:12
fonte

Leggi altre domande sui tag