È possibile utilizzare i dati dell'accelerometro dello smartphone per implementare un TRNG?

3

Sto provando a generare un vero numero casuale dall'accelerometro dello smartphone, quindi lo passo come seme a un CSPRNG per generare numeri casuali veri.

So che molte persone lo hanno provato e il SecureRandom (senza seme personalizzato) rimane una scelta migliore, ma non capisco perché questo non sia possibile.

Ho letto alcune questioni su questo approccio: l'accelerometro può generare bassa entropia, un utente malintenzionato potrebbe indovinare schemi di movimenti ...

Ho letto anche la pagina Randomness extractor su Wikipedia, e sono proposti 2 metodi:

  • Von Neumann estrattore
  • Funzione di hash crittografica

  • Supponiamo che io voglia usare l'approccio Neumann, un requisito è che:

    there is no correlation between successive bits

    Ma i valori di input X, Y e Z raccolgo dall'accelerometro una correlazione tra bit successivi? Perché? Un valore X al tempo t1 potrebbe essere diverso al tempo t2 , quindi non sono in correlazione ... o no?

    Se il requisito è soddisfatto supponiamo che l'algoritmo sia simile al seguente:

  • Get an amount of consecutive X,Y,Z float values from the acceleromenter for, let's say, 10 seconds.
  • Convert each value to bits and store them into different arrays => X[] Y[] Z[]
  • For each arrays position use the Von Neumann extractor and create an output bit array.
    (ex. I'll check X[i] with Y[i], and the result with Z[i])
  • Now each 3 input bits will produce 1 output bit
  • At the end convert the output bit array to value.
  • L'output è un valore casuale?
    Questo può essere un metodo affidabile?
    Altrimenti, come può essere migliorato?

    Ma se scelgo il metodo 2 (la funzione di hash crittografica) posso semplicemente cancellare il flusso di input ottenuto dall'accelerometro?

        
    posta Riccardo Leschiutta 02.10.2015 - 13:22
    fonte

    1 risposta

    1

    La risposta dipende da diversi fattori ...

    1. Qual è la precisione, la sensibilità, la frequenza di campionamento e la precisione dell'accelerometro?

    2. Con quale frequenza viene spostato il cellulare? Come viene spostato?

    3. Quanti bit "grezzi" stai estraendo per ogni bit nel seme? Solo 3?

    La fonte root di entropia

    Supponiamo che l'accelerometro sia estremamente preciso, sia sensibile a cambiamenti molto piccoli, abbia una frequenza di campionamento molto alta e abbia una precisione molto elevata. Supponiamo anche che tu stia spostando il dispositivo manualmente. In questo caso, l'entropia proviene dalle seguenti fonti:

    1. Imprecisione e "rumore" nell'accelerometro. Più sensibilità significa più rumore.

    2. Processi stocastici presenti nel funzionamento dei nostri neuroni e cellule muscolari.

    Se il sensore è sufficientemente preciso, le variazioni microscopiche nei processi biologici che creano i movimenti muscolari determineranno una quantità significativa di entropia disponibile per la raccolta. Il tempo necessario a un potenziale di azione per propagare i neuroni, il tempo necessario per depolarizzare un neurone alla sua soglia di fuoco, il tempo necessario a una cellula muscolare per rispondere ai neurotrasmettitori, che le unità motorie vengono reclutate per prime in un muscolo. Questi dipendono tutti da fattori che non possono essere previsti da un utente malintenzionato. Mentre siamo terribili nel produrre coscientemente una stringa imprevedibile di numeri casuali, siamo molto diversi dagli algoritmi deterministici del computer, eccellenti nel produrre casualità attraverso i nostri movimenti muscolari naturalmente imprecisi.

    Nota, tuttavia, sarebbe saggio aggiungere il tempismo di ogni evento di movimento, non solo il valore delle coordinate modificate. Quando operate con precisione nanometrica, anche un batterista professionista che sta cercando di muoversi con i modelli più ritmici possibili introdurrà significativa entropia in un sistema quando i suoi movimenti sono sincronizzati con precisione. Questa tempistica, se sufficientemente dettagliata, è in realtà una fonte di entropia più preziosa rispetto al valore di un dato evento stesso.

    Il tuo algoritmo proposto

    Direi che il tuo algoritmo non è sicuro. La creazione di 1 bit di uscita per ogni tre bit di input presuppone che ciascun input abbia 1/3 di bit di entropia, il che è molto ottimistico, per usare un eufemismo. Il kernel di Linux per esempio è estremamente conservativo con la sua stima di entropia. Si presume che sia presente un solo bit di casualità dopo 64 iniezioni consecutive in un pool di 128 bit. Un algoritmo superiore sarebbe quello di inserire gli eventi grezzi insieme al tempo preciso dell'evento (nella forma del numero di cicli della CPU dall'avvio, ovvero il TSC) in un hash crittografico veloce come SHA-256. Continua così fino a quando non hai finito di raccogliere entropia e usa il digest finale come seme casuale. Se sei sicuro di voler implementare il tuo RNG, questo sarebbe il modo di farlo. Non ci sarebbe bisogno di eseguire debapsing o sbiancamento esplicito o stima dell'entropia.

    Se vuoi davvero fare questo, dovresti almeno prendere il seme di uscita e mescolarlo con una quantità equivalente di casualità dal sistema CSPRNG. Questo può essere fatto usando un'operazione involontaria come XOR o addizione / sottrazione con overflow. ciò garantisce che l'entropia dell'output sia almeno pari alla qualità dell'ingresso più entropico. In notazione matematica, per due fonti di entropia reciprocamente indipendenti A e B di dimensioni identiche, H (A ⊕ B) ≥ max (H (A), H ( B)) .

    L'accelerometro come fonte di entropia di default

    L'accelerometro potrebbe già essere utilizzato per generare entropia! Benché conosca poco l'architettura dei dispositivi mobili, l'hardware in genere avvisa la CPU principale che un evento è stato rilevato emettendo un interrupt. Un interrupt è un segnale asincrono che fa sì che la CPU sospenda qualsiasi cosa stia facendo ed esegue un particolare gestore per quell'interrupt. Questo gestore può, ad esempio, interrogare un buffer della tastiera. In questo modo, il sistema non deve eseguire il polling continuo della tastiera e può invece attendere che la tastiera invii un interrupt, comunicando al sistema che è il momento di leggerlo. Questo può accadere anche con l'accelerometro di un dispositivo mobile. Ogni volta che viene rilevato un movimento, può inviare un segnale alla CPU indicando che ci sono dati da leggere. Ogni volta che ciò accade, i dati di interruzione e l'ora esatta in cui si sono verificati vengono usati come fonte di entropia. Solo dopo 64 eventi viene considerato un singolo bit di entropia. Questa entropia è mescolata con il pool di sistema.

        
    risposta data 19.03.2018 - 06:48
    fonte

    Leggi altre domande sui tag