La risposta dipende da diversi fattori ...
-
Qual è la precisione, la sensibilità, la frequenza di campionamento e la precisione dell'accelerometro?
-
Con quale frequenza viene spostato il cellulare? Come viene spostato?
-
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:
-
Imprecisione e "rumore" nell'accelerometro. Più sensibilità significa più rumore.
-
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.