Genera in modo sicuro un seme rng usando un numero piccolo

3

Sto cercando di capire un metodo sicuro per generare un seme rng su un rng usando un piccolo numero di pin di 5 cifre.

Il problema che posso vedere con questo è un utente malintenzionato potrebbe facilmente passare in rassegna tutti i possibili numeri a 5 cifre e infine determinare il seme.

Mi scuso se questa è una domanda molto semplice e ingenua. Sto solo cercando di farci qualche pensarci

Modifica

Voglio poter seminare il numero casuale generato con un input che può essere ricordato perché voglio che un utente sia in grado di andare su un altro computer e avere lo stesso output dal rng.

    
posta CBaker 18.02.2016 - 21:24
fonte

2 risposte

4

Se l'utente può andare su un altro computer, può farlo anche l'aggressore. Ciò che distingue l'attaccante dall'utente normale è solo la conoscenza del PIN a 5 cifre.

I computer sono sistemi deterministici, il che significa che l'attaccante può concettualmente possedere 100000 computer; sul computer 0, esegue la funzione di derivazione della chiave tramite PIN 00000; sul computer 1, esegue la funzione con il PIN 00001; e così via. Uno di questi computer utilizza necessariamente il PIN dell'utente vero e genera lo stesso "seme RNG" dell'utente attaccato.

Questo tipo di simulazione è altamente flessibile. In generale, se l'utente deve investire risorse X nell'utilizzo del sistema (ad esempio, richiede un secondo di calcolo su un normale computer), l'utente malintenzionato può simulare tutti gli utenti virtuali con 100000 * X risorse. Questo può essere utilizzando 100000 computer e fatto entro un secondo; o riutilizzando un computer ancora e ancora, e quindi impiegando 100000 secondi per scorrere tutti i possibili PIN dell'utente (che è un po 'meno di 28 ore). O qualsiasi combinazione tra (per esempio 10 computer in esecuzione per 3 ore).

Hai solo due modi per uscire da questo enigma, nessuno dei quali risolve davvero il tuo problema:

  1. Puoi provare a organizzare la derivazione da PIN a seme RNG per prendere molte risorse. Questo è fondamentalmente l'approccio di hashing della password . Il problema principale qui è che l'utente non è paziente e non utilizzerà il sistema se impiega 20 secondi per elaborare il PIN (per i sistemi di pagamento con carta, è stato misurato che l'intero processo deve essere eseguito entro 8 secondi, altrimenti il consumatore diventa impazzito). L'attaccante, d'altra parte, ha molta più pazienza, spesso ha computer più potenti che possono andare più velocemente dell'hardware dell'utente medio (soprattutto se stiamo parlando di smartphone), e in generale possono raccoglierne molti (se non altro noleggiando macchine in alcuni cloud come Amazon).

  2. In alcuni contesti molto rari, puoi fare in modo che sia impossibile verificare un buon PIN. Nell'attacco di ricerca esauriente, l'utente malintenzionato tenta tutti i possibili PIN e si ferma quando trova quello che "funziona". Se un PIN errato produce un risultato che in definitiva è plausibile come quello che hai con il buon PIN, allora l'attacco non funziona più. Ma questo è molto restrittivo.

    Ad esempio, se il PIN riguarda la protezione (tramite crittografia) dei file dell'utente su uno smartphone, l'utente malintenzionato può facilmente verificare se la decrittografia produce file che "hanno senso" o semplicemente spazzatura casuale.

Quindi, in pratica, ciò che stai cercando di raggiungere non funzionerà con un PIN di 5 cifre. Poiché il problema è fondamentalmente che l'aggressore è più paziente e più potente dell'utente e ha relativamente poche combinazioni da provare, è necessario rendere l'utente più paziente (buona fortuna con quello) o più potente (difficile da fare, poiché l'attaccante può acquistare almeno lo stesso tipo di macchina dell'utente) o aumentare il numero di combinazioni possibili. Questo è noto come "entropia della password". Vedi questa domanda per alcune discussioni sui generi di password in grado di comprimere sostanzialmente più entropia (in questo caso, 44 bit, cioè 2 44 = 17592186044416 combinazioni) pur rimanendo facile da ricordare per un normale utente umano.

    
risposta data 19.02.2016 - 00:39
fonte
1

Suggerirei di utilizzare PBKDF2 e iterare sull'input per es. 5000 volte. Quindi usa l'output come seme per il rng.

Ciò renderebbe più difficile forzare tutti i PIN e funzionerebbe anche per altri input come una password.

Si tenga presente che questa non è una buona idea per la corretta generazione di numeri casuali (crittografici) quando si utilizzano solo 5 cifre. Tuttavia potrebbe essere utile per la semplice randomizzazione.

    
risposta data 18.02.2016 - 23:23
fonte

Leggi altre domande sui tag