Ho un'idea per un algoritmo. Non so se ho commesso degli errori e ho bisogno di alcune riflessioni extra / peer review su di esso.
Ciò funzionerebbe come una prova di conoscenza (quasi) zero per l'invio di password che possono essere facilmente implementate.
registrazione:
Un utente invia la sua password al server (rischio una tantum).
Il server calcola un hash "sicuro" di detta password. Questo hash deve essere molto lungo, diciamo 4k caratteri.
login:
Quando un utente vuole accedere, prima esegue il calcolo dell'hash sul suo computer locale. Il server poi dice al client di unire lettere casuali a una nuova password unica. Il server invia solo posizioni di lettere e le invia a caso, in modo che ci siano permute sufficienti per non esaurire mai le combinazioni. Deve esserci una cronologia di lettere già utilizzate, in modo che venga utilizzata almeno una lettera mai esposta. Altrimenti un MITM potrebbe simulare un client.
Dopo aver unito tutte le lettere a una nuova password, detta password ottiene hash "in sicurezza" e invia al server per la verifica. il server esegue le stesse attività del client e controlla la sua versione rispetto ai dati dei client.
Anche se le password monouso sono hash "in sicurezza", l'utente malintenzionato ha tempo. Quindi, dopo che circa la metà della password originale hash viene rivelata, viene aumentato un contatore e la password viene cancellata una sola volta sul lato server e la vecchia password con hash viene eliminata. Questo contatore viene inviato al client ogni volta che si desidera effettuare il login, quindi aumenta i cicli di hashing per il contatore per abbinare i dati del server.
Questa è un'idea che mi è venuta in mente qualche secondo fa. Sembra essere un buon approccio. Ma mi piacerebbe vedere i tuoi pensieri su questo, dov'è il difetto? O è già qualcosa di simile usato?