La respuesta depende de varios factores ...
-
¿Cuál es la precisión, sensibilidad, frecuencia de muestreo y precisión del acelerómetro?
-
¿Con qué frecuencia se mueve el teléfono celular? ¿Cómo se está moviendo?
-
¿Cuántos bits "sin procesar" extraes por cada bit en la semilla? ¿Sólo 3?
La fuente raíz de la entropía
Supongamos que el acelerómetro es extremadamente preciso, es sensible a cambios muy pequeños, tiene una frecuencia de muestreo muy alta y tiene una precisión muy alta. Supongamos también que está moviendo el dispositivo manualmente. En este caso, la entropía proviene de las siguientes fuentes:
-
Imprecisión y "ruido" en el acelerómetro. Más sensibilidad significa más ruido.
-
Procesos estocásticos presentes en el funcionamiento de nuestras neuronas y células musculares.
Si el sensor es lo suficientemente preciso, las variaciones microscópicas en los procesos biológicos que crean movimientos musculares darán como resultado una cantidad significativa de entropía disponible para la recolección. El tiempo que toma un potencial de acción para propagarse por sus neuronas, el tiempo que lleva finalmente despolarizar una neurona hasta su umbral de activación, el tiempo que tarda una célula muscular en responder a los neurotransmisores, unidades motoras que se reclutan primero en un músculo. Todos estos dependen de factores que no pueden ser predichos por un atacante. Si bien somos terribles en producir conscientemente una serie impredecible de números aleatorios, somos, a diferencia de los algoritmos informáticos deterministas, excelente en producir aleatoriedad a través de nuestros movimientos musculares naturalmente imprecisos.
Sin embargo, tenga en cuenta que sería conveniente agregar el tiempo de cada evento de movimiento, no solo el valor de las coordenadas modificadas. Cuando opera con una precisión de nanosegundos, incluso un baterista profesional que está tratando de moverse con los patrones más rítmicos posibles introducirá la entropía significativa en un sistema cuando sus movimientos son precisos. Este momento, si es lo suficientemente detallado, es en realidad una fuente de entropía más valiosa que el valor de un evento en sí mismo.
Su algoritmo propuesto
Yo diría que su algoritmo no es seguro. La creación de 1 bit de salida por cada tres bits de entrada supone que cada entrada tiene un tercio de entropía, lo cual es muy optimista, por decir lo menos. El kernel de Linux, por ejemplo, es extremadamente conservador con su estimación de entropía. Se supone que solo un bit de aleatoriedad está presente después de 64 inyecciones consecutivas en un grupo de 128 bits. Un algoritmo superior sería ingresar los eventos sin procesar junto con la hora precisa del evento (en forma de la cantidad de ciclos de CPU desde el inicio, también conocido como TSC) en un hash criptográfico rápido como SHA-256. Sigue así hasta que hayas terminado de recolectar entropía y usa el resumen final como tu semilla aleatoria. Si está seguro de que desea implementar su propio RNG, esta sería la forma de hacerlo. No habría necesidad de un cambio de color o un blanqueo explícitos, ni de una estimación de entropía.
Si realmente insiste en hacer esto, al menos debería tomar la semilla de salida y mezclarla con una cantidad equivalente de aleatoriedad del sistema CSPRNG. Esto se puede hacer usando una operación involuntaria como XOR o la suma / resta con desbordamiento. Eso asegura que la entropía de la salida sea al menos tan buena como la calidad de la entrada más entrópica. En notación matemática, para dos fuentes de entropía mutuamente independientes A y B de tamaño idéntico, H (A ⊕ B) ≥ max (H (A), H ( B)) .
El acelerómetro como fuente de entropía por defecto
¡El acelerómetro ya puede usarse para generar entropía! Aunque sé poco sobre la arquitectura de dispositivos móviles, el hardware generalmente alerta a la CPU principal de que un evento se ha detectado al emitir una interrupción. Una interrupción es una señal asíncrona que hace que la CPU detenga lo que esté haciendo y ejecute un controlador en particular para esa interrupción. Este controlador puede, por ejemplo, consultar un búfer de teclado. De esa manera, el sistema no tiene que sondear continuamente el teclado y, en cambio, puede esperar a que el teclado envíe una interrupción, diciéndole al sistema que es hora de leer. Esto también puede suceder con el acelerómetro de un dispositivo móvil. Cada vez que se detecta un movimiento, puede enviar una señal a la CPU informándole que hay datos para leer. Cada vez que esto sucede, los datos de interrupción y la hora exacta en que ocurrió se utilizan como fuente de entropía. Solo después de 64 eventos se asume que se recopila un solo bit de entropía. Esta entropía se mezcla con el conjunto del sistema.