Come funziona Authy 2FA, se non si connette al server?

23

Pensavo di sapere come funziona l'autenticazione a due fattori:

  • Inserisco la password.
  • Il server genera un numero casuale (token) e me lo invia tramite SMS.
  • Inserisco questo token.
  • Server controlla che il token che ho inserito corrisponda a quello generato per la mia precedente richiesta 2FA.

Ma oggi ho scoperto Authy , e sembra che non conosca l'autenticazione a due fattori di questo programma (2FA) funziona.

Authy mostra i numeri segreti (token 2FA) senza alcuna connessione con il server. Come può essere?

Suppongo che questi token non siano casuali? Forse è una specie di sequenza numerica, dove conoscere i parametri iniziali di seeding rende questo un processo deterministico? Forse questa sequenza è una funzione del tempo? È così che funziona?

È sicuro? Posso, ad esempio, determinare i prossimi token 2FA, se conosco un numero N di token precedenti?

    
posta demas 01.01.2014 - 06:54
fonte

2 risposte

28

Authy show me secret numbers without any connection with server. How can it do it ?

Authy utilizza un algoritmo di passcode one time (OTP) disponibile in diversi formati, i due più popolari sono OTP basati su HMAC (HOTP) e OTP basati sul tempo (TOTP). Authy sta usando TOTP.

Entrambi gli algoritmi sono essenzialmente gli stessi; richiedono alcuni dati seme e un contatore per generare il passcode successivo nella serie. Implementazioni HOTP incrementano il contatore ogni volta che l'utente richiede / utilizza un passcode, TOTP incrementa il contatore dopo un determinato intervallo di tempo.

Nel caso di Authy, quando l'utente invia un passcode al server, il server cerca i dati seme dell'utente, calcola il valore del contatore in base al timestamp della richiesta e quindi genera il passcode corretto. Il server verifica quindi che il codice di accesso generato corrisponda al passcode inviato dall'utente.

Is it secure ? Can I know next number if I know N previous numbers ?

Sì e no, dipende dalla fiducia o meno della sicurezza del server.

Dato N token precedenti un attacker non dovrebbe essere in grado di recuperare i dati seme. Tuttavia, questi algoritmi richiedono al server di memorizzare i dati seme per tutti gli utenti. Se un utente malintenzionato è in grado di compromettere il database (tramite SQL injection, ecc.), Sarà in grado di generare passcode validi. Questo è quello che è successo a RSA e ai loro token SecurID ( link )

Alcune aziende come Duo Security ( link ) e Twitter ( link ) stanno affrontando questo problema implementando l'autenticazione a due fattori challenge-response con la crittografia a chiave asimmetrica. In questo caso, devono solo memorizzare le chiavi pubbliche, il che significa che se il loro database è trapelato, un utente malintenzionato non dispone delle chiavi private necessarie per generare risposte valide.

Disclaimer, ho lavorato a Duo.

Aggiornato in base alle domande nei commenti

The algorithms (HOTP or TOTP) must be the same on the server and the client application?

L'algoritmo è identico, solo il modo in cui viene generato il valore del contatore è diverso. Se Google fosse HOTP e Authy volesse supportare gli account Google, la loro app dovrebbe generare e memorizzare il valore del contatore in modo diverso dagli account TOTP.

Does HOTP client require connection with server to get next passcode (because it doesn't know how much requests was made from last time), while TOTP doesn't require it?

No, HOTP non richiede una connessione per funzionare, ma HOTP generalmente non viene utilizzato perché è facile che il telefono e il server non siano sincronizzati.

Supponiamo che il server e l'app inizino con un valore contatore pari a 0. Il server di solito ha una finestra, forse i prossimi 10 passcode, che considererà valida. Quando l'utente invia un passcode, il server confronta il passcode inviato con i successivi 10 passcode generati. Se una qualsiasi delle 10 corrispondenze, il server può aggiornare il valore del contatore memorizzato e rimanere sincronizzato.

Il problema però è che l'utente potrebbe essere in grado di generare troppi codici di accesso nell'app senza usarli. Se l'utente è in grado di incrementare il contatore oltre la dimensione della finestra di passcode, il server non può più verificare che i passcode siano validi.

Per vedere in dettaglio come vengono generati i token OTP, vedi questo blogpost informativo .

    
risposta data 01.01.2014 - 09:33
fonte
0

Sembra che comunichi utilizzando una semplice API REST. In termini di sicurezza dei token sono -

Il token viene generato utilizzando una funzione a 1 via (SHA-2) e una chiave a 256 bit. Anche se l'attaccante avesse accesso a centinaia di Segnalini, sarebbe matematicamente impossibile per lui generare un nuovo Token valido. Se sei incline a saperne di più, Authy si basa su RFC4426 ( link ).

In breve - Sì, utilizza un metodo sicuro per generare un token.

    
risposta data 01.01.2014 - 07:15
fonte