Algoritmo di una password per umani

17

Esiste un algoritmo di generazione di una password (basato su un segreto predefinito e un valore / tempo / contatore / ecc.) che è abbastanza semplice da poter essere elaborato da un umano medio ma abbastanza sicuro da non riuscire a trovare il segreto con solo alcune password (diciamo 5-10)?

Ho visto domande su vari schemi di password specifici e su quanto sono sicuri. Ma mi piacerebbe sapere più in generale se esistono alcuni algoritmi noti.

L'intuizione mi dice che se qualcosa è abbastanza facile da essere elaborato da un essere umano, allora è anche facile da rompere. Ma poi di nuovo sono rimasto molto sorpreso dal fatto che sia possibile la crittografia asimmetrica o lo scambio di chiavi sicure (DH). Quindi, sorprendimi!

Modifica: alcuni chiarimenti.

La domanda è venuta quando stavo riflettendo sull'autenticazione a due fattori per uso esterno. Una tipica autenticazione a due fattori per ambienti sicuri (casa, ufficio, ...) utilizza una password e un generatore OTP in un dispositivo o sul telefono. Perdi il dispositivo / telefono, c'è ancora la password. Un keylogger ti ruba la password, c'è ancora il dispositivo / telefono.

Ma per quanto riguarda le situazioni in cui entrambi potrebbero essere rubati? Ad esempio, si utilizza un'app per raccogliere una e-bike in strada o per aprire un armadietto in una stazione ferroviaria. Qualcuno potrebbe guardare mentre inserisci la password sul tuo telefono e in seguito rubare anche il telefono stesso.

Il problema potrebbe essere risolto utilizzando password che diventano inutili in un breve lasso di tempo (ad esempio 10 minuti). Inoltre, il telefono avrebbe un segreto individuale (ad esempio certificato client SSL) per rendere più difficili gli attacchi brute-force contro l'autenticazione della password.

Il suggerimento di mr.spuratic sull'algoritmo di HCMU di Blum è molto vicino a quello che stavo cercando. Sembra ancora un po 'troppo pesante per l'umano medio, ma con un po' di pratica sarebbe fattibile.

    
posta ErosC 02.02.2017 - 13:43
fonte

4 risposte

11

Esistono alcuni schemi commerciali, ad es. GridGuard da SyferLock che afferma di farlo, ma non li ho mai usati (I non avere affiliazione). Ciò si basa sull'utente che sceglie correttamente da più opzioni durante l'autenticazione piuttosto che un tipico OTP basato sul tempo o sul contatore (il che significa che non c'è un'aritmetica mentale).

Solitario ( Schneier ), viene spesso citato per un crittosistema calcolabile dall'uomo, ma avrebbe bisogno di un po 'di adattamento per scopi di autenticazione. Un'autenticazione challenge-response con chiave condivisa sarebbe pratica, ma non soddisfa la tua descrizione dell'OTP.

Che dovrebbe funzionare (con il normale avvertimento ) sarebbe un'implementazione di TOTP ( RFC6238 ) o HOTP ( RFC4226 ), utilizzando un HMAC alternativo hash come HCMU di Blum ( Macchina informatizzata indistruttibile , descrizione qui ) hash computabile (vedi anche il più generale OCRA (RFC6287) .

TOTP / HOTP sono fondamentalmente l'output (troncato) di un HMAC usando SHA-1, l'input è un segreto condiviso e un timestamp o un contatore. Dovresti comunque utilizzare una rappresentazione rigorosamente alfabetica dell'ingresso, poiché l'algoritmo di Blum si applica solo all'ingresso alfabetico.

Blum è anche coautore di un articolo Verso le password di Human computable (su ArXiv) , anche se di grandi dimensioni parti di esso sono pesantemente matematiche. non copre brevemente OTP in §7.2.

Vedi anche:

risposta data 02.02.2017 - 16:42
fonte
6

Potresti avere una tabella di ricerca che viene utilizzata come una volta.

Ogni pagina nel libro di ricerca è valida per un giorno di OTP e alzi il libro sulla data / ora corrente per ottenere l'OTP corretto per quel momento. Questo simula un TOTP. Puoi scambiare tra sicurezza (con quale frequenza il TOTP cambia) e lo spessore del tuo libro di ricerca.

    
risposta data 02.02.2017 - 14:45
fonte
4

Steve Gibson ha messo insieme qualcosa chiamato "Perfect Paper Passwords" come una sorta di dimostrazione di come potrebbe essere fatto. Il link contiene i dettagli. Il sito ha un codice scaricabile che può essere utilizzato per creare un'implementazione più sofisticata.

Questo non è basato sul tempo, ma è semplicemente una sequenza di password monouso, che possono essere utilizzate solo in ordine. Anche se la password corrente viene annusata, non fornisce alcuna informazione su quella successiva. Il numero di caratteri per password e "alfabeto" sono regolabili.

Qui vediamo che i codici 1A-D sono già stati usati, e il prossimo codice da usare è E1 (Tygq).

    
risposta data 02.02.2017 - 19:24
fonte
1

Per essere onesti, anche l'algoritmo TOTP ufficiale non è massiccio complicato, anche se dovresti essere abbastanza impegnato a calcolare un HMAC nella tua testa. Tuttavia, ciò suggerisce che potresti ragionevolmente avere un sistema di password calcolato in base al tempo, utilizzando la maggior parte degli stessi elementi costitutivi.

I problemi principali sarebbero che le persone non sono brave come i computer in molte cose:

  • Le persone non hanno fonti di tempo incorporate, quindi hai bisogno di flessibilità sufficiente per gestire qualcuno che è "fuori" ragionevole dalla fonte. Probabilmente non puoi contare sul fatto che qualcuno sia più di circa 5 minuti nel tempo giusto, e anche più a lungo potrebbe essere migliore, dal punto di vista di ridurre al minimo gli errori di calcolo.
  • Le persone sono lente al calcolo. Puoi contare su un computer per eseguire milioni di calcoli in un secondo. Una persona può probabilmente gestire un calcolo, una volta ottenuto i valori necessari. Ciò significa anche che è necessario attendere molto tempo prima che qualcuno inserisca un valore valido.
  • Le persone commettono errori quando eseguono operazioni ripetute. Ciò significa che è più probabile che sia necessario immettere più valori, se commettono un singolo errore nel processo. Ogni tentativo richiede un po 'di tempo.

Pertanto, l'adattamento diretto dell'algoritmo TOTP implicherebbe:

  1. Sostituisci il passaggio HMAC con qualcosa che una persona media può fare mentalmente
  2. Definisci un'epoca in cui un umano può trovare una differenza dal punto di vista mentale - forse a mezzanotte del giorno corrente, con qualche modifica basata sulla data in atto
  3. Definisci un intervallo che è abbastanza lungo da consentire a un essere umano di eseguire alcuni calcoli e che può essere identificato come un dato numero di intervalli dall'epoca scelta - cinque minuti sarebbero fattibili, quindi calcolare un codice a 0912 sarebbe (9 * 12 + 2 * 5 = 118 come valore)
  4. Utilizza la sostituzione HMAC con il valore e la chiave memorizzata.
  5. Trasforma il valore in un intervallo appropriato, potenzialmente scartando alcuni bit di esso.

Questo sarà meno sicuro di quello basato sul computer, dal momento che un utente malintenzionato sarebbe in grado di calcolare rapidamente molti valori potenziali, quindi dovresti anche limitare il numero di tentativi consentiti in un determinato intervallo.

E no, non so quale sostituto HMAC adatto sarebbe ...

    
risposta data 02.02.2017 - 16:45
fonte