Best practice per generare e utilizzare OTP temporizzato casuale

3

Supponiamo di voler implementare un sistema OTP che genera numeri da 6 a 10 cifre. (suppone che sia usato per reimpostare la password o inviare denaro)

Gli OTP hanno una scadenza, quindi continuano a essere rimossi dalla memoria del server.

Ho cercato su Internet ma non ho trovato alcun riferimento alle seguenti best practice:

L'utente / utente "malintenzionato" deve fornire l'e-mail insieme a OTP per utilizzarlo.

Il motivo per cui lo chiedo è perché ho un collega che desidera implementare l'OTP come segue:

  1. Genera OTP, archivia (OTP, email, expireTime, scopo) nella memoria del server. Se lo stesso OTP viene generato di nuovo, la vecchia voce viene rimossa dalla memoria.
  2. Invia OTP all'email
  3. Chiedi SOLO input OTP dall'utente (esempio / verifyEmail? OTP = 100434).
  4. Ottieni (e-mail, scopo) dalla memoria del server per l'OTP
  5. Utilizza l'OTP allo scopo

Non sono riuscito a convincerlo che questo non è sicuro in quanto un utente malintenzionato può semplicemente generare OTP casuali e chiamare i percorsi e causare automaticamente alcune azioni. ("L'OTP scade tra 3 minuti", "solo una volta ogni tanto sarà un problema", "L'abbiamo usato in un altro progetto e andava bene", ecc.)

Quello di cui ho bisogno è un post o un articolo di un blog (non troppo tecnico) che spiega PERCHÉ questo è insicuro.

Inoltre, quali sono i modi per implementare un buon sistema OTP da 6 a 10 cifre?

La generazione OTP casuale è abbastanza buona?

Il mio suggerimento sarebbe di richiedere solo l'unicità delle coppie (email, OTP) piuttosto che l'unicità di OTP e di richiedere che l'e-mail + OTP sia fornita dall'utente. È sicuro?

    
posta Jus12 16.09.2017 - 08:14
fonte

1 risposta

1

La tua preoccupazione

Quando si ripristina una password è prassi comune inviare un token all'utente. Il token è una stringa casuale long . Non hai necessariamente bisogno dell'indirizzo email nell'URL di ripristino.

Potresti chiamare l'URL di reset con questo token e reimpostare la password per l'account a cui appartiene il token.

Ma guarda questo: se stai usando un "token a 6 cifre", queste sono solo 1 milione di possibilità. Quindi un utente malintenzionato potrebbe provare tutti i valori e in questo modo sarebbe in grado di reimpostare diverse password. E se la risposta è "la tua password per [email protected] è stata ripristinata", l'utente malintenzionato otterrebbe diversi account con password appena reimpostate.

Senza NECESSITÀ di intercettare qualsiasi email.

fondamentalmente per le transazioni

Puoi anche dare un'occhiata ai valori predefiniti, TOTP ( RFC6238 ) e forse OCRA (RFC6287 ).

OCRA consente anche di generare il valore OTP in base ai dati della transazione, ad esempio il denaro da inviare.

    
risposta data 20.09.2017 - 09:47
fonte

Leggi altre domande sui tag