Memorizzare il segreto TOTP nel database, in chiaro o crittografato?

10

Ho letto di 2FA e di come è usato, e la cosa che mi ha colpito di più è che tutti sembrano memorizzare il segreto del TOTP come testo in chiaro nel loro database.

Capisco che tu abbia bisogno del segreto come testo in chiaro per verificare l'OTP, quindi non puoi farlo con hash, ma non potresti almeno cifrarlo in un certo modo, nel caso in cui il tuo database venga trapelato? Mi sento come se ci fossero dei modi per renderlo un po 'più sicuro, ma mi chiedo se ci siano dei problemi con le idee che ho.

  1. Cripta il segreto TOTP utilizzando la chiave memorizzata sul server: Questo non sarebbe l'ideale dato che dovresti crittografare tutto con la stessa chiave, ma un database può essere divulgato senza che l'utente malintenzionato abbia pieno accesso a tutti file sul server. In questo scenario, almeno i segreti TOTP sono ancora protetti.
  2. Cripta il segreto TOTP utilizzando la password utente: quando l'utente esegue l'accesso e il controllo hash della password è valido, la stessa password che è stata inviata potrebbe essere utilizzata come chiave per crittografare / decrittografare il segreto TOTP. Quando l'utente imposta per la prima volta la sua 2FA, richiede che inserisca la sua password in modo che possiamo usarla per crittografare il segreto TOTP. Quando accedono con una password corretta, decifri il segreto TOTP utilizzando la password e convalidi l'OTP. Se il database è trapelato, la password viene cancellata e il segreto TOTP è crittografato, quindi l'autore dell'attacco non ha informazioni su alcun account a meno che non conoscano la password.
  3. Combina entrambi i metodi: combina la password con una chiave memorizzata a livello locale e la utilizza come chiave di crittografia per il segreto TOTP. In questo modo, se il database è trapelato e l'hacker conosce la password, non può ancora decrittografare il segreto TOTP a meno che non abbia accesso alla chiave memorizzata

Ci sono dei difetti in questo, e se sì, quali sono? Mi sento come se tutto fosse meglio di un semplice salvataggio del TOTP come testo in chiaro.

    
posta Y0lk 08.03.2018 - 19:45
fonte

1 risposta

1

Dove hai letto di 2FA e perché pensi che tutti memorizzino le chiavi segrete in testo semplice?

Visto che stai parlando di TOTP dovresti probabilmente leggere RFC4226 e RFC6238.

Sì, ad es. il modulo PAM di Google memorizza i segreti in testo normale nella home directory degli utenti. Ma si prega di notare : l'algoritmo HOTP è stato pubblicato nel 2005, l'iPhone 1 è stato pubblicato nel 2007. Possiamo semplicemente dedurre che l'algoritmo HOTP non è stato pensato per gli smartphone - né l'algoritmo TOTP, che è stato pubblicato anche più tardi.

Il problema con la crittografia o il testo normale diventa immanente, se si utilizza HOTP / TOTP per l'autenticazione su un computer locale. Ma gli algoritmi OTP sono progettati per essere utilizzati con un sistema di backend affidabile. Non ci si può fidare di una macchina locale, in quanto un utente malintenzionato potrebbe sedersi davanti a questa stessa macchina.

Dai un'occhiata alla sezione 7.5 Gestione dei segreti condivisi, RFC4226 :

Qui è consigliabile crittografare i segreti condivisi, proprio come hai suggerito in # 1. E naturalmente se qualcuno ottiene la chiave di crittografia, l'autenticazione è inutile. Ma questo è un sistema di back-end, è necessario proteggere. Per esempio. Il nostro software open source privacyIDEA in realtà crittografa i segreti condivisi e se lo desideri anche con un modulo di sicurezza hardware. (Ancora una volta - questo è un sistema di back-end)

Potresti anche leggere un po 'di più sui difetti del design di Google Authenticator: link

    
risposta data 27.03.2018 - 08:32
fonte

Leggi altre domande sui tag